/* 首页样式（C2 外部化）：由 public/index.html 的 18 个内联 <style> 按文档序原样迁出。
   顺序即层叠顺序，不要重排；改动本文件必须同步更新 index.html 里的 ?v= 版本号
   （静态资源是 immutable 缓存，见 test/asset-cache-version.test.js）。 */

/* ── #1 font-local ── */
  /* 本地自托管字体：Noto Serif SC 500/700（woff2 切片 + unicode-range，与 Google Fonts 服务语义一致）。
     切片文件位于 public/fonts/noto-serif-sc/（OFL 许可）。正文黑体走系统栈（苹方/雅黑），不再外链 Google Fonts。 */
  @font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.4.woff2) format('woff2');
  unicode-range: U+1f1e9-1f1f5, U+1f1f7-1f1ff, U+1f21a, U+1f232, U+1f234-1f237, U+1f250-1f251, U+1f300, U+1f302-1f308, U+1f30a-1f311, U+1f315, U+1f319-1f320, U+1f324, U+1f327, U+1f32a, U+1f32c-1f32d, U+1f330-1f357, U+1f359-1f37e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.5.woff2) format('woff2');
  unicode-range: U+fee3, U+fef3, U+ff03-ff04, U+ff07, U+ff0a, U+ff17-ff19, U+ff1c-ff1d, U+ff20-ff3a, U+ff3c, U+ff3e-ff5b, U+ff5d, U+ff61-ff65, U+ff67-ff6a, U+ff6c, U+ff6f-ff78, U+ff7a-ff7d, U+ff80-ff84, U+ff86, U+ff89-ff8e, U+ff92, U+ff97-ff9b, U+ff9d-ff9f, U+ffe0-ffe4, U+ffe6, U+ffe9, U+ffeb, U+ffed, U+fffc, U+1f004, U+1f170-1f171, U+1f192-1f195, U+1f198-1f19a, U+1f1e6-1f1e8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.6.woff2) format('woff2');
  unicode-range: U+f0a7, U+f0b2, U+f0b7, U+f0c9, U+f0d8, U+f0da, U+f0dc-f0dd, U+f0e0, U+f0e6, U+f0eb, U+f0fc, U+f101, U+f104-f105, U+f107, U+f10b, U+f11b, U+f14b, U+f18a, U+f193, U+f1d6-f1d7, U+f244, U+f27a, U+f296, U+f2ae, U+f471, U+f4b3, U+f610-f611, U+f880-f881, U+f8ec, U+f8f5, U+f8ff, U+f901, U+f90a, U+f92c-f92d, U+f934, U+f937, U+f941, U+f965, U+f967, U+f969, U+f96b, U+f96f, U+f974, U+f978-f979, U+f97e, U+f981, U+f98a, U+f98e, U+f997, U+f99c, U+f9b2, U+f9b5, U+f9ba, U+f9be, U+f9ca, U+f9d0-f9d1, U+f9dd, U+f9e0-f9e1, U+f9e4, U+f9f7, U+fa00-fa01, U+fa08, U+fa0a, U+fa11, U+fb01-fb02, U+fdfc, U+fe0e, U+fe30-fe31, U+fe33-fe44, U+fe49-fe52, U+fe54-fe57, U+fe59-fe66, U+fe68-fe6b, U+fe8e, U+fe92-fe93, U+feae, U+feb8, U+fecb-fecc, U+fee0;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.21.woff2) format('woff2');
  unicode-range: U+9f83, U+9f85-9f8d, U+9f90-9f91, U+9f94-9f96, U+9f98, U+9f9b-9f9c, U+9f9e, U+9fa0, U+9fa2, U+9ff0-9fff, U+a001, U+a007, U+a025, U+a046-a047, U+a057, U+a072, U+a078-a079, U+a083, U+a085, U+a100, U+a118, U+a132, U+a134, U+a1f4, U+a242, U+a4a6, U+a4aa, U+a4b0-a4b1, U+a4b3, U+a9c1-a9c2, U+ac00-ac01, U+ac04, U+ac08, U+ac10-ac11, U+ac13-ac16, U+ac19, U+ac1c-ac1d, U+ac24, U+ac70-ac71, U+ac74, U+ac77-ac78, U+ac80-ac81, U+ac83, U+ac8c, U+ac90, U+ac9f-aca0, U+aca8-aca9, U+acac, U+acb0, U+acbd, U+acc1, U+acc4, U+ace0-ace1, U+ace4, U+ace8, U+acf3, U+acf5, U+acfc-acfd, U+ad00, U+ad0c, U+ad11, U+ad1c, U+ad34, U+ad50, U+ad64, U+ad6c, U+ad70, U+ad74, U+ad7f, U+ad81, U+ad8c, U+adc0, U+adc8, U+addc, U+ade0, U+adf8-adf9, U+adfc, U+ae00, U+ae08-ae09, U+ae0b, U+ae30, U+ae34, U+ae38, U+ae40, U+ae4a, U+ae4c, U+ae54, U+ae68, U+aebc, U+aed8, U+af2c-af2d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.22.woff2) format('woff2');
  unicode-range: U+9e30-9e33, U+9e35-9e3b, U+9e3e, U+9e40-9e44, U+9e46-9e4e, U+9e51, U+9e53, U+9e55-9e58, U+9e5a-9e5c, U+9e5e-9e63, U+9e66-9e6e, U+9e71, U+9e73, U+9e75, U+9e78-9e79, U+9e7c-9e7e, U+9e82, U+9e86-9e88, U+9e8b-9e8c, U+9e90-9e91, U+9e93, U+9e95, U+9e97, U+9e9d, U+9ea4-9ea5, U+9ea9-9eaa, U+9eb4-9eb5, U+9eb8-9eba, U+9ebc-9ebf, U+9ec3, U+9ec9, U+9ecd, U+9ed0, U+9ed2-9ed3, U+9ed5-9ed6, U+9ed9, U+9edc-9edd, U+9edf-9ee0, U+9ee2, U+9ee5, U+9ee7-9eea, U+9eef, U+9ef1, U+9ef3-9ef4, U+9ef6, U+9ef9, U+9efb-9efc, U+9efe, U+9f0b, U+9f0d, U+9f10, U+9f14, U+9f17, U+9f19, U+9f22, U+9f29, U+9f2c, U+9f2f, U+9f31, U+9f37, U+9f39, U+9f3d-9f3e, U+9f41, U+9f4a-9f4b, U+9f51-9f52, U+9f61-9f63, U+9f66-9f67, U+9f80-9f81;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.23.woff2) format('woff2');
  unicode-range: U+9c82-9c83, U+9c85-9c8c, U+9c8e-9c92, U+9c94-9c9b, U+9c9e-9ca3, U+9ca5-9ca7, U+9ca9, U+9cab, U+9cad-9cae, U+9cb1-9cb7, U+9cb9-9cbd, U+9cbf-9cc0, U+9cc3, U+9cc5-9cc7, U+9cc9-9cd1, U+9cd3-9cda, U+9cdc-9cdd, U+9cdf, U+9ce1-9ce3, U+9ce5, U+9ce9, U+9cee-9cef, U+9cf3-9cf4, U+9cf6, U+9cfc-9cfd, U+9d02, U+9d08-9d09, U+9d12, U+9d1b, U+9d1e, U+9d26, U+9d28, U+9d37, U+9d3b, U+9d3f, U+9d51, U+9d59, U+9d5c-9d5d, U+9d5f-9d61, U+9d6c, U+9d70, U+9d72, U+9d7a, U+9d7e, U+9d84, U+9d89, U+9d8f, U+9d92, U+9daf, U+9db4, U+9db8, U+9dbc, U+9dc4, U+9dc7, U+9dc9, U+9dd7, U+9ddf, U+9df2, U+9df9-9dfa, U+9e0a, U+9e11, U+9e1a, U+9e1e, U+9e20, U+9e22, U+9e28-9e2c, U+9e2e-9e2f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.24.woff2) format('woff2');
  unicode-range: U+9a80, U+9a83, U+9a85, U+9a88-9a8a, U+9a8d-9a8e, U+9a90, U+9a92-9a93, U+9a95-9a96, U+9a98-9a99, U+9a9b-9aa2, U+9aa5, U+9aa7, U+9aaf-9ab1, U+9ab5-9ab6, U+9ab9-9aba, U+9ac0-9ac4, U+9ac8, U+9acb-9acc, U+9ace-9acf, U+9ad1-9ad2, U+9ad9, U+9adf, U+9ae1, U+9ae3, U+9aea-9aeb, U+9aed-9aef, U+9af4, U+9af9, U+9afb, U+9b03-9b04, U+9b06, U+9b08, U+9b0d, U+9b0f-9b10, U+9b13, U+9b18, U+9b1a, U+9b1f, U+9b22-9b23, U+9b25, U+9b27-9b28, U+9b2a, U+9b2f, U+9b31-9b32, U+9b3b, U+9b43, U+9b46-9b49, U+9b4d-9b4e, U+9b51, U+9b56, U+9b58, U+9b5a, U+9b5c, U+9b5f, U+9b61-9b62, U+9b6f, U+9b77, U+9b80, U+9b88, U+9b8b, U+9b8e, U+9b91, U+9b9f-9ba0, U+9ba8, U+9baa-9bab, U+9bad-9bae, U+9bb0-9bb1, U+9bb8, U+9bc9-9bca, U+9bd3, U+9bd6, U+9bdb, U+9be8, U+9bf0-9bf1, U+9c02, U+9c10, U+9c15, U+9c24, U+9c2d, U+9c32, U+9c39, U+9c3b, U+9c40, U+9c47-9c49, U+9c53, U+9c57, U+9c64, U+9c72, U+9c77-9c78, U+9c7b, U+9c7f-9c80;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.25.woff2) format('woff2');
  unicode-range: U+98dd, U+98e1-98e2, U+98e7-98ea, U+98ec, U+98ee-98ef, U+98f2, U+98f4, U+98fc-98fe, U+9903, U+9905, U+9908, U+990a, U+990c-990d, U+9913-9914, U+9918, U+991a-991b, U+991e, U+9921, U+9928, U+992c, U+992e, U+9935, U+9938-9939, U+993d-993e, U+9945, U+994b-994c, U+9951-9952, U+9954-9955, U+9957, U+995e, U+9963, U+9966-9969, U+996b-996c, U+996f, U+9974-9975, U+9977-9979, U+997d-997e, U+9980-9981, U+9983-9984, U+9987, U+998a-998b, U+998d-9991, U+9993-9995, U+9997-9998, U+99a5, U+99ab, U+99ad-99ae, U+99b1, U+99b3-99b4, U+99bc, U+99bf, U+99c1, U+99c3-99c6, U+99cc, U+99d0, U+99d2, U+99d5, U+99db, U+99dd, U+99e1, U+99ed, U+99f1, U+99ff, U+9a01, U+9a03-9a04, U+9a0e-9a0f, U+9a11-9a13, U+9a19, U+9a1b, U+9a28, U+9a2b, U+9a30, U+9a32, U+9a37, U+9a40, U+9a45, U+9a4a, U+9a4d-9a4e, U+9a52, U+9a55, U+9a57, U+9a5a-9a5b, U+9a5f, U+9a62, U+9a65, U+9a69, U+9a6b, U+9a6e, U+9a75, U+9a77-9a7a, U+9a7d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.26.woff2) format('woff2');
  unicode-range: U+975b-975c, U+9763, U+9765-9766, U+976c-976d, U+9773, U+9776, U+977a, U+977c, U+9784-9785, U+978e-978f, U+9791-9792, U+9794-9795, U+9798, U+979a, U+979e, U+97a3, U+97a5-97a6, U+97a8, U+97ab-97ac, U+97ae-97af, U+97b2, U+97b4, U+97c6, U+97cb-97cc, U+97d3, U+97d8, U+97dc, U+97e1, U+97ea-97eb, U+97ee, U+97fb, U+97fe-97ff, U+9801-9803, U+9805-9806, U+9808, U+980c, U+9810-9814, U+9817-9818, U+981e, U+9820-9821, U+9824, U+9828, U+982b-982d, U+9830, U+9834, U+9838-9839, U+983c, U+9846, U+984d-984f, U+9851-9852, U+9854-9855, U+9857-9858, U+985a-985b, U+9862-9863, U+9865, U+9867, U+986b, U+986f-9871, U+9877-9878, U+987c, U+9880, U+9883, U+9885, U+9889, U+988b-988f, U+9893-9895, U+9899-989b, U+989e-989f, U+98a1-98a2, U+98a5-98a7, U+98a9, U+98af, U+98b1, U+98b6, U+98ba, U+98be, U+98c3-98c4, U+98c6-98c8, U+98cf-98d6, U+98da-98db;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.27.woff2) format('woff2');
  unicode-range: U+95c4-95ca, U+95cc-95cd, U+95d4-95d6, U+95d8, U+95e1-95e2, U+95e9, U+95f0-95f1, U+95f3, U+95f6, U+95fc, U+95fe-95ff, U+9602-9604, U+9606-960d, U+960f, U+9611-9613, U+9615-9617, U+9619-961b, U+961d, U+9621, U+9628, U+962f, U+963c-963e, U+9641-9642, U+9649, U+9654, U+965b-965f, U+9661, U+9663, U+9665, U+9667-9668, U+966c, U+9670, U+9672-9674, U+9678, U+967a, U+967d, U+9682, U+9685, U+9688, U+968a, U+968d-968e, U+9695, U+9697-9698, U+969e, U+96a0, U+96a3-96a4, U+96a8, U+96aa, U+96b0-96b1, U+96b3-96b4, U+96b7-96b9, U+96bb-96bd, U+96c9, U+96cb, U+96ce, U+96d1-96d2, U+96d6, U+96d9, U+96db-96dc, U+96de, U+96e0, U+96e3, U+96e9, U+96eb, U+96f0-96f2, U+96f9, U+96ff, U+9701-9702, U+9705, U+9708, U+970a, U+970e-970f, U+9711, U+9719, U+9727, U+972a, U+972d, U+9730, U+973d, U+9742, U+9744, U+9748-9749, U+9750-9751, U+975a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.28.woff2) format('woff2');
  unicode-range: U+94f5, U+94f7, U+94f9, U+94fb-94fd, U+94ff, U+9503-9504, U+9506-9507, U+9509-950a, U+950d-950f, U+9511-9518, U+951a-9520, U+9522, U+9528-952d, U+9530-953a, U+953c-953f, U+9543-9546, U+9548-9550, U+9552-9555, U+9557-955b, U+955d-9568, U+956a-956d, U+9570-9574, U+9583, U+9586, U+9589, U+958e-958f, U+9591-9592, U+9594, U+9598-9599, U+959e-95a0, U+95a2-95a6, U+95a8-95b2, U+95b4, U+95b8-95c3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.29.woff2) format('woff2');
  unicode-range: U+941c-942b, U+942d-942e, U+9432-9433, U+9435, U+9438, U+943a, U+943e, U+9444, U+944a, U+9451-9452, U+945a, U+9462-9463, U+9465, U+9470-9487, U+948a-9492, U+9494-9498, U+949a, U+949c-949d, U+94a1, U+94a3-94a4, U+94a8, U+94aa-94ad, U+94af, U+94b2, U+94b4-94ba, U+94bc-94c0, U+94c4, U+94c6-94db, U+94de-94ec, U+94ee-94f1, U+94f3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.30.woff2) format('woff2');
  unicode-range: U+92ec-92ed, U+92f0, U+92f3, U+92f8, U+92fc, U+9304, U+9306, U+9310, U+9312, U+9315, U+9318, U+931a, U+931e, U+9320-9322, U+9324, U+9326-9329, U+932b-932c, U+932f, U+9331-9332, U+9335-9336, U+933e, U+9340-9341, U+934a-9360, U+9362-9363, U+9365-936b, U+936e, U+9375, U+937e, U+9382, U+938a, U+938c, U+938f, U+9393-9394, U+9396-9397, U+939a, U+93a2, U+93a7, U+93ac-93cd, U+93d0-93d1, U+93d6-93d8, U+93de-93df, U+93e1-93e2, U+93e4, U+93f8, U+93fb, U+93fd, U+940e-941a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.31.woff2) format('woff2');
  unicode-range: U+9163-9164, U+9169, U+9170, U+9172, U+9174, U+9179-917a, U+917d-917e, U+9182-9183, U+9185, U+918c-918d, U+9190-9191, U+919a, U+919c, U+91a1-91a4, U+91a8, U+91aa-91af, U+91b4-91b5, U+91b8, U+91ba, U+91be, U+91c0-91c1, U+91c6, U+91c8, U+91cb, U+91d0, U+91d2, U+91d7-91d8, U+91dd, U+91e3, U+91e6-91e7, U+91ed, U+91f0, U+91f5, U+91f9, U+9200, U+9205, U+9207-920a, U+920d-920e, U+9210, U+9214-9215, U+921c, U+921e, U+9221, U+9223-9227, U+9229-922a, U+922d, U+9234-9235, U+9237, U+9239-923a, U+923c-9240, U+9244-9246, U+9249, U+924e-924f, U+9251, U+9253, U+9257, U+925b, U+925e, U+9262, U+9264-9266, U+9268, U+926c, U+926f, U+9271, U+927b, U+927e, U+9280, U+9283, U+9285-928a, U+928e, U+9291, U+9293, U+9296, U+9298, U+929c-929d, U+92a8, U+92ab-92ae, U+92b3, U+92b6-92b7, U+92b9, U+92c1, U+92c5-92c6, U+92c8, U+92cc, U+92d0, U+92d2, U+92e4, U+92ea;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.32.woff2) format('woff2');
  unicode-range: U+9004, U+900b, U+9011, U+9015-9016, U+901e, U+9021, U+9026, U+902d, U+902f, U+9031, U+9035-9036, U+9039-903a, U+9041, U+9044-9046, U+904a, U+904f-9052, U+9054-9055, U+9058-9059, U+905b-905e, U+9060-9062, U+9068-9069, U+906f, U+9072, U+9074, U+9076-907a, U+907c-907d, U+9081, U+9083, U+9085, U+9087-908b, U+908f, U+9095, U+9097, U+9099-909b, U+909d, U+90a0-90a1, U+90a8-90a9, U+90ac, U+90b0, U+90b2-90b4, U+90b6, U+90b8, U+90ba, U+90bd-90be, U+90c3-90c5, U+90c7-90c8, U+90cf-90d0, U+90d3, U+90d5, U+90d7, U+90da-90dc, U+90de, U+90e2, U+90e4, U+90e6-90e7, U+90ea-90eb, U+90ef, U+90f4-90f5, U+90f7, U+90fe-9100, U+9104, U+9109, U+910c, U+9112, U+9114-9115, U+9118, U+911c, U+911e, U+9120, U+9122-9123, U+9127, U+912d, U+912f-9132, U+9139-913a, U+9143, U+9146, U+9149-914a, U+914c, U+914e-9150, U+9154, U+9157, U+915a, U+915d-915e, U+9161-9162;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.33.woff2) format('woff2');
  unicode-range: U+8e41-8e42, U+8e47, U+8e49-8e4b, U+8e50-8e53, U+8e59-8e5a, U+8e5f-8e60, U+8e64, U+8e69, U+8e6c, U+8e70, U+8e74, U+8e76, U+8e7a-8e7c, U+8e7f, U+8e84-8e85, U+8e87, U+8e89, U+8e8b, U+8e8d, U+8e8f-8e90, U+8e94, U+8e99, U+8e9c, U+8e9e, U+8eaa, U+8eac, U+8eb0, U+8eb6, U+8ec0, U+8ec6, U+8eca-8ece, U+8ed2, U+8eda, U+8edf, U+8ee2, U+8eeb, U+8ef8, U+8efb-8efe, U+8f03, U+8f09, U+8f0b, U+8f12-8f15, U+8f1b, U+8f1d, U+8f1f, U+8f29-8f2a, U+8f2f, U+8f36, U+8f38, U+8f3b, U+8f3e-8f3f, U+8f44-8f45, U+8f49, U+8f4d-8f4e, U+8f5f, U+8f6b, U+8f6d, U+8f71-8f73, U+8f75-8f76, U+8f78-8f7a, U+8f7c, U+8f7e, U+8f81-8f82, U+8f84, U+8f87, U+8f8a-8f8b, U+8f8d-8f8f, U+8f94-8f95, U+8f97-8f9a, U+8fa6, U+8fad-8faf, U+8fb2, U+8fb5-8fb7, U+8fba-8fbc, U+8fbf, U+8fc2, U+8fcb, U+8fcd, U+8fd3, U+8fd5, U+8fd7, U+8fda, U+8fe2-8fe5, U+8fe8-8fe9, U+8fee, U+8ff3-8ff4, U+8ff8, U+8ffa;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.34.woff2) format('woff2');
  unicode-range: U+8cbd, U+8cbf-8cc4, U+8cc7-8cc8, U+8cca, U+8ccd, U+8cd1, U+8cd3, U+8cdb-8cdc, U+8cde, U+8ce0, U+8ce2-8ce4, U+8ce6-8ce8, U+8cea, U+8ced, U+8cf4, U+8cf8, U+8cfa, U+8cfc-8cfd, U+8d04-8d05, U+8d07-8d08, U+8d0a, U+8d0d, U+8d0f, U+8d13-8d14, U+8d16, U+8d1b, U+8d20, U+8d30, U+8d32-8d33, U+8d36, U+8d3b, U+8d3d, U+8d40, U+8d42-8d43, U+8d45-8d46, U+8d48-8d4a, U+8d4d, U+8d51, U+8d53, U+8d55, U+8d59, U+8d5c-8d5d, U+8d5f, U+8d61, U+8d66-8d67, U+8d6a, U+8d6d, U+8d71, U+8d73, U+8d84, U+8d90-8d91, U+8d94-8d95, U+8d99, U+8da8, U+8daf, U+8db1, U+8db5, U+8db8, U+8dba, U+8dbc, U+8dbf, U+8dc2, U+8dc4, U+8dc6, U+8dcb, U+8dce-8dcf, U+8dd6-8dd7, U+8dda-8ddb, U+8dde, U+8de1, U+8de3-8de4, U+8de9, U+8deb-8dec, U+8df0-8df1, U+8df6-8dfd, U+8e05, U+8e07, U+8e09-8e0a, U+8e0c, U+8e0e, U+8e10, U+8e14, U+8e1d-8e1f, U+8e23, U+8e26, U+8e2b-8e31, U+8e34-8e35, U+8e39-8e3a, U+8e3d, U+8e40;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.35.woff2) format('woff2');
  unicode-range: U+8b80, U+8b83, U+8b8a, U+8b8c, U+8b90, U+8b93, U+8b99-8b9a, U+8ba0, U+8ba3, U+8ba5-8ba7, U+8baa-8bac, U+8bb4-8bb5, U+8bb7, U+8bb9, U+8bc2-8bc3, U+8bc5, U+8bcb-8bcc, U+8bce-8bd0, U+8bd2-8bd4, U+8bd6, U+8bd8-8bd9, U+8bdc, U+8bdf, U+8be3-8be4, U+8be7-8be9, U+8beb-8bec, U+8bee, U+8bf0, U+8bf2-8bf3, U+8bf6, U+8bf9, U+8bfc-8bfd, U+8bff-8c00, U+8c02, U+8c04, U+8c06-8c07, U+8c0c, U+8c0f, U+8c11-8c12, U+8c14-8c1b, U+8c1d-8c21, U+8c24-8c25, U+8c27, U+8c2a-8c2c, U+8c2e-8c30, U+8c32-8c36, U+8c3f, U+8c47-8c4c, U+8c4e-8c50, U+8c54-8c56, U+8c62, U+8c68, U+8c6c, U+8c73, U+8c78, U+8c7a, U+8c82, U+8c85, U+8c89-8c8a, U+8c8d-8c8e, U+8c90, U+8c93-8c94, U+8c98, U+8c9d-8c9e, U+8ca0-8ca2, U+8ca7-8cac, U+8caf-8cb0, U+8cb3-8cb4, U+8cb6-8cb9, U+8cbb-8cbc;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.36.woff2) format('woff2');
  unicode-range: U+8a15-8a18, U+8a1a-8a1b, U+8a1d, U+8a1f, U+8a22-8a23, U+8a25, U+8a2b, U+8a2d, U+8a31, U+8a33-8a34, U+8a36-8a38, U+8a3a, U+8a3c, U+8a3e, U+8a40-8a41, U+8a46, U+8a48, U+8a50, U+8a52, U+8a54-8a55, U+8a58, U+8a5b, U+8a5d-8a63, U+8a66, U+8a69-8a6b, U+8a6d-8a6e, U+8a70, U+8a72-8a73, U+8a7a, U+8a85, U+8a87, U+8a8a, U+8a8c-8a8d, U+8a90-8a92, U+8a95, U+8a98, U+8aa0-8aa1, U+8aa3-8aa6, U+8aa8-8aa9, U+8aac-8aae, U+8ab0, U+8ab2, U+8ab8-8ab9, U+8abc, U+8abe-8abf, U+8ac7, U+8acf, U+8ad2, U+8ad6-8ad7, U+8adb-8adc, U+8adf, U+8ae1, U+8ae6-8ae8, U+8aeb, U+8aed-8aee, U+8af1, U+8af3-8af4, U+8af7-8af8, U+8afa, U+8afe, U+8b00-8b02, U+8b07, U+8b0a, U+8b0c, U+8b0e, U+8b10, U+8b17, U+8b19, U+8b1b, U+8b1d, U+8b20-8b21, U+8b26, U+8b28, U+8b2c, U+8b33, U+8b39, U+8b3e-8b3f, U+8b41, U+8b45, U+8b49, U+8b4c, U+8b4f, U+8b57-8b58, U+8b5a, U+8b5c, U+8b5e, U+8b60, U+8b6c, U+8b6f-8b70, U+8b72, U+8b74, U+8b77, U+8b7d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.37.woff2) format('woff2');
  unicode-range: U+8882, U+8884-8886, U+8888, U+888f, U+8892-8893, U+889b, U+88a2, U+88a4, U+88a6, U+88a8, U+88aa, U+88ae, U+88b1, U+88b4, U+88b7, U+88bc, U+88c0, U+88c6-88c9, U+88ce-88cf, U+88d1-88d3, U+88d8, U+88db-88dd, U+88df, U+88e1-88e3, U+88e5, U+88e8, U+88ec, U+88f0-88f1, U+88f3-88f4, U+88fc-88fe, U+8900, U+8902, U+8906-8907, U+8909-890c, U+8912-8915, U+8918-891b, U+8921, U+8925, U+892b, U+8930, U+8932, U+8934, U+8936, U+893b, U+893d, U+8941, U+894c, U+8955-8956, U+8959, U+895c, U+895e-8960, U+8966, U+896a, U+896c, U+896f-8970, U+8972, U+897b, U+897e, U+8980, U+8983, U+8985, U+8987-8988, U+898c, U+898f, U+8993, U+8997, U+899a, U+89a1, U+89a7, U+89a9-89aa, U+89b2-89b3, U+89b7, U+89c0, U+89c7, U+89ca-89cc, U+89ce-89d1, U+89d6, U+89da, U+89dc, U+89de, U+89e5, U+89e7, U+89eb, U+89ef, U+89f1, U+89f3-89f4, U+89f8, U+89ff, U+8a01-8a03, U+8a07-8a0a, U+8a0e-8a0f, U+8a13;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.38.woff2) format('woff2');
  unicode-range: U+86f4, U+86f8-86f9, U+86fb, U+86fe, U+8703, U+8706-870a, U+870d, U+8711-8713, U+871a, U+871e, U+8722-8723, U+8725, U+8729, U+872e, U+8731, U+8734, U+8737, U+873a-873b, U+873e-8740, U+8742, U+8747-8748, U+8753, U+8755, U+8757-8758, U+875d, U+875f, U+8762-8766, U+8768, U+876e, U+8770, U+8772, U+8775, U+8778, U+877b-877e, U+8782, U+8785, U+8788, U+878b, U+8793, U+8797, U+879a, U+879e-87a0, U+87a2-87a3, U+87a8, U+87ab-87ad, U+87af, U+87b3, U+87b5, U+87bd, U+87c0, U+87c4, U+87c6, U+87ca-87cb, U+87d1-87d2, U+87db-87dc, U+87de, U+87e0, U+87e5, U+87ea, U+87ec, U+87ee, U+87f2-87f3, U+87fb, U+87fd-87fe, U+8802-8803, U+8805, U+880a-880b, U+880d, U+8813-8816, U+8819, U+881b, U+881f, U+8821, U+8823, U+8831-8832, U+8835-8836, U+8839, U+883b-883c, U+8844, U+8846, U+884a, U+884e, U+8852-8853, U+8855, U+8859, U+885b, U+885d-885e, U+8862, U+8864, U+8869-886a, U+886e-886f, U+8872, U+8879, U+887d-887f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.39.woff2) format('woff2');
  unicode-range: U+8548, U+854e, U+8553, U+8556-8557, U+8559, U+855e, U+8561, U+8564-8565, U+8568-856a, U+856d, U+856f-8570, U+8572, U+8576, U+8579-857b, U+8580, U+8585-8586, U+8588, U+858a, U+858f, U+8591, U+8594, U+8599, U+859c, U+85a2, U+85a4, U+85a6, U+85a8-85a9, U+85ab-85ac, U+85ae, U+85b7-85b9, U+85be, U+85c1, U+85c7, U+85cd, U+85d0, U+85d3, U+85d5, U+85dc-85dd, U+85df-85e0, U+85e5-85e6, U+85e8-85ea, U+85f4, U+85f9, U+85fe-85ff, U+8602, U+8605-8607, U+860a-860b, U+8616, U+8618, U+861a, U+8627, U+8629, U+862d, U+8638, U+863c, U+863f, U+864d, U+864f, U+8652-8655, U+865b-865c, U+865f, U+8662, U+8667, U+866c, U+866e, U+8671, U+8675, U+867a-867c, U+867f, U+868b, U+868d, U+8693, U+869c-869d, U+86a1, U+86a3-86a4, U+86a7-86a9, U+86ac, U+86af-86b1, U+86b4-86b6, U+86ba, U+86c0, U+86c4, U+86c6, U+86c9-86ca, U+86cd-86d1, U+86d4, U+86d8, U+86de-86df, U+86e4, U+86e6, U+86e9, U+86ed, U+86ef-86f3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.40.woff2) format('woff2');
  unicode-range: U+83c5, U+83c8-83c9, U+83cb, U+83d1, U+83d3-83d6, U+83d8, U+83db, U+83dd, U+83df, U+83e1, U+83e5, U+83ea-83eb, U+83f0, U+83f4, U+83f8-83f9, U+83fb, U+83fd, U+83ff, U+8401, U+8406, U+840a-840b, U+840f, U+8411, U+8418, U+841c, U+8420, U+8422-8424, U+8426, U+8429, U+842c, U+8438-8439, U+843b-843c, U+843f, U+8446-8447, U+8449, U+844e, U+8451-8452, U+8456, U+8459-845a, U+845c, U+8462, U+8466, U+846d, U+846f-8470, U+8473, U+8476-8478, U+847a, U+847d, U+8484-8485, U+8487, U+8489, U+848c, U+848e, U+8490, U+8493-8494, U+8497, U+849b, U+849e-849f, U+84a1, U+84a5, U+84a8, U+84af, U+84b4, U+84b9-84bf, U+84c1-84c2, U+84c5-84c7, U+84ca-84cb, U+84cd, U+84d0-84d1, U+84d3, U+84d6, U+84df-84e0, U+84e2-84e3, U+84e5-84e7, U+84ee, U+84f3, U+84f6, U+84fa, U+84fc, U+84ff-8500, U+850c, U+8511, U+8514-8515, U+8517-8518, U+851f, U+8523, U+8525-8526, U+8529, U+852b, U+852d, U+8532, U+8534-8535, U+8538-853a, U+853c, U+8543, U+8545;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.41.woff2) format('woff2');
  unicode-range: U+82bc, U+82be, U+82c0-82c2, U+82c4-82c8, U+82ca-82cc, U+82ce, U+82d0, U+82d2-82d3, U+82d5-82d6, U+82d8-82d9, U+82dc-82de, U+82e0-82e4, U+82e7, U+82e9-82eb, U+82ed-82ee, U+82f3-82f4, U+82f7-82f8, U+82fa-8301, U+8306-8308, U+830c-830d, U+830f, U+8311, U+8313-8315, U+8318, U+831a-831b, U+831d, U+8324, U+8327, U+832a, U+832c-832d, U+832f, U+8331-8334, U+833a-833c, U+8340, U+8343-8345, U+8347-8348, U+834a, U+834c, U+834f, U+8351, U+8356, U+8358-835c, U+835e, U+8360, U+8364-8366, U+8368-836a, U+836c-836e, U+8373, U+8378, U+837b-837d, U+837f-8380, U+8382, U+8388, U+838a-838b, U+8392, U+8394, U+8396, U+8398-8399, U+839b-839c, U+83a0, U+83a2-83a3, U+83a8-83aa, U+83ae-83b0, U+83b3-83b4, U+83b6, U+83b8, U+83ba, U+83bc-83bd, U+83bf-83c0, U+83c2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.42.woff2) format('woff2');
  unicode-range: U+8166-8169, U+816b, U+816d, U+8171, U+8173-8174, U+8178, U+817c-817d, U+8182, U+8188, U+8191, U+8198-819b, U+81a0, U+81a3, U+81a5-81a6, U+81a9, U+81b6, U+81ba-81bb, U+81bd, U+81bf, U+81c1, U+81c3, U+81c6, U+81c9-81ca, U+81cc-81cd, U+81d1, U+81d3-81d4, U+81d8, U+81db-81dc, U+81de-81df, U+81e5, U+81e7-81e9, U+81eb-81ec, U+81ee-81ef, U+81f5, U+81f8, U+81fa, U+81fc, U+81fe, U+8200-8202, U+8204, U+8208-820a, U+820e-8210, U+8216-8218, U+821b-821c, U+8221-8224, U+8226-8228, U+822b, U+822d, U+822f, U+8232-8234, U+8237-8238, U+823a-823b, U+823e, U+8244, U+8249, U+824b, U+824f, U+8259-825a, U+825f, U+8266, U+8268, U+826e, U+8271, U+8276-8279, U+827d, U+827f, U+8283-8284, U+8288-828a, U+828d-8291, U+8293-8294, U+8296-8298, U+829f-82a1, U+82a3-82a4, U+82a7-82ab, U+82ae, U+82b0, U+82b2, U+82b4-82b6;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.43.woff2) format('woff2');
  unicode-range: U+8016, U+8018-8019, U+801c, U+801e, U+8026-802a, U+8031, U+8034-8035, U+8037, U+8043, U+804b, U+804d, U+8052, U+8056, U+8059, U+805e, U+8061, U+8068-8069, U+806e-8074, U+8076-8078, U+807c-8080, U+8082, U+8084-8085, U+8088, U+808f, U+8093, U+809c, U+809f, U+80ab, U+80ad-80ae, U+80b1, U+80b6-80b8, U+80bc-80bd, U+80c2, U+80c4, U+80ca, U+80cd, U+80d1, U+80d4, U+80d7, U+80d9-80db, U+80dd, U+80e0, U+80e4-80e5, U+80e7-80ed, U+80ef-80f1, U+80f3-80f4, U+80fc, U+8101, U+8104-8105, U+8107-8108, U+810c-810e, U+8112-8115, U+8117-8119, U+811b-811f, U+8121-8130, U+8132-8134, U+8137, U+8139, U+813f-8140, U+8142, U+8146, U+8148, U+814d-814e, U+8151, U+8153, U+8158-815a, U+815e, U+8160;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.44.woff2) format('woff2');
  unicode-range: U+7ef0-7ef2, U+7ef6, U+7efa-7efb, U+7efe, U+7f01-7f04, U+7f08, U+7f0a-7f12, U+7f17, U+7f19, U+7f1b-7f1c, U+7f1f, U+7f21-7f23, U+7f25-7f28, U+7f2a-7f33, U+7f35-7f37, U+7f3d, U+7f42, U+7f44-7f45, U+7f4c-7f4d, U+7f52, U+7f54, U+7f58-7f59, U+7f5d, U+7f5f-7f61, U+7f63, U+7f65, U+7f68, U+7f70-7f71, U+7f73-7f75, U+7f77, U+7f79, U+7f7d-7f7e, U+7f85-7f86, U+7f88-7f89, U+7f8b-7f8c, U+7f90-7f91, U+7f94-7f96, U+7f98-7f9b, U+7f9d, U+7f9f, U+7fa3, U+7fa7-7fa9, U+7fac-7fb2, U+7fb4, U+7fb6, U+7fb8, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fca, U+7fcc, U+7fce, U+7fd2, U+7fd5, U+7fd9-7fdb, U+7fdf, U+7fe3, U+7fe5-7fe7, U+7fe9, U+7feb-7fec, U+7fee-7fef, U+7ff1, U+7ff3-7ff4, U+7ff9-7ffa, U+7ffe, U+8004, U+8006, U+800b, U+800e, U+8011-8012, U+8014;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.45.woff2) format('woff2');
  unicode-range: U+7dd2, U+7dd4, U+7dd6-7dd8, U+7dda-7de0, U+7de2-7de6, U+7de8-7ded, U+7def, U+7df1-7df5, U+7df7, U+7df9, U+7dfb-7dfc, U+7dfe-7e02, U+7e04, U+7e08-7e0b, U+7e12, U+7e1b, U+7e1e, U+7e20, U+7e22-7e23, U+7e26, U+7e29, U+7e2b, U+7e2e-7e2f, U+7e31, U+7e37, U+7e39-7e3e, U+7e40, U+7e43-7e44, U+7e46-7e47, U+7e4a-7e4b, U+7e4d-7e4e, U+7e51, U+7e54-7e56, U+7e58-7e5b, U+7e5d-7e5e, U+7e61, U+7e66-7e67, U+7e69-7e6b, U+7e6d, U+7e70, U+7e73, U+7e77, U+7e79, U+7e7b-7e7d, U+7e81-7e82, U+7e8c-7e8d, U+7e8f, U+7e92-7e94, U+7e96, U+7e98, U+7e9a-7e9c, U+7e9e-7e9f, U+7ea1, U+7ea3, U+7ea5, U+7ea8-7ea9, U+7eab, U+7ead-7eae, U+7eb0, U+7ebb, U+7ebe, U+7ec0-7ec2, U+7ec9, U+7ecb-7ecc, U+7ed0, U+7ed4, U+7ed7, U+7edb, U+7ee0-7ee2, U+7ee5-7ee6, U+7ee8, U+7eeb;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.46.woff2) format('woff2');
  unicode-range: U+7ce8, U+7cec, U+7cf0, U+7cf5-7cf9, U+7cfc, U+7cfe, U+7d00, U+7d04-7d0b, U+7d0d, U+7d10-7d14, U+7d17-7d19, U+7d1b-7d1f, U+7d21, U+7d24-7d26, U+7d28-7d2a, U+7d2c-7d2e, U+7d30-7d31, U+7d33, U+7d35-7d36, U+7d38-7d3a, U+7d40, U+7d42-7d44, U+7d46, U+7d4b-7d4c, U+7d4f, U+7d51, U+7d54-7d56, U+7d58, U+7d5b-7d5c, U+7d5e, U+7d61-7d63, U+7d66, U+7d68, U+7d6a-7d6c, U+7d6f, U+7d71-7d73, U+7d75-7d77, U+7d79-7d7a, U+7d7e, U+7d81, U+7d84-7d8b, U+7d8d, U+7d8f, U+7d91, U+7d94, U+7d96, U+7d98-7d9a, U+7d9c-7da0, U+7da2, U+7da6, U+7daa-7db1, U+7db4-7db8, U+7dba-7dbf, U+7dc1, U+7dc4, U+7dc7-7dc8, U+7dca-7dcd, U+7dcf, U+7dd1;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.47.woff2) format('woff2');
  unicode-range: U+7bd3-7bd4, U+7bd9-7bda, U+7bdd, U+7be0-7be1, U+7be4-7be6, U+7be9-7bea, U+7bef, U+7bf4, U+7bf6, U+7bfc, U+7bfe, U+7c01, U+7c03, U+7c07-7c08, U+7c0a-7c0d, U+7c0f, U+7c11, U+7c15-7c16, U+7c19, U+7c1e-7c21, U+7c23-7c24, U+7c26, U+7c28-7c33, U+7c35, U+7c37-7c3b, U+7c3d-7c3e, U+7c40-7c41, U+7c43, U+7c47-7c48, U+7c4c, U+7c50, U+7c53-7c54, U+7c59, U+7c5f-7c60, U+7c63-7c65, U+7c6c, U+7c6e, U+7c72, U+7c74, U+7c79-7c7a, U+7c7c, U+7c81-7c82, U+7c84-7c85, U+7c88, U+7c8a-7c91, U+7c93-7c96, U+7c99, U+7c9b-7c9e, U+7ca0-7ca2, U+7ca6-7ca9, U+7cac, U+7caf-7cb3, U+7cb5-7cb7, U+7cba-7cbd, U+7cbf-7cc2, U+7cc5, U+7cc7-7cc9, U+7ccc-7ccd, U+7cd7, U+7cdc, U+7cde, U+7ce0, U+7ce4-7ce5, U+7ce7;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.48.woff2) format('woff2');
  unicode-range: U+7ae6, U+7af4-7af7, U+7afa-7afb, U+7afd-7b0a, U+7b0c, U+7b0e-7b0f, U+7b13, U+7b15-7b16, U+7b18-7b19, U+7b1e-7b20, U+7b22-7b25, U+7b29-7b2b, U+7b2d-7b2e, U+7b30-7b3b, U+7b3e-7b3f, U+7b41-7b42, U+7b44-7b47, U+7b4a, U+7b4c-7b50, U+7b58, U+7b5a, U+7b5c, U+7b60, U+7b66-7b67, U+7b69, U+7b6c-7b6f, U+7b72-7b76, U+7b7b-7b7d, U+7b7f, U+7b82, U+7b85, U+7b87, U+7b8b-7b96, U+7b98-7b99, U+7b9b-7b9f, U+7ba2-7ba4, U+7ba6-7bac, U+7bae-7bb0, U+7bb4, U+7bb7-7bb9, U+7bbb, U+7bc0-7bc1, U+7bc3-7bc4, U+7bc6, U+7bc8-7bcc, U+7bd1;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.49.woff2) format('woff2');
  unicode-range: U+798b-798e, U+7992, U+7994-7995, U+7997-7998, U+799a-799c, U+799f, U+79a3-79a6, U+79a8-79ac, U+79ae-79b1, U+79b3-79b5, U+79b8, U+79ba, U+79bf, U+79c2, U+79c6, U+79c8, U+79cf, U+79d5-79d6, U+79dd-79de, U+79e3, U+79e7-79e8, U+79eb, U+79ed, U+79f4, U+79f7-79f8, U+79fa, U+79fe, U+7a02-7a03, U+7a05, U+7a0a, U+7a14, U+7a17, U+7a19, U+7a1c, U+7a1e-7a1f, U+7a23, U+7a25-7a26, U+7a2c, U+7a2e, U+7a30-7a32, U+7a36-7a37, U+7a39, U+7a3c, U+7a40, U+7a42, U+7a47, U+7a49, U+7a4c-7a4f, U+7a51, U+7a55, U+7a5b, U+7a5d-7a5e, U+7a62-7a63, U+7a66, U+7a68-7a69, U+7a6b, U+7a70, U+7a78, U+7a80, U+7a85-7a88, U+7a8a, U+7a90, U+7a93-7a96, U+7a98, U+7a9b-7a9c, U+7a9e, U+7aa0-7aa1, U+7aa3, U+7aa8-7aaa, U+7aac-7ab0, U+7ab3, U+7ab8, U+7aba, U+7abd-7abf, U+7ac4-7ac5, U+7ac7-7ac8, U+7aca, U+7ad1-7ad2, U+7ada-7add, U+7ae1, U+7ae4;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.50.woff2) format('woff2');
  unicode-range: U+784c, U+784e-7854, U+7856-7857, U+7859-785a, U+7865, U+7869-786a, U+786d, U+786f, U+7876-7877, U+787c, U+787e-787f, U+7881, U+7887-7889, U+7893-7894, U+7898-789e, U+78a1, U+78a3, U+78a5, U+78a9, U+78ad, U+78b2, U+78b4, U+78b6, U+78b9-78ba, U+78bc, U+78bf, U+78c3, U+78c9, U+78cb, U+78d0-78d2, U+78d4, U+78d9-78da, U+78dc, U+78de, U+78e1, U+78e5-78e6, U+78ea, U+78ec, U+78ef, U+78f1-78f2, U+78f4, U+78fa-78fb, U+78fe, U+7901-7902, U+7905, U+7907, U+7909, U+790b-790c, U+790e, U+7910, U+7913, U+7919-791b, U+791e-791f, U+7921, U+7924, U+7926, U+792a-792b, U+7934, U+7936, U+7939, U+793b, U+793d, U+7940, U+7942-7943, U+7945-7947, U+7949-794a, U+794c, U+794e-7951, U+7953-7955, U+7957-795a, U+795c, U+795f-7960, U+7962, U+7964, U+7966-7967, U+7969, U+796b, U+796f, U+7972, U+7974, U+7979, U+797b-797c, U+797e-7980, U+7982, U+7986-7987, U+7989-798a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.51.woff2) format('woff2');
  unicode-range: U+7722, U+7726, U+7728, U+772b-7730, U+7732-7736, U+7739-773a, U+773d-773f, U+7743, U+7746-7747, U+774c-774f, U+7751-7752, U+7758-775a, U+775c-775e, U+7762, U+7765-7766, U+7768-776a, U+776c-776d, U+7771-7772, U+777a, U+777c-777e, U+7780, U+7785, U+7787, U+778b-778d, U+778f-7791, U+7793, U+779e-77a0, U+77a2, U+77a5, U+77ad, U+77af, U+77b4-77b7, U+77bd-77c0, U+77c2, U+77c5, U+77c7, U+77cd, U+77d6-77d7, U+77d9-77da, U+77dd-77de, U+77e7, U+77ea, U+77ec, U+77ef, U+77f8, U+77fb, U+77fd-77fe, U+7800, U+7803, U+7806, U+7809, U+780f-7812, U+7815, U+7817-7818, U+781a-781f, U+7821-7823, U+7825-7827, U+7829, U+782b-7830, U+7832-7833, U+7835, U+7837, U+7839-783c, U+783e, U+7841-7844, U+7847-7849, U+784b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.52.woff2) format('woff2');
  unicode-range: U+7613-7619, U+761b-761d, U+761f-7622, U+7625, U+7627-762a, U+762e-7630, U+7632-7635, U+7638-763a, U+763c-763d, U+763f-7640, U+7642-7643, U+7647-7648, U+764d-764e, U+7652, U+7654, U+7658, U+765a, U+765c, U+765e-765f, U+7661-7663, U+7665, U+7669, U+766c, U+766e-766f, U+7671-7673, U+7675-7676, U+7678-767a, U+767f, U+7681, U+7683, U+7688, U+768a-768c, U+768e, U+7690-7692, U+7695, U+7698, U+769a-769b, U+769d-76a0, U+76a2, U+76a4-76a7, U+76ab-76ac, U+76af-76b0, U+76b2, U+76b4-76b5, U+76ba-76bb, U+76bf, U+76c2-76c3, U+76c5, U+76c9, U+76cc-76ce, U+76dc-76de, U+76e1-76ea, U+76f1, U+76f9-76fb, U+76fd, U+76ff-7700, U+7703-7704, U+7707-7708, U+770c-770f, U+7712, U+7714, U+7716, U+7719-771b, U+771e, U+7721;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.53.woff2) format('woff2');
  unicode-range: U+750d, U+750f, U+7511, U+7513, U+7515, U+7517, U+7519, U+7521-7527, U+752a, U+752c-752d, U+752f, U+7534, U+7536, U+753a, U+753e, U+7540, U+7544, U+7547-754b, U+754d-754e, U+7550-7553, U+7556-7557, U+755a-755b, U+755d-755e, U+7560, U+7562, U+7564, U+7566-7568, U+756b-756c, U+756f-7573, U+7575, U+7579-757c, U+757e-757f, U+7581-7584, U+7587, U+7589-758e, U+7590, U+7592, U+7594, U+7596, U+7599-759a, U+759d, U+759f-75a0, U+75a3, U+75a5, U+75a8, U+75ac-75ad, U+75b0-75b1, U+75b3-75b5, U+75b8, U+75bd, U+75c1-75c4, U+75c8-75ca, U+75cc-75cd, U+75d4, U+75d6, U+75d9, U+75de, U+75e0, U+75e2-75e4, U+75e6-75ea, U+75f1-75f3, U+75f7, U+75f9-75fa, U+75fc, U+75fe-7601, U+7603, U+7605-7606, U+7608-760e, U+7610-7612;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.54.woff2) format('woff2');
  unicode-range: U+73f0, U+73f2, U+73f4-73f5, U+73f7, U+73f9-73fa, U+73fc-73fd, U+73ff-7402, U+7404, U+7407-7408, U+740a-740f, U+7418, U+741a-741c, U+741e, U+7424-7425, U+7428-7429, U+742c-7430, U+7432, U+7435-7436, U+7438-743b, U+743e-7441, U+7443-7446, U+7448, U+744a-744b, U+7452, U+7457, U+745b, U+745d, U+7460, U+7462-7465, U+7467-746a, U+746d, U+746f, U+7471, U+7473-7474, U+7477, U+747a, U+747e, U+7481-7482, U+7484, U+7486, U+7488-748b, U+748e-748f, U+7493, U+7498, U+749a, U+749c-74a0, U+74a3, U+74a6, U+74a9-74aa, U+74ae, U+74b0-74b2, U+74b6, U+74b8-74ba, U+74bd, U+74bf, U+74c1, U+74c3, U+74c5, U+74c8, U+74ca, U+74cc, U+74cf, U+74d1-74d2, U+74d4-74d5, U+74d8-74db, U+74de-74e0, U+74e2, U+74e4-74e5, U+74e7-74e9, U+74ee-74ef, U+74f4, U+74ff, U+7501, U+7503, U+7505, U+7508;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.55.woff2) format('woff2');
  unicode-range: U+72e6, U+72e8, U+72ef-72f0, U+72f2-72f4, U+72f6-72f7, U+72f9-72fb, U+72fd, U+7300-7304, U+7307, U+730a-730c, U+7313-7317, U+731d-7322, U+7327, U+7329, U+732c-732d, U+7330-7331, U+7333, U+7335-7337, U+7339, U+733d-733e, U+7340, U+7342, U+7344-7345, U+734a, U+734d-7350, U+7352, U+7355, U+7357, U+7359, U+735f-7360, U+7362-7363, U+7365, U+7368, U+736c-736d, U+736f-7370, U+7372, U+7374-7376, U+7378, U+737a-737b, U+737d-737e, U+7382-7383, U+7386, U+7388, U+738a, U+738c-7393, U+7395, U+7397-739a, U+739c, U+739e, U+73a0-73a3, U+73a5-73a8, U+73aa, U+73ad, U+73b1, U+73b3, U+73b6-73b7, U+73b9, U+73c2, U+73c5-73c9, U+73cc, U+73ce-73d0, U+73d2, U+73d6, U+73d9, U+73db-73de, U+73e3, U+73e5-73ea, U+73ee-73ef;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.56.woff2) format('woff2');
  unicode-range: U+71a8, U+71af, U+71b1-71bc, U+71be, U+71c1-71c2, U+71c4, U+71c8-71cb, U+71ce-71d0, U+71d2, U+71d4, U+71d9-71da, U+71dc, U+71df-71e0, U+71e6-71e8, U+71ea, U+71ed-71ee, U+71f4, U+71f6, U+71f9, U+71fb-71fc, U+71ff-7200, U+7207, U+720c-720d, U+7210, U+7216, U+721a-721e, U+7223, U+7228, U+722b, U+722d-722e, U+7230, U+7232, U+723a-723c, U+723e-7242, U+7246, U+724b, U+724d-724e, U+7252, U+7256, U+7258, U+725a, U+725c-725d, U+7260, U+7264-7266, U+726a, U+726c, U+726e-726f, U+7271, U+7273-7274, U+7278, U+727b, U+727d-727e, U+7281-7282, U+7284, U+7287, U+728a, U+728d, U+728f, U+7292, U+729b, U+729f-72a0, U+72a7, U+72ad-72ae, U+72b0-72b5, U+72b7-72b8, U+72ba-72be, U+72c0-72c1, U+72c3, U+72c5-72c6, U+72c8, U+72cc-72ce, U+72d2, U+72d6, U+72db, U+72dd-72df, U+72e1, U+72e5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.57.woff2) format('woff2');
  unicode-range: U+700b, U+700d, U+7015, U+7018, U+701b, U+701d-701f, U+7023, U+7026-7028, U+702c, U+702e-7030, U+7035, U+7037, U+7039-703a, U+703c-703e, U+7044, U+7049-704b, U+704f, U+7051, U+7058, U+705a, U+705c-705e, U+7061, U+7064, U+7066, U+706c, U+707d, U+7080-7081, U+7085-7086, U+708a, U+708f, U+7091, U+7094-7095, U+7098-7099, U+709c-709d, U+709f, U+70a4, U+70a9-70aa, U+70af-70b2, U+70b4-70b7, U+70bb, U+70c0, U+70c3, U+70c7, U+70cb, U+70ce-70cf, U+70d4, U+70d9-70da, U+70dc-70dd, U+70e0, U+70e9, U+70ec, U+70f7, U+70fa, U+70fd, U+70ff, U+7104, U+7108-7109, U+710c, U+7110, U+7113-7114, U+7116-7118, U+711c, U+711e, U+7120, U+712e-712f, U+7131, U+713c, U+7142, U+7144-7147, U+7149-714b, U+7150, U+7152, U+7155-7156, U+7159-715a, U+715c, U+7161, U+7165-7166, U+7168-7169, U+716d, U+7173-7174, U+7176, U+7178, U+717a, U+717d, U+717f-7180, U+7184, U+7186-7188, U+7192, U+7198, U+719c, U+71a0, U+71a4-71a5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.58.woff2) format('woff2');
  unicode-range: U+6ed9, U+6edb, U+6edd, U+6edf-6ee0, U+6ee2, U+6ee6, U+6eea, U+6eec, U+6eee-6eef, U+6ef2-6ef3, U+6ef7-6efa, U+6efe, U+6f01, U+6f03, U+6f08-6f09, U+6f15-6f16, U+6f19, U+6f22-6f25, U+6f28-6f2a, U+6f2c-6f2d, U+6f2f, U+6f32, U+6f36-6f38, U+6f3f, U+6f43-6f46, U+6f48, U+6f4b, U+6f4e-6f4f, U+6f51, U+6f54-6f57, U+6f59-6f5b, U+6f5e-6f5f, U+6f61, U+6f64-6f67, U+6f69-6f6c, U+6f6f-6f72, U+6f74-6f76, U+6f78-6f7e, U+6f80-6f83, U+6f86, U+6f89, U+6f8b-6f8d, U+6f90, U+6f92, U+6f94, U+6f97-6f98, U+6f9b, U+6fa3-6fa5, U+6fa7, U+6faa, U+6faf, U+6fb1, U+6fb4, U+6fb6, U+6fb9, U+6fc1-6fcb, U+6fd1-6fd3, U+6fd5, U+6fdb, U+6fde-6fe1, U+6fe4, U+6fe9, U+6feb-6fec, U+6fee-6ff1, U+6ffa, U+6ffe, U+7005-7006, U+7009;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.59.woff2) format('woff2');
  unicode-range: U+6dc3, U+6dc5-6dc6, U+6dc9, U+6dcc, U+6dcf, U+6dd2-6dd3, U+6dd6, U+6dd9-6dde, U+6de0, U+6de4, U+6de6, U+6de8-6dea, U+6dec, U+6def-6df0, U+6df5-6df6, U+6df8, U+6dfa, U+6dfc, U+6e03-6e04, U+6e07-6e09, U+6e0b-6e0c, U+6e0e, U+6e11, U+6e13, U+6e15-6e16, U+6e19-6e1b, U+6e1e-6e1f, U+6e22, U+6e25-6e27, U+6e2b-6e2c, U+6e36-6e37, U+6e39-6e3a, U+6e3c-6e41, U+6e44-6e45, U+6e47, U+6e49-6e4b, U+6e4d-6e4e, U+6e51, U+6e53-6e55, U+6e5c-6e5f, U+6e61-6e63, U+6e65-6e67, U+6e6a-6e6b, U+6e6d-6e70, U+6e72-6e74, U+6e76-6e78, U+6e7c, U+6e80-6e82, U+6e86-6e87, U+6e89, U+6e8d, U+6e8f, U+6e96, U+6e98, U+6e9d-6e9f, U+6ea1, U+6ea5-6ea7, U+6eab, U+6eb1-6eb2, U+6eb4, U+6eb7, U+6ebb-6ebd, U+6ebf-6ec6, U+6ec8-6ec9, U+6ecc, U+6ecf-6ed0, U+6ed3-6ed4, U+6ed7-6ed8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.60.woff2) format('woff2');
  unicode-range: U+6cb1-6cb2, U+6cb4-6cb5, U+6cb7, U+6cba, U+6cbc-6cbd, U+6cc1-6cc3, U+6cc5-6cc7, U+6cd0-6cd4, U+6cd6-6cd7, U+6cd9-6cda, U+6cde-6ce0, U+6ce4, U+6ce6, U+6ce9, U+6ceb-6cef, U+6cf1-6cf2, U+6cf6-6cf7, U+6cfa, U+6cfe, U+6d03-6d05, U+6d07-6d08, U+6d0a, U+6d0c, U+6d0e-6d11, U+6d13-6d14, U+6d16, U+6d18-6d1a, U+6d1c, U+6d1f, U+6d22-6d23, U+6d26-6d29, U+6d2b, U+6d2e-6d30, U+6d33, U+6d35-6d36, U+6d38-6d3a, U+6d3c, U+6d3f, U+6d42-6d44, U+6d48-6d49, U+6d4d, U+6d50, U+6d52, U+6d54, U+6d56-6d58, U+6d5a-6d5c, U+6d5e, U+6d60-6d61, U+6d63-6d65, U+6d67, U+6d6c-6d6d, U+6d6f, U+6d75, U+6d7b-6d7d, U+6d87, U+6d8a, U+6d8e, U+6d90-6d9a, U+6d9c-6da0, U+6da2-6da3, U+6da7, U+6daa-6dac, U+6dae, U+6db3-6db4, U+6db6, U+6db8, U+6dbc, U+6dbf, U+6dc2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.61.woff2) format('woff2');
  unicode-range: U+6b83-6b86, U+6b89, U+6b8d, U+6b91-6b93, U+6b95, U+6b97-6b98, U+6b9a-6b9b, U+6b9e, U+6ba1-6ba4, U+6ba9-6baa, U+6bad, U+6baf-6bb0, U+6bb2-6bb3, U+6bba-6bbd, U+6bc0, U+6bc2, U+6bc6, U+6bca-6bcc, U+6bce, U+6bd0-6bd1, U+6bd3, U+6bd6-6bd8, U+6bda, U+6be1, U+6be6, U+6bec, U+6bf1, U+6bf3-6bf5, U+6bf9, U+6bfd, U+6c05-6c08, U+6c0d, U+6c10, U+6c15-6c1a, U+6c21, U+6c23-6c26, U+6c29-6c2d, U+6c30-6c33, U+6c35-6c37, U+6c39-6c3a, U+6c3c-6c3f, U+6c46, U+6c4a-6c4c, U+6c4e-6c50, U+6c54, U+6c56, U+6c59-6c5c, U+6c5e, U+6c63, U+6c67-6c69, U+6c6b, U+6c6d, U+6c6f, U+6c72-6c74, U+6c78-6c7a, U+6c7c, U+6c84-6c87, U+6c8b-6c8c, U+6c8f, U+6c91, U+6c93-6c96, U+6c98, U+6c9a, U+6c9d, U+6ca2-6ca4, U+6ca8-6ca9, U+6cac-6cae;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.62.woff2) format('woff2');
  unicode-range: U+69fe-6a01, U+6a06, U+6a09, U+6a0b, U+6a11, U+6a13, U+6a17-6a19, U+6a1b, U+6a1e, U+6a23, U+6a28-6a29, U+6a2b, U+6a2f-6a30, U+6a35, U+6a38-6a40, U+6a46-6a48, U+6a4a-6a4b, U+6a4e, U+6a50, U+6a52, U+6a5b, U+6a5e, U+6a62, U+6a65-6a67, U+6a6b, U+6a79, U+6a7c, U+6a7e-6a7f, U+6a84, U+6a86, U+6a8e, U+6a90-6a91, U+6a94, U+6a97, U+6a9c, U+6a9e, U+6aa0, U+6aa2, U+6aa4, U+6aa9, U+6aab, U+6aae-6ab0, U+6ab2-6ab3, U+6ab5, U+6ab7-6ab8, U+6aba-6abb, U+6abd, U+6abf, U+6ac2-6ac4, U+6ac6, U+6ac8, U+6acc, U+6ace, U+6ad2-6ad3, U+6ad8-6adc, U+6adf-6ae0, U+6ae4-6ae5, U+6ae7-6ae8, U+6afb, U+6b04-6b05, U+6b0d-6b13, U+6b16-6b17, U+6b19, U+6b24-6b25, U+6b2c, U+6b37-6b39, U+6b3b, U+6b3d, U+6b43, U+6b46, U+6b4e, U+6b50, U+6b53-6b54, U+6b58-6b59, U+6b5b, U+6b60, U+6b69, U+6b6d, U+6b6f-6b70, U+6b73-6b74, U+6b77-6b7a, U+6b80-6b82;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.63.woff2) format('woff2');
  unicode-range: U+68d3, U+68d7, U+68dd, U+68df, U+68e1, U+68e3-68e4, U+68e6-68ed, U+68ef-68f0, U+68f2, U+68f4, U+68f6-68f7, U+68f9, U+68fb-68fd, U+68ff-6902, U+6906-6908, U+690b, U+6910, U+691a-691c, U+691f-6920, U+6924-6925, U+692a, U+692d, U+6934, U+6939, U+693c-6945, U+694a-694b, U+6952-6954, U+6957, U+6959, U+695b, U+695d, U+695f, U+6962-6964, U+6966, U+6968-696c, U+696e-696f, U+6971, U+6973-6974, U+6978-6979, U+697d, U+697f-6980, U+6985, U+6987-698a, U+698d-698e, U+6994-6999, U+699b, U+69a3-69a4, U+69a6-69a7, U+69ab, U+69ad-69ae, U+69b1, U+69b7, U+69bb-69bc, U+69c1, U+69c3-69c5, U+69c7, U+69ca-69ce, U+69d0-69d1, U+69d3-69d4, U+69d7-69da, U+69e0, U+69e4, U+69e6, U+69ec-69ed, U+69f1-69f3, U+69f8, U+69fa-69fc;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.64.woff2) format('woff2');
  unicode-range: U+678b-678d, U+678f, U+6792-6793, U+6796, U+6798, U+679e-67a1, U+67a5, U+67a7-67a9, U+67ac-67ad, U+67b0-67b1, U+67b3, U+67b5, U+67b7, U+67b9, U+67bb-67bc, U+67c0-67c1, U+67c3, U+67c5-67ca, U+67d1-67d2, U+67d7-67d9, U+67dd-67df, U+67e2-67e4, U+67e6-67e9, U+67f0, U+67f5, U+67f7-67f8, U+67fa-67fb, U+67fd-67fe, U+6800-6801, U+6803-6804, U+6806, U+6809-680a, U+680c, U+680e, U+6812, U+681d-681f, U+6822, U+6824-6829, U+682b-682d, U+6831-6835, U+683b, U+683e, U+6840-6841, U+6844-6845, U+6849, U+684e, U+6853, U+6855-6856, U+685c-685d, U+685f-6862, U+6864, U+6866-6868, U+686b, U+686f, U+6872, U+6874, U+6877, U+687f, U+6883, U+6886, U+688f, U+689b, U+689f-68a0, U+68a2-68a3, U+68b1, U+68b6, U+68b9-68ba, U+68bc-68bf, U+68c1-68c4, U+68c6, U+68c8, U+68ca, U+68cc, U+68d0-68d1;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.65.woff2) format('woff2');
  unicode-range: U+6631, U+6633-6634, U+6636, U+663a-663b, U+663d, U+6641, U+6644-6645, U+6649, U+664c, U+664f, U+6654, U+6659, U+665b, U+665d-665e, U+6660-6667, U+6669, U+666b-666c, U+6671, U+6673, U+6677-6679, U+667c, U+6680-6681, U+6684-6685, U+6688-6689, U+668b-668e, U+6690, U+6692, U+6695, U+6698, U+669a, U+669d, U+669f-66a0, U+66a2-66a3, U+66a6, U+66aa-66ab, U+66b1-66b2, U+66b5, U+66b8-66b9, U+66bb, U+66be, U+66c1, U+66c6-66c9, U+66cc, U+66d5-66d8, U+66da-66dc, U+66de-66e2, U+66e8-66ea, U+66ec, U+66f1, U+66f3, U+66f7, U+66fa, U+66fd, U+6702, U+6705, U+670a, U+670f-6710, U+6713, U+6715, U+6719, U+6722-6723, U+6725-6727, U+6729, U+672d-672e, U+6732-6733, U+6736, U+6739, U+673b, U+673f, U+6744, U+6748, U+674c-674d, U+6753, U+6755, U+6762, U+6767, U+6769-676c, U+676e, U+6772-6773, U+6775, U+6777, U+677a-677d, U+6782-6783, U+6787, U+678a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.66.woff2) format('woff2');
  unicode-range: U+64f1-64f2, U+64f4, U+64f7-64f8, U+64fa, U+64fc, U+64fe-64ff, U+6503, U+6509, U+650f, U+6514, U+6518, U+651c-651e, U+6522-6525, U+652a-652c, U+652e, U+6530-6532, U+6534-6535, U+6537-6538, U+653a, U+653c-653d, U+6542, U+6549-654b, U+654d-654e, U+6553-6555, U+6557-6558, U+655d, U+6564, U+6569, U+656b, U+656d-656f, U+6571, U+6573, U+6575-6576, U+6578-657e, U+6581-6583, U+6585-6586, U+6589, U+658e-658f, U+6592-6593, U+6595-6596, U+659b, U+659d, U+659f-65a1, U+65a3, U+65ab-65ac, U+65b2, U+65b6-65b7, U+65ba-65bb, U+65be-65c0, U+65c2-65c4, U+65c6-65c8, U+65cc, U+65ce, U+65d0, U+65d2-65d3, U+65d6, U+65db, U+65dd, U+65e1, U+65e3, U+65ee-65f0, U+65f3-65f5, U+65f8, U+65fb-65fc, U+65fe-6600, U+6603, U+6607, U+6609, U+660b, U+6610-6611, U+6619-661a, U+661c-661e, U+6621, U+6624, U+6626, U+662a-662c, U+662e, U+6630;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.67.woff2) format('woff2');
  unicode-range: U+63b8-63bc, U+63be, U+63c0, U+63c3-63c4, U+63c6, U+63c8, U+63cd-63ce, U+63d1, U+63d6, U+63da-63db, U+63de, U+63e0, U+63e3, U+63e9-63ea, U+63ee, U+63f2, U+63f5-63fa, U+63fc, U+63fe-6400, U+6406, U+640b-640d, U+6410, U+6414, U+6416-6417, U+641b, U+6420-6423, U+6425-6428, U+642a, U+6431-6432, U+6434-6437, U+643d-6442, U+6445, U+6448, U+6450-6452, U+645b-645f, U+6462, U+6465, U+6468, U+646d, U+646f-6471, U+6473, U+6477, U+6479-647d, U+6482-6485, U+6487-6488, U+648c, U+6490, U+6493, U+6496-649a, U+649d, U+64a0, U+64a5, U+64ab-64ac, U+64b1-64b7, U+64b9-64bb, U+64be-64c1, U+64c4, U+64c7, U+64c9-64cb, U+64d0, U+64d4, U+64d7-64d8, U+64da, U+64de, U+64e0-64e2, U+64e4, U+64e9, U+64ec, U+64f0;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.68.woff2) format('woff2');
  unicode-range: U+622c, U+622e-6230, U+6232, U+6238, U+623b, U+623d-623e, U+6243, U+6246, U+6248-6249, U+624c, U+6255, U+6259, U+625e, U+6260-6261, U+6265-6266, U+626a, U+6271, U+627a, U+627c-627d, U+6283, U+6286, U+6289, U+628e, U+6294, U+629c, U+629e-629f, U+62a1, U+62a8, U+62ba-62bb, U+62bf, U+62c2, U+62c4, U+62c8, U+62ca-62cb, U+62cf, U+62d1, U+62d7, U+62d9-62da, U+62dd, U+62e0-62e1, U+62e3-62e4, U+62e7, U+62eb, U+62ee, U+62f0, U+62f4-62f6, U+6308, U+630a-630e, U+6310, U+6312-6313, U+6317, U+6319, U+631b, U+631d-631f, U+6322, U+6326, U+6329, U+6331-6332, U+6334-6337, U+6339, U+633b-633c, U+633e-6340, U+6343, U+6347, U+634b-634e, U+6354, U+635c-635d, U+6368-6369, U+636d, U+636f-6372, U+6376, U+637a-637b, U+637d, U+6382-6383, U+6387, U+638a-638b, U+638d-638e, U+6391, U+6393-6397, U+6399, U+639b, U+639e-639f, U+63a1, U+63a3-63a4, U+63ac-63ae, U+63b1-63b5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.69.woff2) format('woff2');
  unicode-range: U+60ed-60ee, U+60f0-60f1, U+60f4, U+60f6, U+60fa, U+6100, U+6106, U+610d-610e, U+6112, U+6114-6115, U+6119, U+611c, U+6120, U+6122-6123, U+6126, U+6128-6130, U+6136-6137, U+613a, U+613d-613e, U+6144, U+6146-6147, U+614a-614b, U+6151, U+6153, U+6158, U+615a, U+615c-615d, U+615f, U+6161, U+6163-6165, U+616b-616c, U+616e, U+6171, U+6173-6177, U+617e, U+6182, U+6187, U+618a, U+618d-618e, U+6190-6191, U+6194, U+6199-619a, U+619c, U+619f, U+61a1, U+61a3-61a4, U+61a7-61a9, U+61ab-61ad, U+61b2-61b3, U+61b5-61b7, U+61ba-61bb, U+61bf, U+61c3-61c4, U+61c6-61c7, U+61c9-61cb, U+61d0-61d1, U+61d3-61d4, U+61d7, U+61da, U+61df-61e1, U+61e6, U+61ee, U+61f0, U+61f2, U+61f6-61f8, U+61fa, U+61fc-61fe, U+6200, U+6206-6207, U+6209, U+620b, U+620d-620e, U+6213-6215, U+6217, U+6219, U+621b-6223, U+6225-6226;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.70.woff2) format('woff2');
  unicode-range: U+5fc4, U+5fc9, U+5fcb, U+5fce-5fd6, U+5fda-5fde, U+5fe1-5fe2, U+5fe4-5fe5, U+5fea, U+5fed-5fee, U+5ff1-5ff3, U+5ff6, U+5ff8, U+5ffb, U+5ffe-5fff, U+6002-6006, U+600a, U+600d, U+600f, U+6014, U+6019, U+601b, U+6020, U+6023, U+6026, U+6029, U+602b, U+602e-602f, U+6031, U+6033, U+6035, U+6039, U+603f, U+6041-6043, U+6046, U+604f, U+6053-6054, U+6058-605b, U+605d-605e, U+6060, U+6063, U+6065, U+6067, U+606a-606c, U+6075, U+6078-6079, U+607b, U+607d, U+607f, U+6083, U+6085-6087, U+608a, U+608c, U+608e-608f, U+6092-6093, U+6095-6097, U+609b-609d, U+60a2, U+60a7, U+60a9-60ab, U+60ad, U+60af-60b1, U+60b3-60b6, U+60b8, U+60bb, U+60bd-60be, U+60c0-60c3, U+60c6-60c9, U+60cb, U+60ce, U+60d3-60d4, U+60d7-60db, U+60dd, U+60e1-60e4, U+60e6, U+60ea, U+60ec;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.71.woff2) format('woff2');
  unicode-range: U+5e98, U+5e9b, U+5e9d, U+5ea0-5ea5, U+5ea8, U+5eab, U+5eaf, U+5eb3, U+5eb5-5eb6, U+5eb9, U+5ebe, U+5ec1-5ec3, U+5ec6, U+5ec8, U+5ecb-5ecc, U+5ed1-5ed2, U+5ed4, U+5ed9-5edb, U+5edd, U+5edf-5ee0, U+5ee2-5ee3, U+5ee8, U+5eea, U+5eec, U+5eef-5ef0, U+5ef3-5ef4, U+5ef8, U+5efb-5efc, U+5efe-5eff, U+5f01, U+5f07, U+5f0b-5f0e, U+5f10-5f12, U+5f14, U+5f1a, U+5f22, U+5f28-5f29, U+5f2c-5f2d, U+5f35-5f36, U+5f38, U+5f3b-5f43, U+5f45-5f4a, U+5f4c-5f4e, U+5f50, U+5f54, U+5f56-5f59, U+5f5b-5f5f, U+5f61, U+5f63, U+5f65, U+5f67-5f68, U+5f6b, U+5f6e-5f6f, U+5f72-5f78, U+5f7a, U+5f7e-5f7f, U+5f82-5f83, U+5f87, U+5f89-5f8a, U+5f8d, U+5f91, U+5f93, U+5f95, U+5f98-5f99, U+5f9c, U+5f9e, U+5fa0, U+5fa6-5fa9, U+5fac-5fad, U+5faf, U+5fb3-5fb5, U+5fb9, U+5fbc;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.72.woff2) format('woff2');
  unicode-range: U+5d26-5d27, U+5d2e-5d34, U+5d3c-5d3e, U+5d41-5d44, U+5d46-5d48, U+5d4a-5d4b, U+5d4e, U+5d50, U+5d52, U+5d55-5d58, U+5d5a-5d5d, U+5d68-5d69, U+5d6b-5d6c, U+5d6f, U+5d74, U+5d7f, U+5d82-5d89, U+5d8b-5d8c, U+5d8f, U+5d92-5d93, U+5d99, U+5d9d, U+5db2, U+5db6-5db7, U+5dba, U+5dbc-5dbd, U+5dc2-5dc3, U+5dc6-5dc7, U+5dc9, U+5dcc, U+5dd2, U+5dd4, U+5dd6-5dd8, U+5ddb-5ddc, U+5de3, U+5ded, U+5def, U+5df3, U+5df6, U+5dfa-5dfd, U+5dff-5e00, U+5e07, U+5e0f, U+5e11, U+5e13-5e14, U+5e19-5e1b, U+5e22, U+5e25, U+5e28, U+5e2a, U+5e2f-5e31, U+5e33-5e34, U+5e36, U+5e39-5e3c, U+5e3e, U+5e40, U+5e44, U+5e46-5e48, U+5e4c, U+5e4f, U+5e53-5e54, U+5e57, U+5e59, U+5e5b, U+5e5e-5e5f, U+5e61, U+5e63, U+5e6a-5e6b, U+5e75, U+5e77, U+5e79-5e7a, U+5e7e, U+5e80-5e81, U+5e83, U+5e85, U+5e87, U+5e8b, U+5e91-5e92, U+5e96;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.73.woff2) format('woff2');
  unicode-range: U+5bec, U+5bee-5bf0, U+5bf2-5bf3, U+5bf5-5bf6, U+5bfe, U+5c02-5c03, U+5c05, U+5c07-5c09, U+5c0b-5c0c, U+5c0e, U+5c10, U+5c12-5c13, U+5c15, U+5c17, U+5c19, U+5c1b-5c1c, U+5c1e-5c1f, U+5c22, U+5c25, U+5c28, U+5c2a-5c2b, U+5c2f-5c30, U+5c37, U+5c3b, U+5c43-5c44, U+5c46-5c47, U+5c4d, U+5c50, U+5c59, U+5c5b-5c5c, U+5c62-5c64, U+5c66, U+5c6c, U+5c6e, U+5c74, U+5c78-5c7e, U+5c80, U+5c83-5c84, U+5c88, U+5c8b-5c8d, U+5c91, U+5c94-5c96, U+5c98-5c99, U+5c9c, U+5c9e, U+5ca1-5ca3, U+5cab-5cac, U+5cb1, U+5cb5, U+5cb7, U+5cba, U+5cbd-5cbf, U+5cc1, U+5cc3-5cc4, U+5cc7, U+5ccb, U+5cd2, U+5cd8-5cd9, U+5cdf-5ce0, U+5ce3-5ce6, U+5ce8-5cea, U+5ced, U+5cef, U+5cf3-5cf4, U+5cf6, U+5cf8, U+5cfd, U+5d00-5d04, U+5d06, U+5d08, U+5d0b-5d0d, U+5d0f-5d13, U+5d15, U+5d17-5d1a, U+5d1d-5d22, U+5d24-5d25;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.74.woff2) format('woff2');
  unicode-range: U+5aa0, U+5aa3-5aa4, U+5aaa, U+5aae-5aaf, U+5ab1-5ab2, U+5ab4-5ab5, U+5ab7-5aba, U+5abd-5abf, U+5ac3-5ac4, U+5ac6-5ac8, U+5aca-5acb, U+5acd, U+5acf-5ad2, U+5ad4, U+5ad8-5ada, U+5adc, U+5adf-5ae2, U+5ae4, U+5ae6, U+5ae8, U+5aea-5aed, U+5af0-5af3, U+5af5, U+5af9-5afb, U+5afd, U+5b01, U+5b05, U+5b08, U+5b0b-5b0c, U+5b11, U+5b16-5b17, U+5b1b, U+5b21-5b22, U+5b24, U+5b27-5b2e, U+5b30, U+5b32, U+5b34, U+5b36-5b38, U+5b3e-5b40, U+5b43, U+5b45, U+5b4a-5b4b, U+5b51-5b53, U+5b56, U+5b5a-5b5b, U+5b62, U+5b65, U+5b67, U+5b6a-5b6e, U+5b70-5b71, U+5b73, U+5b7a-5b7b, U+5b7f-5b80, U+5b84, U+5b8d, U+5b91, U+5b93-5b95, U+5b9f, U+5ba5-5ba6, U+5bac, U+5bae, U+5bb8, U+5bc0, U+5bc3, U+5bcb, U+5bd0-5bd1, U+5bd4-5bd8, U+5bda-5bdc, U+5be2, U+5be4-5be5, U+5be7, U+5be9, U+5beb;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.75.woff2) format('woff2');
  unicode-range: U+596a, U+596c-596e, U+5977, U+597b-597c, U+5981, U+598f, U+5997-5998, U+599a, U+599c-599d, U+59a0-59a1, U+59a3-59a4, U+59a7, U+59aa-59ad, U+59af, U+59b2-59b3, U+59b5-59b6, U+59b8, U+59ba, U+59bd-59be, U+59c0-59c1, U+59c3-59c4, U+59c7-59ca, U+59cc-59cd, U+59cf, U+59d2, U+59d5-59d6, U+59d8-59d9, U+59db, U+59dd-59e0, U+59e2-59e7, U+59e9-59eb, U+59ee, U+59f1, U+59f3, U+59f5, U+59f7-59f9, U+59fd, U+5a06, U+5a08-5a0a, U+5a0c-5a0d, U+5a11-5a13, U+5a15-5a16, U+5a1a-5a1b, U+5a21-5a23, U+5a2d-5a2f, U+5a32, U+5a38, U+5a3c, U+5a3e-5a45, U+5a47, U+5a4a, U+5a4c-5a4d, U+5a4f-5a51, U+5a53, U+5a55-5a57, U+5a5e, U+5a60, U+5a62, U+5a65-5a67, U+5a6a, U+5a6c-5a6d, U+5a72-5a73, U+5a75-5a76, U+5a79-5a7c, U+5a81-5a84, U+5a8c, U+5a8e, U+5a93, U+5a96-5a97, U+5a9c, U+5a9e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.76.woff2) format('woff2');
  unicode-range: U+5820, U+5822-5823, U+5825-5826, U+582c, U+582f, U+5831, U+583a, U+583d, U+583f-5842, U+5844-5846, U+5848, U+584a, U+584d, U+5852, U+5857, U+5859-585a, U+585c-585d, U+5862, U+5868-5869, U+586c-586d, U+586f-5873, U+5875, U+5879, U+587d-587e, U+5880-5881, U+5888-588a, U+588d, U+5892, U+5896-5898, U+589a, U+589c-589d, U+58a0-58a1, U+58a3, U+58a6, U+58a9, U+58ab-58ae, U+58b0, U+58b3, U+58bb-58bf, U+58c2-58c3, U+58c5-58c8, U+58ca, U+58cc, U+58ce, U+58d1-58d3, U+58d5, U+58d8-58d9, U+58de-58df, U+58e2, U+58e9, U+58ec, U+58ef, U+58f1-58f2, U+58f5, U+58f7-58f8, U+58fa, U+58fd, U+5900, U+5902, U+5906, U+5908-590c, U+590e, U+5910, U+5914, U+5919, U+591b, U+591d-591e, U+5920, U+5922-5925, U+5928, U+592c-592d, U+592f, U+5932, U+5936, U+593c, U+593e, U+5940-5942, U+5944, U+594c-594d, U+5950, U+5953, U+5958, U+595a, U+5961, U+5966-5968;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.77.woff2) format('woff2');
  unicode-range: U+56f9, U+56fc, U+56ff-5700, U+5703-5704, U+5709-570a, U+570c-570d, U+570f, U+5712-5713, U+5718-5719, U+571c, U+571e, U+5725, U+5727, U+5729-572a, U+572c, U+572e-572f, U+5734-5735, U+5739, U+573b, U+5741, U+5743, U+5745, U+5749, U+574c-574d, U+575c, U+5763, U+5768-5769, U+576b, U+576d-576e, U+5770, U+5773, U+5775, U+5777, U+577b-577c, U+5785-5786, U+5788, U+578c, U+578e-578f, U+5793-5795, U+5799-57a1, U+57a3-57a4, U+57a6-57aa, U+57ac-57ad, U+57af-57b2, U+57b4-57b6, U+57b8-57b9, U+57bd-57bf, U+57c2, U+57c4-57c8, U+57cc-57cd, U+57cf, U+57d2, U+57d5-57de, U+57e1-57e2, U+57e4-57e5, U+57e7, U+57eb, U+57ed, U+57ef, U+57f4-57f8, U+57fc-57fd, U+5800-5801, U+5803, U+5805, U+5807, U+5809, U+580b-580e, U+5811, U+5814, U+5819, U+581b-581f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.78.woff2) format('woff2');
  unicode-range: U+55f5-55f7, U+55fb, U+55fe, U+5600-5601, U+5605-5606, U+5608, U+560c-560d, U+560f, U+5614, U+5616-5617, U+561a, U+561c, U+561e, U+5621-5625, U+5627, U+5629, U+562b-5630, U+5636, U+5638-563a, U+563c, U+5640-5642, U+5649, U+564c-5650, U+5653-5655, U+5657-565b, U+5660, U+5663-5664, U+5666, U+566b, U+566f-5671, U+5673-567c, U+567e, U+5684-5687, U+568c, U+568e-5693, U+5695, U+5697, U+569b-569c, U+569e-569f, U+56a1-56a2, U+56a4-56a9, U+56ac-56af, U+56b1, U+56b4, U+56b6-56b8, U+56bf, U+56c1-56c3, U+56c9, U+56cd, U+56d1, U+56d4, U+56d6-56d9, U+56dd, U+56df, U+56e1, U+56e3-56e6, U+56e8-56ec, U+56ee-56ef, U+56f1-56f3, U+56f5, U+56f7-56f8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.79.woff2) format('woff2');
  unicode-range: U+550f, U+5511-5514, U+5516-5517, U+5519, U+551b, U+551d-551e, U+5520, U+5522-5523, U+5526-5527, U+552a-552c, U+5530, U+5532-5535, U+5537-5538, U+553b-5541, U+5543-5544, U+5547-5549, U+554b, U+554d, U+5550, U+5553, U+5555-5558, U+555b-555f, U+5567-5569, U+556b-5572, U+5574-5577, U+557b-557c, U+557e-557f, U+5581, U+5583, U+5585-5586, U+5588, U+558b-558c, U+558e-5591, U+5593, U+5599-559a, U+559f, U+55a5-55a6, U+55a8-55ac, U+55ae, U+55b0-55b3, U+55b6, U+55b9-55ba, U+55bc-55be, U+55c4, U+55c6-55c7, U+55c9, U+55cc-55d2, U+55d4-55db, U+55dd-55df, U+55e1, U+55e3-55e6, U+55ea-55ee, U+55f0-55f3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.80.woff2) format('woff2');
  unicode-range: U+53e7-53e9, U+53f1, U+53f4-53f5, U+53fa-5400, U+5402, U+5405-5407, U+540b, U+540f, U+5412, U+5414, U+5416, U+5418-541a, U+541d, U+5420-5423, U+5425, U+5429-542a, U+542d-542e, U+5431-5433, U+5436, U+543d, U+543f, U+5442-5443, U+5449, U+544b-544c, U+544e, U+5451-5454, U+5456, U+5459, U+545b-545c, U+5461, U+5463-5464, U+546a-5472, U+5474, U+5476-5478, U+547a, U+547e-5484, U+5486, U+548a, U+548d-548e, U+5490-5491, U+5494, U+5497-5499, U+549b, U+549d, U+54a1-54a7, U+54a9, U+54ab, U+54ad, U+54b4-54b5, U+54b9, U+54bb, U+54be-54bf, U+54c2-54c3, U+54c9-54cc, U+54cf-54d0, U+54d3, U+54d5-54d6, U+54d9-54da, U+54dc-54de, U+54e2, U+54e7, U+54f3-54f4, U+54f8-54f9, U+54fd-54ff, U+5501, U+5504-5506, U+550c-550e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.81.woff2) format('woff2');
  unicode-range: U+5289, U+528b, U+528d, U+528f, U+5291-5293, U+529a, U+52a2, U+52a6-52a7, U+52ac-52ad, U+52af, U+52b4-52b5, U+52b9, U+52bb-52bc, U+52be, U+52c1, U+52c5, U+52ca, U+52cd, U+52d0, U+52d6-52d7, U+52d9, U+52db, U+52dd-52de, U+52e0, U+52e2-52e3, U+52e5, U+52e7-52f0, U+52f2-52f3, U+52f5-52f9, U+52fb-52fc, U+5302, U+5304, U+530b, U+530d, U+530f-5310, U+5315, U+531a, U+531c-531d, U+5321, U+5323, U+5326, U+532e-5331, U+5338, U+533c-533e, U+5344-5345, U+534b-534d, U+5350, U+5354, U+5358, U+535d-535f, U+5363, U+5368-5369, U+536c, U+536e-536f, U+5372, U+5379-537b, U+537d, U+538d-538e, U+5390, U+5393-5394, U+5396, U+539b-539d, U+53a0-53a1, U+53a3-53a5, U+53a9, U+53ad-53ae, U+53b0, U+53b2-53b3, U+53b5-53b8, U+53bc, U+53be, U+53c1, U+53c3-53c7, U+53ce-53cf, U+53d2-53d3, U+53d5, U+53da, U+53de-53df, U+53e1-53e2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.82.woff2) format('woff2');
  unicode-range: U+5104, U+5106-5107, U+5109-510b, U+510d, U+510f-5110, U+5113, U+5115, U+5117-5118, U+511a-511c, U+511e-511f, U+5121, U+5128, U+512b-512d, U+5131-5135, U+5137-5139, U+513c, U+5140, U+5142, U+5147, U+514c, U+514e-5150, U+5155-5158, U+5162, U+5169, U+5172, U+517f, U+5181-5184, U+5186-5187, U+518b, U+518f, U+5191, U+5195-5197, U+519a, U+51a2-51a3, U+51a6-51ab, U+51ad-51ae, U+51b1, U+51b4, U+51bc-51bd, U+51bf, U+51c3, U+51c7-51c8, U+51ca-51cb, U+51cd-51ce, U+51d4, U+51d6, U+51db-51dc, U+51e6, U+51e8-51eb, U+51f1, U+51f5, U+51fc, U+51ff, U+5202, U+5205, U+5208, U+520b, U+520d-520e, U+5215-5216, U+5228, U+522a, U+522c-522d, U+5233, U+523c-523d, U+523f-5240, U+5245, U+5247, U+5249, U+524b-524c, U+524e, U+5250, U+525b-525f, U+5261, U+5263-5264, U+5270, U+5273, U+5275, U+5277, U+527d, U+527f, U+5281-5285, U+5287;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.83.woff2) format('woff2');
  unicode-range: U+4fd1, U+4fd3, U+4fda-4fdc, U+4fdf-4fe0, U+4fe2-4fe4, U+4fe6, U+4fe8, U+4feb-4fed, U+4ff3, U+4ff5-4ff6, U+4ff8, U+4ffe, U+5001, U+5005-5006, U+5009, U+500c, U+500f, U+5013-5018, U+501b-501e, U+5022-5025, U+5027-5028, U+502b-502e, U+5030, U+5033-5034, U+5036-5039, U+503b, U+5041-5043, U+5045-5046, U+5048-504a, U+504c-504e, U+5051, U+5053, U+5055-5057, U+505b, U+505e, U+5060, U+5062-5063, U+5067, U+506a, U+506c, U+5070-5072, U+5074-5075, U+5078, U+507b, U+507d-507e, U+5080, U+5088-5089, U+5091-5092, U+5095, U+5097-509e, U+50a2-50a3, U+50a5-50a7, U+50a9, U+50ad, U+50b3, U+50b5, U+50b7, U+50ba, U+50be, U+50c4-50c5, U+50c7, U+50ca, U+50cd, U+50d1, U+50d5-50d6, U+50da, U+50de, U+50e5-50e6, U+50ec-50ee, U+50f0-50f1, U+50f3, U+50f9-50fb, U+50fe-5102;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.84.woff2) format('woff2');
  unicode-range: U+4ea3, U+4ea5, U+4eb0-4eb1, U+4eb3-4eb6, U+4eb8-4eb9, U+4ebb-4ebe, U+4ec2-4ec4, U+4ec8-4ec9, U+4ecc, U+4ecf-4ed0, U+4ed2, U+4eda-4edb, U+4edd-4ee1, U+4ee6-4ee9, U+4eeb, U+4eee-4eef, U+4ef3-4ef5, U+4ef8-4efa, U+4efc, U+4f00, U+4f03-4f05, U+4f08-4f09, U+4f0b, U+4f0e, U+4f12-4f13, U+4f15, U+4f1b, U+4f1d, U+4f21-4f22, U+4f25, U+4f27-4f29, U+4f2b-4f2e, U+4f31-4f33, U+4f36-4f37, U+4f39, U+4f3e, U+4f40-4f41, U+4f43, U+4f47-4f49, U+4f54, U+4f57-4f58, U+4f5d-4f5e, U+4f61-4f62, U+4f64-4f65, U+4f67, U+4f6a, U+4f6e-4f6f, U+4f72, U+4f74-4f7e, U+4f80-4f82, U+4f84, U+4f89-4f8a, U+4f8e-4f98, U+4f9e, U+4fa1, U+4fa5, U+4fa9-4faa, U+4fac, U+4fb3, U+4fb6-4fb8, U+4fbd, U+4fc2, U+4fc5-4fc6, U+4fcd-4fce, U+4fd0;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.85.woff2) format('woff2');
  unicode-range: U+3129, U+3131, U+3134, U+3137, U+3139, U+3141-3142, U+3145, U+3147-3148, U+314b, U+314d-314e, U+315c, U+3160-3161, U+3163-3164, U+3186, U+318d, U+3192, U+3196-3198, U+319e-319f, U+3220-3229, U+3231, U+3268, U+3297, U+3299, U+32a3, U+338e-338f, U+3395, U+339c-339e, U+33c4, U+33d1-33d2, U+33d5, U+3434, U+34dc, U+34ee, U+353e, U+355d, U+3566, U+3575, U+3592, U+35a0-35a1, U+35ad, U+35ce, U+36a2, U+36ab, U+38a8, U+3dab, U+3de7, U+3deb, U+3e1a, U+3f1b, U+3f6d, U+4495, U+4723, U+48fa, U+4ca3, U+4db6-4dbf, U+4e02, U+4e04-4e06, U+4e0c, U+4e0f, U+4e15, U+4e17, U+4e1f-4e21, U+4e26, U+4e29, U+4e2c, U+4e2f, U+4e31, U+4e35, U+4e37, U+4e3c, U+4e3f-4e42, U+4e44, U+4e46-4e47, U+4e57, U+4e5a-4e5c, U+4e64-4e65, U+4e67, U+4e69, U+4e6d, U+4e78, U+4e7f-4e82, U+4e85, U+4e87, U+4e8a, U+4e8d, U+4e93, U+4e96, U+4e98-4e99, U+4e9c, U+4e9e-4ea0, U+4ea2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.86.woff2) format('woff2');
  unicode-range: U+279f-27a2, U+27a4-27a5, U+27a8, U+27b0, U+27b2-27b3, U+27b9, U+27e8-27e9, U+27f6, U+2800, U+28ec, U+2913, U+2921-2922, U+2934-2935, U+2a2f, U+2b05-2b07, U+2b50, U+2b55, U+2bc5-2bc6, U+2e1c-2e1d, U+2ebb, U+2f00, U+2f08, U+2f24, U+2f2d, U+2f2f-2f30, U+2f3c, U+2f45, U+2f63-2f64, U+2f74, U+2f83, U+2f8f, U+2fbc, U+3003, U+3005-3007, U+3012-3013, U+301c-301e, U+3021, U+3023-3024, U+3030, U+3034-3035, U+3041, U+3043, U+3045, U+3047, U+3049, U+3056, U+3058, U+305c, U+305e, U+3062, U+306c, U+3074, U+3077, U+307a, U+307c-307d, U+3080, U+308e, U+3090-3091, U+3099-309b, U+309d-309e, U+30a5, U+30bc, U+30be, U+30c2, U+30c5, U+30cc, U+30d8, U+30e2, U+30e8, U+30ee, U+30f0-30f2, U+30f4-30f6, U+30fd-30fe, U+3105-3126, U+3128;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.87.woff2) format('woff2');
  unicode-range: U+2651-2655, U+2658, U+265a-265b, U+265d-265e, U+2660-266d, U+266f, U+267b, U+2688, U+2693-2696, U+2698-2699, U+269c, U+26a0-26a1, U+26a4, U+26aa-26ab, U+26bd-26be, U+26c4-26c5, U+26d4, U+26e9, U+26f0-26f1, U+26f3, U+26f5, U+26fd, U+2702, U+2704-2706, U+2708-270f, U+2712-2718, U+271a-271b, U+271d, U+271f, U+2721, U+2724-2730, U+2732-2734, U+273a, U+273d-2744, U+2747-2749, U+274c, U+274e-274f, U+2753-2757, U+275b, U+275d-275e, U+2763, U+2765-2767, U+276e-276f, U+2776-277e, U+2780-2782, U+278a-278c, U+278e, U+2794-2796, U+279c;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.88.woff2) format('woff2');
  unicode-range: U+2550-2551, U+2554, U+2557, U+255a-255b, U+255d, U+255f-2560, U+2562-2563, U+2565-2567, U+2569-256a, U+256c-2572, U+2579, U+2580-2595, U+25a1, U+25a3, U+25a9-25ad, U+25b0, U+25b3-25bb, U+25bd-25c2, U+25c4, U+25c8-25cb, U+25cd, U+25d0-25d1, U+25d4-25d5, U+25d8, U+25dc-25e6, U+25ea-25eb, U+25ef, U+25fe, U+2600-2604, U+2609, U+260e-260f, U+2611, U+2614-2615, U+2618, U+261a-2620, U+2622-2623, U+262a, U+262d-2630, U+2639-2640, U+2642, U+2648-2650;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.89.woff2) format('woff2');
  unicode-range: U+23f0, U+23f3, U+2445, U+2449, U+2465-2471, U+2474-249b, U+24b8, U+24c2, U+24c7, U+24c9, U+24d0, U+24d2, U+24d4, U+24d8, U+24dd-24de, U+24e3, U+24e6, U+24e8, U+2500-2509, U+250b-2526, U+2528-2534, U+2536-2537, U+253b-2548, U+254a-254b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.90.woff2) format('woff2');
  unicode-range: U+207c-2083, U+208c-208e, U+2092, U+20a6, U+20a8-20ad, U+20af, U+20b1, U+20b4-20b5, U+20b8-20ba, U+20bd, U+20db, U+20dd, U+20e0, U+20e3, U+2105, U+2109, U+2113, U+2116-2117, U+2120-2121, U+2126, U+212b, U+2133, U+2139, U+2194, U+2196-2199, U+21a0, U+21a9-21aa, U+21af, U+21b3, U+21b5, U+21ba-21bb, U+21c4, U+21ca, U+21cc, U+21d0-21d4, U+21e1, U+21e6-21e9, U+2200, U+2202, U+2205-2208, U+220f, U+2211-2212, U+2215, U+2217-2219, U+221d-2220, U+2223, U+2225, U+2227-222b, U+222e, U+2234-2237, U+223c-223d, U+2248, U+224c, U+2252, U+2256, U+2260-2261, U+2266-2267, U+226a-226b, U+226e-226f, U+2282-2283, U+2295, U+2297, U+2299, U+22a5, U+22b0-22b1, U+22b9, U+22bf, U+22c5-22c6, U+22ef, U+2304, U+2307, U+230b, U+2312-2314, U+2318, U+231a-231b, U+2323, U+239b, U+239d-239e, U+23a0, U+23e9;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.91.woff2) format('woff2');
  unicode-range: U+1d34-1d35, U+1d38-1d3a, U+1d3c, U+1d3f-1d40, U+1d49, U+1d4e-1d4f, U+1d52, U+1d55, U+1d5b, U+1d5e, U+1d9c, U+1da0, U+1dc4-1dc5, U+1e69, U+1e73, U+1ea0-1ea9, U+1eab-1ead, U+1eaf, U+1eb1, U+1eb3, U+1eb5, U+1eb7, U+1eb9, U+1ebb, U+1ebd-1ebe, U+1ec0-1ec3, U+1ec5-1ec6, U+1ec9-1ecd, U+1ecf-1ed3, U+1ed5, U+1ed7-1edf, U+1ee1, U+1ee3, U+1ee5-1eeb, U+1eed, U+1eef-1ef1, U+1ef3, U+1ef7, U+1ef9, U+1f62, U+1f7b, U+2001-2002, U+2004-2006, U+2009-200a, U+200c-2012, U+2015-2016, U+201a, U+201e-2021, U+2023, U+2025, U+2028, U+202a-202d, U+202f-2030, U+2032-2033, U+2035, U+2038, U+203c, U+203e-203f, U+2043-2044, U+2049, U+204d-204e, U+2060-2061, U+2070, U+2074-2078, U+207a-207b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.97.woff2) format('woff2');
  unicode-range: U+2ae-2b3, U+2b5-2bf, U+2c2-2c3, U+2c6-2d1, U+2d8-2da, U+2dc, U+2e1-2e3, U+2e5, U+2eb, U+2ee-2f0, U+2f2-2f7, U+2f9-2ff, U+302-30d, U+311, U+31b, U+321-325, U+327-329, U+32b-32c, U+32e-32f, U+331-339, U+33c-33d, U+33f, U+348, U+352, U+35c, U+35e-35f, U+361, U+363, U+368, U+36c, U+36f, U+530-540, U+55d-55e, U+561, U+563, U+565, U+56b, U+56e-579;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.98.woff2) format('woff2');
  unicode-range: U+176-17f, U+192, U+194, U+19a-19b, U+19d, U+1a0-1a1, U+1a3-1a4, U+1aa, U+1ac-1ad, U+1af-1bf, U+1d2, U+1d4, U+1d6, U+1d8, U+1da, U+1dc, U+1e3, U+1e7, U+1e9, U+1ee, U+1f0-1f1, U+1f3, U+1f5-1ff, U+219-21b, U+221, U+223-226, U+228, U+22b, U+22f, U+231, U+234-237, U+23a-23b, U+23d, U+250-252, U+254-255, U+259-25e, U+261-263, U+265, U+268, U+26a-26b, U+26f-277, U+279, U+27b-280, U+282-283, U+285, U+28a, U+28c, U+28f, U+292, U+294-296, U+298-29a, U+29c, U+29f, U+2a1-2a4, U+2a6-2a7, U+2a9, U+2ab;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.99.woff2) format('woff2');
  unicode-range: U+a1-a4, U+a6-a8, U+aa, U+ac, U+af, U+b1, U+b3-b6, U+b8-ba, U+bc-d6, U+d8-de, U+e6, U+eb, U+ee-f0, U+f5, U+f7-f8, U+fb, U+fd-100, U+102, U+104-107, U+10d, U+10f-112, U+115, U+117, U+119, U+11b, U+11e-11f, U+121, U+123, U+125-127, U+129-12a, U+12d, U+12f-13f, U+141-142, U+144, U+146, U+14b-14c, U+14f-153, U+158-15b, U+15e-160, U+163-165, U+168-16a, U+16d-175;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.100.woff2) format('woff2');
  unicode-range: U+221a, U+2264, U+2464, U+25a0, U+3008, U+4e10, U+512a, U+5152, U+5201, U+5241, U+5340, U+5352, U+549a, U+54b2, U+54c6, U+54d7, U+54e1, U+5509, U+55c5, U+5618, U+5716, U+576f, U+5784, U+57a2, U+589f, U+5a20, U+5a25, U+5a29, U+5a34, U+5a7f, U+5ad6, U+5b09, U+5b5c, U+5bc7, U+5be6, U+5c27, U+5d2d, U+5dcd, U+5f1b, U+5f37, U+604d, U+6055, U+6073, U+60eb, U+61ff, U+62ce, U+62ed, U+6345, U+6390, U+63b0, U+63b7, U+64ae, U+64c2, U+64d2, U+6556, U+663c, U+667e, U+66d9, U+66f8, U+6756, U+6789, U+689d, U+68f1, U+695e, U+6975, U+6a1f, U+6b0a, U+6b61, U+6b87, U+6c5d, U+6c7e, U+6c92, U+6d31, U+6df9, U+6e0d, U+6e2d, U+6f31, U+6f3e, U+70b3, U+70bd, U+70ca, U+70e8, U+725f, U+733f, U+7396, U+739f, U+7459, U+74a7, U+75a1, U+75f0, U+76cf, U+76d4, U+7729, U+77aa, U+77b0, U+77e3, U+780c, U+78d5, U+7941, U+7977, U+797a, U+79c3, U+7a20, U+7a92, U+7b71, U+7bf1, U+7c9f, U+7eb6, U+7eca, U+7ef7, U+7f07, U+7f09, U+7f15, U+7f81, U+7fb9, U+8038, U+8098, U+80b4, U+8110, U+814b-814c, U+816e, U+818a, U+8205, U+8235, U+828b, U+82a5, U+82b7, U+82d4, U+82db, U+82df, U+8317, U+8338, U+8385-8386, U+83c1, U+83cf, U+8537, U+853b, U+854a, U+8715, U+8783, U+892a, U+8a71, U+8bb3, U+8d2e, U+8d58, U+8dbe, U+8f67, U+8fab, U+8fc4, U+8fe6, U+9023, U+9084, U+9091, U+916a, U+91c9, U+91dc, U+94b3, U+9502, U+9523, U+9551, U+956f, U+960e, U+962a, U+962e, U+9647, U+96f3, U+9739, U+97a0, U+97ed, U+983b, U+985e, U+988a, U+99ac, U+9a6f, U+9a87, U+9a8b, U+9ab7, U+9abc, U+9ac5, U+9e25, U+e608, U+e621, U+ff06, U+ff14-ff16;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.101.woff2) format('woff2');
  unicode-range: U+161, U+926, U+928, U+939, U+93f-940, U+94d, U+e17, U+e22, U+e44, U+25c7, U+25ce, U+2764, U+3009, U+3016-3017, U+4e4d, U+4e53, U+4f5a, U+4f70, U+4fae, U+4fd8, U+4ffa, U+5011, U+501a, U+51c4, U+5225, U+547b, U+5495, U+54e8, U+54ee, U+5594, U+55d3, U+55dc, U+55fd, U+560e, U+565c, U+5662, U+5669, U+566c, U+56bc, U+5742, U+5824, U+5834, U+598a, U+5992, U+59a9, U+5a04, U+5ac9, U+5b75, U+5b7d, U+5bc5, U+5c49, U+5c90, U+5e1c, U+5e27, U+5e2b, U+5e37, U+5e90, U+618b, U+61f5, U+620a, U+620c, U+6273, U+62c7, U+62f7, U+6320, U+6342, U+6401-6402, U+6413, U+6512, U+655b, U+65a7, U+65f1, U+65f7, U+665f, U+6687, U+66a7, U+673d, U+67b8, U+6854, U+68d8, U+68fa, U+696d, U+6a02, U+6a0a, U+6a80, U+6b7c, U+6bd9, U+6c2e, U+6c76, U+6cf8, U+6d4a, U+6d85, U+6e24, U+6e32, U+6ec7, U+6f88, U+700f, U+701a, U+7078, U+707c, U+70ac, U+70c1, U+72e9, U+7409, U+7422, U+745a, U+7480, U+74a8, U+752b, U+7574, U+7656, U+7699, U+7737, U+785d, U+78be, U+79b9, U+7a3d, U+7a91, U+7a9f, U+7ae3, U+7b77, U+7c3f, U+7d1a, U+7d50, U+7d93, U+8042, U+808b, U+8236, U+82b8-82b9, U+82ef, U+8309, U+836b, U+83ef, U+8431, U+85c9, U+865e, U+868c, U+8759, U+8760, U+8845, U+89ba, U+8a2a, U+8aaa, U+8c41, U+8d2c, U+8d4e, U+8e66, U+8e6d, U+8eaf, U+902e, U+914b, U+916e, U+919b, U+949b, U+94a0, U+94b0, U+9541-9542, U+9556, U+95eb, U+95f5, U+964b, U+968b, U+96cc-96cd, U+96cf, U+9713, U+9890, U+98a8, U+9985, U+9992, U+9a6d, U+9a81, U+9a86, U+9ab8, U+9ca4, U+e606-e607, U+e60a, U+e60c, U+e60e, U+fe0f, U+ff02, U+ff1e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.102.woff2) format('woff2');
  unicode-range: U+10c, U+627-629, U+639, U+644, U+64a, U+203b, U+2265, U+2463, U+2573, U+25b2, U+3448-3449, U+4e1e, U+4e5e, U+4f3a, U+4f5f, U+4fea, U+5026, U+508d, U+516e, U+5189, U+5254, U+5288, U+52d8, U+52fa, U+5306, U+5308, U+5364, U+5384, U+53ed, U+543c, U+5450, U+5455, U+5466, U+54c4, U+5578, U+55a7, U+561f, U+5631, U+572d, U+575f, U+57ae, U+57e0, U+5830, U+594e, U+5984, U+5993, U+5bdd, U+5c0d, U+5c7f, U+5c82, U+5e62, U+5ed3, U+5f08, U+607a, U+60bc, U+625b, U+6292, U+62e2, U+6363, U+6467, U+6714, U+675e, U+6771, U+67a2, U+67ff, U+6805, U+68a7, U+68e0, U+6930, U+6986, U+69a8, U+69df, U+6a44, U+6a5f, U+6c13, U+6c1f, U+6c22, U+6c2f, U+6c40, U+6c81, U+6c9b, U+6ca5, U+6da4, U+6df3, U+6e85, U+6eba, U+6ed5, U+6f13, U+6f33, U+6f62, U+715e, U+72c4, U+73d1, U+7405, U+7487, U+7578, U+75a4, U+75eb, U+7693, U+7738, U+7741, U+776b, U+7792, U+77a7, U+77a9, U+77b3, U+788c, U+7984, U+79a7, U+79e4, U+7a1a, U+7a57, U+7aa6, U+7b0b, U+7b5d, U+7c27, U+7c7d, U+7caa, U+7cd9, U+7cef, U+7eda, U+7ede, U+7f24, U+803f, U+8046, U+80fa, U+81fb, U+8207, U+8258, U+8335, U+8339, U+8354, U+840e, U+85b0, U+85fb, U+8695, U+86aa, U+8717, U+8749, U+874c, U+8996, U+89bd, U+89c5, U+8bdb, U+8bf5, U+8c5a, U+8cec, U+8d3f, U+8d9f, U+8e44, U+8fed, U+9005, U+9019, U+9082, U+90af, U+90dd, U+90e1, U+90f8, U+916f, U+9176, U+949e, U+94a7, U+94c2, U+9525, U+9580, U+95dc, U+96e2, U+96fb, U+9704, U+9a7c, U+9a7f, U+9b41, U+9ca8, U+9cc4, U+9cde, U+9e92, U+9ede, U+9f9a, U+e60b, U+e610, U+ff10, U+ff13, U+ff3b, U+ff3d, U+f012b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.103.woff2) format('woff2');
  unicode-range: U+60, U+631, U+2606, U+3014-3015, U+309c, U+33a1, U+4e52, U+4ec6, U+4f86, U+4f8d, U+4fde, U+4fef, U+500b, U+502a, U+515c, U+518a, U+51a5, U+51f3, U+5243, U+52c9, U+52d5, U+53a2, U+53ee, U+54ce, U+54fa, U+54fc, U+5580, U+5587, U+563f, U+56da, U+5792, U+5815, U+5960, U+59d7, U+5b78, U+5b9b, U+5be1, U+5c4e, U+5c51, U+5c6f, U+5c9a, U+5cfb, U+5d16, U+5ed6, U+5f27, U+5f6a, U+609a, U+60df, U+6168, U+61c8, U+6236, U+62f1, U+62fd, U+631a, U+6328, U+632b, U+6346, U+638f, U+63a0, U+63c9, U+655e, U+6590, U+6615, U+6627, U+66ae, U+66e6, U+66f0, U+67da, U+67ec, U+6813, U+6816, U+6869, U+6893, U+68ad, U+68f5, U+6977, U+6984, U+69db, U+6b72, U+6bb7, U+6ce3, U+6cfb, U+6d47, U+6da1, U+6dc4, U+6e43, U+6eaf, U+6eff, U+6f8e, U+7011, U+7063, U+7076, U+7096, U+70ba, U+70db, U+70ef, U+7119-711a, U+7172, U+718f, U+7194, U+727a, U+72d9, U+72ed, U+7325, U+73ae, U+73ba, U+73c0, U+73fe, U+7410, U+7426, U+7455, U+7554, U+7576, U+75ae, U+75b9, U+762b, U+766b, U+7682, U+7750, U+7779, U+7784, U+77eb, U+77ee, U+78f7, U+79e9, U+7a79, U+7b1b, U+7b28, U+7bf7, U+7db2, U+7ec5, U+7eee, U+7f14, U+7f1a, U+7fe1, U+8087, U+809b, U+81b3, U+8231, U+830e, U+835f, U+83e9, U+849c, U+851a, U+868a, U+8718, U+874e, U+8822, U+8910, U+8944, U+8a3b, U+8bb6, U+8bbc, U+8e72, U+8f9c, U+900d, U+904b, U+904e, U+9063, U+90a2, U+90b9, U+9119, U+94f2, U+952f, U+9576-9577, U+9593, U+95f8, U+961c, U+969b, U+96a7, U+96c1, U+9716, U+9761, U+97ad, U+97e7, U+98a4, U+997a, U+9a73, U+9b44, U+9e3d, U+9ecf, U+9ed4, U+ff11-ff12, U+fffd;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.104.woff2) format('woff2');
  unicode-range: U+2003, U+2193, U+2462, U+4e19, U+4e2b, U+4e36, U+4ea8, U+4ed1, U+4ed7, U+4f51, U+4f63, U+4f83, U+50e7, U+5112, U+5167, U+51a4, U+51b6, U+5239, U+5265, U+532a, U+5351, U+537f, U+5401, U+548f, U+5492, U+54af, U+54b3, U+54bd, U+54d1, U+54df, U+554f, U+5564, U+5598, U+5632, U+56a3, U+56e7, U+574e, U+575d-575e, U+57d4, U+584c, U+58e4, U+5937, U+5955, U+5a05, U+5a1f, U+5a49, U+5ac2, U+5c39, U+5c61, U+5d0e, U+5de9, U+5e9a, U+5eb8, U+5f0a, U+5f13, U+5f6c, U+5f8c, U+603c, U+608d, U+611b, U+6127, U+62a0, U+62d0, U+634f, U+635e, U+63fd, U+6577, U+658b, U+65bc, U+660a, U+6643, U+6656, U+6703, U+6760, U+67af, U+67c4, U+67e0, U+6817, U+68cd, U+690e, U+6960, U+69b4, U+6a71, U+6aac, U+6b67, U+6bb4, U+6c55, U+6c70, U+6c82, U+6ca6, U+6cb8, U+6cbe, U+6ede, U+6ee5, U+6f4d, U+6f84, U+6f9c, U+7115, U+7121, U+722a, U+7261, U+7272, U+7280, U+72f8, U+7504, U+754f, U+75d8, U+767c, U+76ef, U+778e, U+77bb, U+77f6, U+786b, U+78b1, U+7948, U+7985, U+79be, U+7a83, U+7a8d, U+7eac, U+7eef, U+7ef8, U+7efd, U+7f00, U+803d, U+8086, U+810a, U+8165, U+819d, U+81a8, U+8214, U+829c, U+831c, U+832b, U+8367, U+83e0, U+83f1, U+8403, U+846b, U+8475, U+84b2, U+8513, U+8574, U+85af, U+86d9, U+86db, U+8acb, U+8bbd, U+8be0-8be1, U+8c0e, U+8d29, U+8d50, U+8d63, U+8f7f, U+9032, U+9042, U+90b1, U+90b5, U+9165, U+9175, U+94a6, U+94c5, U+950c, U+9610, U+9631, U+9699, U+973e, U+978d, U+97ec, U+97f6, U+984c, U+987d, U+9882, U+9965, U+996a, U+9972, U+9a8f, U+9ad3, U+9ae6, U+9cb8, U+9edb, U+e600, U+e60f, U+e611, U+ff05, U+ff0b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.105.woff2) format('woff2');
  unicode-range: U+5e, U+2190, U+250a, U+25bc, U+25cf, U+4e56, U+4ea9, U+4f3d, U+4f6c, U+4f88, U+4fa8, U+4fcf, U+5029, U+5188, U+51f9, U+5203, U+524a, U+5256, U+529d, U+5375, U+53db, U+541f, U+5435, U+5457, U+548b, U+54c7, U+54d4, U+54e9, U+556a, U+5589, U+55bb, U+55e8, U+55ef, U+563b, U+566a, U+576a, U+58f9, U+598d, U+599e, U+59a8, U+5a9b, U+5ae3, U+5bb0, U+5bde, U+5c4c, U+5c60, U+5d1b, U+5deb, U+5df7, U+5e18, U+5f26, U+5f64, U+601c, U+6084, U+60e9, U+614c, U+6208, U+621a, U+6233, U+6254, U+62d8, U+62e6, U+62ef, U+6323, U+632a, U+633d, U+6361, U+6405, U+640f, U+6614, U+6642, U+6657, U+67a3, U+6808, U+683d, U+6850, U+6897, U+68b3, U+68b5, U+68d5, U+6a58, U+6b47, U+6b6a, U+6c28, U+6c90, U+6ca7, U+6cf5, U+6d51, U+6da9, U+6dc7, U+6dd1, U+6e0a, U+6e5b, U+6e9c, U+6f47, U+6f6d, U+70ad, U+70f9, U+710a, U+7130, U+71ac, U+745f, U+7476, U+7490, U+7529, U+7538, U+75d2, U+7696, U+76b1, U+76fc, U+777f, U+77dc, U+789f, U+795b, U+79bd, U+79c9, U+7a3b, U+7a46, U+7aa5, U+7ad6, U+7ca5, U+7cb9, U+7cdf, U+7d6e, U+7f06, U+7f38, U+7fa1, U+7fc1, U+8015, U+803b, U+80a2, U+80aa, U+8116, U+813e, U+82bd, U+8305, U+8328, U+8346, U+846c, U+8549, U+859b, U+8611, U+8680, U+87f9, U+884d, U+8877, U+888d, U+88d4, U+898b, U+8a79, U+8a93, U+8c05, U+8c0d, U+8c26, U+8d1e, U+8d31, U+8d81, U+8e22, U+8e81, U+8f90, U+8f96, U+90ca, U+916c, U+917f, U+9187, U+918b, U+9499, U+94a9, U+9524, U+9540, U+958b, U+9600, U+9640, U+96b6, U+96c7, U+96ef, U+98d9, U+9976, U+997f, U+9a74, U+9a84, U+9c8d, U+9e26, U+9e9f, U+ad6d, U+c5b4, U+d55c, U+ff0f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.106.woff2) format('woff2');
  unicode-range: U+b0, U+2191, U+2460-2461, U+25c6, U+300e-300f, U+4e1b, U+4e7e, U+4ed5, U+4ef2, U+4f10, U+4f1e, U+4f50, U+4fa6, U+4faf, U+5021, U+50f5, U+5179, U+5180, U+51d1, U+522e, U+52a3, U+52c3, U+52cb, U+5300, U+5319, U+5320, U+5349, U+5395, U+53d9, U+541e, U+5428, U+543e, U+54b1, U+54c0, U+54d2, U+570b, U+5858, U+58f6, U+5974, U+59a5, U+59e8, U+59ec, U+5a36, U+5a9a, U+5ab3, U+5b99, U+5baa, U+5ce1, U+5d14, U+5d4c, U+5dc5, U+5de2, U+5e99, U+5e9e, U+5f18, U+5f66, U+5f70, U+6070, U+60d5, U+60e7, U+6101, U+611a, U+61be, U+6241, U+6252, U+626f, U+6296, U+62bc, U+62cc, U+6380, U+63a9, U+644a, U+6454, U+64a9, U+64b8, U+6500, U+6572, U+65a5, U+65a9, U+65ec, U+660f, U+6749, U+6795, U+67ab, U+68da, U+6912, U+6bbf, U+6bef, U+6cab, U+6cca, U+6ccc, U+6cfc, U+6d3d, U+6d78, U+6dee, U+6e17, U+6e34, U+6e83, U+6ea2, U+6eb6, U+6f20, U+6fa1, U+707f, U+70d8, U+70eb, U+714c, U+714e, U+7235, U+7239, U+73ca, U+743c, U+745c, U+7624, U+763e, U+76f2, U+77db, U+77e9, U+780d, U+7838, U+7845, U+78ca, U+796d, U+7a84, U+7aed, U+7b3c, U+7eb2, U+7f05, U+7f20, U+7f34, U+7f62, U+7fc5, U+7fd8, U+7ff0, U+800d, U+8036, U+80ba, U+80be, U+80c0-80c1, U+8155, U+817a, U+8180, U+81e3, U+8206, U+8247, U+8270, U+8299, U+82ad, U+8304, U+8393, U+83b9, U+840d, U+8427, U+8469, U+8471, U+84c4, U+84ec, U+853d, U+8681-8682, U+8721, U+8854, U+88d5, U+88f9, U+8bc0, U+8c0a, U+8c29, U+8c2d, U+8d41, U+8dea, U+8eb2, U+8f9f, U+903b, U+903e, U+9102, U+9493, U+94a5, U+94f8, U+95f7, U+9706, U+9709, U+9774, U+98a0, U+9e64, U+9f9f, U+e603;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.107.woff2) format('woff2');
  unicode-range: U+200b, U+2103, U+4e18, U+4e27-4e28, U+4e38, U+4e59, U+4e8f, U+4ead, U+4ec7, U+4fe9, U+503a, U+5085, U+5146, U+51af, U+51f8, U+52ab, U+5339, U+535c, U+5378, U+538c, U+5398, U+53f9, U+5415, U+5475, U+54aa, U+54ac, U+54b8, U+5582, U+5760, U+5764, U+57cb, U+5835, U+5885, U+5951, U+5983, U+59da, U+5a77, U+5b5d, U+5b5f, U+5bb5, U+5bc2, U+5be8, U+5bfa, U+5c2c, U+5c34, U+5c41, U+5c48, U+5c65, U+5cad, U+5e06, U+5e42, U+5ef7, U+5f17, U+5f25, U+5f6d, U+5f79, U+6028, U+6064, U+6068, U+606d, U+607c, U+6094, U+6109, U+6124, U+6247, U+626d, U+6291, U+629a, U+62ac, U+62b9, U+62fe, U+6324, U+6349, U+6367, U+6398, U+6495, U+64a4, U+64b0, U+64bc, U+64ce, U+658c, U+65ed, U+6602, U+6674, U+6691, U+66a8, U+674f, U+679a, U+67ef, U+67f4, U+680b, U+6876, U+68a8, U+6a59, U+6a61, U+6b20, U+6bc5, U+6d12, U+6d46, U+6d8c, U+6dc0, U+6e14, U+6e23, U+6f06, U+7164, U+716e, U+7199, U+71e5, U+72ac, U+742a, U+755c, U+75ab, U+75b2, U+75f4, U+7897, U+78b3, U+78c5, U+7978, U+79fd, U+7a74, U+7b4b, U+7b5b, U+7ece, U+7ed2, U+7ee3, U+7ef3, U+7f50, U+7f55, U+7f9e, U+7fe0, U+809d, U+8106, U+814a, U+8154, U+817b, U+818f, U+81c2, U+81ed, U+821f, U+82a6, U+82d1, U+8302, U+83c7, U+83ca, U+845b, U+848b, U+84c9, U+85e4, U+86ee, U+8700, U+8774, U+8881, U+8c1c, U+8c79, U+8d2a, U+8d3c, U+8eba, U+8f70, U+8fa9, U+8fb1, U+900a, U+9017, U+901d, U+9022, U+906e, U+946b, U+94dd, U+94ed, U+953b, U+95ef, U+95fa, U+95fd, U+96c0, U+971e, U+9753, U+9756, U+97e6, U+9881, U+9887, U+9b4f, U+9e2d, U+9f0e, U+e601-e602, U+e604-e605, U+ff5c;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.108.woff2) format('woff2');
  unicode-range: U+24, U+4e08, U+4e43, U+4e4f, U+4ef0, U+4f2a, U+507f, U+50ac, U+50bb, U+5151, U+51bb, U+51f6, U+51fd, U+5272, U+52fe, U+5362, U+53c9, U+53d4, U+53e0, U+543b, U+54f2, U+5507, U+5524, U+558a, U+55b5, U+561b, U+56ca, U+5782, U+57c3, U+5893, U+5915, U+5949, U+5962, U+59ae, U+59dc, U+59fb, U+5bd3, U+5c38, U+5cb3, U+5d07, U+5d29, U+5de1, U+5dfe, U+5e15, U+5eca, U+5f2f, U+5f7c, U+5fcc, U+6021, U+609f, U+60f9, U+6108, U+6148, U+6155, U+6170, U+61d2, U+6251, U+629b, U+62ab, U+62e8, U+62f3, U+6321, U+6350, U+6566, U+659c, U+65e8, U+6635, U+6655, U+6670, U+66f9, U+6734, U+679d, U+6851, U+6905, U+6b49, U+6b96, U+6c1b, U+6c41, U+6c6a, U+6c83, U+6cf3, U+6d9b, U+6dcb, U+6e1d, U+6e20-6e21, U+6eaa, U+6ee4, U+6ee9, U+6f58, U+70e4, U+722c, U+7262, U+7267, U+72b9, U+72e0, U+72ee, U+72f1, U+7334, U+73ab, U+7433, U+7470, U+758f, U+75d5, U+764c, U+7686, U+76c6, U+76fe, U+7720, U+77e2, U+7802, U+7816, U+788d, U+7891, U+7a00, U+7a9d, U+7b52, U+7bad, U+7c98, U+7cca, U+7eba, U+7eea, U+7ef5, U+7f1d, U+7f69, U+806a, U+809a, U+80bf, U+80c3, U+81c0, U+820c, U+82ac, U+82af, U+82cd, U+82d7, U+838e, U+839e, U+8404, U+84b8, U+852c, U+8587, U+8650, U+8679, U+86c7, U+8702, U+87ba, U+886b-886c, U+8870, U+8c10, U+8c23, U+8c6b, U+8d3e, U+8d4b-8d4c, U+8d64, U+8d6b, U+8d74, U+8e29, U+8f69, U+8f74, U+8fb0, U+8fdf, U+901b, U+9038, U+9093, U+9171, U+9489, U+94ae, U+94c3, U+9508, U+9510, U+9601, U+9614, U+964c, U+9675, U+971c, U+97f5, U+9888, U+98d8, U+9971, U+9aa4, U+9e3f, U+9e45, U+9e4f, U+9e70, U+9f7f, U+e715;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.109.woff2) format('woff2');
  unicode-range: U+a5, U+2192, U+2605, U+4e11, U+4e22, U+4e32, U+4f0d, U+4f0f, U+4f69, U+4ff1, U+50b2, U+5154, U+51dd, U+51f0, U+5211, U+5269, U+533f, U+5366-5367, U+5389, U+5413, U+5440, U+5446, U+5561, U+574a, U+5751, U+57ab, U+5806, U+5821, U+582a, U+58f3, U+5938, U+5948, U+5978, U+59d1, U+5a03, U+5a07, U+5ac1, U+5acc, U+5ae9, U+5bb4, U+5bc4, U+5c3f, U+5e3d, U+5e7d, U+5f92, U+5faa, U+5fe0, U+5ffd, U+6016, U+60a0, U+60dc, U+60e8, U+614e, U+6212, U+6284, U+62c6, U+62d3-62d4, U+63f4, U+642c, U+6478, U+6491-6492, U+64e6, U+6591, U+65a4, U+664b, U+6735, U+6746, U+67f1, U+67f3, U+6842, U+68af, U+68c9, U+68cb, U+6a31, U+6b3a, U+6bc1, U+6c0f, U+6c27, U+6c57, U+6cc4, U+6ce5, U+6d2a, U+6d66, U+6d69, U+6daf, U+6e58, U+6ecb, U+6ef4, U+707e, U+7092, U+70ab, U+71d5, U+7275, U+7384, U+73b2, U+7434, U+74e6, U+74f7, U+75bc, U+76c8, U+76d0, U+7709, U+77ac, U+7855, U+78a7, U+78c1, U+7a77, U+7b79, U+7c92, U+7cae, U+7cd5, U+7ea4, U+7eb5, U+7ebd, U+7f5a, U+7fd4, U+7ffc, U+8083, U+8096, U+80a0, U+80d6, U+80de, U+8102, U+8109, U+810f, U+8179, U+8292, U+82b3, U+8352, U+8361, U+83cc, U+841d, U+8461, U+8482, U+8521, U+857e, U+85aa, U+866b, U+8776, U+8896, U+889c, U+88f8, U+8a9e, U+8bc8, U+8bf8, U+8c0b, U+8c28, U+8d2b, U+8d2f, U+8d37, U+8d3a, U+8d54, U+8dc3, U+8dcc, U+8df5, U+8e0f, U+8e48, U+8f86, U+8f88, U+8f9e, U+8fc1, U+8fc8, U+8feb, U+9065, U+90a6, U+90aa, U+90bb, U+90c1, U+94dc, U+9521, U+9676, U+96d5, U+970d, U+9897, U+997c, U+9a70, U+9a76, U+9a9a, U+9ad4, U+9e23, U+9e7f, U+9f3b, U+e675, U+e6b9, U+ffe5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.110.woff2) format('woff2');
  unicode-range: U+300c-300d, U+4e54, U+4e58, U+4e95, U+4ec1, U+4f2f, U+4f38, U+4fa3, U+4fca, U+503e, U+5141, U+5144, U+517c, U+51cc, U+51ed, U+5242, U+52b2, U+52d2, U+52e4, U+540a, U+5439, U+5448, U+5496, U+54ed, U+5565, U+5761, U+5766, U+58ee, U+593a, U+594b, U+594f, U+5954, U+5996, U+59c6, U+59ff, U+5b64, U+5bff, U+5c18, U+5c1d, U+5c97, U+5ca9, U+5cb8, U+5e9f, U+5ec9, U+5f04, U+5f7b, U+5fa1, U+5fcd, U+6012, U+60a6, U+60ac, U+60b2, U+60ef, U+626e, U+6270, U+6276, U+62d6, U+62dc, U+6316, U+632f, U+633a, U+6355, U+63aa, U+6447, U+649e, U+64c5, U+654c, U+65c1, U+65cb, U+65e6, U+6606, U+6731, U+675c, U+67cf, U+67dc, U+6846, U+6b8b, U+6beb, U+6c61, U+6c88, U+6cbf, U+6cdb, U+6cea, U+6d45, U+6d53, U+6d74, U+6d82, U+6da8, U+6db5, U+6deb, U+6eda, U+6ee8, U+6f0f, U+706d, U+708e, U+70ae, U+70bc, U+70c2, U+70e6, U+7237-7238, U+72fc, U+730e, U+731b, U+739b, U+73bb, U+7483, U+74dc, U+74f6, U+7586, U+7626, U+775b, U+77ff, U+788e, U+78b0, U+7956, U+7965, U+79e6, U+7af9, U+7bee, U+7c97, U+7eb1, U+7eb7, U+7ed1, U+7ed5, U+7f6a, U+7f72, U+7fbd, U+8017, U+808c, U+80a9, U+80c6, U+80ce, U+8150, U+8170, U+819c, U+820d, U+8230, U+8239, U+827e, U+8377, U+8389, U+83b2, U+8428, U+8463, U+867e, U+88c2, U+88d9, U+8986, U+8bca, U+8bde, U+8c13, U+8c8c, U+8d21, U+8d24, U+8d56, U+8d60, U+8d8b, U+8db4, U+8e2a, U+8f68, U+8f89, U+8f9b, U+8fa8, U+8fbd, U+9003, U+90ce, U+90ed, U+9189, U+94bb, U+9505, U+95f9, U+963b, U+9655, U+966a, U+9677, U+96fe, U+9896, U+99a8, U+9a71, U+9a82, U+9a91, U+9b45, U+9ece, U+9f20, U+feff, U+ff0d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.111.woff2) format('woff2');
  unicode-range: U+4e4c, U+4e88, U+4ea1, U+4ea6, U+4ed3-4ed4, U+4eff, U+4f30, U+4fa7, U+4fc4, U+4fd7, U+500d, U+504f, U+5076-5077, U+517d, U+5192, U+51c9, U+51ef, U+5238, U+5251, U+526a, U+52c7, U+52df, U+52ff, U+53a6, U+53a8, U+53ec, U+5410, U+559d, U+55b7, U+5634, U+573e, U+5783, U+585e, U+586b, U+58a8, U+5999, U+59d3, U+5a1c, U+5a46, U+5b54-5b55, U+5b85, U+5b8b, U+5b8f, U+5bbf, U+5bd2, U+5c16, U+5c24, U+5e05, U+5e45, U+5e7c, U+5e84, U+5f03, U+5f1f, U+5f31, U+5f84, U+5f90, U+5fbd, U+5fc6, U+5fd9, U+5fe7, U+6052, U+6062, U+6089, U+60a3, U+60d1, U+6167, U+622a, U+6234, U+624e, U+6269, U+626c, U+62b5, U+62d2, U+6325, U+63e1, U+643a, U+6446, U+6562, U+656c, U+65e2, U+65fa, U+660c, U+6628, U+6652, U+6668, U+6676, U+66fc, U+66ff, U+6717, U+676d, U+67aa, U+67d4, U+6843, U+6881, U+68d2, U+695a, U+69fd, U+6a2a, U+6b8a, U+6c60, U+6c64, U+6c9f, U+6caa, U+6cc9, U+6ce1, U+6cfd, U+6d1b, U+6d1e, U+6d6e, U+6de1, U+6e10, U+6e7f, U+6f5c, U+704c, U+7070, U+7089, U+70b8, U+718a, U+71c3, U+723d, U+732a, U+73cd, U+7518, U+756a, U+75af, U+75be, U+75c7, U+76d2, U+76d7, U+7763, U+78e8, U+795d, U+79df, U+7c4d, U+7d2f, U+7ee9, U+7f13, U+7f8a, U+8000, U+8010, U+80af, U+80f6, U+80f8, U+8212, U+8273, U+82f9, U+83ab, U+83b1, U+83f2, U+8584, U+871c, U+8861, U+888b, U+88c1, U+88e4, U+8bd1, U+8bf1, U+8c31, U+8d5a, U+8d75-8d76, U+8de8, U+8f85, U+8fa3, U+8fc5, U+9006, U+903c, U+904d, U+9075, U+9178, U+9274, U+950b, U+9526, U+95ea, U+9636, U+9686, U+978b, U+987f, U+9a7e, U+9b42, U+9e1f, U+9ea6, U+9f13, U+9f84, U+ff5e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.112.woff2) format('woff2');
  unicode-range: U+23, U+3d, U+4e01, U+4e39, U+4e73, U+4ecd, U+4ed9, U+4eea, U+4f0a, U+4f1f, U+4f5b, U+4fa0, U+4fc3, U+501f, U+50a8, U+515a, U+5175, U+51a0, U+51c0, U+51e1, U+51e4, U+5200, U+520a, U+5224, U+523a, U+52aa, U+52b1, U+52b3, U+5348, U+5353, U+5360, U+5371, U+5377, U+539a, U+541b, U+5434, U+547c, U+54e6, U+5510, U+5531, U+5609, U+56f0, U+56fa, U+5733, U+574f, U+5851, U+5854, U+5899, U+58c1, U+592e, U+5939, U+5976, U+5986, U+59bb, U+5a18, U+5a74, U+5b59, U+5b87, U+5b97, U+5ba0, U+5bab, U+5bbd-5bbe, U+5bf8, U+5c0a, U+5c3a, U+5c4a, U+5e16, U+5e1d, U+5e2d, U+5e8a, U+6015, U+602a, U+6050, U+6069, U+6162, U+61c2, U+6293, U+6297, U+62b1, U+62bd, U+62df, U+62fc, U+6302, U+635f, U+638c, U+63ed, U+6458, U+6469, U+6563, U+6620, U+6653, U+6696-6697, U+66dd, U+675f, U+676f-6770, U+67d0, U+67d3, U+684c, U+6865, U+6885, U+68b0, U+68ee, U+690d, U+6b23, U+6b32, U+6bd5, U+6c89, U+6d01, U+6d25, U+6d89, U+6da6, U+6db2, U+6df7, U+6ed1, U+6f02, U+70c8, U+70df, U+70e7, U+7126, U+7236, U+7259, U+731c, U+745e, U+74e3, U+751a, U+751c, U+7532, U+7545, U+75db, U+7761, U+7a0d, U+7b51, U+7ca4, U+7cd6, U+7d2b, U+7ea0, U+7eb9, U+7ed8, U+7f18, U+7f29, U+8033, U+804a, U+80a4-80a5, U+80e1, U+817f, U+829d, U+82e6, U+8336, U+840c, U+8499, U+864e, U+8651, U+865a, U+88ad, U+89e6, U+8bd7, U+8bfa, U+8c37, U+8d25, U+8d38, U+8ddd, U+8fea, U+9010, U+9012, U+906d, U+907f-9080, U+90d1, U+9177, U+91ca, U+94fa, U+9501, U+9634-9635, U+9694, U+9707, U+9738, U+9769, U+9a7b, U+9a97, U+9aa8, U+9b3c, U+9c81, U+9ed8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.113.woff2) format('woff2');
  unicode-range: U+26, U+3c, U+d7, U+4e4e, U+4e61, U+4e71, U+4ebf, U+4f26, U+5012, U+51ac, U+51b0, U+51b2, U+51b7, U+5218, U+521a, U+5220, U+5237, U+523b, U+526f, U+5385, U+53bf, U+53e5, U+53eb, U+53f3, U+53f6, U+5409, U+5438, U+54c8, U+54e5, U+552f, U+5584, U+5706, U+5723, U+5750, U+575a, U+5987-5988, U+59b9, U+59d0, U+59d4, U+5b88, U+5b9c, U+5bdf, U+5bfb, U+5c01, U+5c04, U+5c3e, U+5c4b, U+5c4f, U+5c9b, U+5cf0, U+5ddd, U+5de6, U+5de8, U+5e01, U+5e78, U+5e7b, U+5e9c, U+5ead, U+5ef6, U+5f39, U+5fd8, U+6000, U+6025, U+604b, U+6076, U+613f, U+6258, U+6263, U+6267, U+6298, U+62a2, U+62e5, U+62ec, U+6311, U+6377, U+6388-6389, U+63a2, U+63d2, U+641e, U+642d, U+654f, U+6551, U+6597, U+65cf, U+65d7, U+65e7, U+6682, U+66f2, U+671d, U+672b, U+6740, U+6751, U+6768, U+6811, U+6863, U+6982, U+6bd2, U+6cf0, U+6d0b, U+6d17, U+6d59, U+6dd8, U+6dfb, U+6e7e, U+6f6e, U+6fb3, U+706f, U+719f, U+72af, U+72d0, U+72d7, U+732b, U+732e, U+7389, U+73e0, U+7530, U+7687, U+76d6, U+76db, U+7840, U+786c, U+79cb, U+79d2, U+7a0e, U+7a33, U+7a3f, U+7a97, U+7ade-7adf, U+7b26, U+7e41, U+7ec3, U+7f3a, U+8089, U+80dc, U+811a, U+8131, U+8138, U+821e, U+8349, U+83dc, U+8457, U+867d, U+86cb, U+8a89, U+8ba8, U+8bad, U+8bef, U+8bfe, U+8c6a, U+8d1d, U+8d4f, U+8d62, U+8dd1, U+8df3, U+8f6e, U+8ff9, U+900f, U+9014, U+9057, U+9192, U+91ce, U+9488, U+94a2, U+9547, U+955c, U+95f2, U+9644, U+964d, U+96c4-96c5, U+96e8, U+96f6-96f7, U+9732, U+9759, U+9760, U+987a, U+989c, U+9910, U+996d-996e, U+9b54, U+9e21, U+9ebb, U+9f50;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.114.woff2) format('woff2');
  unicode-range: U+7e, U+2026, U+4e03, U+4e25, U+4e30, U+4e34, U+4e45, U+4e5d, U+4e89, U+4eae, U+4ed8, U+4f11, U+4f19, U+4f24, U+4f34, U+4f59, U+4f73, U+4f9d, U+4fb5, U+5047, U+505c, U+5170, U+519c, U+51cf, U+5267, U+5356, U+5374, U+5382, U+538b, U+53e6, U+5426, U+542b, U+542f, U+5462, U+5473, U+554a, U+5566, U+5708, U+571f, U+5757, U+57df, U+57f9, U+5802, U+590f, U+591c, U+591f, U+592b, U+5965, U+5979, U+5a01, U+5a5a, U+5b63, U+5b69, U+5b81, U+5ba1, U+5ba3, U+5c3c, U+5c42, U+5c81, U+5de7, U+5dee, U+5e0c, U+5e10, U+5e55, U+5e86, U+5e8f, U+5ea7, U+5f02, U+5f52, U+5f81, U+5ff5, U+60ca, U+60e0, U+6279, U+62c5, U+62ff, U+63cf, U+6444, U+64cd, U+653b, U+65bd, U+65e9, U+665a, U+66b4, U+66fe, U+6728, U+6742, U+677e, U+67b6, U+680f, U+68a6, U+68c0, U+699c, U+6b4c, U+6b66, U+6b7b, U+6bcd, U+6bdb, U+6c38, U+6c47, U+6c49, U+6cb3, U+6cb9, U+6ce2, U+6d32, U+6d3e, U+6d4f, U+6e56, U+6fc0, U+7075, U+7206, U+725b, U+72c2, U+73ed, U+7565, U+7591, U+7597, U+75c5, U+76ae, U+76d1, U+76df, U+7834, U+7968, U+7981, U+79c0, U+7a7f, U+7a81, U+7ae5, U+7b14, U+7c89, U+7d27, U+7eaf, U+7eb3, U+7eb8, U+7ec7, U+7ee7, U+7eff, U+7f57, U+7ffb, U+805a, U+80a1, U+822c, U+82cf, U+82e5, U+8363, U+836f, U+84dd, U+878d, U+8840, U+8857, U+8863, U+8865, U+8b66, U+8bb2, U+8bda, U+8c01, U+8c08, U+8c46, U+8d1f, U+8d35, U+8d5b, U+8d5e, U+8da3, U+8ddf, U+8f93, U+8fdd, U+8ff0, U+8ff7, U+8ffd, U+9000, U+9047, U+9152, U+949f, U+94c1, U+94f6, U+9646, U+9648, U+9669, U+969c, U+96ea, U+97e9, U+987b, U+987e, U+989d, U+9970, U+9986, U+9c7c, U+9c9c;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.115.woff2) format('woff2');
  unicode-range: U+25, U+4e14, U+4e1d, U+4e3d, U+4e49, U+4e60, U+4e9a, U+4eb2, U+4ec5, U+4efd, U+4f3c, U+4f4f, U+4f8b, U+4fbf, U+5019, U+5145, U+514b, U+516b, U+516d, U+5174, U+5178, U+517b, U+5199, U+519b, U+51b3, U+51b5, U+5207, U+5212, U+5219, U+521d, U+52bf, U+533b, U+5343, U+5347, U+534a, U+536b, U+5370, U+53e4, U+53f2, U+5403, U+542c, U+547d, U+54a8, U+54cd, U+54ea, U+552e, U+56f4, U+5747, U+575b, U+5883, U+589e, U+5931, U+5947, U+5956-5957, U+5a92, U+5b83, U+5ba4, U+5bb3, U+5bcc, U+5c14, U+5c1a, U+5c3d, U+5c40, U+5c45, U+5c5e, U+5df4, U+5e72, U+5e95, U+5f80, U+5f85, U+5fb7, U+5fd7, U+601d, U+626b, U+627f, U+62c9, U+62cd, U+6309, U+63a7, U+6545, U+65ad, U+65af, U+65c5, U+666e, U+667a, U+670b, U+671b, U+674e, U+677f, U+6781, U+6790, U+6797, U+6821, U+6838-6839, U+697c, U+6b27, U+6b62, U+6bb5, U+6c7d, U+6c99, U+6d4b, U+6d4e, U+6d6a, U+6e29, U+6e2f, U+6ee1, U+6f14, U+6f2b, U+72b6, U+72ec, U+7387, U+7533, U+753b, U+76ca, U+76d8, U+7701, U+773c, U+77ed, U+77f3, U+7814, U+793c, U+79bb, U+79c1, U+79d8, U+79ef, U+79fb, U+7a76, U+7b11, U+7b54, U+7b56, U+7b97, U+7bc7, U+7c73, U+7d20, U+7eaa, U+7ec8, U+7edd, U+7eed, U+7efc, U+7fa4, U+804c, U+8058, U+80cc, U+8111, U+817e, U+826f, U+8303, U+843d, U+89c9, U+89d2, U+8ba2, U+8bbf, U+8bc9, U+8bcd, U+8be6, U+8c22, U+8c61, U+8d22, U+8d26-8d27, U+8d8a, U+8f6f, U+8f7b, U+8f83, U+8f91, U+8fb9, U+8fd4, U+8fdc, U+9002, U+94b1, U+9519, U+95ed, U+961f, U+9632-9633, U+963f, U+968f-9690, U+96be, U+9876, U+9884, U+98de, U+9988, U+9999, U+9ec4, U+ff1b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.116.woff2) format('woff2');
  unicode-range: U+2b, U+40, U+3000, U+300a-300b, U+4e16, U+4e66, U+4e70, U+4e91-4e92, U+4e94, U+4e9b, U+4ec0, U+4eca, U+4f01, U+4f17-4f18, U+4f46, U+4f4e, U+4f9b, U+4fee, U+503c, U+5065, U+50cf, U+513f, U+5148, U+518d, U+51c6, U+51e0, U+5217, U+529e-529f, U+5341, U+534f, U+5361, U+5386, U+53c2, U+53c8, U+53cc, U+53d7-53d8, U+53ea, U+5404, U+5411, U+5417, U+5427, U+5468, U+559c, U+5668, U+56e0, U+56e2, U+56ed, U+5740, U+57fa, U+58eb, U+5904, U+592a, U+59cb, U+5a31, U+5b58, U+5b9d, U+5bc6, U+5c71, U+5dde, U+5df1, U+5e08, U+5e26, U+5e2e, U+5e93, U+5e97, U+5eb7, U+5f15, U+5f20, U+5f3a, U+5f62, U+5f69, U+5f88, U+5f8b, U+5fc5, U+600e, U+620f, U+6218, U+623f, U+627e, U+628a, U+62a4, U+62db, U+62e9, U+6307, U+6362, U+636e, U+64ad, U+6539, U+653f, U+6548, U+6574, U+6613, U+6625, U+663e, U+666f, U+672a, U+6750, U+6784, U+6a21, U+6b3e, U+6b65, U+6bcf, U+6c11, U+6c5f, U+6df1, U+706b, U+7167, U+724c, U+738b, U+73a9, U+73af, U+7403, U+7537, U+754c, U+7559, U+767d, U+7740, U+786e, U+795e, U+798f, U+79f0, U+7aef, U+7b7e, U+7bb1, U+7ea2, U+7ea6, U+7ec4, U+7ec6, U+7ecd, U+7edc, U+7ef4, U+8003, U+80b2, U+81f3-81f4, U+822a, U+827a, U+82f1, U+83b7, U+8425, U+89c2, U+89c8, U+8ba9, U+8bb8, U+8bc6, U+8bd5, U+8be2, U+8be5, U+8bed, U+8c03, U+8d23, U+8d2d, U+8d34, U+8d70, U+8db3, U+8fbe, U+8fce, U+8fd1, U+8fde, U+9001, U+901f-9020, U+90a3, U+914d, U+91c7, U+94fe, U+9500, U+952e, U+9605, U+9645, U+9662, U+9664, U+9700, U+9752, U+975e, U+97f3, U+9879, U+9886, U+98df, U+9a6c, U+9a8c, U+9ed1, U+9f99;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.117.woff2) format('woff2');
  unicode-range: U+4e, U+201c-201d, U+3010-3011, U+4e07, U+4e1c, U+4e24, U+4e3e, U+4e48, U+4e50, U+4e5f, U+4e8b-4e8c, U+4ea4, U+4eab-4eac, U+4ecb, U+4ece, U+4ed6, U+4ee3, U+4ef6-4ef7, U+4efb, U+4f20, U+4f55, U+4f7f, U+4fdd, U+505a, U+5143, U+5149, U+514d, U+5171, U+5177, U+518c, U+51fb, U+521b, U+5229, U+522b, U+52a9, U+5305, U+5317, U+534e, U+5355, U+5357, U+535a, U+5373, U+539f, U+53bb, U+53ca, U+53cd, U+53d6, U+53e3, U+53f0, U+5458, U+5546, U+56db, U+573a, U+578b, U+57ce, U+58f0, U+590d, U+5934, U+5973, U+5b57, U+5b8c, U+5b98, U+5bb9, U+5bfc, U+5c06, U+5c11, U+5c31, U+5c55, U+5df2, U+5e03, U+5e38, U+5e76, U+5e94, U+5efa, U+5f71, U+5f97, U+5feb, U+6001, U+603b, U+60f3, U+611f, U+6216, U+624d, U+6253, U+6295, U+6301, U+6392, U+641c, U+652f, U+653e, U+6559, U+6599, U+661f, U+671f, U+672f, U+6761, U+67e5, U+6807, U+6837, U+683c, U+6848, U+6b22, U+6b64, U+6bd4, U+6c14, U+6c34, U+6c42, U+6ca1, U+6d41, U+6d77, U+6d88, U+6e05, U+6e38, U+6e90, U+7136, U+7231, U+7531, U+767e, U+76ee, U+76f4, U+771f, U+7801, U+793a, U+79cd, U+7a0b, U+7a7a, U+7acb, U+7ae0, U+7b2c, U+7b80, U+7ba1, U+7cbe, U+7d22, U+7ea7, U+7ed3, U+7ed9, U+7edf, U+7f16, U+7f6e, U+8001, U+800c, U+8272, U+8282, U+82b1, U+8350, U+88ab, U+88c5, U+897f, U+89c1, U+89c4, U+89e3, U+8a00, U+8ba1, U+8ba4, U+8bae-8bb0, U+8bbe, U+8bc1, U+8bc4, U+8bfb, U+8d28, U+8d39, U+8d77, U+8d85, U+8def, U+8eab, U+8f66, U+8f6c, U+8f7d, U+8fd0, U+9009, U+90ae, U+90fd, U+91cc-91cd, U+91cf, U+95fb, U+9650, U+96c6, U+9891, U+98ce, U+ff1f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.118.woff2) format('woff2');
  unicode-range: U+d, U+3e, U+5f, U+7c, U+a0, U+a9, U+4e09-4e0b, U+4e0d-4e0e, U+4e13, U+4e1a, U+4e2a, U+4e3a-4e3b, U+4e4b, U+4e86, U+4e8e, U+4ea7, U+4eba, U+4ee4-4ee5, U+4eec, U+4f1a, U+4f4d, U+4f53, U+4f5c, U+4f60, U+4fe1, U+5165, U+5168, U+516c, U+5173, U+5176, U+5185, U+51fa, U+5206, U+5230, U+5236, U+524d, U+529b, U+52a0-52a1, U+52a8, U+5316, U+533a, U+53cb, U+53d1, U+53ef, U+53f7-53f8, U+5408, U+540c-540e, U+544a, U+548c, U+54c1, U+56de, U+56fd-56fe, U+5728, U+5730, U+5907, U+5916, U+591a, U+5927, U+5929, U+597d, U+5982, U+5b50, U+5b66, U+5b89, U+5b9a, U+5b9e, U+5ba2, U+5bb6, U+5bf9, U+5c0f, U+5de5, U+5e02, U+5e73-5e74, U+5e7f, U+5ea6, U+5f00, U+5f0f, U+5f53, U+5f55, U+5fae, U+5fc3, U+6027, U+606f, U+60a8, U+60c5, U+610f, U+6210-6211, U+6237, U+6240, U+624b, U+6280, U+62a5, U+63a5, U+63a8, U+63d0, U+6536, U+6570, U+6587, U+65b9, U+65e0, U+65f6, U+660e, U+662d, U+662f, U+66f4, U+6700, U+670d, U+672c, U+673a, U+6743, U+6765, U+679c, U+682a, U+6b21, U+6b63, U+6cbb, U+6cd5, U+6ce8, U+6d3b, U+70ed, U+7247-7248, U+7269, U+7279, U+73b0, U+7406, U+751f, U+7528, U+7535, U+767b, U+76f8, U+770b, U+77e5, U+793e, U+79d1, U+7ad9, U+7b49, U+7c7b, U+7cfb, U+7ebf, U+7ecf, U+7f8e, U+8005, U+8054, U+80fd, U+81ea, U+85cf, U+884c, U+8868, U+8981, U+89c6, U+8bba, U+8bdd, U+8bf4, U+8bf7, U+8d44, U+8fc7, U+8fd8-8fd9, U+8fdb, U+901a, U+9053, U+90e8, U+91d1, U+957f, U+95e8, U+95ee, U+95f4, U+9762, U+9875, U+9898, U+9996, U+9ad8, U+ff01, U+ff08-ff09;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.119.woff2) format('woff2');
  unicode-range: U+20-22, U+27-2a, U+2c-3b, U+3f, U+41-4d, U+4f-5d, U+61-7b, U+7d, U+ab, U+ae, U+b2, U+b7, U+bb, U+df-e5, U+e7-ea, U+ec-ed, U+f1-f4, U+f6, U+f9-fa, U+fc, U+101, U+103, U+113, U+12b, U+148, U+14d, U+16b, U+1ce, U+1d0, U+300-301, U+1ebf, U+1ec7, U+2013-2014, U+2022, U+2027, U+2039-203a, U+2122, U+3001-3002, U+3042, U+3044, U+3046, U+3048, U+304a-3055, U+3057, U+3059-305b, U+305d, U+305f-3061, U+3063-306b, U+306d-3073, U+3075-3076, U+3078-3079, U+307b, U+307e-307f, U+3081-308d, U+308f, U+3092-3093, U+30a1-30a4, U+30a6-30bb, U+30bd, U+30bf-30c1, U+30c3-30c4, U+30c6-30cb, U+30cd-30d7, U+30d9-30e1, U+30e3-30e7, U+30e9-30ed, U+30ef, U+30f3, U+30fb-30fc, U+3127, U+4e00, U+4e2d, U+65b0, U+65e5, U+6708-6709, U+70b9, U+7684, U+7f51, U+ff0c, U+ff0e, U+ff1a;
}
/* cyrillic */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kqWWbhppHtkoYg.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kq6WbhppHtkoYg.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kq-WbhppHtkoYg.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kqGWbhppHtk.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.4.woff2) format('woff2');
  unicode-range: U+1f1e9-1f1f5, U+1f1f7-1f1ff, U+1f21a, U+1f232, U+1f234-1f237, U+1f250-1f251, U+1f300, U+1f302-1f308, U+1f30a-1f311, U+1f315, U+1f319-1f320, U+1f324, U+1f327, U+1f32a, U+1f32c-1f32d, U+1f330-1f357, U+1f359-1f37e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.5.woff2) format('woff2');
  unicode-range: U+fee3, U+fef3, U+ff03-ff04, U+ff07, U+ff0a, U+ff17-ff19, U+ff1c-ff1d, U+ff20-ff3a, U+ff3c, U+ff3e-ff5b, U+ff5d, U+ff61-ff65, U+ff67-ff6a, U+ff6c, U+ff6f-ff78, U+ff7a-ff7d, U+ff80-ff84, U+ff86, U+ff89-ff8e, U+ff92, U+ff97-ff9b, U+ff9d-ff9f, U+ffe0-ffe4, U+ffe6, U+ffe9, U+ffeb, U+ffed, U+fffc, U+1f004, U+1f170-1f171, U+1f192-1f195, U+1f198-1f19a, U+1f1e6-1f1e8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.6.woff2) format('woff2');
  unicode-range: U+f0a7, U+f0b2, U+f0b7, U+f0c9, U+f0d8, U+f0da, U+f0dc-f0dd, U+f0e0, U+f0e6, U+f0eb, U+f0fc, U+f101, U+f104-f105, U+f107, U+f10b, U+f11b, U+f14b, U+f18a, U+f193, U+f1d6-f1d7, U+f244, U+f27a, U+f296, U+f2ae, U+f471, U+f4b3, U+f610-f611, U+f880-f881, U+f8ec, U+f8f5, U+f8ff, U+f901, U+f90a, U+f92c-f92d, U+f934, U+f937, U+f941, U+f965, U+f967, U+f969, U+f96b, U+f96f, U+f974, U+f978-f979, U+f97e, U+f981, U+f98a, U+f98e, U+f997, U+f99c, U+f9b2, U+f9b5, U+f9ba, U+f9be, U+f9ca, U+f9d0-f9d1, U+f9dd, U+f9e0-f9e1, U+f9e4, U+f9f7, U+fa00-fa01, U+fa08, U+fa0a, U+fa11, U+fb01-fb02, U+fdfc, U+fe0e, U+fe30-fe31, U+fe33-fe44, U+fe49-fe52, U+fe54-fe57, U+fe59-fe66, U+fe68-fe6b, U+fe8e, U+fe92-fe93, U+feae, U+feb8, U+fecb-fecc, U+fee0;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.21.woff2) format('woff2');
  unicode-range: U+9f83, U+9f85-9f8d, U+9f90-9f91, U+9f94-9f96, U+9f98, U+9f9b-9f9c, U+9f9e, U+9fa0, U+9fa2, U+9ff0-9fff, U+a001, U+a007, U+a025, U+a046-a047, U+a057, U+a072, U+a078-a079, U+a083, U+a085, U+a100, U+a118, U+a132, U+a134, U+a1f4, U+a242, U+a4a6, U+a4aa, U+a4b0-a4b1, U+a4b3, U+a9c1-a9c2, U+ac00-ac01, U+ac04, U+ac08, U+ac10-ac11, U+ac13-ac16, U+ac19, U+ac1c-ac1d, U+ac24, U+ac70-ac71, U+ac74, U+ac77-ac78, U+ac80-ac81, U+ac83, U+ac8c, U+ac90, U+ac9f-aca0, U+aca8-aca9, U+acac, U+acb0, U+acbd, U+acc1, U+acc4, U+ace0-ace1, U+ace4, U+ace8, U+acf3, U+acf5, U+acfc-acfd, U+ad00, U+ad0c, U+ad11, U+ad1c, U+ad34, U+ad50, U+ad64, U+ad6c, U+ad70, U+ad74, U+ad7f, U+ad81, U+ad8c, U+adc0, U+adc8, U+addc, U+ade0, U+adf8-adf9, U+adfc, U+ae00, U+ae08-ae09, U+ae0b, U+ae30, U+ae34, U+ae38, U+ae40, U+ae4a, U+ae4c, U+ae54, U+ae68, U+aebc, U+aed8, U+af2c-af2d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.22.woff2) format('woff2');
  unicode-range: U+9e30-9e33, U+9e35-9e3b, U+9e3e, U+9e40-9e44, U+9e46-9e4e, U+9e51, U+9e53, U+9e55-9e58, U+9e5a-9e5c, U+9e5e-9e63, U+9e66-9e6e, U+9e71, U+9e73, U+9e75, U+9e78-9e79, U+9e7c-9e7e, U+9e82, U+9e86-9e88, U+9e8b-9e8c, U+9e90-9e91, U+9e93, U+9e95, U+9e97, U+9e9d, U+9ea4-9ea5, U+9ea9-9eaa, U+9eb4-9eb5, U+9eb8-9eba, U+9ebc-9ebf, U+9ec3, U+9ec9, U+9ecd, U+9ed0, U+9ed2-9ed3, U+9ed5-9ed6, U+9ed9, U+9edc-9edd, U+9edf-9ee0, U+9ee2, U+9ee5, U+9ee7-9eea, U+9eef, U+9ef1, U+9ef3-9ef4, U+9ef6, U+9ef9, U+9efb-9efc, U+9efe, U+9f0b, U+9f0d, U+9f10, U+9f14, U+9f17, U+9f19, U+9f22, U+9f29, U+9f2c, U+9f2f, U+9f31, U+9f37, U+9f39, U+9f3d-9f3e, U+9f41, U+9f4a-9f4b, U+9f51-9f52, U+9f61-9f63, U+9f66-9f67, U+9f80-9f81;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.23.woff2) format('woff2');
  unicode-range: U+9c82-9c83, U+9c85-9c8c, U+9c8e-9c92, U+9c94-9c9b, U+9c9e-9ca3, U+9ca5-9ca7, U+9ca9, U+9cab, U+9cad-9cae, U+9cb1-9cb7, U+9cb9-9cbd, U+9cbf-9cc0, U+9cc3, U+9cc5-9cc7, U+9cc9-9cd1, U+9cd3-9cda, U+9cdc-9cdd, U+9cdf, U+9ce1-9ce3, U+9ce5, U+9ce9, U+9cee-9cef, U+9cf3-9cf4, U+9cf6, U+9cfc-9cfd, U+9d02, U+9d08-9d09, U+9d12, U+9d1b, U+9d1e, U+9d26, U+9d28, U+9d37, U+9d3b, U+9d3f, U+9d51, U+9d59, U+9d5c-9d5d, U+9d5f-9d61, U+9d6c, U+9d70, U+9d72, U+9d7a, U+9d7e, U+9d84, U+9d89, U+9d8f, U+9d92, U+9daf, U+9db4, U+9db8, U+9dbc, U+9dc4, U+9dc7, U+9dc9, U+9dd7, U+9ddf, U+9df2, U+9df9-9dfa, U+9e0a, U+9e11, U+9e1a, U+9e1e, U+9e20, U+9e22, U+9e28-9e2c, U+9e2e-9e2f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.24.woff2) format('woff2');
  unicode-range: U+9a80, U+9a83, U+9a85, U+9a88-9a8a, U+9a8d-9a8e, U+9a90, U+9a92-9a93, U+9a95-9a96, U+9a98-9a99, U+9a9b-9aa2, U+9aa5, U+9aa7, U+9aaf-9ab1, U+9ab5-9ab6, U+9ab9-9aba, U+9ac0-9ac4, U+9ac8, U+9acb-9acc, U+9ace-9acf, U+9ad1-9ad2, U+9ad9, U+9adf, U+9ae1, U+9ae3, U+9aea-9aeb, U+9aed-9aef, U+9af4, U+9af9, U+9afb, U+9b03-9b04, U+9b06, U+9b08, U+9b0d, U+9b0f-9b10, U+9b13, U+9b18, U+9b1a, U+9b1f, U+9b22-9b23, U+9b25, U+9b27-9b28, U+9b2a, U+9b2f, U+9b31-9b32, U+9b3b, U+9b43, U+9b46-9b49, U+9b4d-9b4e, U+9b51, U+9b56, U+9b58, U+9b5a, U+9b5c, U+9b5f, U+9b61-9b62, U+9b6f, U+9b77, U+9b80, U+9b88, U+9b8b, U+9b8e, U+9b91, U+9b9f-9ba0, U+9ba8, U+9baa-9bab, U+9bad-9bae, U+9bb0-9bb1, U+9bb8, U+9bc9-9bca, U+9bd3, U+9bd6, U+9bdb, U+9be8, U+9bf0-9bf1, U+9c02, U+9c10, U+9c15, U+9c24, U+9c2d, U+9c32, U+9c39, U+9c3b, U+9c40, U+9c47-9c49, U+9c53, U+9c57, U+9c64, U+9c72, U+9c77-9c78, U+9c7b, U+9c7f-9c80;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.25.woff2) format('woff2');
  unicode-range: U+98dd, U+98e1-98e2, U+98e7-98ea, U+98ec, U+98ee-98ef, U+98f2, U+98f4, U+98fc-98fe, U+9903, U+9905, U+9908, U+990a, U+990c-990d, U+9913-9914, U+9918, U+991a-991b, U+991e, U+9921, U+9928, U+992c, U+992e, U+9935, U+9938-9939, U+993d-993e, U+9945, U+994b-994c, U+9951-9952, U+9954-9955, U+9957, U+995e, U+9963, U+9966-9969, U+996b-996c, U+996f, U+9974-9975, U+9977-9979, U+997d-997e, U+9980-9981, U+9983-9984, U+9987, U+998a-998b, U+998d-9991, U+9993-9995, U+9997-9998, U+99a5, U+99ab, U+99ad-99ae, U+99b1, U+99b3-99b4, U+99bc, U+99bf, U+99c1, U+99c3-99c6, U+99cc, U+99d0, U+99d2, U+99d5, U+99db, U+99dd, U+99e1, U+99ed, U+99f1, U+99ff, U+9a01, U+9a03-9a04, U+9a0e-9a0f, U+9a11-9a13, U+9a19, U+9a1b, U+9a28, U+9a2b, U+9a30, U+9a32, U+9a37, U+9a40, U+9a45, U+9a4a, U+9a4d-9a4e, U+9a52, U+9a55, U+9a57, U+9a5a-9a5b, U+9a5f, U+9a62, U+9a65, U+9a69, U+9a6b, U+9a6e, U+9a75, U+9a77-9a7a, U+9a7d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.26.woff2) format('woff2');
  unicode-range: U+975b-975c, U+9763, U+9765-9766, U+976c-976d, U+9773, U+9776, U+977a, U+977c, U+9784-9785, U+978e-978f, U+9791-9792, U+9794-9795, U+9798, U+979a, U+979e, U+97a3, U+97a5-97a6, U+97a8, U+97ab-97ac, U+97ae-97af, U+97b2, U+97b4, U+97c6, U+97cb-97cc, U+97d3, U+97d8, U+97dc, U+97e1, U+97ea-97eb, U+97ee, U+97fb, U+97fe-97ff, U+9801-9803, U+9805-9806, U+9808, U+980c, U+9810-9814, U+9817-9818, U+981e, U+9820-9821, U+9824, U+9828, U+982b-982d, U+9830, U+9834, U+9838-9839, U+983c, U+9846, U+984d-984f, U+9851-9852, U+9854-9855, U+9857-9858, U+985a-985b, U+9862-9863, U+9865, U+9867, U+986b, U+986f-9871, U+9877-9878, U+987c, U+9880, U+9883, U+9885, U+9889, U+988b-988f, U+9893-9895, U+9899-989b, U+989e-989f, U+98a1-98a2, U+98a5-98a7, U+98a9, U+98af, U+98b1, U+98b6, U+98ba, U+98be, U+98c3-98c4, U+98c6-98c8, U+98cf-98d6, U+98da-98db;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.27.woff2) format('woff2');
  unicode-range: U+95c4-95ca, U+95cc-95cd, U+95d4-95d6, U+95d8, U+95e1-95e2, U+95e9, U+95f0-95f1, U+95f3, U+95f6, U+95fc, U+95fe-95ff, U+9602-9604, U+9606-960d, U+960f, U+9611-9613, U+9615-9617, U+9619-961b, U+961d, U+9621, U+9628, U+962f, U+963c-963e, U+9641-9642, U+9649, U+9654, U+965b-965f, U+9661, U+9663, U+9665, U+9667-9668, U+966c, U+9670, U+9672-9674, U+9678, U+967a, U+967d, U+9682, U+9685, U+9688, U+968a, U+968d-968e, U+9695, U+9697-9698, U+969e, U+96a0, U+96a3-96a4, U+96a8, U+96aa, U+96b0-96b1, U+96b3-96b4, U+96b7-96b9, U+96bb-96bd, U+96c9, U+96cb, U+96ce, U+96d1-96d2, U+96d6, U+96d9, U+96db-96dc, U+96de, U+96e0, U+96e3, U+96e9, U+96eb, U+96f0-96f2, U+96f9, U+96ff, U+9701-9702, U+9705, U+9708, U+970a, U+970e-970f, U+9711, U+9719, U+9727, U+972a, U+972d, U+9730, U+973d, U+9742, U+9744, U+9748-9749, U+9750-9751, U+975a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.28.woff2) format('woff2');
  unicode-range: U+94f5, U+94f7, U+94f9, U+94fb-94fd, U+94ff, U+9503-9504, U+9506-9507, U+9509-950a, U+950d-950f, U+9511-9518, U+951a-9520, U+9522, U+9528-952d, U+9530-953a, U+953c-953f, U+9543-9546, U+9548-9550, U+9552-9555, U+9557-955b, U+955d-9568, U+956a-956d, U+9570-9574, U+9583, U+9586, U+9589, U+958e-958f, U+9591-9592, U+9594, U+9598-9599, U+959e-95a0, U+95a2-95a6, U+95a8-95b2, U+95b4, U+95b8-95c3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.29.woff2) format('woff2');
  unicode-range: U+941c-942b, U+942d-942e, U+9432-9433, U+9435, U+9438, U+943a, U+943e, U+9444, U+944a, U+9451-9452, U+945a, U+9462-9463, U+9465, U+9470-9487, U+948a-9492, U+9494-9498, U+949a, U+949c-949d, U+94a1, U+94a3-94a4, U+94a8, U+94aa-94ad, U+94af, U+94b2, U+94b4-94ba, U+94bc-94c0, U+94c4, U+94c6-94db, U+94de-94ec, U+94ee-94f1, U+94f3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.30.woff2) format('woff2');
  unicode-range: U+92ec-92ed, U+92f0, U+92f3, U+92f8, U+92fc, U+9304, U+9306, U+9310, U+9312, U+9315, U+9318, U+931a, U+931e, U+9320-9322, U+9324, U+9326-9329, U+932b-932c, U+932f, U+9331-9332, U+9335-9336, U+933e, U+9340-9341, U+934a-9360, U+9362-9363, U+9365-936b, U+936e, U+9375, U+937e, U+9382, U+938a, U+938c, U+938f, U+9393-9394, U+9396-9397, U+939a, U+93a2, U+93a7, U+93ac-93cd, U+93d0-93d1, U+93d6-93d8, U+93de-93df, U+93e1-93e2, U+93e4, U+93f8, U+93fb, U+93fd, U+940e-941a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.31.woff2) format('woff2');
  unicode-range: U+9163-9164, U+9169, U+9170, U+9172, U+9174, U+9179-917a, U+917d-917e, U+9182-9183, U+9185, U+918c-918d, U+9190-9191, U+919a, U+919c, U+91a1-91a4, U+91a8, U+91aa-91af, U+91b4-91b5, U+91b8, U+91ba, U+91be, U+91c0-91c1, U+91c6, U+91c8, U+91cb, U+91d0, U+91d2, U+91d7-91d8, U+91dd, U+91e3, U+91e6-91e7, U+91ed, U+91f0, U+91f5, U+91f9, U+9200, U+9205, U+9207-920a, U+920d-920e, U+9210, U+9214-9215, U+921c, U+921e, U+9221, U+9223-9227, U+9229-922a, U+922d, U+9234-9235, U+9237, U+9239-923a, U+923c-9240, U+9244-9246, U+9249, U+924e-924f, U+9251, U+9253, U+9257, U+925b, U+925e, U+9262, U+9264-9266, U+9268, U+926c, U+926f, U+9271, U+927b, U+927e, U+9280, U+9283, U+9285-928a, U+928e, U+9291, U+9293, U+9296, U+9298, U+929c-929d, U+92a8, U+92ab-92ae, U+92b3, U+92b6-92b7, U+92b9, U+92c1, U+92c5-92c6, U+92c8, U+92cc, U+92d0, U+92d2, U+92e4, U+92ea;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.32.woff2) format('woff2');
  unicode-range: U+9004, U+900b, U+9011, U+9015-9016, U+901e, U+9021, U+9026, U+902d, U+902f, U+9031, U+9035-9036, U+9039-903a, U+9041, U+9044-9046, U+904a, U+904f-9052, U+9054-9055, U+9058-9059, U+905b-905e, U+9060-9062, U+9068-9069, U+906f, U+9072, U+9074, U+9076-907a, U+907c-907d, U+9081, U+9083, U+9085, U+9087-908b, U+908f, U+9095, U+9097, U+9099-909b, U+909d, U+90a0-90a1, U+90a8-90a9, U+90ac, U+90b0, U+90b2-90b4, U+90b6, U+90b8, U+90ba, U+90bd-90be, U+90c3-90c5, U+90c7-90c8, U+90cf-90d0, U+90d3, U+90d5, U+90d7, U+90da-90dc, U+90de, U+90e2, U+90e4, U+90e6-90e7, U+90ea-90eb, U+90ef, U+90f4-90f5, U+90f7, U+90fe-9100, U+9104, U+9109, U+910c, U+9112, U+9114-9115, U+9118, U+911c, U+911e, U+9120, U+9122-9123, U+9127, U+912d, U+912f-9132, U+9139-913a, U+9143, U+9146, U+9149-914a, U+914c, U+914e-9150, U+9154, U+9157, U+915a, U+915d-915e, U+9161-9162;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.33.woff2) format('woff2');
  unicode-range: U+8e41-8e42, U+8e47, U+8e49-8e4b, U+8e50-8e53, U+8e59-8e5a, U+8e5f-8e60, U+8e64, U+8e69, U+8e6c, U+8e70, U+8e74, U+8e76, U+8e7a-8e7c, U+8e7f, U+8e84-8e85, U+8e87, U+8e89, U+8e8b, U+8e8d, U+8e8f-8e90, U+8e94, U+8e99, U+8e9c, U+8e9e, U+8eaa, U+8eac, U+8eb0, U+8eb6, U+8ec0, U+8ec6, U+8eca-8ece, U+8ed2, U+8eda, U+8edf, U+8ee2, U+8eeb, U+8ef8, U+8efb-8efe, U+8f03, U+8f09, U+8f0b, U+8f12-8f15, U+8f1b, U+8f1d, U+8f1f, U+8f29-8f2a, U+8f2f, U+8f36, U+8f38, U+8f3b, U+8f3e-8f3f, U+8f44-8f45, U+8f49, U+8f4d-8f4e, U+8f5f, U+8f6b, U+8f6d, U+8f71-8f73, U+8f75-8f76, U+8f78-8f7a, U+8f7c, U+8f7e, U+8f81-8f82, U+8f84, U+8f87, U+8f8a-8f8b, U+8f8d-8f8f, U+8f94-8f95, U+8f97-8f9a, U+8fa6, U+8fad-8faf, U+8fb2, U+8fb5-8fb7, U+8fba-8fbc, U+8fbf, U+8fc2, U+8fcb, U+8fcd, U+8fd3, U+8fd5, U+8fd7, U+8fda, U+8fe2-8fe5, U+8fe8-8fe9, U+8fee, U+8ff3-8ff4, U+8ff8, U+8ffa;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.34.woff2) format('woff2');
  unicode-range: U+8cbd, U+8cbf-8cc4, U+8cc7-8cc8, U+8cca, U+8ccd, U+8cd1, U+8cd3, U+8cdb-8cdc, U+8cde, U+8ce0, U+8ce2-8ce4, U+8ce6-8ce8, U+8cea, U+8ced, U+8cf4, U+8cf8, U+8cfa, U+8cfc-8cfd, U+8d04-8d05, U+8d07-8d08, U+8d0a, U+8d0d, U+8d0f, U+8d13-8d14, U+8d16, U+8d1b, U+8d20, U+8d30, U+8d32-8d33, U+8d36, U+8d3b, U+8d3d, U+8d40, U+8d42-8d43, U+8d45-8d46, U+8d48-8d4a, U+8d4d, U+8d51, U+8d53, U+8d55, U+8d59, U+8d5c-8d5d, U+8d5f, U+8d61, U+8d66-8d67, U+8d6a, U+8d6d, U+8d71, U+8d73, U+8d84, U+8d90-8d91, U+8d94-8d95, U+8d99, U+8da8, U+8daf, U+8db1, U+8db5, U+8db8, U+8dba, U+8dbc, U+8dbf, U+8dc2, U+8dc4, U+8dc6, U+8dcb, U+8dce-8dcf, U+8dd6-8dd7, U+8dda-8ddb, U+8dde, U+8de1, U+8de3-8de4, U+8de9, U+8deb-8dec, U+8df0-8df1, U+8df6-8dfd, U+8e05, U+8e07, U+8e09-8e0a, U+8e0c, U+8e0e, U+8e10, U+8e14, U+8e1d-8e1f, U+8e23, U+8e26, U+8e2b-8e31, U+8e34-8e35, U+8e39-8e3a, U+8e3d, U+8e40;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.35.woff2) format('woff2');
  unicode-range: U+8b80, U+8b83, U+8b8a, U+8b8c, U+8b90, U+8b93, U+8b99-8b9a, U+8ba0, U+8ba3, U+8ba5-8ba7, U+8baa-8bac, U+8bb4-8bb5, U+8bb7, U+8bb9, U+8bc2-8bc3, U+8bc5, U+8bcb-8bcc, U+8bce-8bd0, U+8bd2-8bd4, U+8bd6, U+8bd8-8bd9, U+8bdc, U+8bdf, U+8be3-8be4, U+8be7-8be9, U+8beb-8bec, U+8bee, U+8bf0, U+8bf2-8bf3, U+8bf6, U+8bf9, U+8bfc-8bfd, U+8bff-8c00, U+8c02, U+8c04, U+8c06-8c07, U+8c0c, U+8c0f, U+8c11-8c12, U+8c14-8c1b, U+8c1d-8c21, U+8c24-8c25, U+8c27, U+8c2a-8c2c, U+8c2e-8c30, U+8c32-8c36, U+8c3f, U+8c47-8c4c, U+8c4e-8c50, U+8c54-8c56, U+8c62, U+8c68, U+8c6c, U+8c73, U+8c78, U+8c7a, U+8c82, U+8c85, U+8c89-8c8a, U+8c8d-8c8e, U+8c90, U+8c93-8c94, U+8c98, U+8c9d-8c9e, U+8ca0-8ca2, U+8ca7-8cac, U+8caf-8cb0, U+8cb3-8cb4, U+8cb6-8cb9, U+8cbb-8cbc;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.36.woff2) format('woff2');
  unicode-range: U+8a15-8a18, U+8a1a-8a1b, U+8a1d, U+8a1f, U+8a22-8a23, U+8a25, U+8a2b, U+8a2d, U+8a31, U+8a33-8a34, U+8a36-8a38, U+8a3a, U+8a3c, U+8a3e, U+8a40-8a41, U+8a46, U+8a48, U+8a50, U+8a52, U+8a54-8a55, U+8a58, U+8a5b, U+8a5d-8a63, U+8a66, U+8a69-8a6b, U+8a6d-8a6e, U+8a70, U+8a72-8a73, U+8a7a, U+8a85, U+8a87, U+8a8a, U+8a8c-8a8d, U+8a90-8a92, U+8a95, U+8a98, U+8aa0-8aa1, U+8aa3-8aa6, U+8aa8-8aa9, U+8aac-8aae, U+8ab0, U+8ab2, U+8ab8-8ab9, U+8abc, U+8abe-8abf, U+8ac7, U+8acf, U+8ad2, U+8ad6-8ad7, U+8adb-8adc, U+8adf, U+8ae1, U+8ae6-8ae8, U+8aeb, U+8aed-8aee, U+8af1, U+8af3-8af4, U+8af7-8af8, U+8afa, U+8afe, U+8b00-8b02, U+8b07, U+8b0a, U+8b0c, U+8b0e, U+8b10, U+8b17, U+8b19, U+8b1b, U+8b1d, U+8b20-8b21, U+8b26, U+8b28, U+8b2c, U+8b33, U+8b39, U+8b3e-8b3f, U+8b41, U+8b45, U+8b49, U+8b4c, U+8b4f, U+8b57-8b58, U+8b5a, U+8b5c, U+8b5e, U+8b60, U+8b6c, U+8b6f-8b70, U+8b72, U+8b74, U+8b77, U+8b7d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.37.woff2) format('woff2');
  unicode-range: U+8882, U+8884-8886, U+8888, U+888f, U+8892-8893, U+889b, U+88a2, U+88a4, U+88a6, U+88a8, U+88aa, U+88ae, U+88b1, U+88b4, U+88b7, U+88bc, U+88c0, U+88c6-88c9, U+88ce-88cf, U+88d1-88d3, U+88d8, U+88db-88dd, U+88df, U+88e1-88e3, U+88e5, U+88e8, U+88ec, U+88f0-88f1, U+88f3-88f4, U+88fc-88fe, U+8900, U+8902, U+8906-8907, U+8909-890c, U+8912-8915, U+8918-891b, U+8921, U+8925, U+892b, U+8930, U+8932, U+8934, U+8936, U+893b, U+893d, U+8941, U+894c, U+8955-8956, U+8959, U+895c, U+895e-8960, U+8966, U+896a, U+896c, U+896f-8970, U+8972, U+897b, U+897e, U+8980, U+8983, U+8985, U+8987-8988, U+898c, U+898f, U+8993, U+8997, U+899a, U+89a1, U+89a7, U+89a9-89aa, U+89b2-89b3, U+89b7, U+89c0, U+89c7, U+89ca-89cc, U+89ce-89d1, U+89d6, U+89da, U+89dc, U+89de, U+89e5, U+89e7, U+89eb, U+89ef, U+89f1, U+89f3-89f4, U+89f8, U+89ff, U+8a01-8a03, U+8a07-8a0a, U+8a0e-8a0f, U+8a13;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.38.woff2) format('woff2');
  unicode-range: U+86f4, U+86f8-86f9, U+86fb, U+86fe, U+8703, U+8706-870a, U+870d, U+8711-8713, U+871a, U+871e, U+8722-8723, U+8725, U+8729, U+872e, U+8731, U+8734, U+8737, U+873a-873b, U+873e-8740, U+8742, U+8747-8748, U+8753, U+8755, U+8757-8758, U+875d, U+875f, U+8762-8766, U+8768, U+876e, U+8770, U+8772, U+8775, U+8778, U+877b-877e, U+8782, U+8785, U+8788, U+878b, U+8793, U+8797, U+879a, U+879e-87a0, U+87a2-87a3, U+87a8, U+87ab-87ad, U+87af, U+87b3, U+87b5, U+87bd, U+87c0, U+87c4, U+87c6, U+87ca-87cb, U+87d1-87d2, U+87db-87dc, U+87de, U+87e0, U+87e5, U+87ea, U+87ec, U+87ee, U+87f2-87f3, U+87fb, U+87fd-87fe, U+8802-8803, U+8805, U+880a-880b, U+880d, U+8813-8816, U+8819, U+881b, U+881f, U+8821, U+8823, U+8831-8832, U+8835-8836, U+8839, U+883b-883c, U+8844, U+8846, U+884a, U+884e, U+8852-8853, U+8855, U+8859, U+885b, U+885d-885e, U+8862, U+8864, U+8869-886a, U+886e-886f, U+8872, U+8879, U+887d-887f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.39.woff2) format('woff2');
  unicode-range: U+8548, U+854e, U+8553, U+8556-8557, U+8559, U+855e, U+8561, U+8564-8565, U+8568-856a, U+856d, U+856f-8570, U+8572, U+8576, U+8579-857b, U+8580, U+8585-8586, U+8588, U+858a, U+858f, U+8591, U+8594, U+8599, U+859c, U+85a2, U+85a4, U+85a6, U+85a8-85a9, U+85ab-85ac, U+85ae, U+85b7-85b9, U+85be, U+85c1, U+85c7, U+85cd, U+85d0, U+85d3, U+85d5, U+85dc-85dd, U+85df-85e0, U+85e5-85e6, U+85e8-85ea, U+85f4, U+85f9, U+85fe-85ff, U+8602, U+8605-8607, U+860a-860b, U+8616, U+8618, U+861a, U+8627, U+8629, U+862d, U+8638, U+863c, U+863f, U+864d, U+864f, U+8652-8655, U+865b-865c, U+865f, U+8662, U+8667, U+866c, U+866e, U+8671, U+8675, U+867a-867c, U+867f, U+868b, U+868d, U+8693, U+869c-869d, U+86a1, U+86a3-86a4, U+86a7-86a9, U+86ac, U+86af-86b1, U+86b4-86b6, U+86ba, U+86c0, U+86c4, U+86c6, U+86c9-86ca, U+86cd-86d1, U+86d4, U+86d8, U+86de-86df, U+86e4, U+86e6, U+86e9, U+86ed, U+86ef-86f3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.40.woff2) format('woff2');
  unicode-range: U+83c5, U+83c8-83c9, U+83cb, U+83d1, U+83d3-83d6, U+83d8, U+83db, U+83dd, U+83df, U+83e1, U+83e5, U+83ea-83eb, U+83f0, U+83f4, U+83f8-83f9, U+83fb, U+83fd, U+83ff, U+8401, U+8406, U+840a-840b, U+840f, U+8411, U+8418, U+841c, U+8420, U+8422-8424, U+8426, U+8429, U+842c, U+8438-8439, U+843b-843c, U+843f, U+8446-8447, U+8449, U+844e, U+8451-8452, U+8456, U+8459-845a, U+845c, U+8462, U+8466, U+846d, U+846f-8470, U+8473, U+8476-8478, U+847a, U+847d, U+8484-8485, U+8487, U+8489, U+848c, U+848e, U+8490, U+8493-8494, U+8497, U+849b, U+849e-849f, U+84a1, U+84a5, U+84a8, U+84af, U+84b4, U+84b9-84bf, U+84c1-84c2, U+84c5-84c7, U+84ca-84cb, U+84cd, U+84d0-84d1, U+84d3, U+84d6, U+84df-84e0, U+84e2-84e3, U+84e5-84e7, U+84ee, U+84f3, U+84f6, U+84fa, U+84fc, U+84ff-8500, U+850c, U+8511, U+8514-8515, U+8517-8518, U+851f, U+8523, U+8525-8526, U+8529, U+852b, U+852d, U+8532, U+8534-8535, U+8538-853a, U+853c, U+8543, U+8545;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.41.woff2) format('woff2');
  unicode-range: U+82bc, U+82be, U+82c0-82c2, U+82c4-82c8, U+82ca-82cc, U+82ce, U+82d0, U+82d2-82d3, U+82d5-82d6, U+82d8-82d9, U+82dc-82de, U+82e0-82e4, U+82e7, U+82e9-82eb, U+82ed-82ee, U+82f3-82f4, U+82f7-82f8, U+82fa-8301, U+8306-8308, U+830c-830d, U+830f, U+8311, U+8313-8315, U+8318, U+831a-831b, U+831d, U+8324, U+8327, U+832a, U+832c-832d, U+832f, U+8331-8334, U+833a-833c, U+8340, U+8343-8345, U+8347-8348, U+834a, U+834c, U+834f, U+8351, U+8356, U+8358-835c, U+835e, U+8360, U+8364-8366, U+8368-836a, U+836c-836e, U+8373, U+8378, U+837b-837d, U+837f-8380, U+8382, U+8388, U+838a-838b, U+8392, U+8394, U+8396, U+8398-8399, U+839b-839c, U+83a0, U+83a2-83a3, U+83a8-83aa, U+83ae-83b0, U+83b3-83b4, U+83b6, U+83b8, U+83ba, U+83bc-83bd, U+83bf-83c0, U+83c2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.42.woff2) format('woff2');
  unicode-range: U+8166-8169, U+816b, U+816d, U+8171, U+8173-8174, U+8178, U+817c-817d, U+8182, U+8188, U+8191, U+8198-819b, U+81a0, U+81a3, U+81a5-81a6, U+81a9, U+81b6, U+81ba-81bb, U+81bd, U+81bf, U+81c1, U+81c3, U+81c6, U+81c9-81ca, U+81cc-81cd, U+81d1, U+81d3-81d4, U+81d8, U+81db-81dc, U+81de-81df, U+81e5, U+81e7-81e9, U+81eb-81ec, U+81ee-81ef, U+81f5, U+81f8, U+81fa, U+81fc, U+81fe, U+8200-8202, U+8204, U+8208-820a, U+820e-8210, U+8216-8218, U+821b-821c, U+8221-8224, U+8226-8228, U+822b, U+822d, U+822f, U+8232-8234, U+8237-8238, U+823a-823b, U+823e, U+8244, U+8249, U+824b, U+824f, U+8259-825a, U+825f, U+8266, U+8268, U+826e, U+8271, U+8276-8279, U+827d, U+827f, U+8283-8284, U+8288-828a, U+828d-8291, U+8293-8294, U+8296-8298, U+829f-82a1, U+82a3-82a4, U+82a7-82ab, U+82ae, U+82b0, U+82b2, U+82b4-82b6;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.43.woff2) format('woff2');
  unicode-range: U+8016, U+8018-8019, U+801c, U+801e, U+8026-802a, U+8031, U+8034-8035, U+8037, U+8043, U+804b, U+804d, U+8052, U+8056, U+8059, U+805e, U+8061, U+8068-8069, U+806e-8074, U+8076-8078, U+807c-8080, U+8082, U+8084-8085, U+8088, U+808f, U+8093, U+809c, U+809f, U+80ab, U+80ad-80ae, U+80b1, U+80b6-80b8, U+80bc-80bd, U+80c2, U+80c4, U+80ca, U+80cd, U+80d1, U+80d4, U+80d7, U+80d9-80db, U+80dd, U+80e0, U+80e4-80e5, U+80e7-80ed, U+80ef-80f1, U+80f3-80f4, U+80fc, U+8101, U+8104-8105, U+8107-8108, U+810c-810e, U+8112-8115, U+8117-8119, U+811b-811f, U+8121-8130, U+8132-8134, U+8137, U+8139, U+813f-8140, U+8142, U+8146, U+8148, U+814d-814e, U+8151, U+8153, U+8158-815a, U+815e, U+8160;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.44.woff2) format('woff2');
  unicode-range: U+7ef0-7ef2, U+7ef6, U+7efa-7efb, U+7efe, U+7f01-7f04, U+7f08, U+7f0a-7f12, U+7f17, U+7f19, U+7f1b-7f1c, U+7f1f, U+7f21-7f23, U+7f25-7f28, U+7f2a-7f33, U+7f35-7f37, U+7f3d, U+7f42, U+7f44-7f45, U+7f4c-7f4d, U+7f52, U+7f54, U+7f58-7f59, U+7f5d, U+7f5f-7f61, U+7f63, U+7f65, U+7f68, U+7f70-7f71, U+7f73-7f75, U+7f77, U+7f79, U+7f7d-7f7e, U+7f85-7f86, U+7f88-7f89, U+7f8b-7f8c, U+7f90-7f91, U+7f94-7f96, U+7f98-7f9b, U+7f9d, U+7f9f, U+7fa3, U+7fa7-7fa9, U+7fac-7fb2, U+7fb4, U+7fb6, U+7fb8, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fca, U+7fcc, U+7fce, U+7fd2, U+7fd5, U+7fd9-7fdb, U+7fdf, U+7fe3, U+7fe5-7fe7, U+7fe9, U+7feb-7fec, U+7fee-7fef, U+7ff1, U+7ff3-7ff4, U+7ff9-7ffa, U+7ffe, U+8004, U+8006, U+800b, U+800e, U+8011-8012, U+8014;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.45.woff2) format('woff2');
  unicode-range: U+7dd2, U+7dd4, U+7dd6-7dd8, U+7dda-7de0, U+7de2-7de6, U+7de8-7ded, U+7def, U+7df1-7df5, U+7df7, U+7df9, U+7dfb-7dfc, U+7dfe-7e02, U+7e04, U+7e08-7e0b, U+7e12, U+7e1b, U+7e1e, U+7e20, U+7e22-7e23, U+7e26, U+7e29, U+7e2b, U+7e2e-7e2f, U+7e31, U+7e37, U+7e39-7e3e, U+7e40, U+7e43-7e44, U+7e46-7e47, U+7e4a-7e4b, U+7e4d-7e4e, U+7e51, U+7e54-7e56, U+7e58-7e5b, U+7e5d-7e5e, U+7e61, U+7e66-7e67, U+7e69-7e6b, U+7e6d, U+7e70, U+7e73, U+7e77, U+7e79, U+7e7b-7e7d, U+7e81-7e82, U+7e8c-7e8d, U+7e8f, U+7e92-7e94, U+7e96, U+7e98, U+7e9a-7e9c, U+7e9e-7e9f, U+7ea1, U+7ea3, U+7ea5, U+7ea8-7ea9, U+7eab, U+7ead-7eae, U+7eb0, U+7ebb, U+7ebe, U+7ec0-7ec2, U+7ec9, U+7ecb-7ecc, U+7ed0, U+7ed4, U+7ed7, U+7edb, U+7ee0-7ee2, U+7ee5-7ee6, U+7ee8, U+7eeb;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.46.woff2) format('woff2');
  unicode-range: U+7ce8, U+7cec, U+7cf0, U+7cf5-7cf9, U+7cfc, U+7cfe, U+7d00, U+7d04-7d0b, U+7d0d, U+7d10-7d14, U+7d17-7d19, U+7d1b-7d1f, U+7d21, U+7d24-7d26, U+7d28-7d2a, U+7d2c-7d2e, U+7d30-7d31, U+7d33, U+7d35-7d36, U+7d38-7d3a, U+7d40, U+7d42-7d44, U+7d46, U+7d4b-7d4c, U+7d4f, U+7d51, U+7d54-7d56, U+7d58, U+7d5b-7d5c, U+7d5e, U+7d61-7d63, U+7d66, U+7d68, U+7d6a-7d6c, U+7d6f, U+7d71-7d73, U+7d75-7d77, U+7d79-7d7a, U+7d7e, U+7d81, U+7d84-7d8b, U+7d8d, U+7d8f, U+7d91, U+7d94, U+7d96, U+7d98-7d9a, U+7d9c-7da0, U+7da2, U+7da6, U+7daa-7db1, U+7db4-7db8, U+7dba-7dbf, U+7dc1, U+7dc4, U+7dc7-7dc8, U+7dca-7dcd, U+7dcf, U+7dd1;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.47.woff2) format('woff2');
  unicode-range: U+7bd3-7bd4, U+7bd9-7bda, U+7bdd, U+7be0-7be1, U+7be4-7be6, U+7be9-7bea, U+7bef, U+7bf4, U+7bf6, U+7bfc, U+7bfe, U+7c01, U+7c03, U+7c07-7c08, U+7c0a-7c0d, U+7c0f, U+7c11, U+7c15-7c16, U+7c19, U+7c1e-7c21, U+7c23-7c24, U+7c26, U+7c28-7c33, U+7c35, U+7c37-7c3b, U+7c3d-7c3e, U+7c40-7c41, U+7c43, U+7c47-7c48, U+7c4c, U+7c50, U+7c53-7c54, U+7c59, U+7c5f-7c60, U+7c63-7c65, U+7c6c, U+7c6e, U+7c72, U+7c74, U+7c79-7c7a, U+7c7c, U+7c81-7c82, U+7c84-7c85, U+7c88, U+7c8a-7c91, U+7c93-7c96, U+7c99, U+7c9b-7c9e, U+7ca0-7ca2, U+7ca6-7ca9, U+7cac, U+7caf-7cb3, U+7cb5-7cb7, U+7cba-7cbd, U+7cbf-7cc2, U+7cc5, U+7cc7-7cc9, U+7ccc-7ccd, U+7cd7, U+7cdc, U+7cde, U+7ce0, U+7ce4-7ce5, U+7ce7;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.48.woff2) format('woff2');
  unicode-range: U+7ae6, U+7af4-7af7, U+7afa-7afb, U+7afd-7b0a, U+7b0c, U+7b0e-7b0f, U+7b13, U+7b15-7b16, U+7b18-7b19, U+7b1e-7b20, U+7b22-7b25, U+7b29-7b2b, U+7b2d-7b2e, U+7b30-7b3b, U+7b3e-7b3f, U+7b41-7b42, U+7b44-7b47, U+7b4a, U+7b4c-7b50, U+7b58, U+7b5a, U+7b5c, U+7b60, U+7b66-7b67, U+7b69, U+7b6c-7b6f, U+7b72-7b76, U+7b7b-7b7d, U+7b7f, U+7b82, U+7b85, U+7b87, U+7b8b-7b96, U+7b98-7b99, U+7b9b-7b9f, U+7ba2-7ba4, U+7ba6-7bac, U+7bae-7bb0, U+7bb4, U+7bb7-7bb9, U+7bbb, U+7bc0-7bc1, U+7bc3-7bc4, U+7bc6, U+7bc8-7bcc, U+7bd1;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.49.woff2) format('woff2');
  unicode-range: U+798b-798e, U+7992, U+7994-7995, U+7997-7998, U+799a-799c, U+799f, U+79a3-79a6, U+79a8-79ac, U+79ae-79b1, U+79b3-79b5, U+79b8, U+79ba, U+79bf, U+79c2, U+79c6, U+79c8, U+79cf, U+79d5-79d6, U+79dd-79de, U+79e3, U+79e7-79e8, U+79eb, U+79ed, U+79f4, U+79f7-79f8, U+79fa, U+79fe, U+7a02-7a03, U+7a05, U+7a0a, U+7a14, U+7a17, U+7a19, U+7a1c, U+7a1e-7a1f, U+7a23, U+7a25-7a26, U+7a2c, U+7a2e, U+7a30-7a32, U+7a36-7a37, U+7a39, U+7a3c, U+7a40, U+7a42, U+7a47, U+7a49, U+7a4c-7a4f, U+7a51, U+7a55, U+7a5b, U+7a5d-7a5e, U+7a62-7a63, U+7a66, U+7a68-7a69, U+7a6b, U+7a70, U+7a78, U+7a80, U+7a85-7a88, U+7a8a, U+7a90, U+7a93-7a96, U+7a98, U+7a9b-7a9c, U+7a9e, U+7aa0-7aa1, U+7aa3, U+7aa8-7aaa, U+7aac-7ab0, U+7ab3, U+7ab8, U+7aba, U+7abd-7abf, U+7ac4-7ac5, U+7ac7-7ac8, U+7aca, U+7ad1-7ad2, U+7ada-7add, U+7ae1, U+7ae4;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.50.woff2) format('woff2');
  unicode-range: U+784c, U+784e-7854, U+7856-7857, U+7859-785a, U+7865, U+7869-786a, U+786d, U+786f, U+7876-7877, U+787c, U+787e-787f, U+7881, U+7887-7889, U+7893-7894, U+7898-789e, U+78a1, U+78a3, U+78a5, U+78a9, U+78ad, U+78b2, U+78b4, U+78b6, U+78b9-78ba, U+78bc, U+78bf, U+78c3, U+78c9, U+78cb, U+78d0-78d2, U+78d4, U+78d9-78da, U+78dc, U+78de, U+78e1, U+78e5-78e6, U+78ea, U+78ec, U+78ef, U+78f1-78f2, U+78f4, U+78fa-78fb, U+78fe, U+7901-7902, U+7905, U+7907, U+7909, U+790b-790c, U+790e, U+7910, U+7913, U+7919-791b, U+791e-791f, U+7921, U+7924, U+7926, U+792a-792b, U+7934, U+7936, U+7939, U+793b, U+793d, U+7940, U+7942-7943, U+7945-7947, U+7949-794a, U+794c, U+794e-7951, U+7953-7955, U+7957-795a, U+795c, U+795f-7960, U+7962, U+7964, U+7966-7967, U+7969, U+796b, U+796f, U+7972, U+7974, U+7979, U+797b-797c, U+797e-7980, U+7982, U+7986-7987, U+7989-798a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.51.woff2) format('woff2');
  unicode-range: U+7722, U+7726, U+7728, U+772b-7730, U+7732-7736, U+7739-773a, U+773d-773f, U+7743, U+7746-7747, U+774c-774f, U+7751-7752, U+7758-775a, U+775c-775e, U+7762, U+7765-7766, U+7768-776a, U+776c-776d, U+7771-7772, U+777a, U+777c-777e, U+7780, U+7785, U+7787, U+778b-778d, U+778f-7791, U+7793, U+779e-77a0, U+77a2, U+77a5, U+77ad, U+77af, U+77b4-77b7, U+77bd-77c0, U+77c2, U+77c5, U+77c7, U+77cd, U+77d6-77d7, U+77d9-77da, U+77dd-77de, U+77e7, U+77ea, U+77ec, U+77ef, U+77f8, U+77fb, U+77fd-77fe, U+7800, U+7803, U+7806, U+7809, U+780f-7812, U+7815, U+7817-7818, U+781a-781f, U+7821-7823, U+7825-7827, U+7829, U+782b-7830, U+7832-7833, U+7835, U+7837, U+7839-783c, U+783e, U+7841-7844, U+7847-7849, U+784b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.52.woff2) format('woff2');
  unicode-range: U+7613-7619, U+761b-761d, U+761f-7622, U+7625, U+7627-762a, U+762e-7630, U+7632-7635, U+7638-763a, U+763c-763d, U+763f-7640, U+7642-7643, U+7647-7648, U+764d-764e, U+7652, U+7654, U+7658, U+765a, U+765c, U+765e-765f, U+7661-7663, U+7665, U+7669, U+766c, U+766e-766f, U+7671-7673, U+7675-7676, U+7678-767a, U+767f, U+7681, U+7683, U+7688, U+768a-768c, U+768e, U+7690-7692, U+7695, U+7698, U+769a-769b, U+769d-76a0, U+76a2, U+76a4-76a7, U+76ab-76ac, U+76af-76b0, U+76b2, U+76b4-76b5, U+76ba-76bb, U+76bf, U+76c2-76c3, U+76c5, U+76c9, U+76cc-76ce, U+76dc-76de, U+76e1-76ea, U+76f1, U+76f9-76fb, U+76fd, U+76ff-7700, U+7703-7704, U+7707-7708, U+770c-770f, U+7712, U+7714, U+7716, U+7719-771b, U+771e, U+7721;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.53.woff2) format('woff2');
  unicode-range: U+750d, U+750f, U+7511, U+7513, U+7515, U+7517, U+7519, U+7521-7527, U+752a, U+752c-752d, U+752f, U+7534, U+7536, U+753a, U+753e, U+7540, U+7544, U+7547-754b, U+754d-754e, U+7550-7553, U+7556-7557, U+755a-755b, U+755d-755e, U+7560, U+7562, U+7564, U+7566-7568, U+756b-756c, U+756f-7573, U+7575, U+7579-757c, U+757e-757f, U+7581-7584, U+7587, U+7589-758e, U+7590, U+7592, U+7594, U+7596, U+7599-759a, U+759d, U+759f-75a0, U+75a3, U+75a5, U+75a8, U+75ac-75ad, U+75b0-75b1, U+75b3-75b5, U+75b8, U+75bd, U+75c1-75c4, U+75c8-75ca, U+75cc-75cd, U+75d4, U+75d6, U+75d9, U+75de, U+75e0, U+75e2-75e4, U+75e6-75ea, U+75f1-75f3, U+75f7, U+75f9-75fa, U+75fc, U+75fe-7601, U+7603, U+7605-7606, U+7608-760e, U+7610-7612;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.54.woff2) format('woff2');
  unicode-range: U+73f0, U+73f2, U+73f4-73f5, U+73f7, U+73f9-73fa, U+73fc-73fd, U+73ff-7402, U+7404, U+7407-7408, U+740a-740f, U+7418, U+741a-741c, U+741e, U+7424-7425, U+7428-7429, U+742c-7430, U+7432, U+7435-7436, U+7438-743b, U+743e-7441, U+7443-7446, U+7448, U+744a-744b, U+7452, U+7457, U+745b, U+745d, U+7460, U+7462-7465, U+7467-746a, U+746d, U+746f, U+7471, U+7473-7474, U+7477, U+747a, U+747e, U+7481-7482, U+7484, U+7486, U+7488-748b, U+748e-748f, U+7493, U+7498, U+749a, U+749c-74a0, U+74a3, U+74a6, U+74a9-74aa, U+74ae, U+74b0-74b2, U+74b6, U+74b8-74ba, U+74bd, U+74bf, U+74c1, U+74c3, U+74c5, U+74c8, U+74ca, U+74cc, U+74cf, U+74d1-74d2, U+74d4-74d5, U+74d8-74db, U+74de-74e0, U+74e2, U+74e4-74e5, U+74e7-74e9, U+74ee-74ef, U+74f4, U+74ff, U+7501, U+7503, U+7505, U+7508;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.55.woff2) format('woff2');
  unicode-range: U+72e6, U+72e8, U+72ef-72f0, U+72f2-72f4, U+72f6-72f7, U+72f9-72fb, U+72fd, U+7300-7304, U+7307, U+730a-730c, U+7313-7317, U+731d-7322, U+7327, U+7329, U+732c-732d, U+7330-7331, U+7333, U+7335-7337, U+7339, U+733d-733e, U+7340, U+7342, U+7344-7345, U+734a, U+734d-7350, U+7352, U+7355, U+7357, U+7359, U+735f-7360, U+7362-7363, U+7365, U+7368, U+736c-736d, U+736f-7370, U+7372, U+7374-7376, U+7378, U+737a-737b, U+737d-737e, U+7382-7383, U+7386, U+7388, U+738a, U+738c-7393, U+7395, U+7397-739a, U+739c, U+739e, U+73a0-73a3, U+73a5-73a8, U+73aa, U+73ad, U+73b1, U+73b3, U+73b6-73b7, U+73b9, U+73c2, U+73c5-73c9, U+73cc, U+73ce-73d0, U+73d2, U+73d6, U+73d9, U+73db-73de, U+73e3, U+73e5-73ea, U+73ee-73ef;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.56.woff2) format('woff2');
  unicode-range: U+71a8, U+71af, U+71b1-71bc, U+71be, U+71c1-71c2, U+71c4, U+71c8-71cb, U+71ce-71d0, U+71d2, U+71d4, U+71d9-71da, U+71dc, U+71df-71e0, U+71e6-71e8, U+71ea, U+71ed-71ee, U+71f4, U+71f6, U+71f9, U+71fb-71fc, U+71ff-7200, U+7207, U+720c-720d, U+7210, U+7216, U+721a-721e, U+7223, U+7228, U+722b, U+722d-722e, U+7230, U+7232, U+723a-723c, U+723e-7242, U+7246, U+724b, U+724d-724e, U+7252, U+7256, U+7258, U+725a, U+725c-725d, U+7260, U+7264-7266, U+726a, U+726c, U+726e-726f, U+7271, U+7273-7274, U+7278, U+727b, U+727d-727e, U+7281-7282, U+7284, U+7287, U+728a, U+728d, U+728f, U+7292, U+729b, U+729f-72a0, U+72a7, U+72ad-72ae, U+72b0-72b5, U+72b7-72b8, U+72ba-72be, U+72c0-72c1, U+72c3, U+72c5-72c6, U+72c8, U+72cc-72ce, U+72d2, U+72d6, U+72db, U+72dd-72df, U+72e1, U+72e5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.57.woff2) format('woff2');
  unicode-range: U+700b, U+700d, U+7015, U+7018, U+701b, U+701d-701f, U+7023, U+7026-7028, U+702c, U+702e-7030, U+7035, U+7037, U+7039-703a, U+703c-703e, U+7044, U+7049-704b, U+704f, U+7051, U+7058, U+705a, U+705c-705e, U+7061, U+7064, U+7066, U+706c, U+707d, U+7080-7081, U+7085-7086, U+708a, U+708f, U+7091, U+7094-7095, U+7098-7099, U+709c-709d, U+709f, U+70a4, U+70a9-70aa, U+70af-70b2, U+70b4-70b7, U+70bb, U+70c0, U+70c3, U+70c7, U+70cb, U+70ce-70cf, U+70d4, U+70d9-70da, U+70dc-70dd, U+70e0, U+70e9, U+70ec, U+70f7, U+70fa, U+70fd, U+70ff, U+7104, U+7108-7109, U+710c, U+7110, U+7113-7114, U+7116-7118, U+711c, U+711e, U+7120, U+712e-712f, U+7131, U+713c, U+7142, U+7144-7147, U+7149-714b, U+7150, U+7152, U+7155-7156, U+7159-715a, U+715c, U+7161, U+7165-7166, U+7168-7169, U+716d, U+7173-7174, U+7176, U+7178, U+717a, U+717d, U+717f-7180, U+7184, U+7186-7188, U+7192, U+7198, U+719c, U+71a0, U+71a4-71a5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.58.woff2) format('woff2');
  unicode-range: U+6ed9, U+6edb, U+6edd, U+6edf-6ee0, U+6ee2, U+6ee6, U+6eea, U+6eec, U+6eee-6eef, U+6ef2-6ef3, U+6ef7-6efa, U+6efe, U+6f01, U+6f03, U+6f08-6f09, U+6f15-6f16, U+6f19, U+6f22-6f25, U+6f28-6f2a, U+6f2c-6f2d, U+6f2f, U+6f32, U+6f36-6f38, U+6f3f, U+6f43-6f46, U+6f48, U+6f4b, U+6f4e-6f4f, U+6f51, U+6f54-6f57, U+6f59-6f5b, U+6f5e-6f5f, U+6f61, U+6f64-6f67, U+6f69-6f6c, U+6f6f-6f72, U+6f74-6f76, U+6f78-6f7e, U+6f80-6f83, U+6f86, U+6f89, U+6f8b-6f8d, U+6f90, U+6f92, U+6f94, U+6f97-6f98, U+6f9b, U+6fa3-6fa5, U+6fa7, U+6faa, U+6faf, U+6fb1, U+6fb4, U+6fb6, U+6fb9, U+6fc1-6fcb, U+6fd1-6fd3, U+6fd5, U+6fdb, U+6fde-6fe1, U+6fe4, U+6fe9, U+6feb-6fec, U+6fee-6ff1, U+6ffa, U+6ffe, U+7005-7006, U+7009;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.59.woff2) format('woff2');
  unicode-range: U+6dc3, U+6dc5-6dc6, U+6dc9, U+6dcc, U+6dcf, U+6dd2-6dd3, U+6dd6, U+6dd9-6dde, U+6de0, U+6de4, U+6de6, U+6de8-6dea, U+6dec, U+6def-6df0, U+6df5-6df6, U+6df8, U+6dfa, U+6dfc, U+6e03-6e04, U+6e07-6e09, U+6e0b-6e0c, U+6e0e, U+6e11, U+6e13, U+6e15-6e16, U+6e19-6e1b, U+6e1e-6e1f, U+6e22, U+6e25-6e27, U+6e2b-6e2c, U+6e36-6e37, U+6e39-6e3a, U+6e3c-6e41, U+6e44-6e45, U+6e47, U+6e49-6e4b, U+6e4d-6e4e, U+6e51, U+6e53-6e55, U+6e5c-6e5f, U+6e61-6e63, U+6e65-6e67, U+6e6a-6e6b, U+6e6d-6e70, U+6e72-6e74, U+6e76-6e78, U+6e7c, U+6e80-6e82, U+6e86-6e87, U+6e89, U+6e8d, U+6e8f, U+6e96, U+6e98, U+6e9d-6e9f, U+6ea1, U+6ea5-6ea7, U+6eab, U+6eb1-6eb2, U+6eb4, U+6eb7, U+6ebb-6ebd, U+6ebf-6ec6, U+6ec8-6ec9, U+6ecc, U+6ecf-6ed0, U+6ed3-6ed4, U+6ed7-6ed8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.60.woff2) format('woff2');
  unicode-range: U+6cb1-6cb2, U+6cb4-6cb5, U+6cb7, U+6cba, U+6cbc-6cbd, U+6cc1-6cc3, U+6cc5-6cc7, U+6cd0-6cd4, U+6cd6-6cd7, U+6cd9-6cda, U+6cde-6ce0, U+6ce4, U+6ce6, U+6ce9, U+6ceb-6cef, U+6cf1-6cf2, U+6cf6-6cf7, U+6cfa, U+6cfe, U+6d03-6d05, U+6d07-6d08, U+6d0a, U+6d0c, U+6d0e-6d11, U+6d13-6d14, U+6d16, U+6d18-6d1a, U+6d1c, U+6d1f, U+6d22-6d23, U+6d26-6d29, U+6d2b, U+6d2e-6d30, U+6d33, U+6d35-6d36, U+6d38-6d3a, U+6d3c, U+6d3f, U+6d42-6d44, U+6d48-6d49, U+6d4d, U+6d50, U+6d52, U+6d54, U+6d56-6d58, U+6d5a-6d5c, U+6d5e, U+6d60-6d61, U+6d63-6d65, U+6d67, U+6d6c-6d6d, U+6d6f, U+6d75, U+6d7b-6d7d, U+6d87, U+6d8a, U+6d8e, U+6d90-6d9a, U+6d9c-6da0, U+6da2-6da3, U+6da7, U+6daa-6dac, U+6dae, U+6db3-6db4, U+6db6, U+6db8, U+6dbc, U+6dbf, U+6dc2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.61.woff2) format('woff2');
  unicode-range: U+6b83-6b86, U+6b89, U+6b8d, U+6b91-6b93, U+6b95, U+6b97-6b98, U+6b9a-6b9b, U+6b9e, U+6ba1-6ba4, U+6ba9-6baa, U+6bad, U+6baf-6bb0, U+6bb2-6bb3, U+6bba-6bbd, U+6bc0, U+6bc2, U+6bc6, U+6bca-6bcc, U+6bce, U+6bd0-6bd1, U+6bd3, U+6bd6-6bd8, U+6bda, U+6be1, U+6be6, U+6bec, U+6bf1, U+6bf3-6bf5, U+6bf9, U+6bfd, U+6c05-6c08, U+6c0d, U+6c10, U+6c15-6c1a, U+6c21, U+6c23-6c26, U+6c29-6c2d, U+6c30-6c33, U+6c35-6c37, U+6c39-6c3a, U+6c3c-6c3f, U+6c46, U+6c4a-6c4c, U+6c4e-6c50, U+6c54, U+6c56, U+6c59-6c5c, U+6c5e, U+6c63, U+6c67-6c69, U+6c6b, U+6c6d, U+6c6f, U+6c72-6c74, U+6c78-6c7a, U+6c7c, U+6c84-6c87, U+6c8b-6c8c, U+6c8f, U+6c91, U+6c93-6c96, U+6c98, U+6c9a, U+6c9d, U+6ca2-6ca4, U+6ca8-6ca9, U+6cac-6cae;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.62.woff2) format('woff2');
  unicode-range: U+69fe-6a01, U+6a06, U+6a09, U+6a0b, U+6a11, U+6a13, U+6a17-6a19, U+6a1b, U+6a1e, U+6a23, U+6a28-6a29, U+6a2b, U+6a2f-6a30, U+6a35, U+6a38-6a40, U+6a46-6a48, U+6a4a-6a4b, U+6a4e, U+6a50, U+6a52, U+6a5b, U+6a5e, U+6a62, U+6a65-6a67, U+6a6b, U+6a79, U+6a7c, U+6a7e-6a7f, U+6a84, U+6a86, U+6a8e, U+6a90-6a91, U+6a94, U+6a97, U+6a9c, U+6a9e, U+6aa0, U+6aa2, U+6aa4, U+6aa9, U+6aab, U+6aae-6ab0, U+6ab2-6ab3, U+6ab5, U+6ab7-6ab8, U+6aba-6abb, U+6abd, U+6abf, U+6ac2-6ac4, U+6ac6, U+6ac8, U+6acc, U+6ace, U+6ad2-6ad3, U+6ad8-6adc, U+6adf-6ae0, U+6ae4-6ae5, U+6ae7-6ae8, U+6afb, U+6b04-6b05, U+6b0d-6b13, U+6b16-6b17, U+6b19, U+6b24-6b25, U+6b2c, U+6b37-6b39, U+6b3b, U+6b3d, U+6b43, U+6b46, U+6b4e, U+6b50, U+6b53-6b54, U+6b58-6b59, U+6b5b, U+6b60, U+6b69, U+6b6d, U+6b6f-6b70, U+6b73-6b74, U+6b77-6b7a, U+6b80-6b82;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.63.woff2) format('woff2');
  unicode-range: U+68d3, U+68d7, U+68dd, U+68df, U+68e1, U+68e3-68e4, U+68e6-68ed, U+68ef-68f0, U+68f2, U+68f4, U+68f6-68f7, U+68f9, U+68fb-68fd, U+68ff-6902, U+6906-6908, U+690b, U+6910, U+691a-691c, U+691f-6920, U+6924-6925, U+692a, U+692d, U+6934, U+6939, U+693c-6945, U+694a-694b, U+6952-6954, U+6957, U+6959, U+695b, U+695d, U+695f, U+6962-6964, U+6966, U+6968-696c, U+696e-696f, U+6971, U+6973-6974, U+6978-6979, U+697d, U+697f-6980, U+6985, U+6987-698a, U+698d-698e, U+6994-6999, U+699b, U+69a3-69a4, U+69a6-69a7, U+69ab, U+69ad-69ae, U+69b1, U+69b7, U+69bb-69bc, U+69c1, U+69c3-69c5, U+69c7, U+69ca-69ce, U+69d0-69d1, U+69d3-69d4, U+69d7-69da, U+69e0, U+69e4, U+69e6, U+69ec-69ed, U+69f1-69f3, U+69f8, U+69fa-69fc;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.64.woff2) format('woff2');
  unicode-range: U+678b-678d, U+678f, U+6792-6793, U+6796, U+6798, U+679e-67a1, U+67a5, U+67a7-67a9, U+67ac-67ad, U+67b0-67b1, U+67b3, U+67b5, U+67b7, U+67b9, U+67bb-67bc, U+67c0-67c1, U+67c3, U+67c5-67ca, U+67d1-67d2, U+67d7-67d9, U+67dd-67df, U+67e2-67e4, U+67e6-67e9, U+67f0, U+67f5, U+67f7-67f8, U+67fa-67fb, U+67fd-67fe, U+6800-6801, U+6803-6804, U+6806, U+6809-680a, U+680c, U+680e, U+6812, U+681d-681f, U+6822, U+6824-6829, U+682b-682d, U+6831-6835, U+683b, U+683e, U+6840-6841, U+6844-6845, U+6849, U+684e, U+6853, U+6855-6856, U+685c-685d, U+685f-6862, U+6864, U+6866-6868, U+686b, U+686f, U+6872, U+6874, U+6877, U+687f, U+6883, U+6886, U+688f, U+689b, U+689f-68a0, U+68a2-68a3, U+68b1, U+68b6, U+68b9-68ba, U+68bc-68bf, U+68c1-68c4, U+68c6, U+68c8, U+68ca, U+68cc, U+68d0-68d1;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.65.woff2) format('woff2');
  unicode-range: U+6631, U+6633-6634, U+6636, U+663a-663b, U+663d, U+6641, U+6644-6645, U+6649, U+664c, U+664f, U+6654, U+6659, U+665b, U+665d-665e, U+6660-6667, U+6669, U+666b-666c, U+6671, U+6673, U+6677-6679, U+667c, U+6680-6681, U+6684-6685, U+6688-6689, U+668b-668e, U+6690, U+6692, U+6695, U+6698, U+669a, U+669d, U+669f-66a0, U+66a2-66a3, U+66a6, U+66aa-66ab, U+66b1-66b2, U+66b5, U+66b8-66b9, U+66bb, U+66be, U+66c1, U+66c6-66c9, U+66cc, U+66d5-66d8, U+66da-66dc, U+66de-66e2, U+66e8-66ea, U+66ec, U+66f1, U+66f3, U+66f7, U+66fa, U+66fd, U+6702, U+6705, U+670a, U+670f-6710, U+6713, U+6715, U+6719, U+6722-6723, U+6725-6727, U+6729, U+672d-672e, U+6732-6733, U+6736, U+6739, U+673b, U+673f, U+6744, U+6748, U+674c-674d, U+6753, U+6755, U+6762, U+6767, U+6769-676c, U+676e, U+6772-6773, U+6775, U+6777, U+677a-677d, U+6782-6783, U+6787, U+678a;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.66.woff2) format('woff2');
  unicode-range: U+64f1-64f2, U+64f4, U+64f7-64f8, U+64fa, U+64fc, U+64fe-64ff, U+6503, U+6509, U+650f, U+6514, U+6518, U+651c-651e, U+6522-6525, U+652a-652c, U+652e, U+6530-6532, U+6534-6535, U+6537-6538, U+653a, U+653c-653d, U+6542, U+6549-654b, U+654d-654e, U+6553-6555, U+6557-6558, U+655d, U+6564, U+6569, U+656b, U+656d-656f, U+6571, U+6573, U+6575-6576, U+6578-657e, U+6581-6583, U+6585-6586, U+6589, U+658e-658f, U+6592-6593, U+6595-6596, U+659b, U+659d, U+659f-65a1, U+65a3, U+65ab-65ac, U+65b2, U+65b6-65b7, U+65ba-65bb, U+65be-65c0, U+65c2-65c4, U+65c6-65c8, U+65cc, U+65ce, U+65d0, U+65d2-65d3, U+65d6, U+65db, U+65dd, U+65e1, U+65e3, U+65ee-65f0, U+65f3-65f5, U+65f8, U+65fb-65fc, U+65fe-6600, U+6603, U+6607, U+6609, U+660b, U+6610-6611, U+6619-661a, U+661c-661e, U+6621, U+6624, U+6626, U+662a-662c, U+662e, U+6630;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.67.woff2) format('woff2');
  unicode-range: U+63b8-63bc, U+63be, U+63c0, U+63c3-63c4, U+63c6, U+63c8, U+63cd-63ce, U+63d1, U+63d6, U+63da-63db, U+63de, U+63e0, U+63e3, U+63e9-63ea, U+63ee, U+63f2, U+63f5-63fa, U+63fc, U+63fe-6400, U+6406, U+640b-640d, U+6410, U+6414, U+6416-6417, U+641b, U+6420-6423, U+6425-6428, U+642a, U+6431-6432, U+6434-6437, U+643d-6442, U+6445, U+6448, U+6450-6452, U+645b-645f, U+6462, U+6465, U+6468, U+646d, U+646f-6471, U+6473, U+6477, U+6479-647d, U+6482-6485, U+6487-6488, U+648c, U+6490, U+6493, U+6496-649a, U+649d, U+64a0, U+64a5, U+64ab-64ac, U+64b1-64b7, U+64b9-64bb, U+64be-64c1, U+64c4, U+64c7, U+64c9-64cb, U+64d0, U+64d4, U+64d7-64d8, U+64da, U+64de, U+64e0-64e2, U+64e4, U+64e9, U+64ec, U+64f0;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.68.woff2) format('woff2');
  unicode-range: U+622c, U+622e-6230, U+6232, U+6238, U+623b, U+623d-623e, U+6243, U+6246, U+6248-6249, U+624c, U+6255, U+6259, U+625e, U+6260-6261, U+6265-6266, U+626a, U+6271, U+627a, U+627c-627d, U+6283, U+6286, U+6289, U+628e, U+6294, U+629c, U+629e-629f, U+62a1, U+62a8, U+62ba-62bb, U+62bf, U+62c2, U+62c4, U+62c8, U+62ca-62cb, U+62cf, U+62d1, U+62d7, U+62d9-62da, U+62dd, U+62e0-62e1, U+62e3-62e4, U+62e7, U+62eb, U+62ee, U+62f0, U+62f4-62f6, U+6308, U+630a-630e, U+6310, U+6312-6313, U+6317, U+6319, U+631b, U+631d-631f, U+6322, U+6326, U+6329, U+6331-6332, U+6334-6337, U+6339, U+633b-633c, U+633e-6340, U+6343, U+6347, U+634b-634e, U+6354, U+635c-635d, U+6368-6369, U+636d, U+636f-6372, U+6376, U+637a-637b, U+637d, U+6382-6383, U+6387, U+638a-638b, U+638d-638e, U+6391, U+6393-6397, U+6399, U+639b, U+639e-639f, U+63a1, U+63a3-63a4, U+63ac-63ae, U+63b1-63b5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.69.woff2) format('woff2');
  unicode-range: U+60ed-60ee, U+60f0-60f1, U+60f4, U+60f6, U+60fa, U+6100, U+6106, U+610d-610e, U+6112, U+6114-6115, U+6119, U+611c, U+6120, U+6122-6123, U+6126, U+6128-6130, U+6136-6137, U+613a, U+613d-613e, U+6144, U+6146-6147, U+614a-614b, U+6151, U+6153, U+6158, U+615a, U+615c-615d, U+615f, U+6161, U+6163-6165, U+616b-616c, U+616e, U+6171, U+6173-6177, U+617e, U+6182, U+6187, U+618a, U+618d-618e, U+6190-6191, U+6194, U+6199-619a, U+619c, U+619f, U+61a1, U+61a3-61a4, U+61a7-61a9, U+61ab-61ad, U+61b2-61b3, U+61b5-61b7, U+61ba-61bb, U+61bf, U+61c3-61c4, U+61c6-61c7, U+61c9-61cb, U+61d0-61d1, U+61d3-61d4, U+61d7, U+61da, U+61df-61e1, U+61e6, U+61ee, U+61f0, U+61f2, U+61f6-61f8, U+61fa, U+61fc-61fe, U+6200, U+6206-6207, U+6209, U+620b, U+620d-620e, U+6213-6215, U+6217, U+6219, U+621b-6223, U+6225-6226;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.70.woff2) format('woff2');
  unicode-range: U+5fc4, U+5fc9, U+5fcb, U+5fce-5fd6, U+5fda-5fde, U+5fe1-5fe2, U+5fe4-5fe5, U+5fea, U+5fed-5fee, U+5ff1-5ff3, U+5ff6, U+5ff8, U+5ffb, U+5ffe-5fff, U+6002-6006, U+600a, U+600d, U+600f, U+6014, U+6019, U+601b, U+6020, U+6023, U+6026, U+6029, U+602b, U+602e-602f, U+6031, U+6033, U+6035, U+6039, U+603f, U+6041-6043, U+6046, U+604f, U+6053-6054, U+6058-605b, U+605d-605e, U+6060, U+6063, U+6065, U+6067, U+606a-606c, U+6075, U+6078-6079, U+607b, U+607d, U+607f, U+6083, U+6085-6087, U+608a, U+608c, U+608e-608f, U+6092-6093, U+6095-6097, U+609b-609d, U+60a2, U+60a7, U+60a9-60ab, U+60ad, U+60af-60b1, U+60b3-60b6, U+60b8, U+60bb, U+60bd-60be, U+60c0-60c3, U+60c6-60c9, U+60cb, U+60ce, U+60d3-60d4, U+60d7-60db, U+60dd, U+60e1-60e4, U+60e6, U+60ea, U+60ec;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.71.woff2) format('woff2');
  unicode-range: U+5e98, U+5e9b, U+5e9d, U+5ea0-5ea5, U+5ea8, U+5eab, U+5eaf, U+5eb3, U+5eb5-5eb6, U+5eb9, U+5ebe, U+5ec1-5ec3, U+5ec6, U+5ec8, U+5ecb-5ecc, U+5ed1-5ed2, U+5ed4, U+5ed9-5edb, U+5edd, U+5edf-5ee0, U+5ee2-5ee3, U+5ee8, U+5eea, U+5eec, U+5eef-5ef0, U+5ef3-5ef4, U+5ef8, U+5efb-5efc, U+5efe-5eff, U+5f01, U+5f07, U+5f0b-5f0e, U+5f10-5f12, U+5f14, U+5f1a, U+5f22, U+5f28-5f29, U+5f2c-5f2d, U+5f35-5f36, U+5f38, U+5f3b-5f43, U+5f45-5f4a, U+5f4c-5f4e, U+5f50, U+5f54, U+5f56-5f59, U+5f5b-5f5f, U+5f61, U+5f63, U+5f65, U+5f67-5f68, U+5f6b, U+5f6e-5f6f, U+5f72-5f78, U+5f7a, U+5f7e-5f7f, U+5f82-5f83, U+5f87, U+5f89-5f8a, U+5f8d, U+5f91, U+5f93, U+5f95, U+5f98-5f99, U+5f9c, U+5f9e, U+5fa0, U+5fa6-5fa9, U+5fac-5fad, U+5faf, U+5fb3-5fb5, U+5fb9, U+5fbc;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.72.woff2) format('woff2');
  unicode-range: U+5d26-5d27, U+5d2e-5d34, U+5d3c-5d3e, U+5d41-5d44, U+5d46-5d48, U+5d4a-5d4b, U+5d4e, U+5d50, U+5d52, U+5d55-5d58, U+5d5a-5d5d, U+5d68-5d69, U+5d6b-5d6c, U+5d6f, U+5d74, U+5d7f, U+5d82-5d89, U+5d8b-5d8c, U+5d8f, U+5d92-5d93, U+5d99, U+5d9d, U+5db2, U+5db6-5db7, U+5dba, U+5dbc-5dbd, U+5dc2-5dc3, U+5dc6-5dc7, U+5dc9, U+5dcc, U+5dd2, U+5dd4, U+5dd6-5dd8, U+5ddb-5ddc, U+5de3, U+5ded, U+5def, U+5df3, U+5df6, U+5dfa-5dfd, U+5dff-5e00, U+5e07, U+5e0f, U+5e11, U+5e13-5e14, U+5e19-5e1b, U+5e22, U+5e25, U+5e28, U+5e2a, U+5e2f-5e31, U+5e33-5e34, U+5e36, U+5e39-5e3c, U+5e3e, U+5e40, U+5e44, U+5e46-5e48, U+5e4c, U+5e4f, U+5e53-5e54, U+5e57, U+5e59, U+5e5b, U+5e5e-5e5f, U+5e61, U+5e63, U+5e6a-5e6b, U+5e75, U+5e77, U+5e79-5e7a, U+5e7e, U+5e80-5e81, U+5e83, U+5e85, U+5e87, U+5e8b, U+5e91-5e92, U+5e96;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.73.woff2) format('woff2');
  unicode-range: U+5bec, U+5bee-5bf0, U+5bf2-5bf3, U+5bf5-5bf6, U+5bfe, U+5c02-5c03, U+5c05, U+5c07-5c09, U+5c0b-5c0c, U+5c0e, U+5c10, U+5c12-5c13, U+5c15, U+5c17, U+5c19, U+5c1b-5c1c, U+5c1e-5c1f, U+5c22, U+5c25, U+5c28, U+5c2a-5c2b, U+5c2f-5c30, U+5c37, U+5c3b, U+5c43-5c44, U+5c46-5c47, U+5c4d, U+5c50, U+5c59, U+5c5b-5c5c, U+5c62-5c64, U+5c66, U+5c6c, U+5c6e, U+5c74, U+5c78-5c7e, U+5c80, U+5c83-5c84, U+5c88, U+5c8b-5c8d, U+5c91, U+5c94-5c96, U+5c98-5c99, U+5c9c, U+5c9e, U+5ca1-5ca3, U+5cab-5cac, U+5cb1, U+5cb5, U+5cb7, U+5cba, U+5cbd-5cbf, U+5cc1, U+5cc3-5cc4, U+5cc7, U+5ccb, U+5cd2, U+5cd8-5cd9, U+5cdf-5ce0, U+5ce3-5ce6, U+5ce8-5cea, U+5ced, U+5cef, U+5cf3-5cf4, U+5cf6, U+5cf8, U+5cfd, U+5d00-5d04, U+5d06, U+5d08, U+5d0b-5d0d, U+5d0f-5d13, U+5d15, U+5d17-5d1a, U+5d1d-5d22, U+5d24-5d25;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.74.woff2) format('woff2');
  unicode-range: U+5aa0, U+5aa3-5aa4, U+5aaa, U+5aae-5aaf, U+5ab1-5ab2, U+5ab4-5ab5, U+5ab7-5aba, U+5abd-5abf, U+5ac3-5ac4, U+5ac6-5ac8, U+5aca-5acb, U+5acd, U+5acf-5ad2, U+5ad4, U+5ad8-5ada, U+5adc, U+5adf-5ae2, U+5ae4, U+5ae6, U+5ae8, U+5aea-5aed, U+5af0-5af3, U+5af5, U+5af9-5afb, U+5afd, U+5b01, U+5b05, U+5b08, U+5b0b-5b0c, U+5b11, U+5b16-5b17, U+5b1b, U+5b21-5b22, U+5b24, U+5b27-5b2e, U+5b30, U+5b32, U+5b34, U+5b36-5b38, U+5b3e-5b40, U+5b43, U+5b45, U+5b4a-5b4b, U+5b51-5b53, U+5b56, U+5b5a-5b5b, U+5b62, U+5b65, U+5b67, U+5b6a-5b6e, U+5b70-5b71, U+5b73, U+5b7a-5b7b, U+5b7f-5b80, U+5b84, U+5b8d, U+5b91, U+5b93-5b95, U+5b9f, U+5ba5-5ba6, U+5bac, U+5bae, U+5bb8, U+5bc0, U+5bc3, U+5bcb, U+5bd0-5bd1, U+5bd4-5bd8, U+5bda-5bdc, U+5be2, U+5be4-5be5, U+5be7, U+5be9, U+5beb;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.75.woff2) format('woff2');
  unicode-range: U+596a, U+596c-596e, U+5977, U+597b-597c, U+5981, U+598f, U+5997-5998, U+599a, U+599c-599d, U+59a0-59a1, U+59a3-59a4, U+59a7, U+59aa-59ad, U+59af, U+59b2-59b3, U+59b5-59b6, U+59b8, U+59ba, U+59bd-59be, U+59c0-59c1, U+59c3-59c4, U+59c7-59ca, U+59cc-59cd, U+59cf, U+59d2, U+59d5-59d6, U+59d8-59d9, U+59db, U+59dd-59e0, U+59e2-59e7, U+59e9-59eb, U+59ee, U+59f1, U+59f3, U+59f5, U+59f7-59f9, U+59fd, U+5a06, U+5a08-5a0a, U+5a0c-5a0d, U+5a11-5a13, U+5a15-5a16, U+5a1a-5a1b, U+5a21-5a23, U+5a2d-5a2f, U+5a32, U+5a38, U+5a3c, U+5a3e-5a45, U+5a47, U+5a4a, U+5a4c-5a4d, U+5a4f-5a51, U+5a53, U+5a55-5a57, U+5a5e, U+5a60, U+5a62, U+5a65-5a67, U+5a6a, U+5a6c-5a6d, U+5a72-5a73, U+5a75-5a76, U+5a79-5a7c, U+5a81-5a84, U+5a8c, U+5a8e, U+5a93, U+5a96-5a97, U+5a9c, U+5a9e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.76.woff2) format('woff2');
  unicode-range: U+5820, U+5822-5823, U+5825-5826, U+582c, U+582f, U+5831, U+583a, U+583d, U+583f-5842, U+5844-5846, U+5848, U+584a, U+584d, U+5852, U+5857, U+5859-585a, U+585c-585d, U+5862, U+5868-5869, U+586c-586d, U+586f-5873, U+5875, U+5879, U+587d-587e, U+5880-5881, U+5888-588a, U+588d, U+5892, U+5896-5898, U+589a, U+589c-589d, U+58a0-58a1, U+58a3, U+58a6, U+58a9, U+58ab-58ae, U+58b0, U+58b3, U+58bb-58bf, U+58c2-58c3, U+58c5-58c8, U+58ca, U+58cc, U+58ce, U+58d1-58d3, U+58d5, U+58d8-58d9, U+58de-58df, U+58e2, U+58e9, U+58ec, U+58ef, U+58f1-58f2, U+58f5, U+58f7-58f8, U+58fa, U+58fd, U+5900, U+5902, U+5906, U+5908-590c, U+590e, U+5910, U+5914, U+5919, U+591b, U+591d-591e, U+5920, U+5922-5925, U+5928, U+592c-592d, U+592f, U+5932, U+5936, U+593c, U+593e, U+5940-5942, U+5944, U+594c-594d, U+5950, U+5953, U+5958, U+595a, U+5961, U+5966-5968;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.77.woff2) format('woff2');
  unicode-range: U+56f9, U+56fc, U+56ff-5700, U+5703-5704, U+5709-570a, U+570c-570d, U+570f, U+5712-5713, U+5718-5719, U+571c, U+571e, U+5725, U+5727, U+5729-572a, U+572c, U+572e-572f, U+5734-5735, U+5739, U+573b, U+5741, U+5743, U+5745, U+5749, U+574c-574d, U+575c, U+5763, U+5768-5769, U+576b, U+576d-576e, U+5770, U+5773, U+5775, U+5777, U+577b-577c, U+5785-5786, U+5788, U+578c, U+578e-578f, U+5793-5795, U+5799-57a1, U+57a3-57a4, U+57a6-57aa, U+57ac-57ad, U+57af-57b2, U+57b4-57b6, U+57b8-57b9, U+57bd-57bf, U+57c2, U+57c4-57c8, U+57cc-57cd, U+57cf, U+57d2, U+57d5-57de, U+57e1-57e2, U+57e4-57e5, U+57e7, U+57eb, U+57ed, U+57ef, U+57f4-57f8, U+57fc-57fd, U+5800-5801, U+5803, U+5805, U+5807, U+5809, U+580b-580e, U+5811, U+5814, U+5819, U+581b-581f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.78.woff2) format('woff2');
  unicode-range: U+55f5-55f7, U+55fb, U+55fe, U+5600-5601, U+5605-5606, U+5608, U+560c-560d, U+560f, U+5614, U+5616-5617, U+561a, U+561c, U+561e, U+5621-5625, U+5627, U+5629, U+562b-5630, U+5636, U+5638-563a, U+563c, U+5640-5642, U+5649, U+564c-5650, U+5653-5655, U+5657-565b, U+5660, U+5663-5664, U+5666, U+566b, U+566f-5671, U+5673-567c, U+567e, U+5684-5687, U+568c, U+568e-5693, U+5695, U+5697, U+569b-569c, U+569e-569f, U+56a1-56a2, U+56a4-56a9, U+56ac-56af, U+56b1, U+56b4, U+56b6-56b8, U+56bf, U+56c1-56c3, U+56c9, U+56cd, U+56d1, U+56d4, U+56d6-56d9, U+56dd, U+56df, U+56e1, U+56e3-56e6, U+56e8-56ec, U+56ee-56ef, U+56f1-56f3, U+56f5, U+56f7-56f8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.79.woff2) format('woff2');
  unicode-range: U+550f, U+5511-5514, U+5516-5517, U+5519, U+551b, U+551d-551e, U+5520, U+5522-5523, U+5526-5527, U+552a-552c, U+5530, U+5532-5535, U+5537-5538, U+553b-5541, U+5543-5544, U+5547-5549, U+554b, U+554d, U+5550, U+5553, U+5555-5558, U+555b-555f, U+5567-5569, U+556b-5572, U+5574-5577, U+557b-557c, U+557e-557f, U+5581, U+5583, U+5585-5586, U+5588, U+558b-558c, U+558e-5591, U+5593, U+5599-559a, U+559f, U+55a5-55a6, U+55a8-55ac, U+55ae, U+55b0-55b3, U+55b6, U+55b9-55ba, U+55bc-55be, U+55c4, U+55c6-55c7, U+55c9, U+55cc-55d2, U+55d4-55db, U+55dd-55df, U+55e1, U+55e3-55e6, U+55ea-55ee, U+55f0-55f3;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.80.woff2) format('woff2');
  unicode-range: U+53e7-53e9, U+53f1, U+53f4-53f5, U+53fa-5400, U+5402, U+5405-5407, U+540b, U+540f, U+5412, U+5414, U+5416, U+5418-541a, U+541d, U+5420-5423, U+5425, U+5429-542a, U+542d-542e, U+5431-5433, U+5436, U+543d, U+543f, U+5442-5443, U+5449, U+544b-544c, U+544e, U+5451-5454, U+5456, U+5459, U+545b-545c, U+5461, U+5463-5464, U+546a-5472, U+5474, U+5476-5478, U+547a, U+547e-5484, U+5486, U+548a, U+548d-548e, U+5490-5491, U+5494, U+5497-5499, U+549b, U+549d, U+54a1-54a7, U+54a9, U+54ab, U+54ad, U+54b4-54b5, U+54b9, U+54bb, U+54be-54bf, U+54c2-54c3, U+54c9-54cc, U+54cf-54d0, U+54d3, U+54d5-54d6, U+54d9-54da, U+54dc-54de, U+54e2, U+54e7, U+54f3-54f4, U+54f8-54f9, U+54fd-54ff, U+5501, U+5504-5506, U+550c-550e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.81.woff2) format('woff2');
  unicode-range: U+5289, U+528b, U+528d, U+528f, U+5291-5293, U+529a, U+52a2, U+52a6-52a7, U+52ac-52ad, U+52af, U+52b4-52b5, U+52b9, U+52bb-52bc, U+52be, U+52c1, U+52c5, U+52ca, U+52cd, U+52d0, U+52d6-52d7, U+52d9, U+52db, U+52dd-52de, U+52e0, U+52e2-52e3, U+52e5, U+52e7-52f0, U+52f2-52f3, U+52f5-52f9, U+52fb-52fc, U+5302, U+5304, U+530b, U+530d, U+530f-5310, U+5315, U+531a, U+531c-531d, U+5321, U+5323, U+5326, U+532e-5331, U+5338, U+533c-533e, U+5344-5345, U+534b-534d, U+5350, U+5354, U+5358, U+535d-535f, U+5363, U+5368-5369, U+536c, U+536e-536f, U+5372, U+5379-537b, U+537d, U+538d-538e, U+5390, U+5393-5394, U+5396, U+539b-539d, U+53a0-53a1, U+53a3-53a5, U+53a9, U+53ad-53ae, U+53b0, U+53b2-53b3, U+53b5-53b8, U+53bc, U+53be, U+53c1, U+53c3-53c7, U+53ce-53cf, U+53d2-53d3, U+53d5, U+53da, U+53de-53df, U+53e1-53e2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.82.woff2) format('woff2');
  unicode-range: U+5104, U+5106-5107, U+5109-510b, U+510d, U+510f-5110, U+5113, U+5115, U+5117-5118, U+511a-511c, U+511e-511f, U+5121, U+5128, U+512b-512d, U+5131-5135, U+5137-5139, U+513c, U+5140, U+5142, U+5147, U+514c, U+514e-5150, U+5155-5158, U+5162, U+5169, U+5172, U+517f, U+5181-5184, U+5186-5187, U+518b, U+518f, U+5191, U+5195-5197, U+519a, U+51a2-51a3, U+51a6-51ab, U+51ad-51ae, U+51b1, U+51b4, U+51bc-51bd, U+51bf, U+51c3, U+51c7-51c8, U+51ca-51cb, U+51cd-51ce, U+51d4, U+51d6, U+51db-51dc, U+51e6, U+51e8-51eb, U+51f1, U+51f5, U+51fc, U+51ff, U+5202, U+5205, U+5208, U+520b, U+520d-520e, U+5215-5216, U+5228, U+522a, U+522c-522d, U+5233, U+523c-523d, U+523f-5240, U+5245, U+5247, U+5249, U+524b-524c, U+524e, U+5250, U+525b-525f, U+5261, U+5263-5264, U+5270, U+5273, U+5275, U+5277, U+527d, U+527f, U+5281-5285, U+5287;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.83.woff2) format('woff2');
  unicode-range: U+4fd1, U+4fd3, U+4fda-4fdc, U+4fdf-4fe0, U+4fe2-4fe4, U+4fe6, U+4fe8, U+4feb-4fed, U+4ff3, U+4ff5-4ff6, U+4ff8, U+4ffe, U+5001, U+5005-5006, U+5009, U+500c, U+500f, U+5013-5018, U+501b-501e, U+5022-5025, U+5027-5028, U+502b-502e, U+5030, U+5033-5034, U+5036-5039, U+503b, U+5041-5043, U+5045-5046, U+5048-504a, U+504c-504e, U+5051, U+5053, U+5055-5057, U+505b, U+505e, U+5060, U+5062-5063, U+5067, U+506a, U+506c, U+5070-5072, U+5074-5075, U+5078, U+507b, U+507d-507e, U+5080, U+5088-5089, U+5091-5092, U+5095, U+5097-509e, U+50a2-50a3, U+50a5-50a7, U+50a9, U+50ad, U+50b3, U+50b5, U+50b7, U+50ba, U+50be, U+50c4-50c5, U+50c7, U+50ca, U+50cd, U+50d1, U+50d5-50d6, U+50da, U+50de, U+50e5-50e6, U+50ec-50ee, U+50f0-50f1, U+50f3, U+50f9-50fb, U+50fe-5102;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.84.woff2) format('woff2');
  unicode-range: U+4ea3, U+4ea5, U+4eb0-4eb1, U+4eb3-4eb6, U+4eb8-4eb9, U+4ebb-4ebe, U+4ec2-4ec4, U+4ec8-4ec9, U+4ecc, U+4ecf-4ed0, U+4ed2, U+4eda-4edb, U+4edd-4ee1, U+4ee6-4ee9, U+4eeb, U+4eee-4eef, U+4ef3-4ef5, U+4ef8-4efa, U+4efc, U+4f00, U+4f03-4f05, U+4f08-4f09, U+4f0b, U+4f0e, U+4f12-4f13, U+4f15, U+4f1b, U+4f1d, U+4f21-4f22, U+4f25, U+4f27-4f29, U+4f2b-4f2e, U+4f31-4f33, U+4f36-4f37, U+4f39, U+4f3e, U+4f40-4f41, U+4f43, U+4f47-4f49, U+4f54, U+4f57-4f58, U+4f5d-4f5e, U+4f61-4f62, U+4f64-4f65, U+4f67, U+4f6a, U+4f6e-4f6f, U+4f72, U+4f74-4f7e, U+4f80-4f82, U+4f84, U+4f89-4f8a, U+4f8e-4f98, U+4f9e, U+4fa1, U+4fa5, U+4fa9-4faa, U+4fac, U+4fb3, U+4fb6-4fb8, U+4fbd, U+4fc2, U+4fc5-4fc6, U+4fcd-4fce, U+4fd0;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.85.woff2) format('woff2');
  unicode-range: U+3129, U+3131, U+3134, U+3137, U+3139, U+3141-3142, U+3145, U+3147-3148, U+314b, U+314d-314e, U+315c, U+3160-3161, U+3163-3164, U+3186, U+318d, U+3192, U+3196-3198, U+319e-319f, U+3220-3229, U+3231, U+3268, U+3297, U+3299, U+32a3, U+338e-338f, U+3395, U+339c-339e, U+33c4, U+33d1-33d2, U+33d5, U+3434, U+34dc, U+34ee, U+353e, U+355d, U+3566, U+3575, U+3592, U+35a0-35a1, U+35ad, U+35ce, U+36a2, U+36ab, U+38a8, U+3dab, U+3de7, U+3deb, U+3e1a, U+3f1b, U+3f6d, U+4495, U+4723, U+48fa, U+4ca3, U+4db6-4dbf, U+4e02, U+4e04-4e06, U+4e0c, U+4e0f, U+4e15, U+4e17, U+4e1f-4e21, U+4e26, U+4e29, U+4e2c, U+4e2f, U+4e31, U+4e35, U+4e37, U+4e3c, U+4e3f-4e42, U+4e44, U+4e46-4e47, U+4e57, U+4e5a-4e5c, U+4e64-4e65, U+4e67, U+4e69, U+4e6d, U+4e78, U+4e7f-4e82, U+4e85, U+4e87, U+4e8a, U+4e8d, U+4e93, U+4e96, U+4e98-4e99, U+4e9c, U+4e9e-4ea0, U+4ea2;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.86.woff2) format('woff2');
  unicode-range: U+279f-27a2, U+27a4-27a5, U+27a8, U+27b0, U+27b2-27b3, U+27b9, U+27e8-27e9, U+27f6, U+2800, U+28ec, U+2913, U+2921-2922, U+2934-2935, U+2a2f, U+2b05-2b07, U+2b50, U+2b55, U+2bc5-2bc6, U+2e1c-2e1d, U+2ebb, U+2f00, U+2f08, U+2f24, U+2f2d, U+2f2f-2f30, U+2f3c, U+2f45, U+2f63-2f64, U+2f74, U+2f83, U+2f8f, U+2fbc, U+3003, U+3005-3007, U+3012-3013, U+301c-301e, U+3021, U+3023-3024, U+3030, U+3034-3035, U+3041, U+3043, U+3045, U+3047, U+3049, U+3056, U+3058, U+305c, U+305e, U+3062, U+306c, U+3074, U+3077, U+307a, U+307c-307d, U+3080, U+308e, U+3090-3091, U+3099-309b, U+309d-309e, U+30a5, U+30bc, U+30be, U+30c2, U+30c5, U+30cc, U+30d8, U+30e2, U+30e8, U+30ee, U+30f0-30f2, U+30f4-30f6, U+30fd-30fe, U+3105-3126, U+3128;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.87.woff2) format('woff2');
  unicode-range: U+2651-2655, U+2658, U+265a-265b, U+265d-265e, U+2660-266d, U+266f, U+267b, U+2688, U+2693-2696, U+2698-2699, U+269c, U+26a0-26a1, U+26a4, U+26aa-26ab, U+26bd-26be, U+26c4-26c5, U+26d4, U+26e9, U+26f0-26f1, U+26f3, U+26f5, U+26fd, U+2702, U+2704-2706, U+2708-270f, U+2712-2718, U+271a-271b, U+271d, U+271f, U+2721, U+2724-2730, U+2732-2734, U+273a, U+273d-2744, U+2747-2749, U+274c, U+274e-274f, U+2753-2757, U+275b, U+275d-275e, U+2763, U+2765-2767, U+276e-276f, U+2776-277e, U+2780-2782, U+278a-278c, U+278e, U+2794-2796, U+279c;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.88.woff2) format('woff2');
  unicode-range: U+2550-2551, U+2554, U+2557, U+255a-255b, U+255d, U+255f-2560, U+2562-2563, U+2565-2567, U+2569-256a, U+256c-2572, U+2579, U+2580-2595, U+25a1, U+25a3, U+25a9-25ad, U+25b0, U+25b3-25bb, U+25bd-25c2, U+25c4, U+25c8-25cb, U+25cd, U+25d0-25d1, U+25d4-25d5, U+25d8, U+25dc-25e6, U+25ea-25eb, U+25ef, U+25fe, U+2600-2604, U+2609, U+260e-260f, U+2611, U+2614-2615, U+2618, U+261a-2620, U+2622-2623, U+262a, U+262d-2630, U+2639-2640, U+2642, U+2648-2650;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.89.woff2) format('woff2');
  unicode-range: U+23f0, U+23f3, U+2445, U+2449, U+2465-2471, U+2474-249b, U+24b8, U+24c2, U+24c7, U+24c9, U+24d0, U+24d2, U+24d4, U+24d8, U+24dd-24de, U+24e3, U+24e6, U+24e8, U+2500-2509, U+250b-2526, U+2528-2534, U+2536-2537, U+253b-2548, U+254a-254b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.90.woff2) format('woff2');
  unicode-range: U+207c-2083, U+208c-208e, U+2092, U+20a6, U+20a8-20ad, U+20af, U+20b1, U+20b4-20b5, U+20b8-20ba, U+20bd, U+20db, U+20dd, U+20e0, U+20e3, U+2105, U+2109, U+2113, U+2116-2117, U+2120-2121, U+2126, U+212b, U+2133, U+2139, U+2194, U+2196-2199, U+21a0, U+21a9-21aa, U+21af, U+21b3, U+21b5, U+21ba-21bb, U+21c4, U+21ca, U+21cc, U+21d0-21d4, U+21e1, U+21e6-21e9, U+2200, U+2202, U+2205-2208, U+220f, U+2211-2212, U+2215, U+2217-2219, U+221d-2220, U+2223, U+2225, U+2227-222b, U+222e, U+2234-2237, U+223c-223d, U+2248, U+224c, U+2252, U+2256, U+2260-2261, U+2266-2267, U+226a-226b, U+226e-226f, U+2282-2283, U+2295, U+2297, U+2299, U+22a5, U+22b0-22b1, U+22b9, U+22bf, U+22c5-22c6, U+22ef, U+2304, U+2307, U+230b, U+2312-2314, U+2318, U+231a-231b, U+2323, U+239b, U+239d-239e, U+23a0, U+23e9;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.91.woff2) format('woff2');
  unicode-range: U+1d34-1d35, U+1d38-1d3a, U+1d3c, U+1d3f-1d40, U+1d49, U+1d4e-1d4f, U+1d52, U+1d55, U+1d5b, U+1d5e, U+1d9c, U+1da0, U+1dc4-1dc5, U+1e69, U+1e73, U+1ea0-1ea9, U+1eab-1ead, U+1eaf, U+1eb1, U+1eb3, U+1eb5, U+1eb7, U+1eb9, U+1ebb, U+1ebd-1ebe, U+1ec0-1ec3, U+1ec5-1ec6, U+1ec9-1ecd, U+1ecf-1ed3, U+1ed5, U+1ed7-1edf, U+1ee1, U+1ee3, U+1ee5-1eeb, U+1eed, U+1eef-1ef1, U+1ef3, U+1ef7, U+1ef9, U+1f62, U+1f7b, U+2001-2002, U+2004-2006, U+2009-200a, U+200c-2012, U+2015-2016, U+201a, U+201e-2021, U+2023, U+2025, U+2028, U+202a-202d, U+202f-2030, U+2032-2033, U+2035, U+2038, U+203c, U+203e-203f, U+2043-2044, U+2049, U+204d-204e, U+2060-2061, U+2070, U+2074-2078, U+207a-207b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.97.woff2) format('woff2');
  unicode-range: U+2ae-2b3, U+2b5-2bf, U+2c2-2c3, U+2c6-2d1, U+2d8-2da, U+2dc, U+2e1-2e3, U+2e5, U+2eb, U+2ee-2f0, U+2f2-2f7, U+2f9-2ff, U+302-30d, U+311, U+31b, U+321-325, U+327-329, U+32b-32c, U+32e-32f, U+331-339, U+33c-33d, U+33f, U+348, U+352, U+35c, U+35e-35f, U+361, U+363, U+368, U+36c, U+36f, U+530-540, U+55d-55e, U+561, U+563, U+565, U+56b, U+56e-579;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.98.woff2) format('woff2');
  unicode-range: U+176-17f, U+192, U+194, U+19a-19b, U+19d, U+1a0-1a1, U+1a3-1a4, U+1aa, U+1ac-1ad, U+1af-1bf, U+1d2, U+1d4, U+1d6, U+1d8, U+1da, U+1dc, U+1e3, U+1e7, U+1e9, U+1ee, U+1f0-1f1, U+1f3, U+1f5-1ff, U+219-21b, U+221, U+223-226, U+228, U+22b, U+22f, U+231, U+234-237, U+23a-23b, U+23d, U+250-252, U+254-255, U+259-25e, U+261-263, U+265, U+268, U+26a-26b, U+26f-277, U+279, U+27b-280, U+282-283, U+285, U+28a, U+28c, U+28f, U+292, U+294-296, U+298-29a, U+29c, U+29f, U+2a1-2a4, U+2a6-2a7, U+2a9, U+2ab;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.99.woff2) format('woff2');
  unicode-range: U+a1-a4, U+a6-a8, U+aa, U+ac, U+af, U+b1, U+b3-b6, U+b8-ba, U+bc-d6, U+d8-de, U+e6, U+eb, U+ee-f0, U+f5, U+f7-f8, U+fb, U+fd-100, U+102, U+104-107, U+10d, U+10f-112, U+115, U+117, U+119, U+11b, U+11e-11f, U+121, U+123, U+125-127, U+129-12a, U+12d, U+12f-13f, U+141-142, U+144, U+146, U+14b-14c, U+14f-153, U+158-15b, U+15e-160, U+163-165, U+168-16a, U+16d-175;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.100.woff2) format('woff2');
  unicode-range: U+221a, U+2264, U+2464, U+25a0, U+3008, U+4e10, U+512a, U+5152, U+5201, U+5241, U+5340, U+5352, U+549a, U+54b2, U+54c6, U+54d7, U+54e1, U+5509, U+55c5, U+5618, U+5716, U+576f, U+5784, U+57a2, U+589f, U+5a20, U+5a25, U+5a29, U+5a34, U+5a7f, U+5ad6, U+5b09, U+5b5c, U+5bc7, U+5be6, U+5c27, U+5d2d, U+5dcd, U+5f1b, U+5f37, U+604d, U+6055, U+6073, U+60eb, U+61ff, U+62ce, U+62ed, U+6345, U+6390, U+63b0, U+63b7, U+64ae, U+64c2, U+64d2, U+6556, U+663c, U+667e, U+66d9, U+66f8, U+6756, U+6789, U+689d, U+68f1, U+695e, U+6975, U+6a1f, U+6b0a, U+6b61, U+6b87, U+6c5d, U+6c7e, U+6c92, U+6d31, U+6df9, U+6e0d, U+6e2d, U+6f31, U+6f3e, U+70b3, U+70bd, U+70ca, U+70e8, U+725f, U+733f, U+7396, U+739f, U+7459, U+74a7, U+75a1, U+75f0, U+76cf, U+76d4, U+7729, U+77aa, U+77b0, U+77e3, U+780c, U+78d5, U+7941, U+7977, U+797a, U+79c3, U+7a20, U+7a92, U+7b71, U+7bf1, U+7c9f, U+7eb6, U+7eca, U+7ef7, U+7f07, U+7f09, U+7f15, U+7f81, U+7fb9, U+8038, U+8098, U+80b4, U+8110, U+814b-814c, U+816e, U+818a, U+8205, U+8235, U+828b, U+82a5, U+82b7, U+82d4, U+82db, U+82df, U+8317, U+8338, U+8385-8386, U+83c1, U+83cf, U+8537, U+853b, U+854a, U+8715, U+8783, U+892a, U+8a71, U+8bb3, U+8d2e, U+8d58, U+8dbe, U+8f67, U+8fab, U+8fc4, U+8fe6, U+9023, U+9084, U+9091, U+916a, U+91c9, U+91dc, U+94b3, U+9502, U+9523, U+9551, U+956f, U+960e, U+962a, U+962e, U+9647, U+96f3, U+9739, U+97a0, U+97ed, U+983b, U+985e, U+988a, U+99ac, U+9a6f, U+9a87, U+9a8b, U+9ab7, U+9abc, U+9ac5, U+9e25, U+e608, U+e621, U+ff06, U+ff14-ff16;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.101.woff2) format('woff2');
  unicode-range: U+161, U+926, U+928, U+939, U+93f-940, U+94d, U+e17, U+e22, U+e44, U+25c7, U+25ce, U+2764, U+3009, U+3016-3017, U+4e4d, U+4e53, U+4f5a, U+4f70, U+4fae, U+4fd8, U+4ffa, U+5011, U+501a, U+51c4, U+5225, U+547b, U+5495, U+54e8, U+54ee, U+5594, U+55d3, U+55dc, U+55fd, U+560e, U+565c, U+5662, U+5669, U+566c, U+56bc, U+5742, U+5824, U+5834, U+598a, U+5992, U+59a9, U+5a04, U+5ac9, U+5b75, U+5b7d, U+5bc5, U+5c49, U+5c90, U+5e1c, U+5e27, U+5e2b, U+5e37, U+5e90, U+618b, U+61f5, U+620a, U+620c, U+6273, U+62c7, U+62f7, U+6320, U+6342, U+6401-6402, U+6413, U+6512, U+655b, U+65a7, U+65f1, U+65f7, U+665f, U+6687, U+66a7, U+673d, U+67b8, U+6854, U+68d8, U+68fa, U+696d, U+6a02, U+6a0a, U+6a80, U+6b7c, U+6bd9, U+6c2e, U+6c76, U+6cf8, U+6d4a, U+6d85, U+6e24, U+6e32, U+6ec7, U+6f88, U+700f, U+701a, U+7078, U+707c, U+70ac, U+70c1, U+72e9, U+7409, U+7422, U+745a, U+7480, U+74a8, U+752b, U+7574, U+7656, U+7699, U+7737, U+785d, U+78be, U+79b9, U+7a3d, U+7a91, U+7a9f, U+7ae3, U+7b77, U+7c3f, U+7d1a, U+7d50, U+7d93, U+8042, U+808b, U+8236, U+82b8-82b9, U+82ef, U+8309, U+836b, U+83ef, U+8431, U+85c9, U+865e, U+868c, U+8759, U+8760, U+8845, U+89ba, U+8a2a, U+8aaa, U+8c41, U+8d2c, U+8d4e, U+8e66, U+8e6d, U+8eaf, U+902e, U+914b, U+916e, U+919b, U+949b, U+94a0, U+94b0, U+9541-9542, U+9556, U+95eb, U+95f5, U+964b, U+968b, U+96cc-96cd, U+96cf, U+9713, U+9890, U+98a8, U+9985, U+9992, U+9a6d, U+9a81, U+9a86, U+9ab8, U+9ca4, U+e606-e607, U+e60a, U+e60c, U+e60e, U+fe0f, U+ff02, U+ff1e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.102.woff2) format('woff2');
  unicode-range: U+10c, U+627-629, U+639, U+644, U+64a, U+203b, U+2265, U+2463, U+2573, U+25b2, U+3448-3449, U+4e1e, U+4e5e, U+4f3a, U+4f5f, U+4fea, U+5026, U+508d, U+516e, U+5189, U+5254, U+5288, U+52d8, U+52fa, U+5306, U+5308, U+5364, U+5384, U+53ed, U+543c, U+5450, U+5455, U+5466, U+54c4, U+5578, U+55a7, U+561f, U+5631, U+572d, U+575f, U+57ae, U+57e0, U+5830, U+594e, U+5984, U+5993, U+5bdd, U+5c0d, U+5c7f, U+5c82, U+5e62, U+5ed3, U+5f08, U+607a, U+60bc, U+625b, U+6292, U+62e2, U+6363, U+6467, U+6714, U+675e, U+6771, U+67a2, U+67ff, U+6805, U+68a7, U+68e0, U+6930, U+6986, U+69a8, U+69df, U+6a44, U+6a5f, U+6c13, U+6c1f, U+6c22, U+6c2f, U+6c40, U+6c81, U+6c9b, U+6ca5, U+6da4, U+6df3, U+6e85, U+6eba, U+6ed5, U+6f13, U+6f33, U+6f62, U+715e, U+72c4, U+73d1, U+7405, U+7487, U+7578, U+75a4, U+75eb, U+7693, U+7738, U+7741, U+776b, U+7792, U+77a7, U+77a9, U+77b3, U+788c, U+7984, U+79a7, U+79e4, U+7a1a, U+7a57, U+7aa6, U+7b0b, U+7b5d, U+7c27, U+7c7d, U+7caa, U+7cd9, U+7cef, U+7eda, U+7ede, U+7f24, U+803f, U+8046, U+80fa, U+81fb, U+8207, U+8258, U+8335, U+8339, U+8354, U+840e, U+85b0, U+85fb, U+8695, U+86aa, U+8717, U+8749, U+874c, U+8996, U+89bd, U+89c5, U+8bdb, U+8bf5, U+8c5a, U+8cec, U+8d3f, U+8d9f, U+8e44, U+8fed, U+9005, U+9019, U+9082, U+90af, U+90dd, U+90e1, U+90f8, U+916f, U+9176, U+949e, U+94a7, U+94c2, U+9525, U+9580, U+95dc, U+96e2, U+96fb, U+9704, U+9a7c, U+9a7f, U+9b41, U+9ca8, U+9cc4, U+9cde, U+9e92, U+9ede, U+9f9a, U+e60b, U+e610, U+ff10, U+ff13, U+ff3b, U+ff3d, U+f012b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.103.woff2) format('woff2');
  unicode-range: U+60, U+631, U+2606, U+3014-3015, U+309c, U+33a1, U+4e52, U+4ec6, U+4f86, U+4f8d, U+4fde, U+4fef, U+500b, U+502a, U+515c, U+518a, U+51a5, U+51f3, U+5243, U+52c9, U+52d5, U+53a2, U+53ee, U+54ce, U+54fa, U+54fc, U+5580, U+5587, U+563f, U+56da, U+5792, U+5815, U+5960, U+59d7, U+5b78, U+5b9b, U+5be1, U+5c4e, U+5c51, U+5c6f, U+5c9a, U+5cfb, U+5d16, U+5ed6, U+5f27, U+5f6a, U+609a, U+60df, U+6168, U+61c8, U+6236, U+62f1, U+62fd, U+631a, U+6328, U+632b, U+6346, U+638f, U+63a0, U+63c9, U+655e, U+6590, U+6615, U+6627, U+66ae, U+66e6, U+66f0, U+67da, U+67ec, U+6813, U+6816, U+6869, U+6893, U+68ad, U+68f5, U+6977, U+6984, U+69db, U+6b72, U+6bb7, U+6ce3, U+6cfb, U+6d47, U+6da1, U+6dc4, U+6e43, U+6eaf, U+6eff, U+6f8e, U+7011, U+7063, U+7076, U+7096, U+70ba, U+70db, U+70ef, U+7119-711a, U+7172, U+718f, U+7194, U+727a, U+72d9, U+72ed, U+7325, U+73ae, U+73ba, U+73c0, U+73fe, U+7410, U+7426, U+7455, U+7554, U+7576, U+75ae, U+75b9, U+762b, U+766b, U+7682, U+7750, U+7779, U+7784, U+77eb, U+77ee, U+78f7, U+79e9, U+7a79, U+7b1b, U+7b28, U+7bf7, U+7db2, U+7ec5, U+7eee, U+7f14, U+7f1a, U+7fe1, U+8087, U+809b, U+81b3, U+8231, U+830e, U+835f, U+83e9, U+849c, U+851a, U+868a, U+8718, U+874e, U+8822, U+8910, U+8944, U+8a3b, U+8bb6, U+8bbc, U+8e72, U+8f9c, U+900d, U+904b, U+904e, U+9063, U+90a2, U+90b9, U+9119, U+94f2, U+952f, U+9576-9577, U+9593, U+95f8, U+961c, U+969b, U+96a7, U+96c1, U+9716, U+9761, U+97ad, U+97e7, U+98a4, U+997a, U+9a73, U+9b44, U+9e3d, U+9ecf, U+9ed4, U+ff11-ff12, U+fffd;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.104.woff2) format('woff2');
  unicode-range: U+2003, U+2193, U+2462, U+4e19, U+4e2b, U+4e36, U+4ea8, U+4ed1, U+4ed7, U+4f51, U+4f63, U+4f83, U+50e7, U+5112, U+5167, U+51a4, U+51b6, U+5239, U+5265, U+532a, U+5351, U+537f, U+5401, U+548f, U+5492, U+54af, U+54b3, U+54bd, U+54d1, U+54df, U+554f, U+5564, U+5598, U+5632, U+56a3, U+56e7, U+574e, U+575d-575e, U+57d4, U+584c, U+58e4, U+5937, U+5955, U+5a05, U+5a1f, U+5a49, U+5ac2, U+5c39, U+5c61, U+5d0e, U+5de9, U+5e9a, U+5eb8, U+5f0a, U+5f13, U+5f6c, U+5f8c, U+603c, U+608d, U+611b, U+6127, U+62a0, U+62d0, U+634f, U+635e, U+63fd, U+6577, U+658b, U+65bc, U+660a, U+6643, U+6656, U+6703, U+6760, U+67af, U+67c4, U+67e0, U+6817, U+68cd, U+690e, U+6960, U+69b4, U+6a71, U+6aac, U+6b67, U+6bb4, U+6c55, U+6c70, U+6c82, U+6ca6, U+6cb8, U+6cbe, U+6ede, U+6ee5, U+6f4d, U+6f84, U+6f9c, U+7115, U+7121, U+722a, U+7261, U+7272, U+7280, U+72f8, U+7504, U+754f, U+75d8, U+767c, U+76ef, U+778e, U+77bb, U+77f6, U+786b, U+78b1, U+7948, U+7985, U+79be, U+7a83, U+7a8d, U+7eac, U+7eef, U+7ef8, U+7efd, U+7f00, U+803d, U+8086, U+810a, U+8165, U+819d, U+81a8, U+8214, U+829c, U+831c, U+832b, U+8367, U+83e0, U+83f1, U+8403, U+846b, U+8475, U+84b2, U+8513, U+8574, U+85af, U+86d9, U+86db, U+8acb, U+8bbd, U+8be0-8be1, U+8c0e, U+8d29, U+8d50, U+8d63, U+8f7f, U+9032, U+9042, U+90b1, U+90b5, U+9165, U+9175, U+94a6, U+94c5, U+950c, U+9610, U+9631, U+9699, U+973e, U+978d, U+97ec, U+97f6, U+984c, U+987d, U+9882, U+9965, U+996a, U+9972, U+9a8f, U+9ad3, U+9ae6, U+9cb8, U+9edb, U+e600, U+e60f, U+e611, U+ff05, U+ff0b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.105.woff2) format('woff2');
  unicode-range: U+5e, U+2190, U+250a, U+25bc, U+25cf, U+4e56, U+4ea9, U+4f3d, U+4f6c, U+4f88, U+4fa8, U+4fcf, U+5029, U+5188, U+51f9, U+5203, U+524a, U+5256, U+529d, U+5375, U+53db, U+541f, U+5435, U+5457, U+548b, U+54c7, U+54d4, U+54e9, U+556a, U+5589, U+55bb, U+55e8, U+55ef, U+563b, U+566a, U+576a, U+58f9, U+598d, U+599e, U+59a8, U+5a9b, U+5ae3, U+5bb0, U+5bde, U+5c4c, U+5c60, U+5d1b, U+5deb, U+5df7, U+5e18, U+5f26, U+5f64, U+601c, U+6084, U+60e9, U+614c, U+6208, U+621a, U+6233, U+6254, U+62d8, U+62e6, U+62ef, U+6323, U+632a, U+633d, U+6361, U+6405, U+640f, U+6614, U+6642, U+6657, U+67a3, U+6808, U+683d, U+6850, U+6897, U+68b3, U+68b5, U+68d5, U+6a58, U+6b47, U+6b6a, U+6c28, U+6c90, U+6ca7, U+6cf5, U+6d51, U+6da9, U+6dc7, U+6dd1, U+6e0a, U+6e5b, U+6e9c, U+6f47, U+6f6d, U+70ad, U+70f9, U+710a, U+7130, U+71ac, U+745f, U+7476, U+7490, U+7529, U+7538, U+75d2, U+7696, U+76b1, U+76fc, U+777f, U+77dc, U+789f, U+795b, U+79bd, U+79c9, U+7a3b, U+7a46, U+7aa5, U+7ad6, U+7ca5, U+7cb9, U+7cdf, U+7d6e, U+7f06, U+7f38, U+7fa1, U+7fc1, U+8015, U+803b, U+80a2, U+80aa, U+8116, U+813e, U+82bd, U+8305, U+8328, U+8346, U+846c, U+8549, U+859b, U+8611, U+8680, U+87f9, U+884d, U+8877, U+888d, U+88d4, U+898b, U+8a79, U+8a93, U+8c05, U+8c0d, U+8c26, U+8d1e, U+8d31, U+8d81, U+8e22, U+8e81, U+8f90, U+8f96, U+90ca, U+916c, U+917f, U+9187, U+918b, U+9499, U+94a9, U+9524, U+9540, U+958b, U+9600, U+9640, U+96b6, U+96c7, U+96ef, U+98d9, U+9976, U+997f, U+9a74, U+9a84, U+9c8d, U+9e26, U+9e9f, U+ad6d, U+c5b4, U+d55c, U+ff0f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.106.woff2) format('woff2');
  unicode-range: U+b0, U+2191, U+2460-2461, U+25c6, U+300e-300f, U+4e1b, U+4e7e, U+4ed5, U+4ef2, U+4f10, U+4f1e, U+4f50, U+4fa6, U+4faf, U+5021, U+50f5, U+5179, U+5180, U+51d1, U+522e, U+52a3, U+52c3, U+52cb, U+5300, U+5319, U+5320, U+5349, U+5395, U+53d9, U+541e, U+5428, U+543e, U+54b1, U+54c0, U+54d2, U+570b, U+5858, U+58f6, U+5974, U+59a5, U+59e8, U+59ec, U+5a36, U+5a9a, U+5ab3, U+5b99, U+5baa, U+5ce1, U+5d14, U+5d4c, U+5dc5, U+5de2, U+5e99, U+5e9e, U+5f18, U+5f66, U+5f70, U+6070, U+60d5, U+60e7, U+6101, U+611a, U+61be, U+6241, U+6252, U+626f, U+6296, U+62bc, U+62cc, U+6380, U+63a9, U+644a, U+6454, U+64a9, U+64b8, U+6500, U+6572, U+65a5, U+65a9, U+65ec, U+660f, U+6749, U+6795, U+67ab, U+68da, U+6912, U+6bbf, U+6bef, U+6cab, U+6cca, U+6ccc, U+6cfc, U+6d3d, U+6d78, U+6dee, U+6e17, U+6e34, U+6e83, U+6ea2, U+6eb6, U+6f20, U+6fa1, U+707f, U+70d8, U+70eb, U+714c, U+714e, U+7235, U+7239, U+73ca, U+743c, U+745c, U+7624, U+763e, U+76f2, U+77db, U+77e9, U+780d, U+7838, U+7845, U+78ca, U+796d, U+7a84, U+7aed, U+7b3c, U+7eb2, U+7f05, U+7f20, U+7f34, U+7f62, U+7fc5, U+7fd8, U+7ff0, U+800d, U+8036, U+80ba, U+80be, U+80c0-80c1, U+8155, U+817a, U+8180, U+81e3, U+8206, U+8247, U+8270, U+8299, U+82ad, U+8304, U+8393, U+83b9, U+840d, U+8427, U+8469, U+8471, U+84c4, U+84ec, U+853d, U+8681-8682, U+8721, U+8854, U+88d5, U+88f9, U+8bc0, U+8c0a, U+8c29, U+8c2d, U+8d41, U+8dea, U+8eb2, U+8f9f, U+903b, U+903e, U+9102, U+9493, U+94a5, U+94f8, U+95f7, U+9706, U+9709, U+9774, U+98a0, U+9e64, U+9f9f, U+e603;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.107.woff2) format('woff2');
  unicode-range: U+200b, U+2103, U+4e18, U+4e27-4e28, U+4e38, U+4e59, U+4e8f, U+4ead, U+4ec7, U+4fe9, U+503a, U+5085, U+5146, U+51af, U+51f8, U+52ab, U+5339, U+535c, U+5378, U+538c, U+5398, U+53f9, U+5415, U+5475, U+54aa, U+54ac, U+54b8, U+5582, U+5760, U+5764, U+57cb, U+5835, U+5885, U+5951, U+5983, U+59da, U+5a77, U+5b5d, U+5b5f, U+5bb5, U+5bc2, U+5be8, U+5bfa, U+5c2c, U+5c34, U+5c41, U+5c48, U+5c65, U+5cad, U+5e06, U+5e42, U+5ef7, U+5f17, U+5f25, U+5f6d, U+5f79, U+6028, U+6064, U+6068, U+606d, U+607c, U+6094, U+6109, U+6124, U+6247, U+626d, U+6291, U+629a, U+62ac, U+62b9, U+62fe, U+6324, U+6349, U+6367, U+6398, U+6495, U+64a4, U+64b0, U+64bc, U+64ce, U+658c, U+65ed, U+6602, U+6674, U+6691, U+66a8, U+674f, U+679a, U+67ef, U+67f4, U+680b, U+6876, U+68a8, U+6a59, U+6a61, U+6b20, U+6bc5, U+6d12, U+6d46, U+6d8c, U+6dc0, U+6e14, U+6e23, U+6f06, U+7164, U+716e, U+7199, U+71e5, U+72ac, U+742a, U+755c, U+75ab, U+75b2, U+75f4, U+7897, U+78b3, U+78c5, U+7978, U+79fd, U+7a74, U+7b4b, U+7b5b, U+7ece, U+7ed2, U+7ee3, U+7ef3, U+7f50, U+7f55, U+7f9e, U+7fe0, U+809d, U+8106, U+814a, U+8154, U+817b, U+818f, U+81c2, U+81ed, U+821f, U+82a6, U+82d1, U+8302, U+83c7, U+83ca, U+845b, U+848b, U+84c9, U+85e4, U+86ee, U+8700, U+8774, U+8881, U+8c1c, U+8c79, U+8d2a, U+8d3c, U+8eba, U+8f70, U+8fa9, U+8fb1, U+900a, U+9017, U+901d, U+9022, U+906e, U+946b, U+94dd, U+94ed, U+953b, U+95ef, U+95fa, U+95fd, U+96c0, U+971e, U+9753, U+9756, U+97e6, U+9881, U+9887, U+9b4f, U+9e2d, U+9f0e, U+e601-e602, U+e604-e605, U+ff5c;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.108.woff2) format('woff2');
  unicode-range: U+24, U+4e08, U+4e43, U+4e4f, U+4ef0, U+4f2a, U+507f, U+50ac, U+50bb, U+5151, U+51bb, U+51f6, U+51fd, U+5272, U+52fe, U+5362, U+53c9, U+53d4, U+53e0, U+543b, U+54f2, U+5507, U+5524, U+558a, U+55b5, U+561b, U+56ca, U+5782, U+57c3, U+5893, U+5915, U+5949, U+5962, U+59ae, U+59dc, U+59fb, U+5bd3, U+5c38, U+5cb3, U+5d07, U+5d29, U+5de1, U+5dfe, U+5e15, U+5eca, U+5f2f, U+5f7c, U+5fcc, U+6021, U+609f, U+60f9, U+6108, U+6148, U+6155, U+6170, U+61d2, U+6251, U+629b, U+62ab, U+62e8, U+62f3, U+6321, U+6350, U+6566, U+659c, U+65e8, U+6635, U+6655, U+6670, U+66f9, U+6734, U+679d, U+6851, U+6905, U+6b49, U+6b96, U+6c1b, U+6c41, U+6c6a, U+6c83, U+6cf3, U+6d9b, U+6dcb, U+6e1d, U+6e20-6e21, U+6eaa, U+6ee4, U+6ee9, U+6f58, U+70e4, U+722c, U+7262, U+7267, U+72b9, U+72e0, U+72ee, U+72f1, U+7334, U+73ab, U+7433, U+7470, U+758f, U+75d5, U+764c, U+7686, U+76c6, U+76fe, U+7720, U+77e2, U+7802, U+7816, U+788d, U+7891, U+7a00, U+7a9d, U+7b52, U+7bad, U+7c98, U+7cca, U+7eba, U+7eea, U+7ef5, U+7f1d, U+7f69, U+806a, U+809a, U+80bf, U+80c3, U+81c0, U+820c, U+82ac, U+82af, U+82cd, U+82d7, U+838e, U+839e, U+8404, U+84b8, U+852c, U+8587, U+8650, U+8679, U+86c7, U+8702, U+87ba, U+886b-886c, U+8870, U+8c10, U+8c23, U+8c6b, U+8d3e, U+8d4b-8d4c, U+8d64, U+8d6b, U+8d74, U+8e29, U+8f69, U+8f74, U+8fb0, U+8fdf, U+901b, U+9038, U+9093, U+9171, U+9489, U+94ae, U+94c3, U+9508, U+9510, U+9601, U+9614, U+964c, U+9675, U+971c, U+97f5, U+9888, U+98d8, U+9971, U+9aa4, U+9e3f, U+9e45, U+9e4f, U+9e70, U+9f7f, U+e715;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.109.woff2) format('woff2');
  unicode-range: U+a5, U+2192, U+2605, U+4e11, U+4e22, U+4e32, U+4f0d, U+4f0f, U+4f69, U+4ff1, U+50b2, U+5154, U+51dd, U+51f0, U+5211, U+5269, U+533f, U+5366-5367, U+5389, U+5413, U+5440, U+5446, U+5561, U+574a, U+5751, U+57ab, U+5806, U+5821, U+582a, U+58f3, U+5938, U+5948, U+5978, U+59d1, U+5a03, U+5a07, U+5ac1, U+5acc, U+5ae9, U+5bb4, U+5bc4, U+5c3f, U+5e3d, U+5e7d, U+5f92, U+5faa, U+5fe0, U+5ffd, U+6016, U+60a0, U+60dc, U+60e8, U+614e, U+6212, U+6284, U+62c6, U+62d3-62d4, U+63f4, U+642c, U+6478, U+6491-6492, U+64e6, U+6591, U+65a4, U+664b, U+6735, U+6746, U+67f1, U+67f3, U+6842, U+68af, U+68c9, U+68cb, U+6a31, U+6b3a, U+6bc1, U+6c0f, U+6c27, U+6c57, U+6cc4, U+6ce5, U+6d2a, U+6d66, U+6d69, U+6daf, U+6e58, U+6ecb, U+6ef4, U+707e, U+7092, U+70ab, U+71d5, U+7275, U+7384, U+73b2, U+7434, U+74e6, U+74f7, U+75bc, U+76c8, U+76d0, U+7709, U+77ac, U+7855, U+78a7, U+78c1, U+7a77, U+7b79, U+7c92, U+7cae, U+7cd5, U+7ea4, U+7eb5, U+7ebd, U+7f5a, U+7fd4, U+7ffc, U+8083, U+8096, U+80a0, U+80d6, U+80de, U+8102, U+8109, U+810f, U+8179, U+8292, U+82b3, U+8352, U+8361, U+83cc, U+841d, U+8461, U+8482, U+8521, U+857e, U+85aa, U+866b, U+8776, U+8896, U+889c, U+88f8, U+8a9e, U+8bc8, U+8bf8, U+8c0b, U+8c28, U+8d2b, U+8d2f, U+8d37, U+8d3a, U+8d54, U+8dc3, U+8dcc, U+8df5, U+8e0f, U+8e48, U+8f86, U+8f88, U+8f9e, U+8fc1, U+8fc8, U+8feb, U+9065, U+90a6, U+90aa, U+90bb, U+90c1, U+94dc, U+9521, U+9676, U+96d5, U+970d, U+9897, U+997c, U+9a70, U+9a76, U+9a9a, U+9ad4, U+9e23, U+9e7f, U+9f3b, U+e675, U+e6b9, U+ffe5;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.110.woff2) format('woff2');
  unicode-range: U+300c-300d, U+4e54, U+4e58, U+4e95, U+4ec1, U+4f2f, U+4f38, U+4fa3, U+4fca, U+503e, U+5141, U+5144, U+517c, U+51cc, U+51ed, U+5242, U+52b2, U+52d2, U+52e4, U+540a, U+5439, U+5448, U+5496, U+54ed, U+5565, U+5761, U+5766, U+58ee, U+593a, U+594b, U+594f, U+5954, U+5996, U+59c6, U+59ff, U+5b64, U+5bff, U+5c18, U+5c1d, U+5c97, U+5ca9, U+5cb8, U+5e9f, U+5ec9, U+5f04, U+5f7b, U+5fa1, U+5fcd, U+6012, U+60a6, U+60ac, U+60b2, U+60ef, U+626e, U+6270, U+6276, U+62d6, U+62dc, U+6316, U+632f, U+633a, U+6355, U+63aa, U+6447, U+649e, U+64c5, U+654c, U+65c1, U+65cb, U+65e6, U+6606, U+6731, U+675c, U+67cf, U+67dc, U+6846, U+6b8b, U+6beb, U+6c61, U+6c88, U+6cbf, U+6cdb, U+6cea, U+6d45, U+6d53, U+6d74, U+6d82, U+6da8, U+6db5, U+6deb, U+6eda, U+6ee8, U+6f0f, U+706d, U+708e, U+70ae, U+70bc, U+70c2, U+70e6, U+7237-7238, U+72fc, U+730e, U+731b, U+739b, U+73bb, U+7483, U+74dc, U+74f6, U+7586, U+7626, U+775b, U+77ff, U+788e, U+78b0, U+7956, U+7965, U+79e6, U+7af9, U+7bee, U+7c97, U+7eb1, U+7eb7, U+7ed1, U+7ed5, U+7f6a, U+7f72, U+7fbd, U+8017, U+808c, U+80a9, U+80c6, U+80ce, U+8150, U+8170, U+819c, U+820d, U+8230, U+8239, U+827e, U+8377, U+8389, U+83b2, U+8428, U+8463, U+867e, U+88c2, U+88d9, U+8986, U+8bca, U+8bde, U+8c13, U+8c8c, U+8d21, U+8d24, U+8d56, U+8d60, U+8d8b, U+8db4, U+8e2a, U+8f68, U+8f89, U+8f9b, U+8fa8, U+8fbd, U+9003, U+90ce, U+90ed, U+9189, U+94bb, U+9505, U+95f9, U+963b, U+9655, U+966a, U+9677, U+96fe, U+9896, U+99a8, U+9a71, U+9a82, U+9a91, U+9b45, U+9ece, U+9f20, U+feff, U+ff0d;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.111.woff2) format('woff2');
  unicode-range: U+4e4c, U+4e88, U+4ea1, U+4ea6, U+4ed3-4ed4, U+4eff, U+4f30, U+4fa7, U+4fc4, U+4fd7, U+500d, U+504f, U+5076-5077, U+517d, U+5192, U+51c9, U+51ef, U+5238, U+5251, U+526a, U+52c7, U+52df, U+52ff, U+53a6, U+53a8, U+53ec, U+5410, U+559d, U+55b7, U+5634, U+573e, U+5783, U+585e, U+586b, U+58a8, U+5999, U+59d3, U+5a1c, U+5a46, U+5b54-5b55, U+5b85, U+5b8b, U+5b8f, U+5bbf, U+5bd2, U+5c16, U+5c24, U+5e05, U+5e45, U+5e7c, U+5e84, U+5f03, U+5f1f, U+5f31, U+5f84, U+5f90, U+5fbd, U+5fc6, U+5fd9, U+5fe7, U+6052, U+6062, U+6089, U+60a3, U+60d1, U+6167, U+622a, U+6234, U+624e, U+6269, U+626c, U+62b5, U+62d2, U+6325, U+63e1, U+643a, U+6446, U+6562, U+656c, U+65e2, U+65fa, U+660c, U+6628, U+6652, U+6668, U+6676, U+66fc, U+66ff, U+6717, U+676d, U+67aa, U+67d4, U+6843, U+6881, U+68d2, U+695a, U+69fd, U+6a2a, U+6b8a, U+6c60, U+6c64, U+6c9f, U+6caa, U+6cc9, U+6ce1, U+6cfd, U+6d1b, U+6d1e, U+6d6e, U+6de1, U+6e10, U+6e7f, U+6f5c, U+704c, U+7070, U+7089, U+70b8, U+718a, U+71c3, U+723d, U+732a, U+73cd, U+7518, U+756a, U+75af, U+75be, U+75c7, U+76d2, U+76d7, U+7763, U+78e8, U+795d, U+79df, U+7c4d, U+7d2f, U+7ee9, U+7f13, U+7f8a, U+8000, U+8010, U+80af, U+80f6, U+80f8, U+8212, U+8273, U+82f9, U+83ab, U+83b1, U+83f2, U+8584, U+871c, U+8861, U+888b, U+88c1, U+88e4, U+8bd1, U+8bf1, U+8c31, U+8d5a, U+8d75-8d76, U+8de8, U+8f85, U+8fa3, U+8fc5, U+9006, U+903c, U+904d, U+9075, U+9178, U+9274, U+950b, U+9526, U+95ea, U+9636, U+9686, U+978b, U+987f, U+9a7e, U+9b42, U+9e1f, U+9ea6, U+9f13, U+9f84, U+ff5e;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.112.woff2) format('woff2');
  unicode-range: U+23, U+3d, U+4e01, U+4e39, U+4e73, U+4ecd, U+4ed9, U+4eea, U+4f0a, U+4f1f, U+4f5b, U+4fa0, U+4fc3, U+501f, U+50a8, U+515a, U+5175, U+51a0, U+51c0, U+51e1, U+51e4, U+5200, U+520a, U+5224, U+523a, U+52aa, U+52b1, U+52b3, U+5348, U+5353, U+5360, U+5371, U+5377, U+539a, U+541b, U+5434, U+547c, U+54e6, U+5510, U+5531, U+5609, U+56f0, U+56fa, U+5733, U+574f, U+5851, U+5854, U+5899, U+58c1, U+592e, U+5939, U+5976, U+5986, U+59bb, U+5a18, U+5a74, U+5b59, U+5b87, U+5b97, U+5ba0, U+5bab, U+5bbd-5bbe, U+5bf8, U+5c0a, U+5c3a, U+5c4a, U+5e16, U+5e1d, U+5e2d, U+5e8a, U+6015, U+602a, U+6050, U+6069, U+6162, U+61c2, U+6293, U+6297, U+62b1, U+62bd, U+62df, U+62fc, U+6302, U+635f, U+638c, U+63ed, U+6458, U+6469, U+6563, U+6620, U+6653, U+6696-6697, U+66dd, U+675f, U+676f-6770, U+67d0, U+67d3, U+684c, U+6865, U+6885, U+68b0, U+68ee, U+690d, U+6b23, U+6b32, U+6bd5, U+6c89, U+6d01, U+6d25, U+6d89, U+6da6, U+6db2, U+6df7, U+6ed1, U+6f02, U+70c8, U+70df, U+70e7, U+7126, U+7236, U+7259, U+731c, U+745e, U+74e3, U+751a, U+751c, U+7532, U+7545, U+75db, U+7761, U+7a0d, U+7b51, U+7ca4, U+7cd6, U+7d2b, U+7ea0, U+7eb9, U+7ed8, U+7f18, U+7f29, U+8033, U+804a, U+80a4-80a5, U+80e1, U+817f, U+829d, U+82e6, U+8336, U+840c, U+8499, U+864e, U+8651, U+865a, U+88ad, U+89e6, U+8bd7, U+8bfa, U+8c37, U+8d25, U+8d38, U+8ddd, U+8fea, U+9010, U+9012, U+906d, U+907f-9080, U+90d1, U+9177, U+91ca, U+94fa, U+9501, U+9634-9635, U+9694, U+9707, U+9738, U+9769, U+9a7b, U+9a97, U+9aa8, U+9b3c, U+9c81, U+9ed8;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.113.woff2) format('woff2');
  unicode-range: U+26, U+3c, U+d7, U+4e4e, U+4e61, U+4e71, U+4ebf, U+4f26, U+5012, U+51ac, U+51b0, U+51b2, U+51b7, U+5218, U+521a, U+5220, U+5237, U+523b, U+526f, U+5385, U+53bf, U+53e5, U+53eb, U+53f3, U+53f6, U+5409, U+5438, U+54c8, U+54e5, U+552f, U+5584, U+5706, U+5723, U+5750, U+575a, U+5987-5988, U+59b9, U+59d0, U+59d4, U+5b88, U+5b9c, U+5bdf, U+5bfb, U+5c01, U+5c04, U+5c3e, U+5c4b, U+5c4f, U+5c9b, U+5cf0, U+5ddd, U+5de6, U+5de8, U+5e01, U+5e78, U+5e7b, U+5e9c, U+5ead, U+5ef6, U+5f39, U+5fd8, U+6000, U+6025, U+604b, U+6076, U+613f, U+6258, U+6263, U+6267, U+6298, U+62a2, U+62e5, U+62ec, U+6311, U+6377, U+6388-6389, U+63a2, U+63d2, U+641e, U+642d, U+654f, U+6551, U+6597, U+65cf, U+65d7, U+65e7, U+6682, U+66f2, U+671d, U+672b, U+6740, U+6751, U+6768, U+6811, U+6863, U+6982, U+6bd2, U+6cf0, U+6d0b, U+6d17, U+6d59, U+6dd8, U+6dfb, U+6e7e, U+6f6e, U+6fb3, U+706f, U+719f, U+72af, U+72d0, U+72d7, U+732b, U+732e, U+7389, U+73e0, U+7530, U+7687, U+76d6, U+76db, U+7840, U+786c, U+79cb, U+79d2, U+7a0e, U+7a33, U+7a3f, U+7a97, U+7ade-7adf, U+7b26, U+7e41, U+7ec3, U+7f3a, U+8089, U+80dc, U+811a, U+8131, U+8138, U+821e, U+8349, U+83dc, U+8457, U+867d, U+86cb, U+8a89, U+8ba8, U+8bad, U+8bef, U+8bfe, U+8c6a, U+8d1d, U+8d4f, U+8d62, U+8dd1, U+8df3, U+8f6e, U+8ff9, U+900f, U+9014, U+9057, U+9192, U+91ce, U+9488, U+94a2, U+9547, U+955c, U+95f2, U+9644, U+964d, U+96c4-96c5, U+96e8, U+96f6-96f7, U+9732, U+9759, U+9760, U+987a, U+989c, U+9910, U+996d-996e, U+9b54, U+9e21, U+9ebb, U+9f50;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.114.woff2) format('woff2');
  unicode-range: U+7e, U+2026, U+4e03, U+4e25, U+4e30, U+4e34, U+4e45, U+4e5d, U+4e89, U+4eae, U+4ed8, U+4f11, U+4f19, U+4f24, U+4f34, U+4f59, U+4f73, U+4f9d, U+4fb5, U+5047, U+505c, U+5170, U+519c, U+51cf, U+5267, U+5356, U+5374, U+5382, U+538b, U+53e6, U+5426, U+542b, U+542f, U+5462, U+5473, U+554a, U+5566, U+5708, U+571f, U+5757, U+57df, U+57f9, U+5802, U+590f, U+591c, U+591f, U+592b, U+5965, U+5979, U+5a01, U+5a5a, U+5b63, U+5b69, U+5b81, U+5ba1, U+5ba3, U+5c3c, U+5c42, U+5c81, U+5de7, U+5dee, U+5e0c, U+5e10, U+5e55, U+5e86, U+5e8f, U+5ea7, U+5f02, U+5f52, U+5f81, U+5ff5, U+60ca, U+60e0, U+6279, U+62c5, U+62ff, U+63cf, U+6444, U+64cd, U+653b, U+65bd, U+65e9, U+665a, U+66b4, U+66fe, U+6728, U+6742, U+677e, U+67b6, U+680f, U+68a6, U+68c0, U+699c, U+6b4c, U+6b66, U+6b7b, U+6bcd, U+6bdb, U+6c38, U+6c47, U+6c49, U+6cb3, U+6cb9, U+6ce2, U+6d32, U+6d3e, U+6d4f, U+6e56, U+6fc0, U+7075, U+7206, U+725b, U+72c2, U+73ed, U+7565, U+7591, U+7597, U+75c5, U+76ae, U+76d1, U+76df, U+7834, U+7968, U+7981, U+79c0, U+7a7f, U+7a81, U+7ae5, U+7b14, U+7c89, U+7d27, U+7eaf, U+7eb3, U+7eb8, U+7ec7, U+7ee7, U+7eff, U+7f57, U+7ffb, U+805a, U+80a1, U+822c, U+82cf, U+82e5, U+8363, U+836f, U+84dd, U+878d, U+8840, U+8857, U+8863, U+8865, U+8b66, U+8bb2, U+8bda, U+8c01, U+8c08, U+8c46, U+8d1f, U+8d35, U+8d5b, U+8d5e, U+8da3, U+8ddf, U+8f93, U+8fdd, U+8ff0, U+8ff7, U+8ffd, U+9000, U+9047, U+9152, U+949f, U+94c1, U+94f6, U+9646, U+9648, U+9669, U+969c, U+96ea, U+97e9, U+987b, U+987e, U+989d, U+9970, U+9986, U+9c7c, U+9c9c;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.115.woff2) format('woff2');
  unicode-range: U+25, U+4e14, U+4e1d, U+4e3d, U+4e49, U+4e60, U+4e9a, U+4eb2, U+4ec5, U+4efd, U+4f3c, U+4f4f, U+4f8b, U+4fbf, U+5019, U+5145, U+514b, U+516b, U+516d, U+5174, U+5178, U+517b, U+5199, U+519b, U+51b3, U+51b5, U+5207, U+5212, U+5219, U+521d, U+52bf, U+533b, U+5343, U+5347, U+534a, U+536b, U+5370, U+53e4, U+53f2, U+5403, U+542c, U+547d, U+54a8, U+54cd, U+54ea, U+552e, U+56f4, U+5747, U+575b, U+5883, U+589e, U+5931, U+5947, U+5956-5957, U+5a92, U+5b83, U+5ba4, U+5bb3, U+5bcc, U+5c14, U+5c1a, U+5c3d, U+5c40, U+5c45, U+5c5e, U+5df4, U+5e72, U+5e95, U+5f80, U+5f85, U+5fb7, U+5fd7, U+601d, U+626b, U+627f, U+62c9, U+62cd, U+6309, U+63a7, U+6545, U+65ad, U+65af, U+65c5, U+666e, U+667a, U+670b, U+671b, U+674e, U+677f, U+6781, U+6790, U+6797, U+6821, U+6838-6839, U+697c, U+6b27, U+6b62, U+6bb5, U+6c7d, U+6c99, U+6d4b, U+6d4e, U+6d6a, U+6e29, U+6e2f, U+6ee1, U+6f14, U+6f2b, U+72b6, U+72ec, U+7387, U+7533, U+753b, U+76ca, U+76d8, U+7701, U+773c, U+77ed, U+77f3, U+7814, U+793c, U+79bb, U+79c1, U+79d8, U+79ef, U+79fb, U+7a76, U+7b11, U+7b54, U+7b56, U+7b97, U+7bc7, U+7c73, U+7d20, U+7eaa, U+7ec8, U+7edd, U+7eed, U+7efc, U+7fa4, U+804c, U+8058, U+80cc, U+8111, U+817e, U+826f, U+8303, U+843d, U+89c9, U+89d2, U+8ba2, U+8bbf, U+8bc9, U+8bcd, U+8be6, U+8c22, U+8c61, U+8d22, U+8d26-8d27, U+8d8a, U+8f6f, U+8f7b, U+8f83, U+8f91, U+8fb9, U+8fd4, U+8fdc, U+9002, U+94b1, U+9519, U+95ed, U+961f, U+9632-9633, U+963f, U+968f-9690, U+96be, U+9876, U+9884, U+98de, U+9988, U+9999, U+9ec4, U+ff1b;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.116.woff2) format('woff2');
  unicode-range: U+2b, U+40, U+3000, U+300a-300b, U+4e16, U+4e66, U+4e70, U+4e91-4e92, U+4e94, U+4e9b, U+4ec0, U+4eca, U+4f01, U+4f17-4f18, U+4f46, U+4f4e, U+4f9b, U+4fee, U+503c, U+5065, U+50cf, U+513f, U+5148, U+518d, U+51c6, U+51e0, U+5217, U+529e-529f, U+5341, U+534f, U+5361, U+5386, U+53c2, U+53c8, U+53cc, U+53d7-53d8, U+53ea, U+5404, U+5411, U+5417, U+5427, U+5468, U+559c, U+5668, U+56e0, U+56e2, U+56ed, U+5740, U+57fa, U+58eb, U+5904, U+592a, U+59cb, U+5a31, U+5b58, U+5b9d, U+5bc6, U+5c71, U+5dde, U+5df1, U+5e08, U+5e26, U+5e2e, U+5e93, U+5e97, U+5eb7, U+5f15, U+5f20, U+5f3a, U+5f62, U+5f69, U+5f88, U+5f8b, U+5fc5, U+600e, U+620f, U+6218, U+623f, U+627e, U+628a, U+62a4, U+62db, U+62e9, U+6307, U+6362, U+636e, U+64ad, U+6539, U+653f, U+6548, U+6574, U+6613, U+6625, U+663e, U+666f, U+672a, U+6750, U+6784, U+6a21, U+6b3e, U+6b65, U+6bcf, U+6c11, U+6c5f, U+6df1, U+706b, U+7167, U+724c, U+738b, U+73a9, U+73af, U+7403, U+7537, U+754c, U+7559, U+767d, U+7740, U+786e, U+795e, U+798f, U+79f0, U+7aef, U+7b7e, U+7bb1, U+7ea2, U+7ea6, U+7ec4, U+7ec6, U+7ecd, U+7edc, U+7ef4, U+8003, U+80b2, U+81f3-81f4, U+822a, U+827a, U+82f1, U+83b7, U+8425, U+89c2, U+89c8, U+8ba9, U+8bb8, U+8bc6, U+8bd5, U+8be2, U+8be5, U+8bed, U+8c03, U+8d23, U+8d2d, U+8d34, U+8d70, U+8db3, U+8fbe, U+8fce, U+8fd1, U+8fde, U+9001, U+901f-9020, U+90a3, U+914d, U+91c7, U+94fe, U+9500, U+952e, U+9605, U+9645, U+9662, U+9664, U+9700, U+9752, U+975e, U+97f3, U+9879, U+9886, U+98df, U+9a6c, U+9a8c, U+9ed1, U+9f99;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.117.woff2) format('woff2');
  unicode-range: U+4e, U+201c-201d, U+3010-3011, U+4e07, U+4e1c, U+4e24, U+4e3e, U+4e48, U+4e50, U+4e5f, U+4e8b-4e8c, U+4ea4, U+4eab-4eac, U+4ecb, U+4ece, U+4ed6, U+4ee3, U+4ef6-4ef7, U+4efb, U+4f20, U+4f55, U+4f7f, U+4fdd, U+505a, U+5143, U+5149, U+514d, U+5171, U+5177, U+518c, U+51fb, U+521b, U+5229, U+522b, U+52a9, U+5305, U+5317, U+534e, U+5355, U+5357, U+535a, U+5373, U+539f, U+53bb, U+53ca, U+53cd, U+53d6, U+53e3, U+53f0, U+5458, U+5546, U+56db, U+573a, U+578b, U+57ce, U+58f0, U+590d, U+5934, U+5973, U+5b57, U+5b8c, U+5b98, U+5bb9, U+5bfc, U+5c06, U+5c11, U+5c31, U+5c55, U+5df2, U+5e03, U+5e38, U+5e76, U+5e94, U+5efa, U+5f71, U+5f97, U+5feb, U+6001, U+603b, U+60f3, U+611f, U+6216, U+624d, U+6253, U+6295, U+6301, U+6392, U+641c, U+652f, U+653e, U+6559, U+6599, U+661f, U+671f, U+672f, U+6761, U+67e5, U+6807, U+6837, U+683c, U+6848, U+6b22, U+6b64, U+6bd4, U+6c14, U+6c34, U+6c42, U+6ca1, U+6d41, U+6d77, U+6d88, U+6e05, U+6e38, U+6e90, U+7136, U+7231, U+7531, U+767e, U+76ee, U+76f4, U+771f, U+7801, U+793a, U+79cd, U+7a0b, U+7a7a, U+7acb, U+7ae0, U+7b2c, U+7b80, U+7ba1, U+7cbe, U+7d22, U+7ea7, U+7ed3, U+7ed9, U+7edf, U+7f16, U+7f6e, U+8001, U+800c, U+8272, U+8282, U+82b1, U+8350, U+88ab, U+88c5, U+897f, U+89c1, U+89c4, U+89e3, U+8a00, U+8ba1, U+8ba4, U+8bae-8bb0, U+8bbe, U+8bc1, U+8bc4, U+8bfb, U+8d28, U+8d39, U+8d77, U+8d85, U+8def, U+8eab, U+8f66, U+8f6c, U+8f7d, U+8fd0, U+9009, U+90ae, U+90fd, U+91cc-91cd, U+91cf, U+95fb, U+9650, U+96c6, U+9891, U+98ce, U+ff1f;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.118.woff2) format('woff2');
  unicode-range: U+d, U+3e, U+5f, U+7c, U+a0, U+a9, U+4e09-4e0b, U+4e0d-4e0e, U+4e13, U+4e1a, U+4e2a, U+4e3a-4e3b, U+4e4b, U+4e86, U+4e8e, U+4ea7, U+4eba, U+4ee4-4ee5, U+4eec, U+4f1a, U+4f4d, U+4f53, U+4f5c, U+4f60, U+4fe1, U+5165, U+5168, U+516c, U+5173, U+5176, U+5185, U+51fa, U+5206, U+5230, U+5236, U+524d, U+529b, U+52a0-52a1, U+52a8, U+5316, U+533a, U+53cb, U+53d1, U+53ef, U+53f7-53f8, U+5408, U+540c-540e, U+544a, U+548c, U+54c1, U+56de, U+56fd-56fe, U+5728, U+5730, U+5907, U+5916, U+591a, U+5927, U+5929, U+597d, U+5982, U+5b50, U+5b66, U+5b89, U+5b9a, U+5b9e, U+5ba2, U+5bb6, U+5bf9, U+5c0f, U+5de5, U+5e02, U+5e73-5e74, U+5e7f, U+5ea6, U+5f00, U+5f0f, U+5f53, U+5f55, U+5fae, U+5fc3, U+6027, U+606f, U+60a8, U+60c5, U+610f, U+6210-6211, U+6237, U+6240, U+624b, U+6280, U+62a5, U+63a5, U+63a8, U+63d0, U+6536, U+6570, U+6587, U+65b9, U+65e0, U+65f6, U+660e, U+662d, U+662f, U+66f4, U+6700, U+670d, U+672c, U+673a, U+6743, U+6765, U+679c, U+682a, U+6b21, U+6b63, U+6cbb, U+6cd5, U+6ce8, U+6d3b, U+70ed, U+7247-7248, U+7269, U+7279, U+73b0, U+7406, U+751f, U+7528, U+7535, U+767b, U+76f8, U+770b, U+77e5, U+793e, U+79d1, U+7ad9, U+7b49, U+7c7b, U+7cfb, U+7ebf, U+7ecf, U+7f8e, U+8005, U+8054, U+80fd, U+81ea, U+85cf, U+884c, U+8868, U+8981, U+89c6, U+8bba, U+8bdd, U+8bf4, U+8bf7, U+8d44, U+8fc7, U+8fd8-8fd9, U+8fdb, U+901a, U+9053, U+90e8, U+91d1, U+957f, U+95e8, U+95ee, U+95f4, U+9762, U+9875, U+9898, U+9996, U+9ad8, U+ff01, U+ff08-ff09;
}
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7oqOcaThrVMcaeccjhXXDsOyAEEmuIi6j7j64sLjgBtMI1z49XW4.119.woff2) format('woff2');
  unicode-range: U+20-22, U+27-2a, U+2c-3b, U+3f, U+41-4d, U+4f-5d, U+61-7b, U+7d, U+ab, U+ae, U+b2, U+b7, U+bb, U+df-e5, U+e7-ea, U+ec-ed, U+f1-f4, U+f6, U+f9-fa, U+fc, U+101, U+103, U+113, U+12b, U+148, U+14d, U+16b, U+1ce, U+1d0, U+300-301, U+1ebf, U+1ec7, U+2013-2014, U+2022, U+2027, U+2039-203a, U+2122, U+3001-3002, U+3042, U+3044, U+3046, U+3048, U+304a-3055, U+3057, U+3059-305b, U+305d, U+305f-3061, U+3063-306b, U+306d-3073, U+3075-3076, U+3078-3079, U+307b, U+307e-307f, U+3081-308d, U+308f, U+3092-3093, U+30a1-30a4, U+30a6-30bb, U+30bd, U+30bf-30c1, U+30c3-30c4, U+30c6-30cb, U+30cd-30d7, U+30d9-30e1, U+30e3-30e7, U+30e9-30ed, U+30ef, U+30f3, U+30fb-30fc, U+3127, U+4e00, U+4e2d, U+65b0, U+65e5, U+6708-6709, U+70b9, U+7684, U+7f51, U+ff0c, U+ff0e, U+ff1a;
}
/* cyrillic */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kqWWbhppHtkoYg.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kq6WbhppHtkoYg.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kq-WbhppHtkoYg.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/noto-serif-sc/H4chBXePl9DZ0Xe7gG9cyOj7kqGWbhppHtk.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── #2 (无 id) ── */
    :root{
    --c-bg:#F6F6F7; --c-surface:#FFFFFF; --c-surface-2:#F0F0F2;
    --c-ink:#1E1E1E; --c-ink-soft:#63636B;
    --c-ink-faint:#9A9AA3; --c-line:#E6E6EA; --c-line-soft:#EFEFF2;
    --c-brand:#3b82f6; --c-brand-deep:#2563eb; --c-brand-wash:#eff6ff;
    --c-brand-line:rgba(96,165,250,.42);
    --c-success:#047857; --c-success-wash:#ecfdf5; --c-success-line:rgba(52,211,153,.42);
    --c-warning:#b45309; --c-warning-wash:#fff7ed; --c-warning-line:rgba(251,191,36,.45);
    --c-danger:#b91c1c; --c-danger-wash:#fef2f2; --c-danger-line:rgba(248,113,113,.45);
    --font-sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;
    --font-display:'Noto Serif SC',serif;   /* 用户决策：展示字体保留 Noto Serif SC 衬线栈 */
    --font-mono:"SF Mono",Menlo,Consolas,monospace;
    /* F6（2026-09-20）：旧原型词表中的间距 / 圆角 / 动效 / 布局令牌已无消费，保留工作台自己的 --studio-* 词表。 */
    --topbar-h:54px; /* 旧壳 brief 的 sticky 偏移仍消费该布局令牌。 */
  }
  *{box-sizing:border-box;margin:0;padding:0}
  /* F1 根修（2026-09-20）：表单控件字体继承。
     为什么需要这一条：<button>/<input>/<select>/<textarea> **不继承**页面字体，会落到 UA 默认
     （实测 computed = Arial）。本仓此前是「哪个按钮出问题就给哪个补 font-family:inherit」——
     逐个补丁，因而永远漏（实测漏点：.face-btn / .qa-stat / overview-todo / 设置页密码框，
     横跨 generate / gallery / overview / feishu 四屏）。原型 generation-workbench-v1.html 第 10 行
     用**这条 reset 一次解决**，故此处照抄同款，把补丁收敛成根修。
     影响面实测（注入试算 A/B + 全 DOM 逐元素比对，非推断）：
       字体变化 181–188 个元素/屏，**全部**是表单控件及其后代（scope 检查：
       表单作用域外变化数 = 0）；变化内容只有两类：① Arial → var(--studio-font)（即要修的）；
       ② 13.3333px → 13px（UA 泄漏一并修掉，属 F3 范围）。
       盒模型随之微调（换字体后行高变化，最大 +4.5px，feishu 一个输入框）；
       溢出/滚动条变化 **五屏全 0**（未引入任何新裁切）。
       隐藏兼容节点（#legacy-state，hidden aria-hidden）也受影响，但用户不可见，
       且无任何 JS 读取其字体度量（已 grep 确认）。 */
  button,input,select,textarea{font:inherit}
  body{font-family:var(--font-sans);background:var(--c-bg);color:var(--c-ink);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}
  body.modal-open{overflow:hidden}
  .app{display:flex;min-height:100vh}

  .main{flex:1;display:flex;flex-direction:column;min-width:0}
  .pill{background:var(--c-brand-wash);color:var(--c-brand-deep);border:1px solid var(--c-brand-line);border-radius:0;padding:3px 12px;font-size:12px;font-weight:600;white-space:nowrap}
  .content{padding:30px 34px;overflow-y:auto;flex:1}
  .screen{display:none}
  .screen.active{display:block;animation:fade .25s ease}
  @keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

  .phead{margin-bottom:24px}
  .phead h1{font-family:var(--font-display);font-size:22px;font-weight:650;letter-spacing:.5px}
  .phead p{color:var(--c-ink-soft);font-size:13px;margin-top:5px}
  .sec-label{font-size:12px;font-weight:600;color:var(--c-ink-soft);letter-spacing:1px;margin:26px 0 12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .sec-label::before{content:"";width:14px;height:2px;background:var(--c-brand);display:inline-block;flex-shrink:0}

  .card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:18px}
  .btn{font-family:var(--font-sans);font-size:13px;font-weight:600;padding:9px 18px;border-radius:0;border:1px solid var(--c-brand);background:var(--c-brand);color:#fff;cursor:pointer;transition:.15s}
  .btn:hover{background:var(--c-brand-deep);border-color:var(--c-brand-deep)}
  .btn.ghost{background:#fff;color:var(--c-brand-deep);border-color:var(--c-line)}
  .btn.ghost:hover{background:var(--c-brand-wash);border-color:var(--c-brand-line)}
  .btn:disabled{opacity:.45;cursor:not-allowed}
  label{display:block;font-size:12px;font-weight:400;color:var(--c-ink-soft);margin:14px 0 6px}
  input[type=text],select,textarea{width:100%;padding:9px 11px;border:1px solid var(--c-line);border-radius:0;font-size:13px;font-family:var(--font-sans);background:#fff;color:var(--c-ink)}
  input[type=text]:focus,select:focus,textarea:focus{outline:none;border-color:var(--c-brand);box-shadow:0 0 0 3px var(--c-brand-wash)}
  label:focus-within{color:var(--c-brand-deep)}
  .required-mark{color:#e5484d;margin-left:2px;font-weight:600}
  .conf{text-align:right;flex-shrink:0}
  .conf .num{font-family:var(--font-display);font-size:22px;font-weight:650;color:var(--c-brand-deep);line-height:1}
  .conf .lab{font-size:11px;color:var(--c-ink-faint);letter-spacing:1px}

  .drop{border:1.5px dashed var(--c-line);border-radius:0;padding:26px;text-align:center;color:var(--c-ink-faint);font-size:12px;background:var(--c-surface-2);cursor:pointer;transition:.15s;display:block}
  .drop:hover,.drop:focus-within{border-color:var(--c-brand);color:var(--c-brand-deep);background:var(--c-brand-wash)}
  .drop.drag{border-color:var(--c-brand);background:var(--c-brand-wash);color:var(--c-brand-deep)}
  .drop b{color:var(--c-ink-soft)}
  .drop input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}

  .opt{display:flex;gap:12px;margin-top:8px}
  .opt label{flex:1;margin:0;border:1px solid var(--c-line);border-radius:0;padding:12px;cursor:pointer;transition:.15s;position:relative}
  .opt label:hover{border-color:var(--c-brand)}
  .opt input{position:absolute;opacity:0}
  .opt label.sel{border-color:var(--c-brand);background:var(--c-brand-wash)}
  .opt label:focus-within{border-color:var(--c-brand);box-shadow:0 0 0 3px var(--c-brand-wash)}
  .opt .t{font-weight:650;font-size:13px}
  .opt .d{font-size:12px;color:var(--c-ink-faint);margin-top:3px}
  .opt .chk{position:absolute;top:10px;right:10px;width:16px;height:16px;border-radius:50%;border:1.5px solid var(--c-line);display:flex;align-items:center;justify-content:center;font-size:11px;color:#fff}
  .opt label.sel .chk{background:var(--c-brand);border-color:var(--c-brand)}
  .sel-full{width:100%;font-size:13px;padding:9px 10px;border-radius:0;border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink);margin-top:4px;cursor:pointer}
  .sel-full:disabled{opacity:.6;cursor:not-allowed;background:var(--c-surface-2)}
  .sel-full:focus{outline:none;border-color:var(--c-brand);box-shadow:0 0 0 3px var(--c-brand-wash)}

  /* 状态机轨道 */
  .rail{display:flex;align-items:center;background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:16px 20px;margin-bottom:22px;overflow:visible}
  .node{display:flex;flex-direction:column;align-items:center;gap:7px;flex-shrink:0;width:96px;text-align:center;cursor:pointer;border:none;background:none;font-family:inherit}
  .node:focus-visible{outline:2px solid var(--c-brand);outline-offset:3px;border-radius:0}
  .node .ring{width:34px;height:34px;border-radius:50%;border:2px solid var(--c-line);background:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--c-ink-faint);font-weight:600;transition:.3s}
  .node.done .ring{background:var(--c-success);border-color:var(--c-success);color:#fff}
  .node.cur .ring{background:var(--c-brand);border-color:var(--c-brand);color:#fff;box-shadow:0 0 0 5px var(--c-brand-wash);animation:pulse 1.4s infinite}
  @keyframes pulse{0%,100%{box-shadow:0 0 0 5px var(--c-brand-wash)}50%{box-shadow:0 0 0 9px rgba(194,96,63,.12)}}

  /* 画廊 */
  .gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:16px}
  .gcard{border:1px solid var(--c-line);border-radius:0;overflow:hidden;background:#fff;transition:.15s}
  .gcard.acc{border-color:var(--c-success)}
  .gcard.rej{border-color:var(--c-danger)}
  .gcard .thumb{aspect-ratio:3/4;background:linear-gradient(135deg,#EDE7DF,#E3DCD2);display:flex;align-items:center;justify-content:center;color:var(--c-ink-faint);font-size:12px;position:relative}
  .gcard .qc{position:absolute;top:9px;right:9px;font-size:11px;font-weight:600;padding:2px 9px;border-radius:0}
  .qc.fail{background:var(--c-danger-wash);color:var(--c-danger);border:1px solid var(--c-danger-line)}
  .gcard .info{padding:11px}
  .gcard .acts{display:flex;gap:7px;margin-top:9px}
  .gcard .acts button{flex:1;font-size:12px;padding:6px 0;border-radius:0;cursor:pointer;border:1px solid var(--c-line);background:#fff;color:var(--c-ink-soft);transition:.15s}
  .gcard .acts .ok:hover{background:var(--c-success-wash);color:var(--c-success);border-color:var(--c-success-line)}
  .gcard .acts .no:hover{background:var(--c-danger-wash);color:var(--c-danger);border-color:var(--c-danger-line)}
  .gcard .acts button:disabled{opacity:.5;cursor:default;background:#fff}
  .gcard .acts .ok.done{background:var(--c-success);color:#fff;border-color:var(--c-success)}
  .hint{background:var(--c-brand-wash);border:1px solid var(--c-brand-line);border-radius:0;padding:9px 12px;font-size:12px;color:var(--c-brand-deep);margin-bottom:6px}
  .log{background:var(--c-ink);color:#C9D4CC;font-family:"SF Mono",Menlo,monospace;font-size:12px;border-radius:0;padding:12px;margin-top:14px;min-height:64px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
  .log .ok{color:#8FCBA0}.log .dim{color:#6B7A70}
  .generation-queue{display:none;margin-top:10px;border:1px solid var(--c-line);border-radius:0;background:var(--c-surface);padding:8px 10px;font-size:12px;color:var(--c-ink-soft)}
  .generation-queue.show{display:block}.generation-queue-title{font-size:11px;color:var(--c-ink-faint);margin-bottom:5px}.generation-queue-row{display:flex;justify-content:space-between;gap:10px;padding:4px 0;border-top:1px solid var(--c-line-soft)}.generation-queue-row:first-of-type{border-top:0}.generation-queue-status{color:var(--c-brand-deep);white-space:nowrap}

  /* 免责声明 modal */
  .mask{display:none;position:fixed;inset:0;background:rgba(33,28,24,.55);z-index:60;align-items:center;justify-content:center;backdrop-filter:blur(2px);padding:16px}
  .mask.show{display:flex}
  .modal{background:#fff;width:480px;max-width:100%;border-radius:0;padding:26px;box-shadow:0 24px 60px rgba(0,0,0,.3)}
  .modal h3{font-family:var(--font-display);font-size:19px;margin-bottom:4px}
  .modal .sub{font-size:12px;color:var(--c-ink-faint);margin-bottom:14px}
  .disc{background:var(--c-danger-wash);border:1px solid var(--c-danger-line);border-radius:0;padding:13px 15px;font-size:12px;color:#9A3A2A;line-height:1.7;max-height:170px;overflow-y:auto}
  .disc b{color:var(--c-danger)}
  .agree{display:flex;align-items:center;gap:9px;margin:16px 0;font-size:13px;cursor:pointer}
  .agree input{width:17px;height:17px;accent-color:var(--c-brand)}
  .modal .acts{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}
  .regen-modal{width:440px}
  /* 灵感与配方 · 覆盖确认弹窗（2026-09-19）：本弹窗直接挂在 body 下，**不在 `#directorGalleryView` 子树里**，
     所以它继承的是 `:root` 上的原型灰 `--c-ink-soft/#7b8492`（对白底 3.78:1，正文不达 AA）。
     按本仓已有先例（见 `#directorGalleryView { --studio-muted:#5b6472 }` 那段注释）：只在本弹窗子树内重新指向达标灰，
     不动 `:root` 旧令牌（旧壳还在用）。实测弹窗正文 4.9:1 ✓（原 3.78:1 ✗）。 */
  #inspireOverwriteMask{--c-ink-soft:#5b6472;--studio-muted:#5b6472}
  .regen-warning{background:var(--c-warning-wash);border:1px solid var(--c-warning);border-radius:0;padding:13px 15px;font-size:12px;color:#795400;line-height:1.7}
  .regen-warning b{color:#624300}

  /* DNA 采集进度 modal */
  .dna-modal{width:440px}
  .dna-steps{list-style:none;display:flex;justify-content:space-between;margin:20px 0 4px;padding:0;position:relative}
  .dna-steps::before{content:'';position:absolute;top:13px;left:9%;right:9%;height:2px;background:var(--c-line-soft);z-index:0}
  .dna-steps li{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:7px;font-size:12px;color:var(--c-ink-faint);flex:1;text-align:center}
  .dna-steps .dot{width:26px;height:26px;border-radius:50%;background:#fff;border:2px solid var(--c-line);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;transition:.3s}
  .dna-steps li.active .dot{border-color:var(--c-brand);background:var(--c-brand-wash);color:var(--c-brand-deep);box-shadow:0 0 0 4px var(--c-brand-wash)}
  .dna-steps li.done .dot{border-color:var(--c-success);background:var(--c-success);color:#fff}
  .dna-steps li.done .dot::after{content:'✓';font-size:13px}
  .dna-steps li.done .dot{font-size:0}

  /* DNA 采集任务状态条：刷新/重启后还原现场（进行中 / 失败 / 中断可重试） */
  .jobs{display:flex;flex-direction:column;gap:8px;margin:10px 0 4px}
  .job{display:flex;align-items:center;gap:10px;font-size:12px;padding:9px 12px;border-radius:0;border:1px solid var(--c-line);background:var(--c-surface-2)}
  .job.run{color:var(--c-brand-deep);border-color:var(--c-brand)}
  .job.fail{color:#b42318;border-color:#f0c2bb;background:#fff5f3}
  .job.intr{color:#9a6700;border-color:#f0d99a;background:#fffaf0}
  .job .ico{font-size:14px}
  .job .txt{flex:1;min-width:0}
  .job .txt b{font-weight:600}
  .job .sub{display:block;font-size:12px;opacity:.75;margin-top:2px;word-break:break-all}
  .job button{margin-left:auto;flex:none}
  .dna-steps li.active{color:var(--c-brand-deep);font-weight:600}
  .dna-steps li.done{color:var(--c-success)}
  .dna-prog{margin-top:20px}
  .dna-prog .bar{height:8px;background:var(--c-line-soft);border-radius:0;overflow:hidden}
  .dna-prog .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--c-brand),var(--c-success));border-radius:0;transition:width .35s ease;width:0}
  .dna-prog .meta{display:flex;justify-content:space-between;font-size:12px;color:var(--c-ink-soft);margin-top:6px}
  .dna-status{font-size:12px;color:var(--c-ink-soft);margin-top:14px;min-height:18px}
  .dna-count{font-size:12px;color:var(--c-brand-deep);margin-top:6px;font-weight:600}
  .dna-result{margin-top:16px;border:1px solid var(--c-line);border-radius:0;padding:14px;background:var(--c-surface-2)}
  .dna-result .row{display:flex;justify-content:space-between;font-size:12px;padding:5px 0;border-bottom:1px dashed var(--c-line-soft)}
  .dna-result .row:last-child{border-bottom:0}
  .dna-result .k{color:var(--c-ink-faint)}
  .dna-result .v{font-weight:600;color:var(--c-ink)}
  .dna-result .warn{margin-top:10px;font-size:12px;color:var(--c-warning);background:var(--c-warning-wash);border:1px solid var(--c-warning-line);border-radius:0;padding:8px 10px;line-height:1.6}
  .dna-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
  .dna-spin{display:inline-block;width:13px;height:13px;border:2px solid var(--c-line);border-top-color:var(--c-brand);border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px;margin-right:6px}
  @keyframes spin{to{transform:rotate(360deg)}}

  /* 节点说明浮层 */
  .npop{display:none;position:fixed;inset:0;background:rgba(33,28,24,.4);z-index:var(--ui-overlay-npop);align-items:center;justify-content:center;padding:16px}
  .npop.show{display:flex}
  .npop .box{background:#fff;border-radius:0;padding:22px;max-width:400px;width:100%;box-shadow:0 20px 50px rgba(0,0,0,.25)}
  .npop .box h4{font-family:var(--font-display);font-size:16px;margin-bottom:6px}
  .npop .box .st{font-size:11px;font-weight:600;letter-spacing:1px;padding:2px 9px;border-radius:0;display:inline-block;margin-bottom:10px}
  .npop .box .st.done{background:var(--c-success-wash);color:var(--c-success)}
  .npop .box .st.cur{background:var(--c-brand-wash);color:var(--c-brand-deep)}
  .npop .box .st.todo{background:var(--c-surface-2);color:var(--c-ink-faint)}
  .npop .box p{font-size:13px;color:var(--c-ink-soft);line-height:1.7}
  .npop .box .close{margin-top:16px;text-align:right}
  .kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:28px}
  .kpi{background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:18px}
  .kpi .num{font-family:var(--font-display);font-size:32px;font-weight:650;color:var(--c-ink);line-height:1}
  .kpi .num small{font-size:13px;color:var(--c-ink-faint);font-weight:400;font-family:var(--font-sans)}
  .kpi .lab{font-size:12px;color:var(--c-ink-faint);margin-top:8px}
  .kpi .sub{font-size:11px;color:var(--c-success);margin-top:5px}
  .planlist .prow{display:flex;align-items:center;gap:16px;background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:13px 16px;margin-bottom:12px}
  .planlist .prow .pb{font-size:13px;font-weight:400;min-width:150px}
  .planlist .pbar{flex:1;height:6px;background:var(--c-line-soft);border-radius:0;overflow:hidden;position:relative}
  .planlist .pbar i{display:block;height:100%;background:var(--c-success);border-radius:0}
  .planlist .ppct{font-size:12px;color:var(--c-ink-soft);width:42px;text-align:right}
  .badge{font-size:12px;font-weight:600;padding:3px 11px;border-radius:0;min-width:62px;text-align:center}
  .badge.gen1{background:var(--c-brand-wash);color:var(--c-brand-deep);border:1px solid var(--c-brand-line)}
  .badge.gen0{background:var(--c-surface-2);color:var(--c-ink-faint);border:1px solid var(--c-line)}
  .badge.qc{background:var(--c-warning-wash);color:var(--c-warning);border:1px solid var(--c-warning-line)}
  .badge.rev{background:var(--c-success-wash);color:var(--c-success);border:1px solid var(--c-success-line)}
  .badge.req{background:var(--c-brand-wash);color:var(--c-brand-deep);border:1px solid var(--c-brand-line);font-size:11px;padding:2px 8px;min-width:auto;border-radius:0;vertical-align:middle;margin-left:4px;font-weight:600}
  .badge.opt{background:var(--c-surface-2);color:var(--c-ink-faint);border:1px solid var(--c-line);font-size:11px;padding:2px 8px;min-width:auto;border-radius:0;vertical-align:middle;margin-left:4px;font-weight:600}
  .badge.example{background:var(--c-success-wash);color:var(--c-success);border:1px solid var(--c-success-line);font-size:11px;padding:2px 8px;min-width:auto;border-radius:0;vertical-align:middle;margin-left:6px;font-weight:600;display:inline-block}
  .planlist .pgo{cursor:pointer;font-size:12px;color:var(--c-brand-deep);background:none;border:none;font-weight:600;white-space:nowrap}
  .planlist .pgo:hover{text-decoration:underline}
  .app-shell>.app .planlist .prow:nth-of-type(n+9){display:none!important}
  .planlist .group-head{display:flex}
  .app-shell>.app .planlist.expanded .prow:nth-of-type(n+9){display:grid}
  .plan-toggle{display:block;margin:12px auto 0;font-size:12px;padding:7px 18px}

  /* 我的飞书屏（真实） */
  .feishu-bind{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:14px 16px;margin-bottom:18px}
  .feishu-bind.ok{background:var(--c-success-wash);border-color:var(--c-success-line)}
  .feishu-connect-card{max-width:760px;background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:22px}
  .feishu-connect-card h2{font:650 14px/1.4 var(--font-display);margin:0 0 10px}
  .feishu-connect-card p{font-size:12px;color:var(--c-ink-soft);line-height:1.7;margin-bottom:14px}
  .feishu-connect-card details summary{cursor:pointer;color:var(--c-brand-deep);font-size:12px;margin:14px 0}
  .feishu-binding-strip{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:var(--c-success-wash);border:1px solid var(--c-success-line);border-radius:0;padding:13px 16px}
  .feishu-binding-strip.warn{background:var(--c-warning-wash);border-color:var(--c-warning-line)}
  /* 「表没匹配上」提示块（2026-09-20 · B2）：沿用绑定条的警示语系（warn 令牌），
     默认 hidden 不占位 —— 委托给 CSS 的 [hidden] 而不是靠 JS 清 innerHTML。 */
  .feishu-missing-tables{background:var(--c-warning-wash);border:1px solid var(--c-warning-line);border-radius:0;padding:13px 16px;font-size:12px;line-height:1.7;color:var(--c-ink-soft)}
  .feishu-missing-tables[hidden]{display:none}
  .feishu-missing-tables strong{font-size:13px;color:var(--c-warning)}
  .feishu-missing-tables span{display:block;margin-top:4px}
  .feishu-binding-strip strong{font-size:13px}.feishu-binding-strip span{font-size:12px;color:var(--c-ink-soft)}
  .feishu-table{width:100%;border-collapse:collapse;font-size:12px}.feishu-table th{text-align:left;color:var(--c-ink-faint);font-size:11px;font-weight:600;letter-spacing:.4px;padding:0 8px 9px}.feishu-table td{border-top:1px solid var(--c-line-soft);padding:11px 8px;color:var(--c-ink-soft)}.feishu-table td:first-child{color:var(--c-ink);font-weight:600}.feishu-pill{display:inline-block;border-radius:0;padding:3px 8px;font-size:11px;background:var(--c-success-wash);color:var(--c-success)}.feishu-pill.warn{background:var(--c-warning-wash);color:var(--c-warning)}.feishu-empty{font-size:12px;color:var(--c-ink-faint);padding:14px 0}
  .asset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}
  .asset-card{border:1px solid var(--c-line);border-radius:0;padding:14px;background:#fff}
  .asset-card .at{font-weight:650;font-size:13px}
  .asset-card .ac{font-size:12px;color:var(--c-success);margin-top:8px}
  .asset-card .aerr{font-size:12px;color:var(--c-danger);margin-top:8px}
  .asset-card .ad{font-size:12px;color:var(--c-ink-soft);margin-top:8px;line-height:1.6}

  /* 登录遮罩 */
  .login-mask{display:none;position:fixed;inset:0;background:rgba(33,28,24,.55);z-index:90;align-items:center;justify-content:center;backdrop-filter:blur(3px);padding:16px}
  .login-box{background:#fff;width:420px;max-width:100%;border-radius:0;padding:32px;box-shadow:0 24px 60px rgba(0,0,0,.32);text-align:center}
  .login-box .lb{font-family:var(--font-display);font-size:23px;font-weight:600;letter-spacing:.5px}
  .login-box .ls{font-size:12px;color:var(--c-ink-faint);margin:6px 0 22px}
  .login-box .lhint{font-size:12px;color:var(--c-ink-soft);background:var(--c-surface-2);border-radius:0;padding:11px 13px;margin:18px 0;text-align:left;line-height:1.7}

  /* toast */
  .toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(20px);background:var(--c-ink);color:#fff;font-size:13px;padding:11px 18px;border-radius:var(--studio-r-control);z-index:80;opacity:0;transition:.25s;pointer-events:none;box-shadow:0 10px 30px rgba(0,0,0,.25);max-width:80vw}
  .toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

  .rough-note{font-size:11px;color:var(--c-ink-faint);background:var(--c-surface-2);border:1px dashed var(--c-line);border-radius:0;padding:7px 11px;margin-bottom:10px}

  /* 生成进度条（确定性模拟：90s/张基线，后端返回时 snap 100%） */
  .prog{display:none;align-items:center;gap:10px;margin:14px 0 4px}
  .prog.show{display:flex}
  .prog .track{flex:1;height:8px;border-radius:0;background:var(--c-surface-2);overflow:hidden;border:1px solid var(--c-line)}
  .prog .bar{height:100%;width:0%;border-radius:0;background:linear-gradient(90deg,var(--c-brand),var(--c-success));transition:width .25s linear}
  .prog .ptxt{font-size:12px;color:var(--c-ink-soft);min-width:64px;text-align:right;font-variant-numeric:tabular-nums}
  .err-line{font-size:12px;color:var(--c-danger);margin-top:8px;min-height:14px}
  .pipeline .node{flex-direction:row;align-items:center;gap:6px;width:auto;min-width:0;text-align:left;padding:0;cursor:pointer;border:none;background:none;font-family:inherit;transition:.15s}
  .pipeline .node .ring{width:13px;height:13px;flex-shrink:0;border-radius:50%;border:1.5px solid var(--c-line);background:#fff;display:flex;align-items:center;justify-content:center;font-size:8px;color:var(--c-ink-faint);font-weight:600;transition:.3s}
  .pipeline .node.done .ring{background:var(--c-success);border-color:var(--c-success);color:#fff}
  .pipeline .node.cur .ring{background:var(--c-brand);border-color:var(--c-brand);color:#fff;box-shadow:0 0 0 3px var(--c-brand-wash);animation:pulse 1.4s infinite}

  .stage{min-width:0}
  .stage .phead{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin-bottom:8px}
  .stage .rough-note{margin-bottom:8px}
  .stage .sec-label{margin:18px 0 10px}
  #promptTxt{min-height:90px;resize:vertical}
  .prod-preview{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:18px}
  .prod-preview:empty{display:none}
  .prod-thumb{position:relative;width:84px;height:84px;border-radius:0;border:1px solid var(--c-line);background:var(--c-surface);background-size:cover;background-position:center;overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.04)}
  .prod-thumb .remove{position:absolute;top:4px;right:4px;width:20px;height:20px;border-radius:50%;background:rgba(33,28,24,.68);color:#fff;border:none;display:flex;align-items:center;justify-content:center;font-size:12px;cursor:pointer;backdrop-filter:blur(2px);line-height:1}
  .prod-thumb .remove:hover{background:rgba(220,60,60,.9)}
  .prod-thumb .meta{position:absolute;bottom:0;left:0;right:0;background:rgba(33,28,24,.55);color:#fff;font-size:10px;padding:3px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .inspector .card{padding:18px}
  .director-brief{position:sticky;top:calc(var(--topbar-h) + 20px);align-self:start}
  .director-brief-head{background:var(--c-ink);color:#fff;padding:20px}
  .director-brief-head h3{font-family:var(--font-display);font-size:22px;margin:7px 0 5px}
  .director-brief-head p{font-size:12px;line-height:1.7;color:var(--studio-muted)}   /* C1：#d0ccc3 暖灰，三个原型 0 命中 ⇒ 与同族深色面板统一到 var(--studio-muted) */
  .director-brief-body{background:var(--c-surface);border:1px solid var(--c-line);border-top:0;padding:18px}
  .director-brief-body .shot-plan-item{font-size:12px}
  .acc-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:6px 0 4px}
  .acc-card{border:1px solid var(--c-line);border-radius:0;padding:12px 10px;cursor:pointer;background:var(--c-surface);display:flex;flex-direction:column;align-items:center;gap:8px;transition:.15s;font-family:var(--font-sans)}
  .acc-card:hover{border-color:var(--c-brand)}
  .acc-card.active{border-color:var(--c-brand);background:var(--c-brand-wash);box-shadow:0 0 0 3px var(--c-brand-wash)}
  .acc-card{position:relative}
  .acc-empty{font-size:12px;color:var(--c-ink-faint);grid-column:1/-1;padding:10px 0}
  .acc-card-act{margin-top:2px;font-size:12px;color:var(--c-brand);border:1px solid var(--c-brand);border-radius:0;padding:5px 8px;text-align:center;cursor:pointer;background:var(--c-brand-wash);transition:.15s;width:100%}
  .acc-card-act:hover{background:var(--c-brand);color:#fff}
  .acc-card-act:disabled{opacity:.6;cursor:default}
  .card-img-wrap{margin-top:4px}
  .card-img{width:100%;border-radius:0;border:1px solid var(--c-line);cursor:zoom-in}
  .card-err{color:#e5484d;margin-top:3px}
  .card-loading{color:var(--c-ink-faint)}

  /* 生图工作台右侧面板里的紧凑角色设定卡（2 列，点击放大） */
  .acc-cards .role-card.compact{cursor:pointer}
  .acc-cards .role-card.compact.active{border-color:var(--c-brand);background:var(--c-brand-wash);box-shadow:0 0 0 3px var(--c-brand-wash)}
  .acc-cards .role-card.compact .rc-img{aspect-ratio:5/4}
  .acc-cards .role-card.compact .badge{font-size:10px;padding:2px 6px;top:6px;left:6px;border-radius:0}
  .acc-cards .role-card.compact .name-tag{font-size:12px;bottom:7px;left:9px}
  .acc-cards .role-card.compact .body{padding:8px 10px 10px;gap:0}
  .acc-cards .role-card.compact .name{font-size:13px}
  .acc-cards .role-card.compact .name .badge.example{font-size:10px;padding:1px 5px;margin-left:4px;vertical-align:middle}
  .acc-cards .role-card.compact .meta{font-size:11px}
  .acc-cards .role-card.compact .foot{padding-top:4px;min-height:28px}
  .acc-cards .role-card.compact .conf{font-size:12px}
  .acc-cards .role-card.compact .pending-frame{padding:8px;gap:5px}
  .acc-cards .role-card.compact .pending-frame .pf-ico{width:26px;height:26px;font-size:13px}
  .acc-cards .role-card.compact .pending-frame b{font-size:12px}
  .acc-cards .role-card.compact .pending-frame span{font-size:10px}
  .product-category-grid button:hover,.product-category-grid button.active{border-color:var(--c-brand);background:var(--c-brand-wash);color:var(--c-brand-deep);font-weight:650}.product-plan .shots{color:var(--c-ink-soft);margin-top:3px}
  .shot-plan-item{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--c-ink-soft)}
  .shot-plan-item b{width:18px;height:18px;display:grid;place-items:center;border:1px solid var(--c-brand-line);color:var(--c-brand-deep);font-size:10px;font-weight:600}
  .shot-plan-item span{flex:1}.shot-plan-item em{font-style:normal;color:var(--c-success);background:var(--c-success-wash);padding:2px 5px;white-space:nowrap}
  .opt{gap:6px;background:var(--c-surface-2);border:1px solid var(--c-line);border-radius:0;padding:4px;margin-top:6px}
  .opt label{flex:1;margin:0;border:none;border-radius:0;padding:9px 8px;text-align:center;background:none}
  .opt label.sel{background:var(--c-surface);box-shadow:0 1px 3px rgba(0,0,0,.08)}
  .opt label .chk{display:none}
  .opt label .t{font-size:12px}
  .opt label .d{font-size:11px;margin-top:2px}

  /* 画廊流式出现 */
  .gcard{animation:pop .42s cubic-bezier(.16,1,.3,1) both}
  @keyframes pop{from{opacity:0;transform:scale(.94) translateY(6px)}to{opacity:1;transform:none}}
  .gallery{margin-top:4px}

  /* 响应式：生成工作台 */
  @media (max-width:1080px){
    .pipeline .node{flex-direction:row;width:auto;gap:6px;padding:0 4px}
    .pipeline .node .ring{width:13px;height:13px;font-size:8px}
    .director-brief{position:static}
  }
  @media (max-width:1023px){
  }
  @media (max-width:760px){
    .content{padding:18px 16px}
    .phead h1{font-size:22px}
    .kpis{grid-template-columns:1fr 1fr}
    .planlist .prow{flex-wrap:wrap;gap:10px}
    .planlist .pb{min-width:120px}
    .card{padding:15px}
    .content{padding-bottom:76px}
  }
  @media (prefers-reduced-motion: reduce){
    .node.cur .ring{animation:none}
    .screen.active{animation:none}
    .gcard{animation:none}
    *{scroll-behavior:auto !important}
    .sidebar,.btn,.drop,.gcard,.toast{transition:none}
  }
  /* ===== 网红 DNA 档案 · 方案 B（网格大格 + 右侧创建边栏） ===== */
  .archive-layout{display:grid;grid-template-columns:1fr 360px;gap:24px;align-items:start;margin-top:18px}
  /* 作者样式表的 display:grid 会盖过 UA 的 [hidden]{display:none}（本仓踩过这个坑），
     所以资产中心四个 pane 的 hidden 必须显式兜底，否则切 tab 时旧 pane 不会消失。 */
  .archive-layout[hidden]{display:none}
  @media(max-width:1080px){ .archive-layout{grid-template-columns:1fr} .create-side{position:static!important;margin-top:18px} }
  .toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:12px;flex-wrap:wrap}
  .filter{display:flex;gap:6px}
  .chip{font-size:12px;padding:5px 12px;border-radius:0;border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink-soft);cursor:pointer;transition:.15s}
  .chip:hover{border-color:var(--c-brand)}
  .chip.active{background:var(--c-ink);color:#fff;border-color:var(--c-ink)}
  .role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px}
  .role-card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;overflow:hidden;display:flex;flex-direction:column;transition:.15s}
  .role-card:hover{border-color:var(--c-brand);box-shadow:0 6px 20px rgba(0,0,0,.06)}
  .role-card .rc-img{position:relative;aspect-ratio:5/4;background:var(--c-surface-2);overflow:hidden}
  .role-card .rc-img img{width:100%;height:100%;object-fit:cover;display:block}
  .role-card .badge{position:absolute;top:10px;left:10px;font-size:12px;font-weight:600;padding:3px 9px;border-radius:0;background:rgba(255,255,255,.92);backdrop-filter:blur(4px);color:var(--c-success)}
  .role-card .badge.draft{color:var(--c-warning)}
  .role-card .name-tag{position:absolute;bottom:10px;left:12px;font-family:var(--font-display);font-size:16px;font-weight:650;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.55)}
  .role-card .body{padding:13px 14px 15px;display:flex;flex-direction:column;gap:9px;flex:1}
  .role-card .name{font-family:var(--font-display);font-size:16px;font-weight:650}
  /* 2026-09-22：「示例」徽标写在 `.name` 里（与 DNA 卡同款），但 `.role-card .badge` 是
     `position:absolute;top:10px;left:10px`（给图上的状态徽标用的）—— 同名 class 无差别命中，
     于是名字旁的示例徽标会被拽回图片左上角，**与状态徽标重叠**（实测两枚徽标同在 y=222、
     x 相差 6px）。这里按「徽标在名字里 ⇒ 回到行内」给出作用域更窄的规则
     （`.role-card .name .badge` = 3 个 class，压过 `.role-card .badge` 的 2 个 class；
     而 `.acc-cards .role-card.compact .name .badge.example` 是 5 个 class，优先级更高、
     不受本行影响），修的是位置而非外观；同时修好既有的 DNA 卡同名问题。 */
  .role-card .name .badge{position:static;display:inline-block;margin-left:6px;vertical-align:middle;font-size:11px;font-weight:600;padding:2px 8px;background:var(--c-success-wash);color:var(--c-success);border:1px solid var(--c-success-line);backdrop-filter:none}
  .role-card .meta{font-size:11px;color:var(--c-ink-faint);margin-top:-4px}
  .role-card .foot{display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:6px;gap:8px}
  .role-card .conf{font-family:var(--font-display);font-weight:600;color:var(--c-brand-deep);font-size:14px}
  .role-card .conf small{font-family:var(--font-sans);font-weight:400;color:var(--c-ink-faint);font-size:12px}
  .role-card .acts{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}
  .pending-frame{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:repeating-linear-gradient(135deg,#FAFAF9,#FAFAF9 12px,#F3F2F0 12px,#F3F2F0 24px);color:var(--c-ink-faint);text-align:center;padding:20px}
  .pending-frame .pf-ico{width:42px;height:42px;border-radius:50%;border:2px dashed var(--c-line);display:grid;place-items:center;font-size:18px;color:var(--c-ink-faint)}
  .pending-frame b{color:var(--c-ink-soft);font-size:13px;font-weight:600}
  .pending-frame span{font-size:11px;line-height:1.5}
  .role-empty{padding:40px 20px;text-align:center;color:var(--c-ink-faint);font-size:13px;border:1px dashed var(--c-line);border-radius:0;background:var(--c-surface-2)}
  .btn.small{padding:6px 13px;font-size:12px}
  .btn.block{width:100%}
  /* 右侧创建 DNA 边栏 */
  .create-side{position:sticky;top:20px;background:var(--c-surface);border:1px solid var(--c-line);border-radius:0;padding:18px}
  .create-side h2{font-family:var(--font-display);font-size:19px;font-weight:650;margin-bottom:3px}
  .create-side .sub{font-size:12px;color:var(--c-ink-soft);margin-bottom:14px}
  .create-side .hint{background:var(--c-brand-wash);color:var(--c-brand-deep);font-size:12px;padding:10px 12px;border-radius:0;line-height:1.55;margin-bottom:6px}
  .create-side label{display:block;font-size:12px;font-weight:400;color:var(--c-ink-soft);margin:13px 0 6px}
  .create-side input,.create-side select,.create-side textarea{width:100%;padding:9px 11px;border:1px solid var(--c-line);border-radius:0;font-size:13px;font-family:var(--font-sans);background:#fff;color:var(--c-ink)}
  .create-side .drop{display:block;border:1.5px dashed var(--c-line);border-radius:0;padding:18px 14px;text-align:center;color:var(--c-ink-faint);font-size:12px;background:var(--c-surface-2);cursor:pointer;transition:.15s;margin-top:8px}
  .create-side .drop:hover,.create-side .drop:focus-within{border-color:var(--c-brand);color:var(--c-brand-deep);background:var(--c-brand-wash)}
  /* 「视觉隐藏」而非 display:none —— display:none 的元素**不可聚焦**，等于把这个上传入口从键盘世界删掉
     （读屏读不到、Tab 停不下来，鼠标用户完全看不出来）。形态与上方 .drop input[type=file]{position:absolute 那条逐字同源。
     :focus-within 必须与 :hover 同规则组：否则焦点走到这里时没有任何视觉反馈，看起来像页面卡死。 */
  .create-side .drop input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
  .card-res .card-img-wrap{margin-top:8px}
  .card-res .card-img{border-radius:0;cursor:zoom-in}
  .img-lightbox{display:none;pointer-events:none;position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,.86);align-items:center;justify-content:center;padding:24px}
  .img-lightbox.show{display:flex;pointer-events:auto}
  .img-lightbox-wrap{position:relative;max-width:92vw;max-height:92vh;display:flex;align-items:center;justify-content:center}
  .img-lightbox-wrap img{max-width:100%;max-height:92vh;border-radius:0;box-shadow:0 24px 80px rgba(0,0,0,.4)}
  .img-lightbox-close{position:absolute;top:-44px;right:-8px;width:36px;height:36px;border-radius:50%;border:none;background:rgba(255,255,255,.15);color:#fff;font-size:22px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px)}
  .img-lightbox-close:hover{background:rgba(255,255,255,.28)}
  /* ===== 设计系统 v2 增强：a11y 触摸目标 + 阴影层级 ===== */
  .card{box-shadow:var(--sh-1)}
  .modal,.npop .box,.login-box{box-shadow:var(--sh-3)}
  .btn,.acc-card-act{min-height:40px;display:inline-flex;align-items:center;justify-content:center;gap:6px}
  .btn:focus-visible,.rbtn:focus-visible,.acc-card-act:focus-visible,.input:focus-visible,.select:focus-visible,textarea:focus-visible{outline:2px solid var(--c-brand);outline-offset:2px}

/* ===== G 模式：A 配色 + Ambrook 排版骨架（v1.3.14 起默认） ===== */
/* 排版 / 圆角：全端安全 */
.phead h1{font-weight:650}
.sec-label{display:block;font-size:13px;font-weight:400;color:var(--c-ink);letter-spacing:.14em;text-transform:uppercase}
.sec-label::before{content:attr(data-eyebrow);display:block;font-family:var(--font-mono);font-size:10px;font-weight:400;letter-spacing:.18em;color:var(--c-brand-deep);margin:0 0 6px;text-transform:uppercase;width:auto;height:auto;background:none;flex-shrink:0}
.sec-label:not([data-eyebrow])::before{display:none;margin:0}
.card{border-radius:0}
.btn{border-radius:0;font-weight:600;padding:11px 26px}
.btn.ghost{border-radius:0}
.pill{border-radius:0}
.gcard{border-radius:0}
.prod-thumb{border-radius:0;box-shadow:none}
.drop{border-radius:0}
.rail{border-radius:0}
.opt label{border-radius:0}
input[type=text],select,textarea{border-radius:0}
/* 编辑式留白：仅桌面，避免移动端挤压 */
@media (min-width:860px){
  .phead h1{font-size:32px;letter-spacing:-0.3px}
  .phead{margin-bottom:34px}
  .sec-label{margin:50px 0 16px}
  .content{padding:50px 58px}
  .gallery{gap:22px}
  .rail{margin-bottom:32px;padding:18px 24px}
}

/* ── #3 motion-system ── */
  /* Unified motion system: state changes use compositor-friendly properties only. */
  :root{
    --motion-fast:180ms;
    --motion-base:280ms;
    --motion-slow:420ms;
    --ease-editorial:cubic-bezier(.22,.61,.36,1);
    --ease-enter:cubic-bezier(.16,1,.3,1);
  }
  /* will-change 只在动画期间需要。常驻会永久把本元素变成 position:fixed 后代的
     containing block（与动画 fill:both 残留的 identity transform 同一个坑，
     见 studio-app.js motionSettle 与 index.css S4.18 的说明）。 */
  .motion-page.motion-enter,.motion-page.motion-leave{will-change:opacity,transform}
  .motion-page.motion-enter{animation:motion-page-enter var(--motion-base) var(--ease-enter) both}
  .motion-page.motion-leave{animation:motion-page-leave var(--motion-fast) ease-in both;pointer-events:none}
  .motion-page.motion-locked{pointer-events:none;user-select:none}
  @keyframes motion-page-enter{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  @keyframes motion-page-leave{from{opacity:1;transform:none}to{opacity:0;transform:translateY(-5px)}}
  .motion-stagger > *,.motion-item{animation:motion-item-enter var(--motion-base) var(--ease-enter) both;animation-delay:calc(var(--motion-index, 0) * 42ms)}
  @keyframes motion-item-enter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  .nav-item,.director-nav{position:relative;transition:color var(--motion-fast) var(--ease-editorial),background-color var(--motion-fast) var(--ease-editorial),border-color var(--motion-fast) var(--ease-editorial),transform var(--motion-fast) var(--ease-editorial)}
  .director-nav.active::before{content:"";position:absolute;left:-2px;top:12px;bottom:12px;width:2px;background:var(--studio-blue);transform:scaleY(1);transform-origin:center;transition:transform var(--motion-base) var(--ease-editorial)}
  .director-nav:not(.active)::before{transform:scaleY(0)}
  .btn,.director-cta,.director-gallery-foot button,.director-gallery-foot a,.overview-batch-action,.director-filter,.director-intent,.director-dna-card,.director-category-grid button,.director-upload,.src-tab,.drop,.gcard,.director-gallery-card,.overview-recent-card{transition:transform var(--motion-fast) var(--ease-editorial),background-color var(--motion-fast) var(--ease-editorial),border-color var(--motion-fast) var(--ease-editorial),color var(--motion-fast) var(--ease-editorial),box-shadow var(--motion-fast) var(--ease-editorial),opacity var(--motion-fast) ease}
  .btn:not(:disabled):active,.director-cta:not(:disabled):active,.director-gallery-foot button:not(:disabled):active,.director-gallery-foot a:not(.disabled):active,.overview-batch-action:not(:disabled):active,.director-filter:not(:disabled):active,.director-intent:not(:disabled):active,.director-category-grid button:not(:disabled):active,.director-upload:not(:disabled):active,.src-tab:not(:disabled):active{transform:translateY(1px) scale(.985)}
  .btn:disabled,.director-cta:disabled,.director-gallery-foot button:disabled,.overview-batch-action:disabled,.director-filter:disabled,.director-intent:disabled,.director-category-grid button:disabled,.director-upload:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}
  /* 全站焦点环不在本轮范围；灵感与配方页的焦点环见下方 #directorPlanningView 专属规则。 */
  .btn:focus-visible,.director-cta:focus-visible,.director-gallery-foot button:focus-visible,.director-gallery-foot a:focus-visible,.director-filter:focus-visible,.director-intent:focus-visible,.director-dna-card:focus-visible,.director-category-grid button:focus-visible,.director-upload:focus-visible,.src-tab:focus-visible,.drop:focus-visible{outline:2px solid var(--studio-blue);outline-offset:3px}
  .btn.is-loading,.director-cta.is-loading{cursor:wait;pointer-events:none;position:relative}
  .btn.is-loading::before,.director-cta.is-loading::before{content:"";display:inline-block;width:12px;height:12px;margin-right:7px;vertical-align:-2px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:motion-spin .7s linear infinite}
  @keyframes motion-spin{to{transform:rotate(360deg)}}
  .motion-success{animation:motion-success var(--motion-slow) var(--ease-enter) both}
  .motion-error{animation:motion-error var(--motion-slow) ease both}
  @keyframes motion-success{0%{transform:scale(.98);opacity:.7}55%{transform:scale(1.015)}100%{transform:none;opacity:1}}
  @keyframes motion-error{0%,100%{transform:none}35%{transform:translateX(3px)}70%{transform:translateX(-2px)}}
  .mask,.director-review-mask,.npop,.img-lightbox,.login-mask{transition:opacity var(--motion-base) var(--ease-editorial)}
  .mask.motion-visible,.director-review-mask.show,.npop.show,.img-lightbox.show{opacity:1}
  .mask.motion-visible .modal,.director-review-mask.show .director-review-panel,.npop.show .box,.img-lightbox.show .img-lightbox-wrap{animation:motion-modal-enter var(--motion-base) var(--ease-enter) both}
  @keyframes motion-modal-enter{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
  @keyframes motion-sheen{from{background-position:200% 0}to{background-position:-50% 0}}
  .director-gallery-card,.gcard,.overview-recent-card{will-change:transform}
  .director-gallery-card:hover,.gcard:hover,.overview-recent-card:hover{transform:translateY(-3px);box-shadow:4px 5px 0 rgba(182,83,61,.16)}
  .director-gallery-image,.gcard .thumb,.overview-recent-image,.director-result-img,.director-dna-thumb,.director-face-strip{transition:transform var(--motion-base) var(--ease-editorial),filter var(--motion-base) var(--ease-editorial)}
  .director-gallery-card:hover .director-gallery-image,.gcard:hover .thumb,.overview-recent-card:hover .overview-recent-image{transform:scale(1.015);filter:saturate(1.05)}
  .director-dna-card.active .director-face-strip{animation:motion-success var(--motion-base) var(--ease-enter) both}
  .director-process-active{animation:motion-process-pulse 1.6s ease-in-out infinite}
  @keyframes motion-process-pulse{0%,100%{opacity:1}50%{opacity:.62}}
  @media(prefers-reduced-motion:reduce){
    *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}
    .motion-page,.motion-page.motion-enter,.motion-page.motion-leave{transform:none!important}
  }
  .interaction-status{display:none;margin-top:8px;padding:8px 10px;border:1px solid var(--c-line);font-size:12px;line-height:1.5;color:var(--c-ink-soft);background:var(--c-surface-2)}
  .interaction-status.show{display:block}
  /* V2（2026-09-30）：三态接 --st-* 语义色（gallery 屏同套）。success 原走 --prototype-olive-*
     （workbench 已映射）+ 硬编码暖边 #c8d0b7；error 原纯硬编码暖棕 var(--c-warning)/var(--c-warning-wash)/#dfb8a9——
     两者在冷色屏里都是漏网暖值，统一收口。 */
  .interaction-status.success{color:var(--st-ok-fg);background:var(--st-ok-bg);border-color:var(--st-ok-bd)}
  .interaction-status.error{color:var(--st-err-fg);background:var(--st-err-bg);border-color:var(--st-err-bd)}
  .upload-drop-active{border-color:var(--c-brand)!important;background:var(--c-brand-wash)!important;color:var(--c-brand-deep)!important}

/* ── #4 prototype-visual-override ── */
  /* Prototype alignment: keep existing controls, but match the approved editorial shell. */
  :root{--prototype-ink:#171817;--prototype-paper:#f7f9fc;--prototype-paper-2:#eef2f8;--prototype-line:rgba(148,163,184,.22);--prototype-red:#3b82f6;--prototype-olive:#6b7357;--prototype-white:#ffffff}
  body{background:var(--studio-paper);color:var(--studio-ink)}
  .brand small,.nav-item .ico{color:var(--studio-muted)}
  .main{background:var(--studio-paper)}
  .content{padding:34px 70px 54px;max-width:1440px}
  .phead{border-bottom:1px solid var(--studio-line);padding-bottom:22px;margin-bottom:28px}
  .phead h1{font-family:var(--font-display);font-size:32px;letter-spacing:-.03em;color:var(--studio-ink)}
  .phead p{color:var(--studio-muted)}
  .stage{min-width:0}
  .product-category-grid button:hover,.product-category-grid button.active{background:var(--studio-ink);border-color:var(--studio-ink);color:var(--studio-white)}
  .director-brief-head{background:var(--studio-ink);border-radius:0}
  .director-brief-body{background:var(--studio-white);border-color:var(--studio-line);border-radius:0}
  .sec-label{color:var(--studio-ink)}
  .sec-label::before{color:var(--studio-blue)}
  .card,.gallery .gcard{border-radius:0;border-color:var(--studio-line);box-shadow:none}
  .btn{border-radius:0;background:var(--studio-blue);border-color:var(--studio-blue)}
  .btn.ghost{background:var(--studio-white);border-color:var(--studio-line);color:var(--studio-blue)}
  .role-card{border-radius:0;border-color:var(--studio-line)}
  .role-card.active{border-color:var(--studio-blue);box-shadow:0 0 0 2px rgba(182,83,61,.18)}
  @media (min-width:1081px){:root{--rail-w:86px}.content{padding:34px 42px 54px}}
  @media (max-width:1080px){.content{padding:28px 24px 44px}}

  /* Director shell: the workbench and gallery share the approved editorial prototype geometry. */
  .director-rail{background:var(--studio-ink);color:#d9d6cc;padding:24px 14px;display:flex;flex-direction:column;align-items:center;gap:28px}
  .director-mark{width:42px;height:42px;border:1px solid #a9a398;display:grid;place-items:center;font-family:var(--font-display);font-size:19px;color:#f5efe4}
  .director-nav{width:58px;min-height:58px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;position:relative;text-align:center;font-size:12px;line-height:1.5;color:var(--studio-muted);border-left:2px solid transparent;cursor:pointer}
  .director-nav-icon{height:16px;color:var(--studio-muted);   /* C1：#d0ccc3 是暖灰，三个原型 0 命中 ⇒ 换冷灰 */font-size:16px;line-height:1}
  .director-nav em{position:absolute;right:-5px;top:2px;background:var(--studio-blue);color:var(--studio-white);font-style:normal;font-size:8px;line-height:1;padding:3px 4px}
  .director-nav.active{color:var(--studio-white);border-left-color:var(--studio-blue);background:#262725}
  .director-nav.active .director-nav-icon{color:var(--studio-blue)}   /* C1：原型 .nav.active 用 --blue */
  /* Keep short views top-aligned; `margin:auto` vertically centers them in
     the shell grid and creates a large blank band above gallery/planning. */
  .director-main{padding:34px 42px 54px;max-width:1440px;width:100%;margin:0 auto}
  .director-view{display:none}
  .director-view.active{display:block}
  .director-topline,.director-gallery-top{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:1px solid var(--studio-line);padding-bottom:14px}
  .director-eyebrow{font-size:12px;letter-spacing:.18em;color:var(--studio-blue);font-weight:600}
  .director-main h1{margin:6px 0 3px;font:650 32px/1.15 var(--font-display);letter-spacing:-.03em}
  .director-sub{color:var(--studio-muted);font-size:13px}
  .director-dna-card{border:1px solid var(--studio-line);background:var(--studio-paper);padding:9px;cursor:pointer;text-align:left;transition:.16s ease;font-family:inherit}
  .director-dna-card.active{border-color:var(--studio-ink);background:var(--studio-white);box-shadow:4px 4px 0 var(--studio-blue)}
  .director-dna-thumb{height:92px;background:var(--studio-placeholder-bg) center/cover;margin-bottom:8px}
  .director-face-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;height:104px;margin-bottom:8px;background:var(--studio-placeholder-bg)}
  .director-face-angle{background-color:var(--studio-placeholder-bg);background-repeat:no-repeat;background-size:300% 200%;background-position-y:100%}
  .director-face-angle.front{background-position-x:0}.director-face-angle.three-quarter{background-position-x:50%}.director-face-angle.profile{background-position-x:100%}
  .director-face-caption{display:flex;justify-content:space-between;color:var(--studio-muted);font-size:10px;margin:-2px 0 7px}
  .director-dna-card strong{display:block;font-size:13px;color:var(--studio-ink)}.director-dna-card span{display:block;color:var(--studio-muted);font-size:11px;margin-top:4px}
  .director-pill{display:inline-block;padding:5px 8px;background:var(--studio-blue-soft);color:#3973bd;font-size:12px}.director-shot-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--studio-line)}.director-shot-row:last-child{border-bottom:0}.director-shot-copy{flex:1}.director-shot-copy strong{display:block;font-size:13px}.director-shot-copy span{display:block;color:var(--studio-muted);font-size:11px;margin-top:3px}.director-result{background:var(--studio-white);border:1px solid var(--studio-line);padding:9px}.director-result-img{height:132px;background:var(--studio-placeholder-bg) center/cover}.director-result-meta{padding:10px 2px 2px;display:flex;justify-content:space-between;font-size:12px;gap:8px}.director-result-meta span{color:var(--studio-muted)}
  .director-brief,.director-qa{position:sticky;top:24px;align-self:start}.director-brief-head,.director-qa-head{background:var(--studio-ink);color:var(--studio-white);padding:20px}.director-brief-head h3,.director-qa-head h3{font:650 22px var(--font-display);margin:8px 0 5px}.director-brief-head p,.director-qa-head p{color:var(--studio-muted);font-size:12px;line-height:1.7;margin:0}.director-brief-body,.director-qa-body{padding:18px;background:var(--studio-white);border:1px solid var(--studio-line);border-top:0}
  .director-cta{width:100%;border:0;border-radius:var(--studio-r-control);background:linear-gradient(135deg,#111827,#071022);color:#fff;padding:13px;font:600 12px var(--studio-font);cursor:pointer}.director-cta:disabled{opacity:.6;cursor:wait}.director-settings{margin-top:14px;border-top:1px solid var(--studio-line);padding-top:12px}.director-settings summary{font-size:12px;color:var(--studio-muted);cursor:pointer}
  .director-gallery-image{position:relative}.director-gallery-archive{position:absolute;right:8px;bottom:8px;background:var(--studio-blue-soft);color:#3973bd;padding:5px 7px;font-size:11px}.director-gallery-archive.archive-failed{background:var(--c-warning-wash);color:var(--c-warning)}
  .director-review-mask{display:none;position:fixed;inset:0;background:var(--studio-overlay-bg);z-index:92;align-items:center;justify-content:center;padding:20px}.director-review-mask.show{display:flex}.director-review-panel{width:min(880px,100%);max-height:90vh;overflow:auto;background:var(--studio-paper);border:1px solid var(--studio-line);display:grid;grid-template-columns:minmax(260px,1fr) 320px}.director-review-image{min-height:500px;background:var(--studio-placeholder-bg) center/contain no-repeat}.director-review-content{background:var(--studio-white);padding:22px}.director-review-content h3{font:650 22px var(--font-display);margin-bottom:8px}.director-review-content .close{float:right;border:0;background:none;font-size:22px;cursor:pointer}.director-review-actions{display:grid;gap:8px;margin-top:18px}.director-review-actions button{padding:10px;border:1px solid var(--studio-line);background:var(--studio-paper);cursor:pointer}.director-review-actions .primary{background:var(--studio-blue);color:#fff;border-color:var(--studio-blue)}
  .director-retry-upload-mask{display:none;position:fixed;inset:0;background:var(--studio-overlay-bg);z-index:var(--ui-overlay-retry);align-items:center;justify-content:center;padding:20px}.director-retry-upload-mask.show{display:flex}.director-retry-upload-panel{width:min(560px,100%);max-height:90vh;overflow:auto;background:var(--studio-white);border:1px solid var(--studio-line);padding:24px}.director-retry-upload-panel h3{font:650 22px var(--font-display);margin:8px 0}.director-retry-upload-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:16px 0;padding:12px;background:var(--studio-paper);font-size:12px;color:var(--studio-muted)}.director-retry-upload-meta b{display:block;color:var(--studio-ink);margin-top:3px}.director-retry-upload-drop{display:block;border:1px dashed var(--studio-blue);background:#faf7f0;padding:24px;text-align:center;cursor:pointer}
.director-retry-upload-drop:focus-within{border-color:var(--studio-blue);box-shadow:0 0 0 3px rgba(200,60,50,.18)}.director-retry-upload-drop input{position:absolute;width:1px;height:1px;opacity:0}.director-retry-upload-preview{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.director-retry-upload-preview img{width:64px;height:64px;object-fit:contain;background:var(--studio-paper);border:1px solid var(--studio-line)}.director-retry-upload-actions{display:flex;gap:8px;margin-top:18px}.director-retry-upload-actions button{flex:1;min-height:42px;border:1px solid var(--studio-line);background:var(--studio-paper);cursor:pointer}.director-retry-upload-actions .primary{background:var(--studio-blue);border-color:var(--studio-blue);color:#fff}
  .plib-mask{display:none;position:fixed;inset:0;background:var(--studio-overlay-bg);z-index:var(--ui-overlay-plib);align-items:center;justify-content:center;padding:20px}.plib-mask.show{display:flex}.plib-panel{width:min(860px,100%);max-height:90vh;overflow:auto;background:var(--studio-white);border:1px solid var(--studio-line);padding:22px}.plib-panel h3{font:650 22px var(--font-display);margin:8px 0 4px}.plib-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.plib-close{border:0;background:none;font-size:22px;cursor:pointer;line-height:1}.plib-search{width:100%;min-height:38px;border:1px solid var(--studio-line);background:var(--studio-paper);padding:0 10px;margin:14px 0 10px;font-size:13px}.plib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.plib-card{border:1px solid var(--studio-line);background:var(--studio-paper);cursor:pointer;text-align:left;padding:0;overflow:hidden}.plib-card:disabled{opacity:.5;cursor:not-allowed}.plib-card:hover:not(:disabled){border-color:var(--studio-blue)}.plib-thumb{aspect-ratio:1/1;background:var(--studio-placeholder-bg) center/cover no-repeat}.plib-meta{padding:8px;font-size:12px;color:var(--studio-muted);line-height:1.5}.plib-meta b{display:block;color:var(--studio-ink);font-size:13px;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plib-state{border:1px dashed var(--studio-line);padding:28px;text-align:center;color:#526075;font:400 12px/1.6 var(--studio-font)}.plib-state-error{display:flex;flex-direction:column;align-items:center;gap:12px}.plib-retry{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:30px;margin:0;padding:0 12px;border:1px solid var(--studio-blue-line);border-radius:var(--studio-r-control);background:var(--studio-blue-soft);color:#1d4ed8;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}.plib-retry:hover{background:#dbeafe;border-color:rgba(59,130,246,.55);box-shadow:var(--studio-sh-control)}.plib-retry:focus-visible{outline:2px solid var(--studio-blue-line);outline-offset:2px}
  @media(max-width:980px){.director-layout,.director-gallery-layout{grid-template-columns:1fr}.director-brief,.director-qa{position:static}}
  @media(max-width:640px){.app-shell{grid-template-columns:1fr}.app-shell>.director-rail,.app-shell>.director-main,.app-shell>.app{grid-column:1;width:100%;min-width:0}.director-rail{display:flex;flex-direction:row;overflow:auto;padding:12px;gap:8px}.director-mark{flex:none}.director-nav{min-height:42px;width:auto;padding:0 10px}.director-main{padding:24px 16px}.director-topline,.director-gallery-top{display:block}.director-gallery-actions{margin-top:16px}.director-gallery-grid{grid-template-columns:1fr}.director-gallery-image{height:250px}.director-review-panel{grid-template-columns:1fr}.director-review-image{min-height:340px}}
  @media(min-width:641px) and (max-width:1050px){}
  @media(min-width:641px) and (max-width:980px){.director-rail{padding-left:8px;padding-right:8px}.director-nav{width:62px;font-size:11px}}

  /* All non-production views reuse the same director shell and navigation. */
  .app-shell{display:grid;grid-template-columns:86px minmax(0,1fr);grid-template-rows:minmax(0,1fr);min-height:100vh;background:var(--studio-paper)}
  .app-shell>.director-rail{grid-column:1;grid-row:1}
  .app-shell>.app{grid-column:2;grid-row:1;min-width:0;min-height:100vh;background:var(--studio-paper)}
  .app-shell>.app .main{display:block;min-width:0;min-height:100vh}
  /* A′（2026-09-22）：本条**已被后面的 `@media(min-width:1051px)` 块覆盖**（同选择器、更靠后，
     那里是正文列宽的唯一生效点）—— 保留原样以免改动响应式段的级联关系。
     正文列宽的施工与说明见后面那块 `.director-main,.app-shell>.app .content` 的注释。 */
  .app-shell>.app .content{width:100%;max-width:1440px;min-width:0;margin:0 auto;padding:34px 42px 54px;background:var(--studio-paper)}
  .app-shell>.app .phead{border-bottom:1px solid var(--studio-line);padding-bottom:14px;margin-bottom:28px}
  .app-shell>.app .phead h1{font-family:var(--font-display);font-size:32px;letter-spacing:-.03em;color:var(--studio-ink)}
  .app-shell>.app .phead p{color:var(--studio-muted)}
  .overview-section-label{display:flex;justify-content:space-between;align-items:center;margin:0 0 10px}
  .overview-section-label h2{font:650 19px var(--font-display);margin:0;color:var(--studio-ink)}
  .overview-section-label span,.overview-section-label button{font-size:12px;color:var(--studio-muted)}
  .overview-section-label button{border:0;background:none;cursor:pointer;color:var(--studio-blue);padding:0}
  .overview-batch{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:center;background:var(--studio-white);border:1px solid var(--studio-line);padding:18px;margin-bottom:26px}
  .overview-batch-main strong{font:600 20px var(--font-display);color:var(--studio-ink)}.overview-batch-main p{margin:7px 0 13px;color:var(--studio-muted);font-size:12px}
  .overview-batch-tags{display:flex;gap:7px;flex-wrap:wrap}.overview-batch-tag{padding:5px 8px;background:var(--studio-paper);border:1px solid var(--studio-line);color:var(--studio-muted);font-size:11px}.overview-batch-tag.good{color:var(--studio-blue);background:var(--studio-blue-soft)}.overview-batch-tag.wait{color:var(--studio-blue);background:var(--c-warning-wash)}.overview-recent-card{background:var(--studio-white);border:1px solid var(--studio-line);padding:8px;cursor:pointer}.overview-recent-card:hover{border-color:var(--studio-blue);transform:translateY(-2px)}
  .overview-action-brief{position:sticky;top:24px;align-self:start}.overview-action-head{background:var(--studio-ink);color:var(--studio-white);padding:20px}.overview-action-head .director-eyebrow{color:#d78670}.overview-action-head h3{font:650 22px var(--font-display);margin:8px 0 5px}.overview-action-head p{color:var(--studio-muted);font-size:12px;line-height:1.7;margin:0}.overview-action-body{padding:18px;background:var(--studio-white);border:1px solid var(--studio-line);border-top:0}.overview-action-block{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--studio-line)}.overview-action-block:last-child{margin:0;padding:0;border:0}.overview-action-block label{display:block;color:var(--studio-muted);font-size:12px;margin-bottom:8px}.overview-action-block strong{font-size:14px;line-height:1.65}.overview-status-row{display:flex;justify-content:space-between;padding:7px 0;font-size:12px}.overview-status-row b{color:var(--studio-blue)}.overview-status-row.wait b{color:var(--studio-blue)}
  @media(max-width:1080px){.overview-action-brief{position:static}}
  @media(max-width:760px){.overview-batch{grid-template-columns:1fr}}
  .app-shell>.app .sec-label{color:var(--studio-muted)}
  .app-shell>.app .card,.app-shell>.app .batchbar,.app-shell>.app .role-card,.app-shell>.app .asset-card{border-radius:0;background:var(--studio-white);border-color:var(--studio-line);box-shadow:none}
  .app-shell>.app .btn{border-radius:0;background:var(--studio-blue);border-color:var(--studio-blue)}
  .app-shell>.app .btn.ghost{background:var(--studio-white);color:var(--studio-blue);border-color:var(--studio-line)}
  .app-shell>.app input[type=text],.app-shell>.app select,.app-shell>.app textarea{border-radius:0;background:var(--studio-white);border-color:var(--studio-line)}
  .app-shell:not(.director-mode)>.director-main{display:none}
  .app-shell:not(.director-mode) .director-nav.active{color:var(--studio-muted);border-left-color:transparent;background:transparent}
  .app-shell:not(.director-mode) .director-nav[data-screen].active{color:var(--studio-white);border-left-color:var(--studio-blue);background:#262725}
  .app-shell:not(.director-mode)>.app{display:block}
  .app-shell.director-mode>.app{display:none}
  .app-shell.director-mode>.director-main{display:block;grid-column:2;grid-row:1;min-width:0}
  /* 灵感与配方只复用共享 director shell；不复制原型导航。 */
  .planning-toolbar{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;border-bottom:1px solid var(--studio-line);padding-bottom:18px;margin-bottom:22px}
  .planning-toolbar h1{margin:6px 0 4px;font:650 32px/1.15 var(--font-display);letter-spacing:-.03em;color:var(--studio-ink)}
  .planning-sub{color:var(--studio-muted);font-size:13px;line-height:1.7}
  .planning-tabs{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
  .planning-tab,.planning-filter{border:1px solid var(--studio-line);background:var(--studio-white);color:var(--studio-muted);padding:8px 11px;font-size:12px;cursor:pointer}
  .planning-tab.active,.planning-filter.active{background:var(--studio-ink);color:var(--studio-white);border-color:var(--studio-ink)}
  /* 定稿原型还原 R2（2026-09-18 用户裁定）：原型案例区是「顶部 chip 行 + 卡片网格」，没有左栏。
     ⇒ 容器回归单列，筛选以 chip 行排在网格之上（原型 .filter-row + .case-grid）。
     ⚠ 类名 .planning-layout 必须保留：capability-guides.js 的 renderPlanningBar() 以它作插入锚点，
       查不到就整条「该传什么图」窄条静默不渲染（不报错）。 */
  .planning-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-items:start}
  /* 同一坑（作者样式的 display 会盖过 UA 的 [hidden]）：灵感与配方三区切换靠 hidden，必须显式兜底。 */
  .planning-layout[hidden],.planning-tabs[hidden]{display:none!important}
  /* IA v3（2026-10-06 用户裁定「统一灵感资产库」）：三区 tab 退役 → 页头改为动作按钮组。 */
  .planning-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}
  .planning-actions .director-filter{height:34px;padding:0 14px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.85);color:var(--studio-ink);font:600 12px/1.2 var(--studio-font);cursor:pointer}
  .planning-actions .director-filter:hover{background:#fff;box-shadow:var(--studio-sh-control)}
  .planning-actions .director-filter[aria-expanded="true"]{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue)}
  .planning-actions .capture-mode-status{height:34px;display:inline-flex;align-items:center;padding:0 3px;color:var(--studio-blue);font:650 12px/1.2 var(--studio-font);white-space:nowrap}
  .planning-actions .capture-mode-controls{display:grid;grid-template-columns:auto auto;align-items:center;column-gap:8px;row-gap:4px}
  .planning-actions .capture-mode-controls[hidden],.planning-actions .capture-mode-status[hidden],.planning-actions .capture-mode-hint[hidden]{display:none!important}
  .planning-actions .capture-mode-exit{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}
  .planning-actions .capture-mode-exit:hover{background:#fff;box-shadow:var(--studio-sh-control)}
  .planning-actions .capture-mode-hint{grid-column:1/-1;max-width:265px;color:var(--studio-muted);font-size:11px;line-height:1.5}
  /* 采集素材来源面板（同页；列表常显）。[hidden] 必须显式兜底：作者样式的 display 会盖过 UA 的 [hidden]。 */
  .inspiration-source-panel{display:block;margin-top:18px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.7);padding:16px}
  .inspiration-source-panel[hidden]{display:none!important}
  .inspiration-source-head{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:10px}
  .inspiration-source-lead h2{font:650 18px/1.3 var(--font-display);margin:0 0 2px;color:var(--studio-ink)}
  .inspiration-source-actions{display:flex;gap:8px;flex-wrap:wrap}
  .inspiration-source-actions .btn.ghost{height:30px;padding:0 11px;font-size:11px}
  /* 配方卡封面：无图资产的差异化占位（不造假图）。 */
  .inspiration-cover-recipe{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:linear-gradient(135deg,#111827,#071022)}
  .inspiration-cover-recipe b{font:650 22px/1 var(--font-display);color:var(--studio-white);opacity:.92}
  /* 配方详情表单（详情面板状态；不新增一级导航）。 */
  .inspiration-recipe-form{padding:10px 5px}
  .inspiration-recipe-form h2{font:650 25px/1.35 var(--font-display);margin:7px 0 9px;color:var(--studio-ink)}
  .inspiration-recipe-row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:10px;align-items:start;margin-top:10px}
  .inspiration-recipe-row>span{font-size:12px;color:var(--studio-muted);padding-top:8px}
  .inspiration-recipe-input{width:100%;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:#fff;padding:8px 10px;font:12px/1.6 var(--studio-font);color:var(--studio-ink);resize:vertical}
  .inspiration-recipe-input:focus{outline:2px solid var(--studio-blue-line);outline-offset:1px}
  .inspiration-recipe-shots{margin-top:14px;border-top:1px solid var(--studio-line);padding-top:10px}
  .inspiration-recipe-shots>span{font-size:12px;color:var(--studio-muted)}
  .inspiration-recipe-shots pre{margin:6px 0 0;white-space:pre-wrap;font:12px/1.6 var(--studio-font);color:var(--studio-ink)}
  .inspiration-recipe-versions{margin-top:14px;border-top:1px solid #55564f;padding-top:10px}
  .inspiration-recipe-versions>span{font-size:12px;color:var(--studio-muted)}
  .inspiration-recipe-versions ul{list-style:none;margin:6px 0 0;padding:0}
  .inspiration-recipe-versions li{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--studio-line);padding:3px 0}
  .inspiration-recipe-versions b{color:var(--studio-white);background:var(--studio-blue);padding:2px 6px;border-radius:999px;font-size:10px}
  .planning-detail-side-note{color:var(--studio-muted);font-size:12px;line-height:1.7}
  /* 工作台「我的预设」面板（IA v3：从灵感库迁入 05 输出设置）。 */
  .workbench-preset-panel{margin-top:10px;display:grid;gap:8px}
  .workbench-preset-panel[hidden]{display:none!important}
  .inspire-zone-note{display:block;font-size:12px;line-height:1.7;color:var(--studio-muted)}
  /* 2026-09-19 视觉对比 R4：预设行回到原型的「独立圆角卡」（原型 .recipe 实测 1240×78 / r18 / 底 .78 / 卡间距 10px），
     不再是「一个容器 + 分隔线」（那是 app 侧形态，行高 99 / r0）。 */
  .inspire-preset-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.78)}
  .inspire-preset-body{display:flex;flex-direction:column;gap:5px;min-width:0;flex:1}
  .inspire-preset-body strong{font-size:12px;font-weight:650}
  .inspire-preset-chips{display:flex;flex-wrap:wrap;gap:6px}
  .inspire-preset-chip{height:22px;display:inline-flex;align-items:center;padding:0 9px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.8);color:var(--studio-muted);font:600 10px/1.2 var(--studio-font);white-space:nowrap}
  /* P1：次信息保留，但从 chip 降为弱 metadata，避免模型/日期与用途争夺同一层级。 */
  .inspire-preset-secondary{display:flex;flex-wrap:wrap;align-items:center;color:var(--studio-muted);font:600 10px/1.35 var(--studio-font);opacity:.84}
  .inspire-preset-secondary-item{white-space:nowrap}
  .inspire-preset-secondary-item+.inspire-preset-secondary-item::before{content:'·';margin:0 8px;color:var(--studio-line-2)}
  /* 原 .inspire-preset-prompt（行内 prompt 预览）已按 2026-09-19 用户裁定「贴原型图」删除：
     原型 .recipe 行没有这一行。规则一并清掉，不留无宿主的死样式 ♻ */
  .inspire-preset-actions{display:flex;gap:8px;margin:0}
  .inspire-preset-actions .director-filter{height:30px;padding:0 11px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.85);color:var(--studio-muted);font:600 11px/1.2 var(--studio-font);cursor:pointer}
  .inspire-preset-actions .director-filter:hover{background:#fff;box-shadow:var(--studio-sh-control)}
  /* 「带入生产」＝主操作：跟随原型的 .btn.sm.primary（深色渐变） */
  .inspire-preset-actions [data-preset-load]{border:0;background:linear-gradient(135deg,#111827,#071022);color:#fff}

  /* A2（2026-09-19 用户裁定「按分区 tab 口径」）：预设区「刷新」按钮归位。
     改前它虽是 .director-filter，但全仓 .director-filter 的基底规则全部写在**别的作用域**里
     （#directorGalleryView / .settings-zones / .planning-zones /
     .director-gallery-actions / .director-asset-switch 五处作用域）⇒ 它一条都够不到，
     渲染成浏览器默认按钮：13.33px/400 · 灰底 rgb(239,239,239) · 2px outset 黑边 · 零圆角。
     原型无此按钮（生产侧增量，见 specs/inspire-prototype-restoration-plan-v1.md），
     故基准取**同屏分区 tab**（.planning-zones .director-filter）：28px / 9px 圆角 / 无描边 / 蓝软底激活。
     ⚠ 必须带 #inspirePresetPane 前缀：裸 `.director-filter` 会污染其他视图的同类按钮。 */
  #inspirePresetPane .inspire-zone-head .director-filter{height:28px;display:inline-flex;align-items:center;border:0;border-radius:var(--studio-r-tab);background:none;color:var(--studio-muted);padding:0 12px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s}
  #inspirePresetPane .inspire-zone-head .director-filter:hover{background:#fff;box-shadow:var(--studio-sh-control)}
  /* 「我的预设」行式（2026-09-17 B 批 L4）：原型是整行列表（缩略图 + 标题 + chip 行 + 删除/带入生产）。
     无封面字段 ⇒ 缩略图位用全站斜纹占位（与 .overview-recent-image.is-empty 同一组渐变，不造新语言）。 */
  .inspire-preset-thumb-unused-placeholder{}
  /* ===== 设置 · 四区（P7 骨架） ===== */
  .settings-zones{display:flex;gap:6px;flex-wrap:wrap;padding:0 0 12px;border-bottom:1px solid var(--studio-line);margin:0 0 16px}
  .settings-zones .director-filter.active{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue)}
  .settings-zone[hidden]{display:none!important}
  .settings-card{max-width:760px;padding:20px 22px;margin:0 0 14px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84)}
  /* A′（2026-09-22）：设置页卡片标题收到原型 `.sec h2` = 14px（原型 99 行）。原来是 16px，
     且因 h2 吃 UA 默认 bold 而渲染成 16px/700 —— 与其余屏的 650 也不一致；本行同时定住 650。 */
  .settings-card h2{margin:0 0 10px;font:650 14px/1.4 var(--font-display)}
  /* 新版式（2026-10-02）：飞书绑定态三卡辅助类 —— 替换旧 1240px hero 仪表盘 */
  .settings-kpi-row{display:flex;gap:20px;flex-wrap:wrap;margin:4px 0 12px}
  .settings-kpi{display:flex;flex-direction:column;gap:2px;min-width:72px}
  .settings-kpi .num{font:650 16px/1.2 var(--studio-font);color:var(--studio-ink)}
  .settings-kpi .lbl{font-size:11px;color:var(--studio-muted)}
  .feishu-card-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
  .feishu-warn-line{display:flex;align-items:center;gap:8px;margin-top:8px;padding:8px 12px;background:var(--st-err-bg);border:1px solid var(--st-err-bd);border-radius:var(--studio-r-control);font-size:12px;color:var(--st-err-fg)}
  .feishu-warn-line .pill.err{background:var(--st-err-fg);color:#fff;border:none;border-radius:9px;padding:2px 8px;font-size:11px;font-weight:600;white-space:nowrap}
  .feishu-warn-line .btn{margin-left:auto}
  .settings-note{display:block;font-size:12px;line-height:1.75;color:var(--studio-muted);margin:10px 0 0}
  .settings-list{margin:0;padding-left:18px;font-size:12px;line-height:1.9;color:var(--studio-ink-soft)}
  .settings-list code{font-size:11px;padding:1px 5px;border-radius:8px;background:var(--studio-placeholder-bg)}
  .settings-kv{display:flex;flex-direction:column;gap:4px;margin:0 0 12px}
  .settings-kv .row{display:flex;gap:10px;font-size:12px}
  .settings-kv .k{min-width:64px;color:var(--studio-muted)}
  .settings-kv .row .v.is-negative{color:var(--st-err-fg);font-weight:600}
  .settings-guide-grid{display:grid;grid-template-columns:1fr;gap:0;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84);overflow:hidden}

  .settings-guide-row{display:flex;align-items:flex-start;gap:12px;padding:13px 16px;border-top:1px solid var(--studio-line)}
  .settings-guide-row:first-child{border-top:none}
  .settings-guide-no{flex:0 0 auto;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--studio-blue-soft);color:var(--studio-blue);font:600 11px/1 var(--studio-font)}
  .settings-guide-body{display:flex;flex-direction:column;gap:4px;min-width:0}
  .settings-guide-row strong{font-size:13px}
  .settings-path{font-size:11px;font-weight:600;color:var(--studio-blue)}

  /* 账号安全表单（2026-09-20）。**刻意另起作用域类，不去改全局 input 选择器组**：
     仓里 input[type=text] 有 7 处既有规则，但**全 CSS 没有任何 input[type=password] 规则**
     （既有唯一 password 输入 fAppSecret 是裸样式）。若把 password 并进那 7 组，
     会连带改变飞书配置表单的外观 —— 属未经要求的视觉变更 ✗。故只约束本卡内的输入。
     字号/边框沿用 .settings-* 语系（12px 正文 + --prototype-line），不引入新令牌。 */
  .settings-secure-form{display:flex;flex-direction:column;gap:4px}
  .settings-secure-form label{font-size:12px;color:var(--studio-muted);margin-top:10px}
  .settings-secure-form label:first-child{margin-top:0}
  .settings-secure-form input{width:100%;box-sizing:border-box;min-height:40px;padding:9px 11px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:var(--studio-white);color:var(--studio-ink);font:400 12px/1.4 var(--studio-font)}
  .settings-secure-form input:focus{outline:none;border-color:var(--studio-blue);box-shadow:0 0 0 3px var(--studio-blue-soft)}
  .settings-secure-form .err-line{min-height:14px;margin-top:6px}
  .settings-secure-actions{margin-top:4px}
  .settings-secure-logout{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px solid var(--studio-line)}
  .settings-secure-logout .settings-note{margin:0}

  /* 定稿原型还原 R2：筛选不再是左侧 sticky 面板，而是案例区顶部的 chip 行（原型 .filter-row）。
     保留 .planning-filters 类名与 DOM 容器身份：initPlanning 的事件委托、
     .planning-category 的 active 同步都以它作容器（querySelector('.planning-filters')）。 */
  .planning-filters{display:flex;flex-direction:column;gap:7px;background:none;border:0;padding:0;position:static}
  .planning-filter-row{display:flex;gap:7px;flex-wrap:wrap;align-items:center}
  .planning-filter-title{color:var(--studio-muted);font-size:11px;margin:0}
  .planning-category{width:100%;display:block;text-align:left;border:0;background:none;color:var(--studio-muted);padding:7px 0;font-size:12px;cursor:pointer}
  .planning-category:hover,.planning-category.active{color:var(--studio-blue);font-weight:650}
  .planning-tag{display:inline-block;border:1px solid var(--studio-line);background:none;color:var(--studio-muted);padding:4px 7px;margin:0 5px 5px 0;font-size:11px;cursor:pointer}
  .planning-tag:hover{color:var(--studio-blue);border-color:var(--studio-blue)}
  .planning-tag.active{background:var(--studio-blue);border-color:var(--studio-blue);color:#fff}
  .planning-type-chip{position:absolute;top:9px;left:9px;background:rgba(38,39,37,.86);color:#fff;padding:4px 7px;font-size:11px}
  .planning-tabs-intent{margin-top:6px}
  .planning-principle{background:var(--studio-ink);color:var(--studio-white);margin:17px -16px -16px;padding:15px;font-size:12px;line-height:1.7}
  .planning-principle b{display:block;font:600 16px var(--font-display);margin:5px 0}
  .planning-catalog-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:11px;color:var(--studio-muted);font-size:12px}
  .planning-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(236px,1fr));gap:14px} /* 定稿原型还原 R2：照抄原型 .case-grid（auto-fill minmax(236px,1fr)）—— 原先是固定 3 列密卡 ✗ */
  .planning-card{display:flex;flex-direction:column;background:var(--studio-white);border:1px solid var(--studio-line);cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
  .planning-card:hover{transform:translateY(-3px);border-color:var(--studio-blue);box-shadow:4px 5px 0 rgba(182,83,61,.12)}
  /* T2（2026-09-18 用户勾选 · 只调卡片比例，不动列数与左栏 ✗）：照抄原型 `.case .cover` 的口径
     （aspect-ratio:3/4 + max-height:296px）—— 原先 1.18/.82（≈1.44 横构图），与原型竖向构图不符 ✓ */
  .planning-cover{aspect-ratio:3/4;max-height:296px;background:var(--studio-placeholder-bg) center/cover;position:relative}
  .planning-cover span{position:absolute;top:9px;right:9px;background:rgba(255,253,248,.92);color:var(--studio-blue);padding:4px 6px;font-size:11px}
  .planning-card-body{display:flex;flex:1;flex-direction:column;padding:13px}
  .planning-card-body h3{font:650 16px/1.35 var(--font-display);margin:0 0 5px}
  /* 2026-09-21 删除 .planning-card-body p —— 卡片模板里没有 <p>，全组 5 条永不匹配 */
  .planning-card-context{display:grid;gap:3px;margin:0 0 10px;color:var(--studio-muted);font-size:11px;line-height:1.45}.planning-card-context span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.planning-category-hint{color:var(--studio-blue);font-weight:600}.planning-tags{display:flex;flex-wrap:wrap;gap:5px;min-height:21px;margin-bottom:12px}.planning-tags i{font-style:normal;background:var(--studio-blue-soft);color:var(--st-ok-fg);padding:4px 6px;font-size:11px}
  .planning-card-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;border-top:1px solid var(--studio-line);padding-top:10px;margin-top:auto;color:var(--studio-muted);font-size:11px}.planning-card-foot button{border:0;background:none;color:var(--studio-blue);font-size:12px;font-weight:600;padding:0;cursor:pointer}.planning-card-foot .planning-use{background:var(--studio-blue);color:var(--studio-white);padding:7px 9px}
  .planning-pager-btn{border:1px solid var(--studio-line);background:var(--studio-white);color:var(--studio-blue);font-size:12px;font-weight:600;padding:7px 14px;cursor:pointer}.planning-pager-btn:disabled{opacity:.4;cursor:default}
  .planning-detail{display:none;grid-column:1/-1;background:var(--studio-white);border:1px solid var(--studio-line);padding:14px;grid-template-columns:minmax(0,1fr) 280px;gap:18px;scroll-margin-top:24px}.planning-detail.open{display:grid}
  .planning-detail-main{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(260px,.9fr);gap:14px}.planning-detail-images{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.planning-detail-shot{min-height:145px;background:var(--studio-placeholder-bg) center/cover;position:relative}.planning-detail-shot span{position:absolute;left:7px;bottom:7px;background:rgba(23,24,23,.78);color:var(--studio-white);padding:4px 6px;font-size:11px}.planning-detail-copy{padding:10px 5px}.planning-detail-copy h2{font:650 25px/1.35 var(--font-display);margin:7px 0 9px}.planning-detail-copy p{font-size:12px;line-height:1.8;color:var(--studio-muted)}.planning-detail-copy .planning-case-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.planning-case-meta i{font-style:normal;background:var(--studio-blue-soft);color:var(--st-ok-fg);padding:5px 7px;font-size:11px}.planning-shot-list{border-top:1px solid var(--studio-line);margin-top:15px;padding-top:12px}.planning-shot{display:flex;gap:9px;border-bottom:1px solid var(--studio-line);padding:8px 0;font-size:12px}.planning-shot b{color:var(--studio-blue)}.planning-detail-side{background:var(--studio-ink);color:var(--studio-white);padding:18px}.planning-detail-side h3{font:650 22px var(--font-display);margin:7px 0}.planning-detail-side p{color:var(--studio-muted);font-size:12px;line-height:1.7}.planning-detail-side .btn.dark{margin-top:12px}#directorPlanningView .planning-copy-prompt{width:100%;margin-top:8px;border:1px solid #55564f;background:transparent;color:var(--studio-line);padding:9px;font-size:12px;cursor:pointer}
  /* 定稿原型还原 R2：原 1180px「降到 2 列」一条已删 —— 自动填充（auto-fill）本身就是响应式的，
     再叠一条固定 2 列会在中等宽度把列数锁死（例：1180 宽下原型是 4 列，锁定后只有 2 列 = 比原型更疏）。 */
  @media(max-width:860px){.planning-toolbar{display:block}.planning-tabs{justify-content:flex-start;margin-top:14px}.planning-layout{grid-template-columns:1fr}.planning-filters{position:static}.planning-detail-main{grid-template-columns:1fr}}
  @media(max-width:560px){.planning-cards{grid-template-columns:1fr}.planning-detail{grid-template-columns:1fr}}
  @media(max-width:980px){.app-shell>.app .content{padding:28px 24px 44px}}
  @media(max-width:640px){.app-shell{grid-template-columns:1fr}.app-shell>.director-rail{grid-column:1}.app-shell>.app .content{grid-column:1;padding:24px 16px 44px}}

  /* 全站细节规整层：只统一排版、控件尺寸和基线，不改颜色、模块或业务状态。 */
  :root{
    --site-font-body:var(--studio-font);
    --site-font-display:var(--studio-font);
    --site-size-page-title:23px;
    --site-size-section:18px;
    --site-size-body:13px;
    --site-size-meta:11px;
    --site-control-h:40px;
    --site-card-pad:14px;
    --site-grid-gap:16px;
    --site-line-height:1.55;
  }
  body{font-family:var(--site-font-body);line-height:var(--site-line-height)}
  .director-main,.app-shell>.app .content{font-family:var(--site-font-body)}
  .director-main h1,.phead h1,.planning-toolbar h1,
  .overview-section-label h2,.director-brief-head h3,.director-review-content h3,
  .overview-action-head h3,.planning-card-body h3,.planning-detail-copy h2,
  .feishu-status-card h2,.feishu-connect-card h2,.guided-title h2{font-family:var(--site-font-display)}
  .director-main h1,.phead h1,.planning-toolbar h1{font-size:var(--site-size-page-title);line-height:1.2}
  .director-sub,.phead p,.planning-sub{font-size:var(--site-size-body);line-height:1.65}
  .director-eyebrow,.director-section-label,.sec-label,.planning-filter-title,.overview-section-label span,
  .overview-section-label button,.director-summary-label,.director-qa-row,.director-gallery-meta span,
  .planning-catalog-head,.feishu-note{font-size:var(--site-size-meta)}

  /* 共享导航使用固定的图标、文字和可点击区域基线。 */
  .director-nav{box-sizing:border-box;flex:none;line-height:1.45;letter-spacing:0}
  .director-nav-icon{display:grid;place-items:center;width:18px;height:18px;line-height:1}
  .director-nav span:not(.director-nav-icon){text-align:center;line-height:1.45}

  /* 生产页面的通用控件保持同一高度，避免按钮与输入框上下错位。 */
  .app-shell>.app .btn,.app-shell>.app .planning-tab,.app-shell>.app .planning-filter,
  .app-shell>.app .overview-batch-action,.app-shell>.app .director-cta,
  .app-shell>.app .director-gallery-foot button,.app-shell>.app .director-gallery-foot a,
  .app-shell>.app .director-review-actions button{min-height:var(--site-control-h);display:inline-flex;align-items:center;justify-content:center;line-height:1.2}
  .app-shell>.app input[type=text],.app-shell>.app select{min-height:var(--site-control-h);line-height:1.2}
  .app-shell>.app textarea{line-height:1.55}
  .app-shell>.app label{font-size:var(--site-size-meta);line-height:1.35;margin:12px 0 6px}

  /* 旧页面与新工作区采用同一组卡片内边距和栅格间距。 */
  .app-shell>.app .card,.app-shell>.app .batchbar,.app-shell>.app .role-card,
  .app-shell>.app .asset-card,.app-shell>.app .feishu-section{padding:var(--site-card-pad)}
  .app-shell>.app .grid2,.app-shell>.app .feishu-command-panel{gap:var(--site-grid-gap)}
  .app-shell>.app .overview-section-label{margin-bottom:10px}
  /* A′（2026-09-22）：与 2714 同改 —— 旧壳作用域，单改一条会被旧壳覆盖回 18px（本仓「子树重绑定」坑）。 */
  .app-shell>.app .overview-section-label h2{font-size:14px;line-height:1.35}
  .app-shell>.app .overview-batch{gap:var(--site-grid-gap);padding:var(--site-card-pad);margin-bottom:22px}
  .app-shell>.app .overview-recent-grid,.app-shell>.app .planning-cards{gap:var(--site-grid-gap)}
  .app-shell>.app .overview-action-head{padding:var(--site-card-pad)}
  .app-shell>.app .overview-action-body{padding:var(--site-card-pad)}
  .director-intent,.director-dna-card,.director-shot-row{line-height:1.45}
  .director-gallery-card,.director-panel,.director-brief-body,.director-qa-body{line-height:1.55}
  .director-gallery-meta{min-height:42px;align-items:flex-start}
  .director-gallery-foot{align-items:stretch}
  .director-gallery-foot button,.director-gallery-foot a{padding:8px 10px}
  .director-brief-body,.director-qa-body{padding:var(--site-card-pad)}
  .planning-toolbar{min-height:76px;align-items:flex-end}
  .planning-tabs{align-items:stretch}
  .planning-tab,.planning-filter{padding:8px 12px}
  .planning-card-body{padding:var(--site-card-pad)}

  /* 桌面端统一主内容边界；窄屏只收紧留白，不改变模块顺序。 */
  @media(min-width:981px){
    .app-shell>.app .content{padding-left:42px;padding-right:42px}
    .director-main{padding-left:42px;padding-right:42px}
  }
  @media(max-width:980px){
    .app-shell>.app .content{padding-left:24px;padding-right:24px}
    .director-main{padding-left:24px;padding-right:24px}
  }
  @media(max-width:640px){
    .app-shell>.app .content,.director-main{padding-left:16px;padding-right:16px}
    .app-shell>.app .btn,.app-shell>.app .planning-tab,.app-shell>.app .planning-filter{min-height:38px}
  }.guided-no{display:inline-grid;place-items:center;width:21px;height:21px;border:1px solid var(--studio-blue);color:var(--studio-blue);font:600 11px 'Noto Sans SC',sans-serif;margin-right:7px;vertical-align:1px}
  @media(max-width:1050px){}@media(max-width:700px){}
  #directorWorkbenchView .director-dna-card{min-height:90px;padding:7px;border-radius:0}
  #directorWorkbenchView .director-face-strip{height:48px;margin-bottom:6px}
  #directorWorkbenchView .director-face-caption{display:none}
  #directorWorkbenchView .director-shot-row{padding:11px 0}
  #directorWorkbenchView .director-brief{top:20px}
  #directorWorkbenchView .director-brief-body{padding:14px}
  @media(max-width:1050px){}
  @media(max-width:700px){}

  /* Guided workbench parity: these values mirror generation-workbench-guided-grid-tall.html. */
  @media (min-width:1051px){
    .app-shell{grid-template-columns:76px minmax(0,1fr)}
    .director-rail{width:76px;padding:20px 10px;gap:19px}
    .director-nav{width:54px;min-height:52px;font-size:11px;line-height:1.45}
    .director-main{max-width:1500px;padding:24px 34px 30px}
    .director-main h1{font-size:32px;line-height:1.15;margin:5px 0 4px}
    .director-eyebrow{font-size:10px}
    .director-sub{font-size:12px}
  }
  #directorWorkbenchView .director-product-thumb-strip{position:absolute;left:6px;right:6px;bottom:6px;z-index:3;display:flex;flex-wrap:nowrap;gap:4px;overflow:hidden;pointer-events:none}
  #directorWorkbenchView .director-product-thumb-strip:empty{display:none}
  #directorWorkbenchView .director-product-thumb-strip .prod-thumb{position:relative;flex:0 0 30px;width:30px;height:30px;border:1px solid rgba(255,255,255,.85);background-size:cover;background-position:center;box-shadow:0 1px 3px rgba(23,24,23,.25);pointer-events:auto}
  #directorWorkbenchView .director-product-thumb-strip .prod-thumb .remove{position:absolute;top:-4px;right:-4px;width:15px;height:15px;padding:0;border:0;border-radius:50%;background:rgba(23,24,23,.82);color:#fff;font-size:12px;line-height:15px;cursor:pointer}
  #directorWorkbenchView .director-product-thumb-strip .prod-thumb .remove:hover{background:var(--studio-blue)}
  #directorWorkbenchView .batch-multiplier-control{display:flex;align-items:center;height:40px;border:1px solid var(--studio-line);background:var(--studio-paper);color:var(--studio-ink)}
  #directorWorkbenchView .batch-multiplier-control span,#directorWorkbenchView .batch-multiplier-control b{padding:0 9px;color:var(--studio-muted);font-size:12px}
  #directorWorkbenchView .batch-multiplier-control input{width:100%;height:100%;min-width:0;border:0;border-left:1px solid var(--studio-line);border-right:1px solid var(--studio-line);background:transparent;text-align:center;color:var(--studio-ink);font:600 14px 'Noto Sans SC',sans-serif;outline:none}
  /* Keep the complete navigation in view without changing the workbench grid. */
  .director-rail{
    min-height:100vh;
    overflow-y:auto;
    overflow-x:hidden
  }
  @media(min-width:641px){
  }
  @media(max-width:1050px){
    #directorWorkbenchView .director-brief{position:static}
  }
  @media(max-width:700px){
  }

  /* Match the approved prototype's operation area at desktop widths. */
  @media(min-width:1051px){
  }
  /* Final cascade for cross-page alignment; intentionally limited to geometry and typography. */
    /* 字体与页标题向原型 v1 对齐（P0 令牌收敛，2026-09-17）：
       原型实测正文/标题都是系统字体栈（-apple-system, system-ui, Segoe UI, PingFang SC），
       而这里曾把正文钉成 'Noto Sans SC'、标题钉成 'Noto Serif SC'（衬线）—— 后者与原型差异最大；
       --studio-font 就是同一套栈。页标题 30px → 23px、卡片内边距 16px → 14px 均为原型实测值。 */
    /* 全局站点令牌已在前一段定义；本级联块只保留消费规则，避免同值副本。 */
    body{font-family:var(--site-font-body);line-height:1.55}
    .director-main,.app-shell>.app .content{font-family:var(--site-font-body)}
    .director-main h1,.phead h1,.planning-toolbar h1,
    .overview-section-label h2,.director-brief-head h3,.director-review-content h3,
    .overview-action-head h3,.planning-card-body h3,.planning-detail-copy h2,
    .feishu-status-card h2,.feishu-connect-card h2,.guided-title h2{font-family:var(--site-font-display)}
    .director-main h1,.phead h1,.planning-toolbar h1{font-size:var(--site-size-page-title);line-height:1.2}
    .director-sub,.phead p,.planning-sub{font-size:var(--site-size-body);line-height:1.65}
    .director-eyebrow,.director-section-label,.sec-label,.planning-filter-title,
    .overview-section-label span,.overview-section-label button,.director-summary-label,
    .director-qa-row,.director-gallery-meta span,.planning-catalog-head,.feishu-note{font-size:var(--site-size-meta)}
    .director-nav{box-sizing:border-box;flex:none;line-height:1.45;letter-spacing:0}
    .director-nav-icon{display:grid;place-items:center;width:18px;height:18px;line-height:1}
    .director-nav span:not(.director-nav-icon){text-align:center;line-height:1.45}

    .director-main .director-cta,.director-main .director-gallery-foot button,
    .director-main .director-gallery-foot a,.director-main .director-review-actions button,
    .app-shell>.app .btn,.app-shell>.app .planning-tab,.app-shell>.app .planning-filter,
    .app-shell>.app .overview-batch-action{min-height:var(--site-control-h);display:inline-flex;align-items:center;justify-content:center;line-height:1.2}
    .director-main input[type=text],.director-main select,
    .app-shell>.app input[type=text],.app-shell>.app select{min-height:var(--site-control-h);line-height:1.2}
    .director-main textarea,.app-shell>.app textarea{line-height:1.55}
    .app-shell>.app label{font-size:var(--site-size-meta);line-height:1.35;margin:12px 0 6px}

    .app-shell>.app .card,.app-shell>.app .batchbar,.app-shell>.app .role-card,
    .app-shell>.app .asset-card,.app-shell>.app .feishu-section{padding:var(--site-card-pad)}
    .app-shell>.app .grid2,.app-shell>.app .feishu-command-panel{gap:var(--site-grid-gap)}
    .app-shell>.app .overview-section-label{margin-bottom:10px}
    /* A′（2026-09-22）：第三处消费点（小屏段），一并收到 14px。 */
    .app-shell>.app .overview-section-label h2{font-size:14px;line-height:1.35}
    .app-shell>.app .overview-batch{gap:var(--site-grid-gap);padding:var(--site-card-pad);margin-bottom:22px}
    .app-shell>.app .overview-recent-grid,.app-shell>.app .planning-cards{gap:var(--site-grid-gap)}
    .app-shell>.app .overview-action-head,.app-shell>.app .overview-action-body{padding:var(--site-card-pad)}
    .director-intent,.director-dna-card,.director-shot-row,.director-gallery-card,
    .director-panel,.director-brief-body,.director-qa-body{line-height:1.55}
    .director-gallery-meta{min-height:42px;align-items:flex-start}
    .director-gallery-foot{align-items:stretch}
    .director-gallery-foot button,.director-gallery-foot a{padding:8px 10px}
    .director-brief-body,.director-qa-body{padding:var(--site-card-pad)}
    .planning-toolbar{min-height:76px;align-items:flex-end}
    .planning-tabs{align-items:stretch}
    .planning-tab,.planning-filter{padding:8px 12px}
    .planning-card-body{padding:var(--site-card-pad)}

    @media(min-width:981px){
      .app-shell>.app .content,.director-main{padding-left:42px;padding-right:42px}
    }
    @media(max-width:980px){
      .app-shell>.app .content,.director-main{padding-left:24px;padding-right:24px}
    }
    @media(max-width:640px){
      .app-shell>.app .content,.director-main{padding-left:16px;padding-right:16px}
      .app-shell>.app .btn,.app-shell>.app .planning-tab,.app-shell>.app .planning-filter,
      .director-main .director-cta{min-height:38px}
    }
  /* V3 Phase 2（2026-09-30 · 叠罗汉根治）：res-choice 暖版三条与 trigger 第一/二代整组已删除——
     幸存属性（:disabled/几何/字号）已与同族规则合并（属性快照 diff=零变化护航）。
     历史规则本体见 git b78ec7ad^ 与 specs/trigger-legacy-stack-cleanup-plan-20260930.md。 */
  .director-dna-pool-mask{display:none;position:fixed;inset:0;z-index:94;background:var(--studio-overlay-bg);align-items:center;justify-content:center;padding:34px}
  .director-dna-pool-mask.show{display:flex}
  .director-dna-pool-panel{width:min(1080px,100%);max-height:calc(100vh - 68px);overflow:auto;background:var(--studio-paper);border:1px solid var(--studio-line);box-shadow:0 20px 70px rgba(0,0,0,.35)}
  .director-dna-pool-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;background:var(--studio-ink);color:var(--studio-white);padding:20px 22px}
  /* V2（2026-09-30）：原 `.director-eyebrow{color:#df8b77}` 为死规则（弹层 DOM 无此元素），已删；
     h2 原硬编码衬线 'Noto Serif SC' 22px（退役设计语言特征）→ studio 无衬线 16px/650（同画布标题档）。 */
  .director-dna-pool-head h2{font:650 16px/1.3 var(--font-display);margin:7px 0 4px}.director-dna-pool-head p{color:var(--studio-muted);font-size:12px;margin:0}
  .director-dna-pool-close{border:0;background:none;color:var(--studio-white);font-size:25px;line-height:1;cursor:pointer;padding:0 2px}
  .director-dna-pool-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;padding:18px}
  /* V3 Phase 2：pool-card 旧主定义（border/bg/padding 9px + hover/active）与 display:block、
     strong 16px、span 12px 的旧声明已删除——完整单一定义在 `.director-dna-pool-card strong` 那条（V3 Phase 1 合并版）。
     本行保留的 face-strip/thumb 尺寸与占位色是活规则。 */
  .director-dna-pool-card .director-face-strip{height:230px;margin-bottom:9px}.director-dna-pool-card .director-dna-thumb{height:230px;margin-bottom:9px;background:#e2e8f0 center/cover}
  @media(max-width:700px){.director-dna-pool-mask{padding:16px}.director-dna-pool-grid{grid-template-columns:1fr 1fr;gap:10px;padding:12px}.director-dna-pool-card .director-face-strip,.director-dna-pool-card .director-dna-thumb{height:180px}}
  @media(max-width:460px){.director-dna-pool-grid{grid-template-columns:1fr}.director-dna-pool-card .director-face-strip,.director-dna-pool-card .director-dna-thumb{height:260px}}

  /* DNA pool uses the original role-card canvas; never crop it into face slices. */
  .director-dna-pool-mask{padding:26px}
  .director-dna-pool-panel{width:min(1420px,96vw);max-height:calc(100vh - 52px)}
  .director-dna-pool-grid{grid-template-columns:repeat(3,minmax(280px,380px));justify-content:center;gap:22px;padding:28px}
  /* V3 Phase 2：display:block/padding:12px 旧声明已删（并入 `.director-dna-pool-card strong` 那条）。
  /* V2（2026-09-30）：布局属性保留，暖底 #ebe5da 与补丁值合并为冷色（补丁行已删，消除双定义）。 */
  .director-dna-pool-preview{display:flex;align-items:center;justify-content:center;width:100%;min-height:260px;margin-bottom:12px;background:var(--studio-placeholder-bg);overflow:hidden}
  .director-dna-pool-image{display:block;width:100%;height:auto;max-height:520px;object-fit:contain;object-position:center;background:var(--studio-white)}
  .director-dna-pool-preview.is-missing{color:var(--studio-muted);font-size:12px;text-align:center}
  /* V3 Phase 2：strong 16px/1.4 与 span 12px/1.5 旧声明已删（`.director-dna-pool-card strong` 那条生效值 20px/13px 接管）。 */
  @media(max-width:1080px){
    .director-dna-pool-grid{grid-template-columns:repeat(2,minmax(280px,380px))}
  }
  @media(max-width:700px){
    .director-dna-pool-mask{padding:12px}
    .director-dna-pool-panel{width:100%;max-height:calc(100vh - 24px)}
    .director-dna-pool-grid{grid-template-columns:minmax(0,1fr);gap:14px;padding:16px}
    .director-dna-pool-preview{min-height:0}
    .director-dna-pool-image{max-height:none}
  }
  /* V3 Phase 2：res-choice 死字号补丁（2675 旧）与 trigger 第二代（暖粉底 + 已删 hover 白字的
     孤儿尺寸链）已删除——幸存属性已合并至同族规则。 */
  @media(min-width:1051px){
  }

  /* 内容驱动高度：人物候选按钮和设置输入框不再被固定网格行裁切。 */
  @media(min-width:1051px){
  }
  #directorWorkbenchView .director-production-order{display:flex;align-items:center;gap:7px;margin-top:4px}
  #directorWorkbenchView .director-production-order b{color:var(--studio-muted);font-weight:600}   /* C2：原走 --prototype-red(暖)；同一元素的新壳规则 .studio-canvas-top …是 var(--studio-muted) 冷灰，本条以 id 特异性压过它 ⇒ 对齐新壳意图（原型里标签类一律 --muted） */
  #directorWorkbenchView .director-production-order span{color:var(--studio-muted)}

/* ── #5 site-ui-baseline ── */
  /* Final site-wide baseline. Keep this layer last so older compatibility rules
     cannot change typography or geometry from page to page. */
  :root{
    --ui-font-body:var(--studio-font);
    --ui-font-display:var(--studio-font);   /* V3 收口（2026-10-01）：原为 "Noto Serif SC","Songti SC",serif，是全局 h1-h4 的衬线根因；与 --font-display 同口径退役 */
    /* 2026-10-03 批 3B（真机确认后归整）：30px → 32px。
     * 真机实测（三种视口 375/768/1440）：本令牌**当前不生效**——4 条带 ID 作用域前缀的
     * `font:650 23px/1.2` 硬编码规则（#directorPlanningView .planning-toolbar h1 等，特异性 (1,1,1)）
     * 覆盖了下面 (0,1,1) 的消费规则，所以改本值零视觉影响；归整的目的是让令牌回到原型档、
     * 摘掉 typography 门禁的例外登记，而不是放大标题。
     * ⚠ 风险提示（改动本值前必读）：「零视觉影响」成立于**今天**。消费点（:2711 附近）仍在，
     *   一旦有人删掉那 4 条硬编码 `font:650 23px` 让令牌真正生效，标题会从当前真实渲染的
     *   **23px 直接跳到 32px（+39%）**，远大于 30→32 名义上的 6.7%。届时必须重走真机视觉确认。 */
    --ui-size-page:32px;
    --ui-size-section:18px;
    /* 2026-10-03 批 3B：15px → 16px。同上（真机实测零视觉影响，当前被更高优先级规则覆盖）。
     * ⚠ 同款风险：消费点在 :2718 / :2758，令牌若真正生效，这些 h3 会变成 16px，需重新确认。 */
    --ui-size-card:16px;
    --ui-size-body:13px;
    --ui-size-meta:12px;
    --ui-size-micro:11px;
    --ui-space-1:4px;
    --ui-space-2:8px;
    --ui-space-3:12px;
    --ui-space-4:16px;
    --ui-space-5:24px;
    --ui-space-6:32px;
    --ui-control-h:40px;
    --ui-panel-pad:16px;
    --ui-column-gap:16px;
    --ui-overlay-page:80;
    --ui-overlay-review:90;
    /* 92：**灯箱内二次弹层**档。验收灯箱(90)打开后仍会开自己的输入/确认弹层
       （待复核备注、参考图拓展重试微调、重试报价确认），它们若停在旧壳层 .mask(60)
       就会被灯箱整个盖住 —— 实测 elementFromPoint 命中灯箱内容、按钮点不到。
       取值必须 **高于 review(90) 且低于 retry-upload(94)/plib(95)**：
       后两者是工作台自己的弹层，将来若有人从那里再开 askText，
       本档不会把同类问题反向制造出来。 */
    --ui-overlay-modal:92;
    --ui-overlay-login:100;
    --ui-overlay-pool:110;
    --ui-overlay-lightbox:120;
    --ui-overlay-toast:130;
    --ui-overlay-npop:58;
    --ui-overlay-mask:60;
    --ui-overlay-retry:94;
    --ui-overlay-plib:95;
    --ui-overlay-guide:1200;
    --ui-overlay-face:1300;
  }

  html{font-family:var(--ui-font-body);font-synthesis:none;line-break:strict}
  /* 2026-09-19 全局行高对齐原型：原型 body{line-height:1.5}（13px×1.5＝19.5px），
     本条原为 1.6（20.8px）。改 1.5 后四区页面标题、卡片、预设行等继承行高的文字一起回到原型口径。
     实测（真浏览器，5 视图逐一）：横向溢出全程 0、运行期错误 0，几何位移均 ≤1px
     （品牌字高 21→20 / 灵感区头 59→58 / 案例卡 431→429）。
     ⚠ 有意保留：本仓是「作用域内令牌重绑定 + 高特异性收口」体系，本条是全站基线；
     若将来某个视图需要更大行距，应在该视图作用域内就地声明，不要回改本条（会把其它四区一起带走）。 */
  body{font-family:var(--ui-font-body);font-size:var(--ui-size-body);line-height:1.5;font-variant-numeric:tabular-nums}
  h1,h2,h3,h4{font-family:var(--ui-font-display);text-wrap:balance}
  p,span,small,td,th,label{text-wrap:pretty}

  .director-main,.app-shell>.app .content{font-family:var(--ui-font-body)}
  .director-main h1,.app-shell>.app .phead h1,.planning-toolbar h1{font-size:var(--ui-size-page);line-height:1.25;font-weight:650}
  /* A′（2026-09-22）：内容区块标题统一到原型 `.sec h2` = 14px/650（原型 99 行）。
     改前实测五屏出现四种值：12（工作台步骤卡，保留）/16/18/22，同一角色四套字号。
     ⚠️ 10px 那句是 **9px 的分区小标**口径，不吃本行。
     为什么不用 `--ui-size-section`：该令牌值 18px 同时服务于**页面标题区**，
     改令牌会连带影响非标题元素 ⇒ 本行只改消费值，令牌留给别处。 */
  .director-section-label h2,.overview-section-label h2{font-size:14px;line-height:1.4}
  .planning-card-body h3,.planning-detail-copy h2,.overview-batch-main strong{font-size:var(--ui-size-card);line-height:1.45}
  .director-sub,.phead p,.planning-sub{font-size:var(--ui-size-body);line-height:1.65}
  .director-eyebrow,.director-section-label span,.overview-section-label span,
  .overview-section-label button,.planning-filter-title,.planning-catalog-head,
  .feishu-note,.director-gallery-meta span{font-size:var(--ui-size-meta);line-height:1.45}

  .director-main,.app-shell>.app .content{padding-inline:42px}
  .director-layout,.director-gallery-layout,.overview-production-layout{gap:var(--ui-column-gap)}
  /* Gallery shares the workbench title baseline and content start line. */
  /* 2026-09-17：原 `min-height:65px`（注释「Gallery shares the workbench title baseline and content start line」
   是「tab 在头外」时代的对齐补偿。头部结构对齐后实测：删掉它 ⇒ 1440 头高 65 → **58 = 原型**，
   820/480 **完全不变**（136/248）、无新增溢出 ⇒ 该补偿已无必要。保留 height/padding/align 不动。 */
.director-gallery-top{height:auto;padding-bottom:12px;align-items:flex-start}
  .director-gallery-layout{padding-top:16px}
  .director-panel,.director-brief-body,.director-qa-body,
  .app-shell>.app .card,.app-shell>.app .feishu-section,
  .app-shell>.app .batchbar{padding:var(--ui-panel-pad)}
  .app-shell>.app .role-card{padding:0}
  .director-section-label,.overview-section-label{margin-bottom:var(--ui-space-3)}
  .director-gallery-foot{gap:var(--ui-space-2)}

  .app-shell>.app .btn,.app-shell>.app .planning-tab,
  .app-shell>.app .planning-filter,.app-shell>.app .overview-batch-action,
  .director-main .director-cta,.director-main .director-gallery-foot button,
  .director-main .director-gallery-foot a,.director-main .director-review-actions button{
    min-height:var(--ui-control-h);line-height:1.25
  }
  .app-shell>.app input[type=text],.app-shell>.app select,
  .director-main input[type=text],.director-main select{min-height:var(--ui-control-h);line-height:1.25}
  .app-shell>.app textarea,.director-main textarea{line-height:1.6}

  .director-rail{z-index:20}
  .director-nav em{z-index:1}
  .director-review-mask{z-index:var(--ui-overlay-review)}
  .login-mask{z-index:var(--ui-overlay-login)}
  .director-dna-pool-mask{z-index:var(--ui-overlay-pool)}
  .img-lightbox{z-index:var(--ui-overlay-lightbox)}
  .toast{z-index:var(--ui-overlay-toast)}

  .feishu-status-card h2,.feishu-connect-card h2{font-size:var(--ui-size-section);line-height:1.4}
  .feishu-section h3,.feishu-sync-card h3{font-size:var(--ui-size-card);line-height:1.45}
  .feishu-kpi .kpi-label,.feishu-kpi small,.feishu-empty{font-size:var(--ui-size-meta);line-height:1.5}
  .feishu-kpi strong{font-size:22px}

  .planning-tabs,.planning-filters,.planning-category{line-height:1.4}
  .planning-tab,.planning-filter{min-height:var(--ui-control-h);padding:8px 12px}
  .planning-card-body{padding:var(--ui-panel-pad)}
  .overview-action-brief,.planning-filters,.create-side{top:var(--ui-space-5)}
  .overview-action-head,.overview-action-body{padding:var(--ui-panel-pad)}
  .overview-action-head h3{font-size:22px;line-height:1.4}
  .overview-batch{padding:var(--ui-panel-pad);gap:var(--ui-column-gap)}

  /* Production gallery: image-first review, matching the approved lightbox prototype. */
  .director-gallery-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px}
  .director-gallery-layout>section{min-width:0}
  .director-gallery-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
  .director-gallery-card{position:relative;min-width:0;background:var(--studio-white);border:1px solid var(--studio-line);overflow:hidden}
  .director-gallery-status{position:absolute;z-index:2;top:10px;left:10px;padding:5px 8px;background:var(--studio-blue-soft);color:#3973bd;font-size:11px;line-height:1.2}
  .director-gallery-status.review{background:var(--st-wait-bg);color:var(--st-wait-fg)}
  .director-gallery-image{aspect-ratio:3/4;height:auto;background:var(--studio-placeholder-bg) center/cover no-repeat;cursor:zoom-in;overflow:hidden}
  .director-gallery-image:focus-visible{outline:2px solid var(--studio-blue);outline-offset:-3px}
  .director-gallery-meta{display:flex;justify-content:space-between;gap:8px;padding:12px 12px 4px;min-height:48px}
  .director-gallery-meta b{font-size:12px;line-height:1.45}
  .director-gallery-meta span{color:var(--studio-blue);white-space:nowrap}
  .director-gallery-foot{display:flex;flex-wrap:wrap;padding:8px 12px 12px}
  .director-gallery-foot button{flex:1;min-width:92px;background:var(--studio-paper);color:var(--studio-ink);border:1px solid var(--studio-line);cursor:pointer}
  .director-gallery-foot button:first-child{background:var(--studio-ink);color:var(--studio-white);border-color:var(--studio-ink)}
  .director-gallery-foot button.disabled,.director-gallery-foot button:disabled{opacity:.45;cursor:not-allowed}
  .gallery-failure-notice{margin:0 0 16px;padding:10px 12px;border:1px solid var(--c-warning-line);background:var(--c-warning-wash);color:#8c4938;font-size:12px;line-height:1.55}
  .gallery-lifecycle-notice{background:var(--studio-paper);border-color:var(--studio-line);color:var(--studio-muted)}
  .gallery-lifecycle-notice.gallery-archived-all{background:var(--studio-blue-soft);border-color:#c8d0b7;color:#3973bd}
  .gallery-card-action-secondary{background:var(--studio-paper)!important;color:var(--studio-muted)!important}
  .gallery-storage-status{flex:1;min-width:0;color:var(--studio-muted);font-size:11px;line-height:1.45}
  .gallery-preview-retry{position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);border:1px solid rgba(216,210,199,.9);background:rgba(255,253,248,.94);color:var(--studio-muted);padding:8px 10px;font-size:12px;cursor:pointer;white-space:nowrap}
  .gallery-preview-retry:hover{color:var(--studio-ink);border-color:var(--studio-blue)}
  .director-gallery-image.preview-error{background:var(--studio-paper)!important}
  .director-gallery-image.generation-failed-preview{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:var(--studio-paper)!important;color:var(--c-warning);cursor:default;text-align:center}.generation-failed-preview strong{font:600 18px var(--studio-font)}.generation-failed-preview span{font-size:12px;color:var(--studio-muted)}.generation-failed-preview .gallery-zoom-control{display:none}
  .archive-rejected{background:var(--c-warning-wash);color:var(--c-warning)}
  .director-gallery-card.is-accepted{border-color:#aeb99b;box-shadow:inset 0 0 0 1px #aeb99b}
  .director-gallery-card.is-rejected{opacity:.68}
  .director-review-panel{width:min(1440px,94vw);height:min(900px,92vh);max-height:none;overflow:hidden;grid-template-columns:minmax(0,1fr) 370px}
  .director-review-image{position:relative;min-height:0;background-color:#222522}
  .director-review-image:focus{outline:0}
  .director-review-pager{position:absolute;top:50%;width:42px;height:56px;transform:translateY(-50%);border:1px solid rgba(255,255,255,.35);background:rgba(23,24,23,.66);color:var(--studio-white);font-size:32px;line-height:1;cursor:pointer;z-index:2}
  .director-review-pager:hover{background:var(--studio-blue);border-color:var(--studio-blue)}
  .director-review-pager.prev{left:18px}.director-review-pager.next{right:18px}
  .director-review-counter{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);background:rgba(23,24,23,.72);color:var(--studio-white);padding:6px 10px;font-size:12px;z-index:2}
  .director-review-content{min-width:0;overflow:auto}
  @media(max-width:1100px){.director-gallery-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.director-gallery-actions{flex-wrap:wrap}}
  @media(max-width:800px){
    .director-gallery-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
    .director-review-panel{width:96vw;height:94vh;grid-template-columns:1fr}
    .director-review-image{min-height:55vh}
    .director-review-content{max-height:39vh}
  }
  @media(max-width:480px){.director-gallery-grid{grid-template-columns:1fr}.director-gallery-image{aspect-ratio:3/4}.director-review-image{min-height:48vh}}

  @media(max-width:980px){
    .director-main,.app-shell>.app .content{padding-inline:24px}
  }
  @media(max-width:640px){
    .director-main,.app-shell>.app .content{padding-inline:16px}
    .director-main h1,.app-shell>.app .phead h1,.planning-toolbar h1{font-size:22px}
    /* A′（2026-09-22）：小屏段同步收到 14px（原 16px）。 */
    .director-section-label h2,.overview-section-label h2{font-size:14px}
  }
  /* Gallery layout hardening: keep metadata readable inside narrow cards and
     make the top action controls use the site's editorial button language. */
  .director-gallery-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;min-width:0}
  .director-gallery-actions .sel-full{box-sizing:border-box;height:40px;min-height:40px;margin-top:0;border:1px solid var(--studio-line);border-radius:0;background:var(--studio-white);color:var(--studio-ink);padding:0 30px 0 10px;line-height:1.25}
  .director-gallery-actions .director-filter{box-sizing:border-box;min-height:40px;padding:0 12px;border:1px solid var(--studio-line);border-radius:0;background:var(--studio-white);color:var(--studio-ink);font:600 12px/1.25 'Noto Sans SC',sans-serif;white-space:nowrap;cursor:pointer}
  .director-gallery-actions .director-filter:hover:not(:disabled){border-color:var(--studio-blue);color:var(--studio-blue);background:#fbf5ee}
  .director-gallery-actions .director-filter:disabled{opacity:.48;cursor:not-allowed}
  .director-gallery-meta{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;justify-content:initial;min-width:0}
  .director-gallery-meta b{grid-column:1/-1;min-width:0;overflow-wrap:anywhere;word-break:break-word}
  .director-gallery-meta .gallery-storage-status{grid-column:1;min-width:0;white-space:normal;overflow-wrap:anywhere;word-break:break-word}
  .director-gallery-card{height:auto;align-self:start}
  @media(max-width:1100px){.director-gallery-actions{justify-content:flex-start}}
  @media(max-width:640px){.director-gallery-actions{display:grid;grid-template-columns:1fr 1fr}.director-gallery-actions .sel-full{width:100%!important;min-width:0!important}.director-gallery-actions .director-filter{width:100%}}
  /* P0-1（2026-10-02）：状态筛选常驻行。从 details 移出后独立成行，flex-wrap 保证窄窗口不溢出。
     异常 chip .has-errors 红色高亮，与卡片归档失败角标同色系（var(--c-warning) / var(--c-warning-wash)）。 */
  .gallery-status-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:12px 0;border-bottom:1px solid var(--studio-line)}
  .gallery-status-bar .gallery-filter-section{display:contents}
  .gallery-status-bar .gallery-filter-label{font-size:11px;color:var(--studio-muted);margin-right:2px;white-space:nowrap}
  .gallery-status-bar .gallery-status-row{display:flex;flex-wrap:wrap;gap:6px}
  .gallery-status-bar .director-filter[data-status="archive_failed"].has-errors{border-color:var(--c-warning);background:var(--c-warning-wash);color:var(--c-warning)}
  .gallery-status-bar .director-filter[data-status="archive_failed"].has-errors .gsc{color:var(--c-warning)}
  /* P2-2（2026-10-02）：生产记录 Tab 待验收计数红色徽标 */
  .tab-pending-count{display:inline-block;min-width:16px;padding:1px 5px;background:#dc2626;color:#fff;font-size:10px;font-weight:600;line-height:1.4;border-radius:8px;text-align:center;margin-left:4px;vertical-align:middle}
  /* P2-7（2026-10-02）：批量处理模式交互优化 —— 按钮激活态 + 模式提示条 */
  .director-gallery-actions .director-filter.is-active{background:var(--studio-ink);color:#fff;border-color:var(--studio-ink)}
  .gallery-batch-mode-hint{display:none;font-size:11px;color:var(--studio-muted);margin-left:4px;align-self:center}
  .gallery-batch-mode-hint.show{display:inline}
  /* P0-2（2026-10-02）：卡片元信息精简为两行（标题 + 归档状态色点）。
     原 grid 布局（标题占满行 + 存储状态 + 归档角标）不再需要，改为简单的垂直堆叠。 */
  .director-gallery-meta{display:block;min-height:auto;padding:10px 12px 4px}
  .gallery-card-title{display:block;font-size:12px;line-height:1.45;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gallery-card-archive{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--studio-muted);line-height:1.4}
  .gallery-card-dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}
  /* P0-2：大图面板批次信息区块。卡片精简后，批次级信息（配方/商品/角色卡/时间/流程彩点）移到这里展示。 */
  .gallery-review-batch-info{margin:10px 0;padding:10px 12px;background:var(--studio-paper);border:1px solid var(--studio-line)}
  .gallery-review-batch-title{font-size:11px;font-weight:600;color:var(--studio-muted);margin-bottom:6px;letter-spacing:.05em}
  .gallery-review-batch-facts{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11px;color:var(--studio-ink);line-height:1.55}
  .gallery-review-batch-facts span{white-space:nowrap}
  @media(max-width:1100px){.gallery-status-bar{padding:10px 0}}
  .visitor-private-state{display:none;max-width:560px;margin:14vh auto;padding:44px 36px;text-align:center;background:var(--c-surface);border:1px solid var(--c-line);box-shadow:0 16px 40px rgba(35,32,25,.08)}
  .visitor-private-state h2{margin:10px 0 8px;font-family:var(--font-display);font-size:32px;font-weight:650}
  .visitor-private-state p{margin:0 auto 24px;color:var(--c-ink-soft);font-size:13px;line-height:1.8;max-width:420px}
  .visitor-locked>.visitor-private-state{display:block}
  .visitor-locked> :not(.visitor-private-state){display:none!important}

/* ── #6 workbench-space-pass-final ── */
  /* Final cascade: let parent rows follow content; only panels receive useful
     minimum space. Fixed row heights make neighboring controls collide when
     labels, previews, or inspection messages wrap. */
  @media(min-width:1051px){
    /* V3 Phase 2：原 height:70px;font-size:16px 死规则已删（height:auto + font 11px 那条覆盖）。 */
  }
  /* Keep the approved tall-grid selectors from creating a second layout model. */
  @media(min-width:1051px){
  }
  @media(max-width:1050px){
  }

/* ── #7 overview-production-status-layout ── */
  .app-shell>.app .director-character-assets[hidden]{display:none}.app-shell>.app .director-character-assets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;margin-bottom:20px}.app-shell>.app .director-product-assets[hidden]{display:none}.app-shell>.app .director-product-assets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:20px}.app-shell>.app .director-product-asset-card{display:flex;flex-direction:column;gap:6px;padding:10px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84)}.app-shell>.app .director-product-asset-cover{aspect-ratio:1/1;border-radius:var(--studio-r-control);background:var(--studio-placeholder-bg) center/cover no-repeat}.app-shell>.app .director-product-asset-card strong{font-size:12px}.app-shell>.app .director-product-asset-card span{font-size:11px;color:var(--studio-muted)}.app-shell>.app .overview-start-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 16px}.app-shell>.app .overview-start-card{padding:16px;text-align:left;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84);color:var(--studio-ink);cursor:pointer;display:flex;flex-direction:column;gap:8px;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}.app-shell>.app .overview-start-card:hover{transform:translateY(-3px);border-color:var(--studio-blue);box-shadow:0 6px 20px rgba(15,23,42,.12)}.app-shell>.app .overview-start-card strong{font:650 14px/1.4 var(--studio-font)}.app-shell>.app .overview-start-card span{font-size:11px;line-height:1.5;color:var(--studio-muted)}.app-shell>.app .overview-todo-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:20px 0 16px}.app-shell>.app .overview-todo{padding:12px 13px;text-align:left;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84);cursor:pointer;color:var(--studio-ink);display:flex;flex-direction:column;gap:4px}.app-shell>.app .overview-todo:hover{border-color:var(--studio-blue);box-shadow:var(--studio-sh-control);transform:translateY(-2px)}.app-shell>.app .overview-todo b{font:600 20px/1 var(--studio-font);font-variant-numeric:tabular-nums}.app-shell>.app .overview-todo span{font-size:11px;color:var(--studio-muted)}.app-shell>.app .overview-todo-wait b{color:var(--tone-warn)}.app-shell>.app .overview-todo-bad b{color:var(--tone-err)}.app-shell>.app .overview-recent-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0 0 20px}.app-shell>.app .overview-recent-card{min-height:72px;padding:13px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84);display:flex;flex-direction:column;gap:6px}.app-shell>.app .overview-recent-card strong{font-size:12px}.app-shell>.app .overview-recent-card span,.app-shell>.app .overview-recent-empty{font-size:11px;color:var(--studio-muted)}
  .app-shell>.app .overview-task-label{margin-top:0}.app-shell>.app .overview-focus-layout{display:grid;grid-template-columns:minmax(0,1fr) 292px;gap:16px;align-items:start}.app-shell>.app .overview-focus-layout .overview-batch{margin:0}
  .app-shell>.app .overview-action-brief{position:static;display:flex;flex-direction:column}.app-shell>.app .overview-action-head{padding:18px}.app-shell>.app .overview-action-head h3{font-size:22px}.app-shell>.app .overview-action-body{padding:16px;flex:1}.app-shell>.app .overview-action-block{margin-bottom:12px;padding-bottom:12px}
  #screen-overview{--studio-muted:#5b6472}
  .app-shell>.app #screen-overview>.phead{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:28px}

/* 区域头统一化：设置屏同款覆写（`.app-shell > .app .phead` 的 3 类规则压过 2 类的共享规则，
   故必须用 id 级覆写；与首页同款）。 */
.app-shell>.app #screen-feishu>.phead{padding-bottom:0;margin-bottom:16px}

  .app-shell>.app #screen-overview>.phead h1{margin:0}
  .app-shell>.app .overview-userbar{display:flex;align-items:center;gap:8px;flex:0 0 auto;margin-top:3px;padding:9px 13px;border:1px solid var(--studio-line);color:var(--studio-muted);font-size:12px;white-space:nowrap}
  .app-shell>.app .overview-userbar b{color:var(--studio-blue);font-weight:600}
  .app-shell>.app .overview-userbar .plan{color:var(--studio-muted);font-size:12px;margin-left:2px}
  .app-shell>.app .overview-progress-label{margin-top:26px;margin-bottom:12px}.app-shell>.app .planlist .prow{display:grid;grid-template-columns:minmax(230px,1.1fr) minmax(130px,1fr) 52px 86px 80px;gap:14px;align-items:center;margin-bottom:8px;padding:13px 16px}.app-shell>.app .planlist .prow .pb{min-width:0;font-size:13px}.app-shell>.app .planlist .pbar{height:6px}.app-shell>.app .planlist .pbar i{background:var(--studio-blue)}.app-shell>.app .planlist .ppct{width:auto}.app-shell>.app .planlist .pgo{text-align:right}
  .app-shell>.app .planlist .plan-toggle{min-width:180px;margin:18px auto 0;display:block}
  @media(max-width:1060px){.app-shell>.app .overview-focus-layout{grid-template-columns:1fr}.app-shell>.app .overview-action-brief{display:grid;grid-template-columns:1fr auto;gap:16px}.app-shell>.app .overview-action-head{grid-column:1/-1}.app-shell>.app .overview-action-body{display:flex;align-items:center;justify-content:space-between;gap:16px}.app-shell>.app .overview-action-block{flex:1;margin:0;padding:0;border:0}}
  /* ===== 概览工作台看板化：分组任务列表 ===== */
  .app-shell>.app .planlist .group-head{display:flex;justify-content:space-between;align-items:center;padding:9px 16px;background:var(--prototype-paper-2);border-bottom:1px solid var(--studio-line);font-size:11px;letter-spacing:.14em;color:var(--studio-muted);font-weight:650}
  .app-shell>.app .planlist .group-head .gc{color:var(--studio-ink)}
  .app-shell>.app .planlist .prow{grid-template-columns:minmax(140px,1.2fr) minmax(90px,1fr) 46px 78px 56px 60px 78px}
  .app-shell>.app .planlist .prow .tstat,.app-shell>.app .planlist .prow .tcost{font-size:12px;color:var(--studio-muted);text-align:right;white-space:nowrap}
  @media(max-width:1060px){.app-shell>.app .planlist .prow{grid-template-columns:minmax(120px,1.2fr) minmax(70px,1fr) 46px 78px 56px 60px 78px}}
  @media(max-width:760px){}
  @media(max-width:760px){.app-shell>.app #screen-overview>.phead{display:block}.app-shell>.app .overview-userbar{width:max-content;max-width:100%;margin-top:12px;white-space:normal}.app-shell>.app .overview-start-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.app-shell>.app .overview-todo-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.app-shell>.app .overview-recent-grid{grid-template-columns:1fr}.app-shell>.app .overview-focus-layout{display:block}.app-shell>.app .overview-focus-layout .overview-batch{margin-bottom:12px}.app-shell>.app .overview-action-brief{display:block}.app-shell>.app .overview-action-body{display:block}.app-shell>.app .overview-action-block{margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--studio-line)}.app-shell>.app .planlist .prow{grid-template-columns:1fr auto;gap:8px}.app-shell>.app .planlist .pbar,.app-shell>.app .planlist .ppct{grid-column:1/-1}.app-shell>.app .planlist .pgo{justify-self:end}}

  /* 292px brief + 20px gap needs a real content width; stack before the
     workbench columns become too narrow for readable controls. */
  @media(min-width:1280px){
  }
  @media(max-width:1279px){
  }
  @media(max-width:700px){
  }
  /* Final DNA workbench layout override. Keep this last so legacy rules cannot shrink the selected card. */
  /* 工作模式三 tab 已迁到配置列顶部（见 .studio-mode-tabs）；旧的 prototype 层切换控件样式一并移除。 */
  :is(.free-creation-layout,.reference-extension-layout){grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr);grid-auto-rows:auto;gap:14px;align-content:start;min-width:0;width:100%;box-sizing:border-box;overflow:visible}.reference-extension-card[hidden],.reference-extension-panel[hidden],:is(.free-reference-card,.reference-extension-card)[hidden]{display:none!important}.reference-extension-inline-note{padding:10px 12px;border:1px solid var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue);font-size:10px;line-height:1.55}.reference-extension-panel{border:1px solid var(--studio-line);background:var(--studio-white);padding:16px}.reference-extension-panel .reference-extension-inline-note{margin:-2px -2px 0}:is(.free-prompt-panel,.reference-extension-prompt-panel),:is(.free-reference-card,.reference-extension-card),:is(.free-settings-card,.reference-extension-settings-card){border:1px solid var(--studio-line);background:var(--studio-white);padding:16px}:is(.free-prompt-panel,.reference-extension-prompt-panel){display:grid;gap:8px}:is(.free-prompt-panel,.reference-extension-prompt-panel)>span,:is(.free-reference-card,.reference-extension-card) h3,:is(.free-settings-card,.reference-extension-settings-card) h3{font-weight:650;margin:0}:is(.free-prompt-panel,.reference-extension-prompt-panel) textarea{width:100%;box-sizing:border-box;min-height:150px;border:1px solid var(--studio-line);background:var(--studio-paper);padding:12px;font:14px/1.7 'Noto Sans SC',sans-serif;resize:vertical}:is(.free-prompt-panel,.reference-extension-prompt-panel) small,:is(.free-reference-card,.reference-extension-card) em,:is(.free-reference-status,.reference-extension-status){color:var(--studio-muted);font-size:11px}:is(.free-reference-grid,.reference-extension-grid){display:grid;grid-template-columns:1fr 1fr;gap:14px}:is(.free-reference-card,.reference-extension-card){display:grid;gap:10px}:is(.free-reference-card,.reference-extension-card) h3{font-size:14px}:is(.free-reference-card,.reference-extension-card) em{font-style:normal;font-weight:400;margin-left:5px}:is(.free-reference-row,.reference-extension-row){display:flex;gap:7px;flex-wrap:wrap}:is(.free-choice,.reference-extension-choice){border:1px solid var(--studio-line);background:var(--studio-paper);color:var(--studio-ink);padding:8px 10px;cursor:pointer;font:12px 'Noto Sans SC',sans-serif}:is(.free-choice,.reference-extension-choice).active{border-color:var(--studio-blue);background:var(--studio-blue);color:#fff}:is(.free-reference-card,.reference-extension-card) select,:is(.free-settings-grid,.reference-extension-settings-grid) select,:is(.free-settings-grid,.reference-extension-settings-grid) input{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);background:var(--studio-paper);padding:9px;color:var(--studio-ink)}:is(.free-product-upload,.reference-extension-upload){border:1px dashed var(--studio-line);padding:18px;text-align:center;cursor:pointer;color:var(--studio-muted);font-size:12px}#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload):focus-within,:is(.free-creation-layout,.reference-extension-layout) :is(.free-product-upload,.reference-extension-upload):focus-within{border-color:var(--studio-blue-line);background:#fff}:is(.free-product-upload,.reference-extension-upload) input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}:is(.free-settings-card,.reference-extension-settings-card){display:grid;gap:12px}:is(.free-settings-grid,.reference-extension-settings-grid){display:grid;grid-template-columns:repeat(4,1fr);gap:10px}:is(.free-settings-grid,.reference-extension-settings-grid) label{display:grid;gap:5px;font-size:11px;color:var(--studio-muted)}:is(.free-creation-layout,.reference-extension-layout)[hidden]{display:none!important}.director-guided-main[hidden],#guidedCreationLayout[hidden]{display:none!important}@media(max-width:800px){:is(.free-reference-grid,.reference-extension-grid),:is(.free-settings-grid,.reference-extension-settings-grid){grid-template-columns:1fr 1fr}}@media(max-width:520px){:is(.free-reference-grid,.reference-extension-grid),:is(.free-settings-grid,.reference-extension-settings-grid){grid-template-columns:1fr}}
  /* P2（2026-09-18）的历史补丁已于 B2（2026-09-19）**删除**：
     那两条规则做的是「藏掉 meta.order 元素 + 用 :after 写死一行『Prompt → 可选参考 → 输出设置』」。
     它当初是权宜之计 —— 自由创作的 meta.order 与原型 ORDERS 不一致，只好在 CSS 里硬写一行盖住。
     A1 已把 meta.order 改成原型逐字（'提示词 → 可选资产 → 输出 → 生成'），补丁于是变成**有害**：
     它继续藏掉真元素、显示那行过时的中英混排文案（实测 free 模式 orderVisible:false）。
     ⇒ 整条删除，让自由创作与其余四个模式一样显示自己的 meta.order（单一事实源 ✓）。 */
  #directorWorkbenchView.free-mode #directorPromptField{order:-1}
  #directorWorkbenchView.free-mode #directorPromptField label{font-weight:600}
  #directorWorkbenchView.free-mode aside.director-brief{display:none}
  :is(.free-progress-card,.reference-extension-progress-card){border:1px solid var(--studio-line);background:var(--studio-white);padding:16px;display:grid;gap:8px}:is(.free-progress-card,.reference-extension-progress-card) .prog{display:none;align-items:center;gap:10px}:is(.free-progress-card,.reference-extension-progress-card) .prog.show{display:flex}:is(.free-progress-card,.reference-extension-progress-card) .log{background:var(--c-ink);color:#C9D4CC;font-family:"SF Mono",Menlo,monospace;font-size:12px;border-radius:0;padding:12px;min-height:64px;line-height:1.7;white-space:pre-wrap;word-break:break-word;max-height:200px;overflow:auto}:is(.free-progress-card,.reference-extension-progress-card) .generation-queue{display:none;border:1px solid var(--c-line);background:var(--c-surface);padding:8px 10px;font-size:12px}:is(.free-progress-card,.reference-extension-progress-card) .generation-queue.show{display:block}
  /* V3 Phase 2：trigger 第四代整组（暖纸底 + 硬投影 + media 几何）已删除——幸存属性
     （flex-direction:column / ≤700 row / b 20px / span 14px nowrap）已合并至 3542-3548 段。 */

  /* DNA picker: two large cards per row, so the role cards use the modal width. */
  .director-dna-pool-grid{grid-template-columns:repeat(2,minmax(0,1fr));justify-content:stretch;gap:24px;padding:30px}
  /* V3 Phase 1：pool-card 单一完整定义——border/bg/color/几何与 hover/active 由旧代 2649 合并至此，
     旧代删除后本段为唯一定源（终态 = 实测渲染值：padding 16px / r12 / 白 .96 / 冷墨 / 柔阴影）。 */
  .director-dna-pool-card{min-width:0;padding:16px;display:block;width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:var(--studio-white);color:var(--studio-ink);text-align:left;cursor:pointer;overflow:hidden}
  .director-dna-pool-card:hover,.director-dna-pool-card.active{border-color:var(--studio-ink);box-shadow:var(--studio-sh-control)}
  .director-dna-pool-preview{min-height:360px;margin-bottom:16px}
  .director-dna-pool-image{max-height:620px}
  .director-dna-pool-card strong{font-size:20px;line-height:1.4}
  .director-dna-pool-card span{font-size:13px;line-height:1.5;margin-top:5px;color:var(--studio-muted)}
  @media(max-width:700px){
    .director-dna-pool-grid{grid-template-columns:minmax(0,1fr);gap:16px;padding:18px}
    .director-dna-pool-preview{min-height:0}
    .director-dna-pool-image{max-height:none}
  }

  /* Let the summary size itself from complete content; never clip useful information. */
  @media(min-width:1051px){
  }

  @media(min-width:1280px){
  }
  /* V3 Phase 2：trigger 第五代大字版（padding 4px 3px / font 14 / span 14 nowrap / b 20px /
     media 字号）已删除——span/b/字号幸存属性已合并至 3542-3548 段；其 padding:4px 3px 本就
     被后续的 padding:8px 规则覆盖（顺序靠后），实测终态 8px 未变。 */

/* ── #9 workbench-fixed-module-height ── */
  /* Preserve the approved desktop row height after removing explanatory copy. */
  @media(min-width:1051px){
  }

/* ── #10 workbench-content-first-layout ── */
  /* Let the page grow with the complete brief; alignment must never hide content. */
  @media(min-width:1280px){
  }

/* ── #12 compact-generation-summary ── */
  /* Keep the summary scannable: category on the left, current value on the right. */
  @media(min-width:1051px){
  }

/* ── #13 workbench-product-space-balance ── */
  /* Compact the DNA/shot row and give the product panel the released space. */
  @media(min-width:1051px){
  }

/* ── #14 gallery-quick-review ── */
  .director-summary{display:flex;align-items:center;gap:26px;margin:0 0 16px;padding:0 0 13px;border-bottom:1px solid var(--studio-line)}
  .director-summary-chip{display:flex;align-items:baseline;gap:7px;min-width:0}
  .director-summary-chip b{font-size:18px;line-height:1.2;color:var(--studio-ink)}
  .director-summary-chip span{font-size:12px;color:var(--studio-muted);white-space:nowrap}
  .director-summary-chip[hidden]{display:none}
  .gallery-zoom-control{position:absolute;z-index:3;left:50%;top:50%;width:48px;height:48px;border:1px solid rgba(255,253,248,.75);border-radius:50%;background:rgba(23,24,23,.76);color:var(--studio-white);font-size:32px;line-height:42px;text-align:center;cursor:zoom-in;opacity:0;transform:translate(-50%,-50%) scale(.72);transition:opacity .18s ease,transform .22s cubic-bezier(.22,.8,.2,1),background-color .18s ease}
  .director-gallery-image:hover .gallery-zoom-control,.director-gallery-image:focus-within .gallery-zoom-control{opacity:1;transform:translate(-50%,-50%) scale(1)}
  .gallery-zoom-control:hover,.gallery-zoom-control:focus-visible{background:var(--studio-blue);border-color:var(--studio-white);outline:0}
  .director-gallery-card.is-rejected .director-gallery-image{filter:saturate(.82)}
  .director-gallery-card.is-rejected .director-gallery-foot{display:flex}
  @media(max-width:640px){.director-summary{gap:16px;flex-wrap:wrap}.gallery-zoom-control{opacity:1;transform:translate(-50%,-50%) scale(.9)}}

/* ── #15 site-page-alignment ── */
    :root{
      --site-page-gutter:42px;
      --site-page-gutter-tablet:24px;
      --site-page-gutter-mobile:16px;
      --site-page-max:1440px;
      --site-page-column-gap:20px;
      --site-eyebrow-color:var(--studio-blue);
      --site-rule:var(--studio-line);
    }

    /* All primary pages share one editorial title rhythm. */
    .site-page-head,
    .director-gallery-top,
    .planning-toolbar{
      box-sizing:border-box;
    }
    .site-page-eyebrow,
    .director-gallery-top .director-eyebrow,
    .planning-toolbar .director-eyebrow,
    .feishu-connect-card .status-kicker{
      color:var(--site-eyebrow-color);
      font:600 11px/1.35 var(--site-font-body,'Noto Sans SC',sans-serif);
      letter-spacing:.13em;
      text-transform:uppercase;
    }
    .director-gallery-top .director-eyebrow,
    .planning-toolbar .director-eyebrow,
    .feishu-connect-card .status-kicker{margin:0 0 7px}
    .site-page-head h1,
    .director-gallery-top h1,
    .planning-toolbar h1,
    .feishu-connect-card h2{
      font-family:var(--site-font-display,var(--font-display));
      font-weight:650;
      letter-spacing:-.02em;
      color:var(--studio-ink);
    }
    .site-page-head h1,
    .director-gallery-top h1,
    .planning-toolbar h1,
    .feishu-connect-card h2{
      font-size:32px;
      line-height:1.2;
    }
    .site-page-head p,
    .director-gallery-top .director-sub,
    .planning-toolbar .planning-sub{
      color:var(--studio-muted);
      font-size:13px;
      line-height:1.65;
    }

    /* Keep the common left and right content edges aligned across shells. */
    .director-main,
    .app-shell>.app .content{
      width:100%;
      max-width:var(--site-page-max);
      box-sizing:border-box;
      /* A′（2026-09-22）：正文列宽对齐四屏共用原型（`验收/ia-prototype-v1/index.html:88`
         `padding-inline:max(30px,calc((100% - 1240px)/2))` ⇒ 内容列恒为 1240px）。
         改前实测（视口 1440）：今日生产/设置 1274、资产中心 1312、灵感 1238 —— 同一产品三种正文宽。
         ⚠️ 这是**唯一生效点**：更早的同选择器规则被本块覆盖，
         只改那一处不会生效（A′ 首轮实测：改完仍是 1274）。
         ⚠️ 本块同时匹配 `.director-main`，但后者被 ID 级规则 `#appShell.app-shell.director-mode>.director-main`
         压成 `padding:0` ⇒ 此处只对旧壳 `.content` 生效，新壳三屏由各自 `.director-view` 的 padding 负责。
         令牌 `--site-page-gutter` 保留：980/640 两条响应式规则仍在消费它。 */
      padding-left:max(30px,calc((100% - 1240px)/2));
      padding-right:max(30px,calc((100% - 1240px)/2));
    }
    .director-main>.director-view,
    .app-shell>.app .content>.screen{
      width:100%;
      /* A′（2026-09-22）：**不要在这里设 max-width**。
         这一层是「填满父容器」的角色；正文列宽由三个 director-view 各自的
         `padding-inline:max(30px,calc((100% - 1240px)/2))` 决定。
         踩坑实录（两轮实测）：
           ① 先把这里设成 1240 ⇒ 公式的 100% 变成 1240 ⇒ padding 退化成 30 ⇒ 内容二次收窄到 1180，
              且**同时把工作台一起缩小**（本选择器也匹配 #directorWorkbenchView，而它是满幅画布）。
           ② 保持 1356（=1440-42×2）⇒ 比父容器 main.director-main 的 1358 窄 2px，
              而 padding 公式按**父容器**解析 ⇒ 得到 59 而非 58 ⇒ 内容恒为 1238（差 2px）。
         ⇒ 正解是让本层等于父容器宽度，父容器自己的 max-width（1440/1500）负责超宽屏封顶。 */
      max-width:100%;
      margin-left:auto;
      margin-right:auto;
    }
    /* 区域头统一化（specs/prototype-gap-report-and-plan.md）：对齐原型 —— 原型 4 头实测
   h=58 / padding-bottom=0 / margin-bottom=16 / 无高度下限。删掉交付版自加的 76px 下限与下内边距，
   让高度由内容决定。⚠️ 禁止在别处再加同类下限：会把 4 头重新压回 76。
   A4（下边框是否删）待对照页裁决，暂留。 */
.director-topline.site-page-head,
    .director-gallery-top,
    .planning-toolbar,
    .app-shell>.app .phead{
      margin-bottom:16px;
      border-bottom:1px solid var(--site-rule);
    }
    .director-topline.site-page-head,
    .director-gallery-top,
    .planning-toolbar{align-items:flex-start}
    .director-topline.site-page-head h1,
    .director-gallery-top h1,
    .planning-toolbar h1,
    .app-shell>.app .phead h1{margin-top:0}
    .director-gallery-layout{padding-top:0}
    .planning-toolbar{margin-bottom:24px}
    .app-shell>.app .phead{margin-bottom:24px}
    .feishu-connect-card h2{margin-top:0}

    @media(max-width:980px){
      .director-main,
      .app-shell>.app .content{
        padding-left:var(--site-page-gutter-tablet);
        padding-right:var(--site-page-gutter-tablet);
      }
      .director-main>.director-view,
      .app-shell>.app .content>.screen{
        max-width:calc(100% - (var(--site-page-gutter-tablet) * 2));
      }
      .site-page-head h1,
      .director-gallery-top h1,
      .planning-toolbar h1,
      .feishu-connect-card h2{font-size:32px}
    }
    @media(max-width:640px){
      .director-main,
      .app-shell>.app .content{
        padding-left:var(--site-page-gutter-mobile);
        padding-right:var(--site-page-gutter-mobile);
      }
      .director-main>.director-view,
      .app-shell>.app .content>.screen{max-width:100%}
      .director-topline.site-page-head,
      .director-gallery-top,
      .planning-toolbar,
      .app-shell>.app .phead{min-height:0;margin-bottom:18px;padding-bottom:12px}
      .site-page-head h1,
      .director-gallery-top h1,
      .planning-toolbar h1,
      .app-shell>.app .phead h1,
      .feishu-connect-card h2{font-size:22px}
      .director-gallery-top .director-sub,
      .planning-toolbar .planning-sub{font-size:12px}
    }

/* ── #16 token-unify ── */
    /* ═══ 视觉令牌统一层（必须保持在全部样式块之后，新增样式块请勿插到本块之后）═══
       作用①：把第一代冷灰 --c-* 令牌重定义为「纸墨砖红」体系等价角色，消除残留接缝。
       作用②：补齐 --prototype-* 词表中缺失的三个色阶，供全站等值替换引用。 */
    :root{
      /* ① 冷灰 → 纸墨砖红（角色对角色同明度级映射） */
      --c-bg:#f7f9fc; --c-surface:#ffffff; --c-surface-2:#eef2f8; --c-surface-3:#e9eef6;
      --c-ink:#171817; --c-ink-soft:var(--studio-muted); --c-ink-faint:var(--studio-muted);
      --c-line:var(--studio-line); --c-line-soft:rgba(148,163,184,.16);
      --c-brand:#3b82f6; --c-brand-deep:#2563eb;
      /* 设置模块视觉统一（2026-10-02）：状态色收编到 --st-* 正统值，
         消除第一代 #b45309/#b91c1c 与 studio #a16207/#b42318 三轨并存；
         --st-* 在本 :root 块同作用域后行定义，CSS 变量前向引用成立。 */
      --c-warning:var(--st-wait-fg); --c-danger:var(--st-err-fg);
      /* --studio-ink-soft 全仓此前零定义，.settings-list 等引用处回退变深；
         取值同 studio muted #5b6472（AA 达标灰，5.98:1）。 */
      --studio-ink-soft:#5b6472;
      /* --c-brand-wash:#F6E9E2 与 --c-brand-line:#E8C9B8 本就是暖色，维持原值不重定义 */
      /* ② prototype 词表补全（--prototype-* 一组，先例定义见顶部 :root 原型段，搜 --prototype-ink）。 */
      /* S1·R3 #9：原为硬编码 #77766f（与其它作用域的 var(--studio-muted) 冲突）。
         同一 :root 作用域内已定义 --studio-muted，前向引用在 CSS 变量里成立。 */
      --prototype-muted:var(--studio-muted);
      --prototype-olive-wash:#e7eadf;
      --prototype-olive-deep:#566044;
      /* ③ 状态色令牌（收编 JS 区内联样式的同值硬编码；中性色 #fff/#222/#999/#eef0f3/#5b6472/#c44/var(--c-warning) 保留原样不造令牌） */
      --tone-ok:#1a7a42;        --tone-ok-strong:#1f8a4c; --tone-ok-bright:#2a9d5b;
      --tone-ok-wash:#e8f8ef;   --tone-ok-line:#a8e0c0;
      --tone-warn:#b7791f;      --tone-warn-deep:#8a6100; --tone-warn-wash:#fff6df;
      --tone-err:#c0392b;
      /* ④ 状态语义色 --st-* 提升到 :root（设计统一 P0-5 · 2026-10-01）：
         原仅 B1(3406-3409)/B5(5828-5838) 两处作用域定义 ⇒ body 顶层弹层（#directorReviewMask 等）
         引用 var(--st-*) 时断供，复核徽标整条失效。此处取值与 B1/B5 既有定义逐字节一致，
         仅把「无定义」变「有定义」，层叠结果不变；五块内原定义保留不动（最小 diff）。 */
      --st-run-bg:#eff6ff;  --st-run-fg:#1d4ed8;  --st-run-bd:rgba(37,99,235,.28);
      --st-wait-bg:#fffbeb; --st-wait-fg:#a16207; --st-wait-bd:rgba(217,119,6,.32);
      --st-ok-bg:#ecfdf5;   --st-ok-fg:#047857;   --st-ok-bd:rgba(5,150,105,.3);
      --st-err-bg:#fef3f2;  --st-err-fg:#b42318;  --st-err-bd:rgba(180,35,24,.3);
      --st-arch-fg:#5454b8;
      --st-ok-fg-strong:#24695a; --st-run-fg-strong:#2c5f9e;
      --st-gray-bg:#f1f5f9; --st-gray-fg:#54606e; --st-gray-bd:rgba(100,116,139,.26);
    }
    #directorWorkbenchView.free-mode :is(.free-prompt-panel,.reference-extension-prompt-panel),
    #directorWorkbenchView.free-mode :is(.free-reference-grid,.reference-extension-grid),
    #directorWorkbenchView.free-mode :is(.free-settings-card,.reference-extension-settings-card),
    #directorWorkbenchView.free-mode :is(.free-progress-card,.reference-extension-progress-card){
      min-width:0;
      box-sizing:border-box;
    }
    /* B 轮视觉统一（2026-10-06）：本组原对 free/repl 做**密度放大** —— 18px 内边距 / 180px 输入框 /
       20px 摘要间距 / 16px 栅格间距；而 angle·tryon·guided 是 12px 密度。同一左栏切模式就松紧跳变，
       与《步骤卡面唯一事实源》自相矛盾。现只保留不影响统一性的弹性项。 */
    #directorWorkbenchView.free-mode :is(.free-reference-card,.reference-extension-card){min-height:170px}
    #directorWorkbenchView.free-mode :is(.free-progress-card,.reference-extension-progress-card){gap:10px;padding:18px}
    #directorWorkbenchView.free-mode :is(.free-progress-card,.reference-extension-progress-card) .summary-label{margin:0}
    @media(max-width:800px){
      #directorWorkbenchView.free-mode :is(.free-reference-grid,.reference-extension-grid),
      #directorWorkbenchView.free-mode :is(.free-settings-grid,.reference-extension-settings-grid){grid-template-columns:repeat(2,minmax(0,1fr))}
    }
    @media(max-width:520px){
        #directorWorkbenchView.free-mode :is(.free-progress-card,.reference-extension-progress-card){padding:15px}
      #directorWorkbenchView.free-mode :is(.free-reference-grid,.reference-extension-grid),
      #directorWorkbenchView.free-mode :is(.free-settings-grid,.reference-extension-settings-grid){grid-template-columns:minmax(0,1fr)}
    }

/* ── #18 studio-workbench-v1 ── */
/* ===== Studio 工作台 V1 =====
   目标：把已确认的桌面工作台视觉（Toolbar / 52px 导航 / 384px 配置 Inspector / 中央 Canvas）
   增量套用到网红 DNA 的生产工作台。
   约束：只改变呈现方式 —— 所有真实字段 ID、隐藏兼容节点、API 调用、计费与任务链路保持不变。 */

:root{
  --studio-line:rgba(148,163,184,.22);
  --studio-line-soft:rgba(148,163,184,.16);
  --studio-line-2:rgba(148,163,184,.34);
  --studio-muted:#5b6472;
  --studio-text:#202633;
  --studio-blue:#3b82f6;
  --studio-blue-soft:#eff6ff;
  --studio-blue-line:rgba(96,165,250,.42);
  --studio-ink:#111827;
  --studio-r-shell:22px;
  --studio-r-panel:18px;
  --studio-r-control:12px;   /* F2（2026-09-20）：控件圆角统一。本仓 21 处 border-radius:999px（pill）中，
     13 处已收回 var(--studio-r-control)；保留 8 处是**进度条 / 圆形勾选标 / 极小计数徽标**
     （.pbar / .pbar i / .angle-picked / .cap-state / .director-dna-refcount /
     .gallery-batch-stepper i / .gsc），它们在原型里的对应物本就是圆的（原型有 border-radius:50%）。
     为什么改：原型 generation-workbench-v1.html 的 **999px 出现 0 次** —— 它的控件圆角只有
     --radius-control:12px 一档（24 处可见实例，占其全部圆角 55%）；原型的 chip 是圆角矩形而非胶囊。
     实测影响面（2026-09-21 复核：逐元素计算值 + 逐像素比对）——**观感差异 ≈ 0，别把它当视觉收益**：
       浏览器会把圆角按盒子尺寸钳制到「高度 ÷ 2」，所以高 ≤24px 的 chip（.studio-library-chip h=18 等）
       改前改后**渲染完全相同**（工作台屏前后截图逐字节一致、差异像素 0）；唯一有差异的是 h=28px 的
       .planning-tab / .planning-category：999px→14px 对 12px，**差 2px**，逐行描边实测最大水平位移
       1.92 CSS px（垂直中缝收敛为 0）。
       ⇒ 本条是**源码层对齐**（原型里 999px 出现 0 次），不是观感改进；日后若想要肉眼可见的形状差异，
       只能改目标半径或控件高度，光把 999px 收回令牌是看不出来的。  */
  --studio-r-tab:9px;   /* 分区/状态筛选 tab 的圆角（原型 9px 档；2026-10-06 把 5 处 .director-filter
       的 9px 字面值收口到本令牌——设置分区 / 灵感分区 / 灵感预设刷新 / 资产中心分区头 / 资产中心状态行。
       像素语义不变（9px→9px），只收敛源码层的事实来源。 */
  --studio-sh-control:0 4px 14px rgba(15,23,42,.08);
  --studio-sh-panel:0 18px 55px rgba(15,23,42,.08);
  --studio-toolbar-h:52px;
  --studio-rail-w:56px;
  /* 左栏宽度＝原型 `.wb{grid-template-columns:minmax(0,376px) …}` 同值（P2 · 2026-09-18）。 */
  --studio-config-w:376px;
  --studio-font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  /* 设计语言统一 Phase 3：新增令牌 */
  --studio-white:#ffffff;
  --studio-paper:rgba(241,245,249,.6);
  /* 2026-10-03 修复：原为 `--studio-placeholder-bg:var(--studio-placeholder-bg)`（自引用）。
     CSS 规范规定自引用即循环引用，浏览器判为 guaranteed-invalid ⇒ 全站 16 处使用点中
     13 处的图片占位底完全透明（看着像"图片加载坏了"而不是"设计上就是占位"）。
     实测确认 3 处另有来源不受影响（审核大图 rgb(30,37,48) / 画廊成片图
     rgba(226,232,240,.7) / 工作台日志区 rgb(17,24,39)）。
     取仓库既有实色，不引入新色系：与工作台侧的 --c-surface-2:#f1f5f9 同值。 */
  --studio-placeholder-bg:#F1F5F9;
  --studio-overlay-bg:rgba(23,24,23,.6);
}

/* ---------- 1. 应用外壳：桌面窗口 ---------- */
html{height:100%;overflow:hidden}
body{margin:0;height:100%;overflow:hidden;background:linear-gradient(135deg,#f8fafc 0%,#eef2f7 47%,#f9fbff 100%)}
/* 用户决策：全站展示字体统一为 Noto Serif SC（Studio 模式标题） */
#appShell h1,#appShell h2,#appShell h3,#appShell h4{font-family:var(--font-display)}
#appShell.app-shell{
  box-sizing:border-box;
  margin:12px;
  width:calc(100vw - 24px);
  height:calc(100vh - 24px);
  min-height:0;
  max-height:none;
  display:grid;
  grid-template-columns:var(--studio-rail-w) minmax(0,1fr);
  grid-template-rows:var(--studio-toolbar-h) minmax(0,1fr);
  border:1px solid rgba(255,255,255,.8);
  border-radius:var(--studio-r-shell);
  background:linear-gradient(135deg,rgba(248,250,252,.96),rgba(238,242,247,.92) 48%,rgba(249,251,255,.94));
  box-shadow:0 24px 70px rgba(15,23,42,.18);
  overflow:hidden;
  position:relative;
}
#appShell.app-shell>.director-rail{grid-column:1;grid-row:2}
#appShell.app-shell>.director-main{grid-column:2;grid-row:2}
#appShell.app-shell.director-mode>.director-main{display:block;min-width:0;min-height:0;height:100%;overflow:hidden}
#appShell.app-shell:not(.director-mode)>.director-main{display:none}
#appShell.app-shell:not(.director-mode)>.app{display:block;grid-column:2;grid-row:2;min-height:0;height:100%;overflow-y:auto;overflow-x:hidden;background:transparent}
#appShell.app-shell.director-mode>.app{display:none}
#appShell.app-shell>.app>.main,
#appShell.app-shell>.app .content{min-height:0;background:transparent}
#appShell.app-shell>.app .main{min-height:0}

/* ---------- 2. Toolbar ---------- */
.studio-toolbar{
  /* B4a（2026-10-02）：灰阶单源——toolbar 旧壳子树与 :root 同用 --studio-muted，
     与 workbench/planning/gallery/遮罩块同口径（5.98:1 达 AA）。 */
  --studio-muted:#5b6472;
  grid-column:1/-1;grid-row:1;position:relative;z-index:6;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:0 14px 0 16px;
  border-bottom:1px solid var(--studio-line-soft);
  background:rgba(255,255,255,.62);
  backdrop-filter:blur(24px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85);
  font-family:var(--studio-font);
}
.studio-brand{display:flex;align-items:center;gap:9px;min-width:0}
.studio-brand-mark{width:26px;height:26px;flex:none;border-radius:9px;display:grid;place-items:center;background:linear-gradient(135deg,#111827,#64748b);color:#fff;font-size:12px;font-weight:650}
.studio-brand-name{font-size:13px;font-weight:650;color:var(--studio-ink);letter-spacing:.01em;white-space:nowrap}
.studio-brand-sub{font-size:11px;color:var(--studio-muted);white-space:nowrap}
.studio-toolbar-actions{display:flex;align-items:center;gap:8px;min-width:0}
.studio-session-hint{font-size:11px;color:var(--studio-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:280px}
.studio-toolbar-btn{
  display:inline-flex;align-items:center;gap:5px;
  /* S1·R3 #1–4c：向原型 .tb-btn 对齐（字重 600 / 圆角 10px / 高 30px / 字色 /
     底色 .8 / 字号 11.5px）。只改本规则自身，**不动共享令牌 `--studio-r-control`** —— 那会连带影响一片控件。
     B4（2026-10-02）：字色 #334155 → var(--studio-ink)，灰阶三档归并为两档（按钮文字更深一档，对比度更优）。 */
  border:1px solid var(--studio-line);border-radius:10px;
  background:rgba(255,255,255,.8);color:var(--studio-ink);
  height:30px;padding:0 11px;font:600 11px/1.2 var(--studio-font);cursor:pointer;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 1px 2px rgba(15,23,42,.05);
  transition:.18s ease;white-space:nowrap;
}
.studio-toolbar-btn:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.studio-avatar{width:28px;height:28px;flex:none;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,#111827,#64748b);border:2px solid #fff;box-shadow:0 4px 10px rgba(15,23,42,.16);color:#fff;font:600 11px/1 var(--studio-font)}
/* 工作模式三 tab：把已有的两个字段（creationMode / workflowMode）显式成三个入口。
   位置＝配置列顶部（原先在 toolbar 上的两按钮分段控件已移除）。 */
/* P2（2026-09-18）：起点区头部的内衬/分隔线按原型 `.wb-left-top{padding:12px 14px 0}`
   （原型这里没有分隔线也没有自己的底色 —— 底色由 .wb-left 提供，与 .studio-config 同值）。 */
.studio-mode-tabs-wrap{flex:none;padding:8px 14px 0;background:transparent}
/* P1 起点区（2026-09-18 用户授权）：形态对齐原型 `.start-pick` —— 2 列网格 + 描边按钮 + 蓝色选中态。
   与原型的差异：原型是 2×2 四选一；本应用有 5 个起点（多「随机动作」）⇒ 2 列自然换行，能力不减 ✗。 */
/* P2-1a（2026-09-29 用户裁定）：起点格 2×2 → 1×4 紧凑排布（四格不变、只变排布），
   起点区 151px → 约 80px，滚动区 520 → 592（+14%）—— 高级编辑折叠条默认完整可见。 */
/* 2026-10-01 八模式拆分：从1×4改成2行布局
   2026-10-02 UX 优化第二轮：4+4 对称布局，两行各4个tab */
.studio-mode-tabs{display:flex;flex-direction:column;gap:5px}
.studio-mode-tabs-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}
.studio-mode-tab{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.7);color:var(--studio-muted);padding:8px 4px;font:600 11px/normal var(--studio-font);cursor:pointer;white-space:nowrap;transition:.18s ease}
.studio-mode-tab:hover{background:#fff;color:var(--studio-text)}
.studio-mode-tab.active{background:var(--studio-blue-soft);color:var(--studio-blue);border-color:var(--studio-blue-line)}
.studio-mode-tab.active:hover{background:var(--studio-blue-soft)}
.studio-mode-tab:focus-visible{outline:2px solid var(--studio-blue-line);outline-offset:2px}
.studio-mode-hint{margin:8px 0 0;font-size:11px;color:var(--studio-muted);line-height:1.5}
.studio-mode-hint b{color:var(--studio-text);font-weight:600}
/* 编辑类能力说明：**不得回流**（2026-09-20 用户裁定删除；2026-09-24 收口后进一步失去载体）。
   沿革：该块只在三项编辑能力全部未开放时显示 ⇒ 布局随功能开关跳变 93px；
   且它讲的三件事在起点格 title 与编辑目标层各有一份，属纯冗余。
   2026-09-24 用户裁定 A 后，「编辑已有图片」只剩换装一个目标、编辑目标层本身也已移除
   ⇒ 该块的**两处兜底载体均已不存在**，「未开放」信息现由起点格 title 经 showToast 直达用户。
   负向契约：test/frontend-edit-capability-note.test.js 已翻转为「不得回流」。 */

/* P2 状态筛选行（2026-09-18 用户授权）：对齐原型的批次状态行；只驱动既有 GALLERY_STATUS_FILTERS ✓ */
.gallery-status-row{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.gallery-status-row .director-filter.active{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue)}
/* D · P3 时间范围筛选行（2026-09-19 用户裁定 Q3=a）：与状态行**同形**（同 gap、同选中态令牌），
   因为两者是并列的两条筛选轴，视觉上不该有主次。只在位置上分开（在工具条区、不在状态行内）。
   ⚠️ 选中态**复用同一组令牌**，不新造颜色 —— 全站一致性（见 frontend-visual-and-copy-discipline）。 */
.gallery-timerange-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 10px}
.gallery-timerange-row .director-filter.active{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue)}
.gallery-timerange-note{font-size:12px;color:var(--studio-muted)}
/* P2 扩展（2026-09-18）：生成中批次的说明条（跨列、不造卡片 ⇒ 条目级链路零影响 ✓） */
.gallery-inprogress-note{grid-column:1/-1;margin:-6px 0 12px;padding:10px 12px;border:1px dashed var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.5);font-size:12px;color:var(--studio-muted)}

/* ---------- 3. Navigation Rail（52px） ---------- */
#appShell>.director-rail{
  box-sizing:border-box;
  min-height:0;max-height:100%;
  width:var(--studio-rail-w);min-width:var(--studio-rail-w);height:100%;
  padding:12px 5px;gap:6px;
  display:flex;flex-direction:column;align-items:center;
  border-right:1px solid var(--studio-line-soft);
  background:rgba(255,255,255,.5);
  backdrop-filter:blur(18px);
  overflow-y:auto;overflow-x:hidden;
  font-family:var(--studio-font);
}
#appShell>.director-rail .director-mark{
  width:34px;height:34px;flex:none;margin-bottom:4px;
  border:0;border-radius:var(--studio-r-control);
  background:rgba(255,255,255,.92);box-shadow:var(--studio-sh-control);
  color:var(--studio-ink);font-family:var(--studio-font);font-size:14px;font-weight:650;
  display:grid;place-items:center;
}
#appShell>.director-rail .director-nav{
  width:42px;min-height:44px;flex:none;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  border:0;border-radius:var(--studio-r-control);background:transparent;
  color:var(--studio-muted);font-family:var(--studio-font);font-size:10px;line-height:1.2;letter-spacing:0;
  text-align:center;padding:5px 2px;position:relative;cursor:pointer;transition:.18s ease;
}
#appShell>.director-rail .director-nav:hover{background:rgba(255,255,255,.86);color:var(--studio-text);box-shadow:var(--studio-sh-control)}
#appShell>.director-rail .director-nav.active{background:rgba(239,246,255,.96);color:var(--studio-blue);box-shadow:inset 0 1px 0 rgba(255,255,255,.85),0 5px 12px rgba(59,130,246,.12)}
#appShell>.director-rail .director-nav.active:before{display:none}
#appShell>.director-rail .director-nav-icon{font-size:16px;line-height:1;font-style:normal}
#appShell>.director-rail .director-nav em{position:absolute;right:1px;top:1px;font-style:normal;font-size:8px;line-height:1.35;background:#ef4444;color:#fff;border-radius:8px;padding:1px 4px}
#appShell>.director-rail .director-nav:empty,
#appShell>.director-rail .director-spacer{display:none}

/* ---------- 4. 工作台：配置 Inspector + 中央 Canvas ---------- */
#directorWorkbenchView{
  font-family:var(--studio-font);color:var(--studio-text);
  /* C2（2026-09-21，用户裁定「按屏取基准」）：工作台只看它自己的原型
     `aio-backend/prototypes/generation-workbench-v1.html` —— 该原型只有蓝族
     （--blue:#3b82f6 / --blue-soft:#eff6ff），对 #b6533d / #9e4a2e / #df8b77 /
     #b42318 / #a16207 / #047857 全部 0 命中。实测本屏有两处渲染成了第一代砖红
     rgb(182,83,61)（「→」箭头与「生产顺序」标签，走的是旧壳 --c-brand 系）
     ⇒ 按本屏原型收到蓝。只在本视图内重映射，不改变旧令牌的其他语义。 */
  --c-brand: var(--studio-blue);
  --c-brand-deep: var(--studio-blue);
  --c-brand-wash: var(--studio-blue-soft);
  --c-brand-line: var(--studio-blue-line);
  /* C2 收尾（2026-09-21）：本视图还漏了两条映射，实测「生产顺序」标签与同一行的「→」
     仍渲染成第一代砖红 rgb(182,83,61)。取值沿用**其他三个新壳作用域的既成约定**：
       --prototype-red      → var(--studio-blue)   （见 planning / .app-shell>.app / 遮罩块三处）
       --site-eyebrow-color → #64748b              （同上两处的值，冷灰）
     本屏原型 generation-workbench-v1 只有蓝族、无砖红 ⇒ 与约定一致。 */
  --prototype-red: var(--studio-blue);
  --site-eyebrow-color: #64748b;
  /* V2 统一收口（2026-09-30 用户 GO · 设计语言一致性审查）：补齐全套作用域重绑。
     根因：C2 只重绑了品牌色 5+1 个令牌，未照 #directorGalleryView（S4.1 段）/ planning /
     遮罩块的既成约定收口整组旧令牌 ⇒ 任何仍引用 --prototype-* / --c-* 的规则都会漏出
     :root 的暖纸墨值（footer 暖白 #fffdf8 / guide-chip 暖线 #d8d2c7 /
     interaction-status 暖底 / muted 不达标灰 #7b8492 / free·repl 状态色 --st-* 无定义回退）。
     取值全部沿用 gallery 屏 S4.1 的既成值，零新造色；只在本视图子树生效，不改变旧令牌的其他语义。 */
  --studio-muted:#5b6472;                 /* AA 达标灰（同 gallery/planning，5.98:1） */
  --c-line:var(--studio-line);
  --c-line-soft:var(--studio-line-soft);
  --c-ink:var(--studio-ink);
  --c-ink-soft:var(--studio-muted);
  --c-accent:var(--studio-blue);
  --c-surface-2:#f1f5f9;                  /* 审核修复（2026-09-30）：Phase 1 漏抄 gallery 此条——
     :root 链最终 #ebe5da 暖米，interaction-status 基础可见态（angle/tryon 普通消息）底色仍暖 */
  --prototype-white:#ffffff;              /* footer 冷白（原 :root 暖纸白 #fffdf8） */
  --prototype-paper:rgba(241,245,249,.6);
  --prototype-paper-2:rgba(241,245,249,.72);
  --prototype-line:var(--studio-line);
  --prototype-ink:var(--studio-ink);
  --prototype-muted:var(--studio-muted);
  /* 状态语义色（gallery 屏 --st-* 同套；:root 无定义 ⇒ 本屏 free/repl 的 .is-ok/.is-error
     此前回退继承，补绑后生效） */
  --st-run-bg:#eff6ff;  --st-run-fg:#1d4ed8;  --st-run-bd:rgba(37,99,235,.28);
  --st-wait-bg:#fffbeb; --st-wait-fg:#a16207; --st-wait-bd:rgba(217,119,6,.32);
  --st-ok-bg:#ecfdf5;   --st-ok-fg:#047857;   --st-ok-bd:rgba(5,150,105,.3);
  --st-err-bg:#fef3f2;  --st-err-fg:#b42318;  --st-err-bd:rgba(180,35,24,.3);
  /* .interaction-status.success 仍引用 olive 族，指向 ok 语义 */
  --prototype-olive-wash:var(--st-ok-bg);
  --prototype-olive-deep:var(--st-ok-fg);
}
#directorWorkbenchView.active{display:block;height:100%;min-height:0;overflow:hidden}
.studio-workbench{height:100%;min-height:0;display:grid;grid-template-columns:var(--studio-config-w) minmax(0,1fr);overflow:hidden}
.studio-config{display:flex;flex-direction:column;min-width:0;min-height:0;border-right:1px solid var(--studio-line);background:rgba(255,255,255,.5);backdrop-filter:blur(24px)}
.studio-config-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:14px 14px 18px;scrollbar-width:thin;scrollbar-color:rgba(148,163,184,.36) transparent}
.studio-config-scroll::-webkit-scrollbar{width:6px}
.studio-config-scroll::-webkit-scrollbar-thumb{background:rgba(148,163,184,.3);border-radius:9px}
.studio-config-footer{flex:none;padding:12px 14px 14px;border-top:1px solid var(--studio-line);background:var(--studio-white)}
/* P2：CTA 逐项对齐原型 `.btn.primary.block`（高 40px · padding 0 16px · font 600 12px · gap 6px）。 */
.studio-config-footer .director-cta{width:100%;height:40px;box-sizing:border-box;padding:0 16px;border:0;border-radius:var(--studio-r-control);background:linear-gradient(135deg,#111827,#071022);color:#fff;font:600 12px/normal var(--studio-font);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 8px 18px rgba(15,23,42,.16);transition:.18s ease}
#directorWorkbenchView .studio-estimate-confirm{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:8px 0 10px;border-bottom:1px solid var(--studio-line-soft)}
#directorWorkbenchView .studio-estimate-confirm[hidden]{display:none!important}
/* 批次05：footer 余额展示，与顶栏同源同刷；负值用 danger 语义 */
.studio-footer-balance{display:block;font-size:11px;line-height:1.4;color:#64748b;padding:4px 0 0;text-align:right}
.studio-footer-balance.is-negative{color:var(--st-err-fg);font-weight:600}
#ovBalance.is-negative{color:var(--st-err-fg)}
#directorWorkbenchView .studio-estimate-confirm>span{font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .studio-estimate-confirm>.summary-estimate{font-size:16px;line-height:1.2;font-weight:650;letter-spacing:-.02em;color:var(--studio-ink);text-align:right}
#directorWorkbenchView .studio-estimate-confirm.is-loading>.summary-estimate{color:var(--studio-muted)}
.studio-config-footer .director-cta:hover{transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}
.studio-config-footer .director-cta:disabled{background:#cbd5e1;color:#64748b;box-shadow:none;cursor:not-allowed;transform:none}
.studio-config-note{display:block;margin:7px 0 0;text-align:center;font-size:11px;line-height:1.5;color:var(--studio-muted)}
/* S4：三条管线共用底部 CTA —— 不再按模式把 footer 藏起来，也不在布局内留第二个主按钮。 */
#directorWorkbenchView.free-mode #saveTemplateQuick,
#directorWorkbenchView:has(#replicationCreationLayout:not([hidden])) #saveTemplateQuick{display:none}
/* P1-d（2026-09-18）：「保存为常用模板」已从底部 CTA 区归位到 05 输出设置组头（与「恢复默认」并列），
   底部只剩原型那三行 ⇒ 原来给它的 .studio-config-footer .btn.ghost 规则已死，已删除（不留死规则 ✗）。 */

/* 参考图拓展入口 */

/* ---------- 5. 配置分组 ---------- */
#guidedCreationLayout{display:flex;flex-direction:column;gap:14px;min-width:0}
#guidedCreationLayout[hidden]{display:none!important}
/* 顺序＝DOM 顺序（N1+N3：不再用 order 覆盖；四套事实源收口为 DOM 一处） */
#guidedCreationLayout .studio-group{display:flex;flex-direction:column;min-width:0;min-height:0;height:auto;margin:0}
/* 05 输出设置：P1-c（2026-09-18）曾由折叠区还原为常显步骤卡，并删除 4 条 `>.studio-advanced-fold>` 规则；
   C1（2026-09-19）又把它连同 03/04/05 一起收进 #studioAdvancedFold（默认收起）——**可见性变了、结构没变**。
   P2-5（2026-09-29 审计）：摘要镜像由组头第一行（345px 内挤到截断）降为第二行整行展示；
   组头 flex-wrap 由 .studio-output-step 专属规则开启，不影响其它组头。 */
#guidedCreationLayout>.studio-output-step .studio-advanced-sum{flex-basis:100%;order:9;margin:2px 0 0;font:400 9px var(--studio-font);color:var(--studio-muted);text-align:left;white-space:normal;overflow:visible}

/* ---------- 04 画面职责（N1）：镜头组并入同一张面板 ---------- */
/* 合并后组内顺序＝切换器 → 说明 → 镜头清单/模块网格（原为两组 + 6 条 order 互相覆盖） */
.studio-axis-panel>.studio-group{margin:0;min-height:0}
.studio-axis-panel>.studio-group>.studio-panel{margin-top:11px;padding:0;border:0;background:none;box-shadow:none}
/* [hidden] 兑底：切换器与说明都设了 display，UA 的 [hidden]{display:none} 优先级不够 */
.studio-axis-switch[hidden],
.studio-axis-hint[hidden]{display:none!important}

#directorWorkbenchView .studio-group-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:0 0 8px}
#directorWorkbenchView .studio-group-head h2{display:flex;align-items:center;gap:6px;margin:0;font:650 12px/1.3 var(--studio-font);color:var(--studio-ink)}
/* Stage 1（2026-09-18）：首页上下文的 .guided-no 带 1px 实线边框，会泄漏到工作台徽标 ✗；
   原型 .no 实测 bd=0 ✓（bg #EFF6FF / 蓝字 rgb(59,130,246) / r6 / fs10/700 本就一致 ✓）。此处补 border:0 ✓。 */
#directorWorkbenchView .studio-group-head h2 .guided-no{display:inline-block;border:0;padding:2px 5px;border-radius:8px;background:var(--studio-blue-soft);color:var(--studio-blue);font:650 10px/normal var(--studio-font);letter-spacing:.02em}
#directorWorkbenchView .studio-group-head>span{font-size:10px;color:var(--studio-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#directorWorkbenchView .studio-quick-plan{display:flex;flex-direction:column;gap:4px;padding:10px 12px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);box-shadow:inset 0 1px 0 rgba(255,255,255,.82)}
#directorWorkbenchView .studio-quick-plan-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .studio-quick-plan-head button{border:0;background:none;color:var(--studio-blue);padding:0;font:600 10px/1.2 var(--studio-font);cursor:pointer}
#directorWorkbenchView .studio-quick-plan-head button:hover{text-decoration:underline}
#directorWorkbenchView .studio-quick-plan-head button:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px;border-radius:8px}
#directorWorkbenchView .studio-quick-plan>strong{font:650 12px/1.35 var(--studio-font);color:var(--studio-ink);overflow-wrap:anywhere}
#directorWorkbenchView .studio-quick-plan>span{font-size:9px;line-height:1.5;color:var(--studio-muted)}
#directorWorkbenchView .studio-panel{border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.66);padding:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
#directorWorkbenchView .director-sub{font-size:10px;color:var(--studio-muted)}

/* 内容用途 */
#directorWorkbenchView .studio-intent-panel{padding:10px}
/* P2-2（2026-09-29 审计）：三卡两列必然 2+1 孤行；改三列等分消孤行。≤900px 单列回退见 S9.16。 */
#directorWorkbenchView .studio-intent-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
#directorWorkbenchView .studio-intent{position:relative;display:block;text-align:left;min-height:52px;padding:8px 26px 8px 9px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.62);color:var(--studio-text);cursor:pointer;font-family:inherit;transition:.18s ease;transform:none;box-shadow:none}
#directorWorkbenchView .studio-intent:hover{transform:translateY(-1px);background:#fff;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .studio-intent.active{border-color:var(--studio-blue-line);background:linear-gradient(180deg,rgba(239,246,255,.98),rgba(219,234,254,.68));color:var(--studio-text);transform:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 8px 18px rgba(37,99,235,.1)}
#directorWorkbenchView .studio-intent .num{display:none}
#directorWorkbenchView .studio-intent .check{position:absolute;right:8px;top:8px;width:14px;height:14px;display:grid;place-items:center;border:1px solid var(--studio-line-2);border-radius:50%;color:var(--studio-blue);font-size:9px;line-height:1}
#directorWorkbenchView .studio-intent strong{display:block;font-size:11px;font-weight:650;margin:0;color:inherit}
#directorWorkbenchView .studio-intent small{display:block;margin-top:3px;font-size:10px;line-height:1.4;color:var(--studio-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#directorWorkbenchView .studio-intent.active small{color:#475569}

/* 人物 DNA */
#directorWorkbenchView .studio-dna-panel{padding:10px;margin:0}
#directorWorkbenchView .studio-dna-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
#directorWorkbenchView .director-dna-card{height:auto;min-height:0;max-height:none;padding:7px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.62);box-shadow:none;cursor:pointer;text-align:left;font-family:inherit;color:var(--studio-text);transition:.18s ease}
#directorWorkbenchView .director-dna-card:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .director-dna-card.active{border-color:var(--studio-blue-line);background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(239,246,255,.7));box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .director-dna-thumb{height:74px;margin-bottom:7px;border-radius:10px;background:#e2e8f0 center/cover;overflow:hidden;display:grid;place-items:center;font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .director-face-strip{height:50px!important;min-height:0!important;margin-bottom:7px;border-radius:10px;overflow:hidden}
#directorWorkbenchView .director-face-caption{display:none}
#directorWorkbenchView .director-dna-card strong{display:block;font-size:11px;color:var(--studio-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#directorWorkbenchView .director-dna-card span{display:block;margin-top:2px;font-size:11px;color:var(--studio-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#directorWorkbenchView .director-dna-pool-trigger br{display:none}
/* V3（2026-09-30 · 叠罗汉根治 Phase 1）：幸存属性固化——以下属性此前由旧代规则供养
   （flex-direction:column←2948 / text-align:center←2616,2692 / b 20px←2984 /
     span 14px nowrap←2983 / ≤1050 row←2956），合并后旧代整组可删。
   终态 = v2 收口后的实测渲染值（tmp-trigger-baseline.json），零观感变化。 */
#directorWorkbenchView .director-dna-pool-trigger{height:auto;min-height:0;max-height:none;width:100%;margin-top:4px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:var(--studio-blue);padding:5px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease;text-align:center}
#directorWorkbenchView .director-dna-pool-trigger:hover{background:#fff;border-color:var(--studio-ink);box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .director-dna-pool-trigger b{font-size:20px;line-height:1;font-weight:600}
#directorWorkbenchView .director-dna-pool-trigger span{font-size:14px;line-height:1.25;white-space:nowrap}
@media(max-width:1050px){#directorWorkbenchView .director-dna-pool-trigger span{font-size:13px}}
@media(max-width:700px){#directorWorkbenchView .director-dna-pool-trigger{flex-direction:row}#directorWorkbenchView .director-dna-pool-trigger span{font-size:14px}}
/* 2026-10-02 03/04 合并：DNA 区底部操作行（选择其他 DNA + 管理角色卡并排） */
#directorWorkbenchView .studio-dna-actions{display:flex;gap:6px;margin-top:4px;align-items:stretch}
#directorWorkbenchView .studio-dna-actions .director-dna-pool-trigger{flex:1;margin-top:0;width:auto}
#directorWorkbenchView .studio-dna-actions .studio-card-manage{flex:none;align-self:stretch;display:flex;align-items:center;justify-content:center;margin-left:0}

/* 镜头方案 */
#directorWorkbenchView .studio-shots-panel{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;padding:10px}
#directorWorkbenchView .director-shot-row{height:auto;min-height:0;max-height:none;display:flex;align-items:flex-start;gap:7px;margin:0;padding:8px 9px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.62);cursor:pointer;transition:.18s ease}
#directorWorkbenchView .director-shot-row:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .director-shot-row.active{border-color:var(--studio-blue-line);background:linear-gradient(180deg,rgba(239,246,255,.98),rgba(219,234,254,.68));box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
#directorWorkbenchView .director-shot-row input{margin:2px 0 0;accent-color:var(--studio-blue);flex:none}
#directorWorkbenchView .director-shot-copy{flex:1;min-width:0;height:auto;min-height:0}
#directorWorkbenchView .director-shot-copy strong{display:block;font-size:11px;font-weight:600;color:var(--studio-ink)}
#directorWorkbenchView .director-shot-copy span{display:block;margin-top:2px;font-size:11px;line-height:1.45;color:var(--studio-muted)}

/* 能力素材指引（schema v9）：每个能力一张「该传什么」示例图。
   未配指引时这些节点根本不会插入 DOM，不会出现空框。 */
.guide-chip{display:inline-flex;align-items:center;gap:8px;margin-top:8px;padding:5px 9px 5px 5px;
  border:1px solid var(--c-line,#e3e7ee);border-radius:var(--studio-r-control);background:rgba(255,255,255,.78);
  font-size:12px;color:var(--c-ink-soft,#5b6675);cursor:pointer;text-align:left;line-height:1.3}
.guide-chip:hover{border-color:var(--c-accent,#3b5bdb);color:var(--c-ink,#12161c)}
.guide-chip img{width:34px;height:34px;flex:0 0 34px;border-radius:50%;object-fit:cover;border:1px solid var(--c-line,#e3e7ee)}
.guide-chip span{max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 上传模特图换脸入口（M2）：紧凑一行 + 声明遮罩；三态 = 未开放(置灰) / 可选 / 已就位 */
.face-entry{margin-top:10px;border:1px dashed #cfd6e2;border-radius:12px;padding:10px 12px;background:#fafbfe;display:flex;gap:10px;align-items:center;font-size:12px;line-height:1.5;color:#3c4759}
.face-entry.is-locked{background:#f4f5f7;color:#8a93a5;border-color:#e2e5ea}
.face-entry.is-active{display:block;align-items:stretch}
.face-entry-head{display:flex;align-items:center;gap:10px}
.face-entry-head strong{flex:1 1 auto;min-width:0}
.face-entry.is-active .face-entry-notes{margin-top:8px}
.face-entry-thumb{width:44px;height:44px;border-radius:10px;object-fit:cover;flex:0 0 auto;border:1px solid #e2e6ee;background:#fff}
.face-entry-body{flex:1 1 auto;min-width:0}
.face-entry-body strong{display:block;font-size:12px;color:#1f2a37}
.face-entry.is-locked .face-entry-body strong{color:#8a93a5}
.face-entry-hint{color:#6b7688}
.face-entry-notes{margin:6px 0 0;padding:0;list-style:none;color:#5c6678}
.face-entry-notes li{position:relative;padding-left:12px}
.face-entry-notes li:before{content:"·";position:absolute;left:3px;color:#9aa4b6}
.face-entry-actions{flex:0 0 auto;display:flex;gap:6px}
/* 「归档到飞书」行（2026-09-20）：与入口其余部分视觉分开 —— 它是**可选**动作，
   且后果（长期保留在第三方）与「本次生成」不同级，不能看起来像必做步骤。 */
.face-entry-archive{margin-top:8px;padding-top:8px;border-top:1px dashed #e2e5ea}
.face-entry-archive-line{color:#3c4759;margin-bottom:6px}
.face-entry-archive-actions{display:flex;gap:6px;align-items:center}
.face-entry-archive-actions select{flex:0 0 auto;max-width:180px;border:1px solid #cfd6e2;border-radius:9px;padding:6px 8px;font-size:12px;color:#3c4759;background:#fff}
.face-entry-archive-note{margin:6px 0 0;color:#6b7688}
.face-entry-archive-note b{color:#3c4759}
.face-btn{border:1px solid #3b82f6;background:#3b82f6;color:#fff;border-radius:9px;padding:6px 12px;font-size:12px;cursor:pointer;transition:.15s}
.face-btn:hover{background:#2563eb;border-color:#2563eb}
.face-btn:not(:disabled):active{transform:translateY(1px) scale(.985)}
.face-btn.ghost{background:#fff;color:#3c4759;border-color:#cfd6e2}
.face-btn.ghost:hover{background:#eff6ff;border-color:rgba(96,165,250,.42)}
.face-btn[disabled]{background:#eef0f4;color:#9aa4b6;border-color:#e2e5ea;cursor:not-allowed;opacity:.6;pointer-events:none}
.face-mask{position:fixed;inset:0;z-index:var(--ui-overlay-face);background:rgba(12,16,22,.72);display:flex;align-items:center;justify-content:center;padding:16px}
.face-mask[hidden]{display:none}
.face-mask-inner{background:#fff;border-radius:14px;max-width:min(560px,94vw);max-height:88vh;overflow:auto;padding:18px 18px 14px;box-shadow:0 18px 48px rgba(12,16,22,.28)}
.face-mask-inner h3{margin:0 0 8px;font-size:16px;color:#141c28}
.face-mask-inner p{margin:0 0 10px;font-size:13px;line-height:1.65;color:#3c4759}
.face-mask-inner ul{margin:0 0 10px;padding-left:18px;font-size:13px;line-height:1.65;color:#3c4759}
.face-mask-inner li{margin-bottom:4px}
.face-mask-consent{display:flex;gap:8px;align-items:flex-start;background:#f7f9fc;border:1px solid #e6eaf2;border-radius:10px;padding:10px;font-size:12px;line-height:1.6;color:#2b3547;cursor:pointer}
.face-mask-consent input{margin-top:2px;flex:0 0 auto}
.face-mask-actions{margin-top:12px;display:flex;justify-content:flex-end;gap:8px}
.face-mask-note{font-size:12px;color:#6b7688}
.guide-mask{position:fixed;inset:0;z-index:var(--ui-overlay-guide);background:rgba(12,16,22,.72);display:flex;
  align-items:center;justify-content:center;padding:18px}
.guide-mask[hidden]{display:none}
.guide-mask-inner{background:#fff;border-radius:14px;max-width:min(560px,92vw);max-height:88vh;overflow:auto;padding:14px}
.guide-mask-inner img{width:100%;height:auto;border-radius:10px;display:block}
.guide-mask-inner figcaption{margin-top:9px;font-size:13px;color:var(--c-ink-soft,#5b6675)}
.guide-mask-close{margin-left:auto;display:block;border:0;background:transparent;font-size:13px;color:var(--c-ink-soft,#5b6675);cursor:pointer;padding:4px 6px}
/* .guide-bar* 已于 2026-09-22 随横条一并删除（全仓零元素、零引用之后才删，不留半截删除）。 */

/* 商品原图 */
#directorWorkbenchView .studio-product-panel{padding:12px}
#directorWorkbenchView .studio-product-stack{display:flex;flex-direction:column;gap:10px;align-items:stretch}
#directorWorkbenchView .studio-product-drop{
  position:relative;width:100%;min-height:84px;box-sizing:border-box;
  display:grid;place-items:center;padding:14px 12px;cursor:pointer;
  border:2px dashed var(--studio-line-2);border-radius:var(--studio-r-panel);
  background:rgba(255,255,255,.56);
  box-shadow:inset 0 1px 4px rgba(15,23,42,.035),inset 0 1px 0 rgba(255,255,255,.86);
  filter:none;transition:.18s ease;
}
#directorWorkbenchView .studio-product-drop:hover,#directorWorkbenchView .studio-product-drop:focus-within{border-color:var(--studio-blue-line);background:rgba(255,255,255,.8)}
#directorWorkbenchView .studio-product-drop.has-image{display:block;padding:8px;min-height:0;justify-items:stretch;align-items:start;border-style:solid;border-color:var(--studio-line);background:rgba(255,255,255,.7)}
#directorWorkbenchView .studio-product-drop input[type=file]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:3}
/* ⚠️ 豁免：这一条 display:none **必须保留**，且不是「顺手写的隐藏」——
   has-image 态下缩略图条尾部有「+」瓦片与每张图的 × 移除按钮（都在 input 之上、pointer-events:auto），
   若此时 input 恢复可聚焦（更别说它本态是 inset:0 + z-index:3 全覆），它会盖住那两个控件的键盘焦点与点击。
   即：本态的上传入口已由「+」瓦片承担（它是一个真 <button>，本就可聚焦）⇒ 这里隐藏 input 不丢任何通路。
   反向锁 test/frontend-upload-focusable.test.js 对它做了逐条豁免登记。 */
#directorWorkbenchView .studio-product-drop.has-image input[type=file]{display:none}
#directorWorkbenchView .studio-product-upload-copy{display:block;text-align:center;pointer-events:none}
#directorWorkbenchView .studio-product-upload-copy strong{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:1px solid rgba(255,255,255,.75);border-radius:var(--studio-r-control);background:rgba(255,255,255,.86);color:var(--studio-text);font-size:11px;font-weight:650;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .studio-product-upload-copy small{display:block;margin-top:6px;font-size:10px;line-height:1.5;color:var(--studio-muted)}
#directorWorkbenchView .studio-product-drop.has-image .studio-product-upload-copy{display:none}
/* 4 列而不是 3 列（2026-09-20 裁定 6）：「+」瓦片要占一格，3 列下「3 图 + +」= 4 格 ⇒ 掉到第 2 行（+91px），
   正好吃掉本轮收益。4 列在 1–6 张任意组合下都不多占行（6 图 = 2 行，与原 3 列相同）。 */
#directorWorkbenchView .director-product-thumb-strip{height:auto;min-height:0;max-height:none;width:100%;box-sizing:border-box;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:0}
#directorWorkbenchView .studio-product-drop.has-image .director-product-thumb-strip{position:static;inset:auto;overflow:visible;pointer-events:auto}
#directorWorkbenchView .studio-product-drop .prod-thumb{width:auto;height:auto;aspect-ratio:1;border-radius:14px;border:3px solid rgba(255,255,255,.9);background-size:cover;background-position:center;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .studio-product-drop .prod-thumb .remove{width:22px;height:22px;top:4px;right:4px;background:rgba(255,255,255,.9);color:var(--studio-muted);opacity:0;transition:.18s ease;font-size:13px}
#directorWorkbenchView .studio-product-drop .prod-thumb:hover .remove{opacity:1}
#directorWorkbenchView .studio-product-drop .prod-thumb .meta{background:linear-gradient(transparent,rgba(15,23,42,.62));font-size:9px;padding:8px 6px 4px}
/* 01 收成原型形态（2026-09-20 裁定 2）：卡内只留「一行信息（#directorProductFocus 类别关注点）+ 商品库 chip」同排。
   ⚠️ 原 #directorWorkbenchView .studio-product-meta strong{display:block} 已随之删除 —— 它是**死规则**
   （#directorProductTitle 已 u-d-none），且特异性 (1,2,1) > u-d-none 的 (0,3,0) ⇒ 留着会压死 u-d-none（本仓踩过同款）。 */
#directorWorkbenchView .studio-product-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
/* 「一个入口、两种来源」的第二个来源（裁定 1 + 5）：商品库入口从整行降级为内联 chip。
   为什么换专属 class 而不给 .planning-copy-prompt 叠加覆盖：那条 .settings-kv 规则**无作用域**，
   CSSOM 实测它同时供给随机动作视图（#angleHistoryBtn / #angleRefBtn）与采集画廊详情 ⇒ 改它会跨页波及；
   本视图专属 class + 完整样式 = 零连带。顺带修掉既有缺陷：该按钮原先吃的是原型纸墨配色
   （米色文字 #d8d2c7 + 透明底 + 深灰边）在白色卡面上几乎看不见。 */
#directorWorkbenchView .studio-library-chip{display:inline-flex;align-items:center;gap:4px;width:auto;margin:0;padding:2px 8px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:var(--studio-muted);font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorWorkbenchView .studio-library-chip:hover{border-color:var(--studio-blue-line);background:#fff;color:var(--studio-blue);box-shadow:var(--studio-sh-control)}
/* 「+」瓦片（裁定 1 + 6）：**故意不带 .prod-thumb** —— renderCanvasContext() 用
   `querySelectorAll('#directorProdPreview .prod-thumb').length` 当「主图 N 张」计数（studio-app.js 内搜 prod-thumb），
   给了同类名会把「+」数成一张图 ✗。故尺寸自描（对齐同排图片瓦片：aspect-ratio:1 + 14px 圆角）。 */
#directorWorkbenchView .studio-product-drop .prod-thumb-add{width:auto;height:auto;aspect-ratio:1;padding:0;appearance:none;display:flex;align-items:center;justify-content:center;border:2px dashed var(--studio-line-2);border-radius:14px;background:none;color:var(--studio-muted);font:650 20px/1 var(--studio-font);cursor:pointer}
#directorWorkbenchView .studio-product-drop .prod-thumb-add:hover{border-color:var(--studio-blue-line);background:rgba(255,255,255,.6);color:var(--studio-blue)}
#directorWorkbenchView .director-pill{display:inline-block;padding:4px 8px;border-radius:9px;background:#eef2f7;color:var(--studio-muted);font-size:10px}
/* 默认区瘦身（2026-09-20）：类别格已从 01 商品（卡内 .studio-product-meta）挪进 04 画面职责
   （去卡面的 .studio-axis-panel 内）。原 margin-top:9px 是「与上方状态文字拉开」的卡内间距，
   换宿主后它退化成悬空上边距 ⇒ 改由面板的纵向节奏接管（本仓纪律：判据只能是计算值，
   实测见验收页；这里只去掉不再成立的卡内边距）。 */
#directorWorkbenchView .studio-category-grid{display:flex;flex-wrap:wrap;gap:5px}
#directorWorkbenchView .studio-axis-panel>.studio-category-grid{margin:0 0 12px}
#directorWorkbenchView .studio-category-grid button{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-muted);padding:5px 9px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorWorkbenchView .studio-category-grid button:hover{background:#fff;color:var(--studio-text)}
#directorWorkbenchView .studio-category-grid button.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}
#directorWorkbenchView #directorProductInspect{margin-top:8px}
/* V2（2026-09-30）：原 color:var(--studio-muted) 声明已删——它以 (1,1,1) 特异性压掉 .interaction-status 那段
   .success/.error 三态字色 (0,2,0)（实测 success/error 字色全灰、只剩暖底）。
   基础字色回落到 --c-ink-soft（本作用域 = #5b6472，同值零回归）。 */
#directorWorkbenchView .interaction-status{font-size:10px;margin-top:6px}

/* 生成设置 */
#directorWorkbenchView .studio-settings-slot{display:block;min-width:0}
#directorWorkbenchView .studio-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:0;border:0;background:none}
#directorWorkbenchView .studio-field{display:flex;flex-direction:column;gap:5px;min-width:0}
#directorWorkbenchView .studio-field label{font-size:10px;color:var(--studio-muted);margin:0 0 0 2px}
#directorWorkbenchView .studio-field select,
#directorWorkbenchView .studio-field input,
#directorWorkbenchView .studio-scene textarea{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
#directorWorkbenchView .studio-field select:focus,
#directorWorkbenchView .studio-field input:focus,
#directorWorkbenchView .studio-scene textarea:focus{background:#fff;outline:2px solid var(--studio-blue);outline-offset:1px}
/* B 轮控件尺寸统一（2026-10-06）：实测同一行里 select=40px 而张数输入框=33px。
   根因不是工作台缺声明，而是**站点级 min-height 只覆盖 input[type="text"] 与 select**，
   而工作台三个张数框都是 type="number"（#directorBatchMultiplier / #freeGenerationCount /
   #replicationCount，见 index.html）⇒ 掉出 40px 控制高。
   这里只补 input：select 已由站点规则给 40，textarea 有自己的最小高（描述框 64/120），
   均不应被这条影响。实测这三个张数框分别住在 .studio-field（#directorBatchMultiplier）与
   .free-settings-grid / .reference-extension-settings-grid（另两个）⇒ 口径按**输入类型**取，
   不按容器取，否则换个卡片就又掉出去。工作台里没有需要小尺寸的 number 输入（已核）。 */
#directorWorkbenchView input[type="number"]{min-height:var(--ui-control-h)}
/* 同一批：套图模板下拉（#suiteTemplateSel）不在 .studio-field 里，因此上面那条工作台基线
   盖不到它 —— 实测它只吃到站点级 legacy 规则（13px 字号、0 圆角、白底），是四面板里
   唯一一个和旁边控件不同形的 select。按工作台基线补齐。 */
#directorWorkbenchView .studio-suite-row select{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);box-shadow:inset 0 1px 0 rgba(255,255,255,.8);min-height:var(--ui-control-h)}
/* 默认区瘦身（2026-09-20）：拍法块已从 02 内容用途挪进 04 画面职责。原虚线分隔 + 上边距是
   「与上方用途三格分隔」的块内装饰，换宿主后 05 里本就有套图模板行在它上方 ⇒ 去掉虚线与上边距，
   改由面板纵向节奏接管。 */
#directorWorkbenchView .studio-scene-template{display:flex;flex-direction:column;gap:5px;margin:0 0 12px}
#directorWorkbenchView .studio-scene-template-head{display:flex;align-items:baseline;gap:6px}
#directorWorkbenchView .studio-scene-template-head span{font-size:10px;color:var(--studio-muted);margin-left:2px}
#directorWorkbenchView .studio-scene-template-head em{font-style:normal;font-size:9px;color:var(--studio-muted);opacity:.8}
#directorWorkbenchView .studio-scene-template select{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
#directorWorkbenchView .studio-scene-template select:disabled{opacity:.6;cursor:not-allowed}
#directorWorkbenchView .studio-scene-template-note{font-size:11px;line-height:1.5;color:var(--studio-muted)}
#directorWorkbenchView .studio-scene-template-skin{display:block;margin-top:2px;opacity:.85}
/* 换背景入口（B2）：与「画面语言/拍法」同区并列；未开启（接口 404）时整块不渲染 */
#directorWorkbenchView .studio-bg-preset{display:flex;flex-direction:column;gap:5px;margin-top:10px;padding-top:9px;border-top:1px solid var(--studio-line)}
#directorWorkbenchView .studio-bg-preset-head{display:flex;align-items:baseline;gap:6px}
#directorWorkbenchView .studio-bg-preset-head span{font-size:10px;color:var(--studio-muted);margin-left:2px}
#directorWorkbenchView .studio-bg-preset select{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:8px;padding:6px 8px;font-size:11px;background:#fff}
#directorWorkbenchView .studio-bg-preset-note{font-size:11px;line-height:1.5;color:var(--studio-muted)}
#directorWorkbenchView .studio-bg-preset-note.is-active{color:var(--st-ok-fg)}
#directorWorkbenchView .batch-multiplier-control{display:flex;align-items:center;gap:6px}
#directorWorkbenchView .batch-multiplier-control span,
#directorWorkbenchView .batch-multiplier-control b{font-size:11px;color:var(--studio-muted)}
#directorWorkbenchView .studio-frequency{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;margin-top:12px;padding:0;border:0;background:none}
#directorWorkbenchView .studio-advanced-field{display:flex;flex-direction:column;gap:6px;min-width:0}
#directorWorkbenchView .studio-advanced-field>label{font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .studio-advanced-field>label em{font-style:normal;color:#a6b0bd}
#directorWorkbenchView .studio-res-group{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
#directorWorkbenchView .res-choice{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-muted);padding:5px 3px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
/* V3 Phase 1：:disabled 态从旧代 2614 合并（唯一供养者；当前 JS 无触发点，保留态完整性） */
#directorWorkbenchView .res-choice:disabled{opacity:.58;cursor:not-allowed}
#directorWorkbenchView .res-choice:hover{background:#fff;color:var(--studio-text)}
#directorWorkbenchView .res-choice.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue);font-weight:650}
#directorWorkbenchView .res-value-source{display:none}
#directorWorkbenchView .studio-scene{margin-top:12px;padding:0;border:0;background:none;display:flex;flex-direction:column;gap:6px}
#directorWorkbenchView .studio-scene>label{font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .studio-scene textarea{min-height:64px;resize:vertical;font-size:11px}
#directorWorkbenchView .prompt-help{font-size:11px;color:var(--studio-muted);line-height:1.5}
#directorWorkbenchView .legacy-model-options{display:none!important}

/* ---------- 6. 生成摘要（保留真实字段） ---------- */
#directorWorkbenchView .director-brief{position:static;margin-top:20px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}
#directorWorkbenchView .director-brief-head{padding:12px 13px;background:linear-gradient(135deg,rgba(239,246,255,.9),rgba(255,255,255,.7));border-bottom:1px solid var(--studio-line)}
#directorWorkbenchView .director-brief-head .director-eyebrow{font-size:9px;letter-spacing:.16em;color:#475569;font-weight:600}
#directorWorkbenchView .director-brief-head h3{margin:4px 0 3px;font:650 13px/1.3 var(--font-display);color:var(--studio-ink)}
#directorWorkbenchView .director-brief-head p{margin:0;font-size:10px;line-height:1.5;color:var(--studio-muted)}
#directorWorkbenchView .director-brief-body{padding:10px 13px 12px}
#directorWorkbenchView .summary-section{padding:8px 0;border-bottom:1px solid var(--studio-line-soft)}
#directorWorkbenchView .summary-section:last-child{border-bottom:0}
#directorWorkbenchView .summary-label{font-size:9px;color:var(--studio-muted);margin-bottom:3px}
#directorWorkbenchView .summary-value{font-size:11px;font-weight:600;color:var(--studio-ink)}
#directorWorkbenchView .summary-meta{font-size:11px;line-height:1.5;color:var(--studio-muted);margin-top:2px}
#directorWorkbenchView .summary-row{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:var(--studio-muted);padding:2px 0}
#directorWorkbenchView .summary-row span:last-child{color:var(--studio-ink);font-weight:600}
#directorWorkbenchView .summary-estimate{font-size:16px;color:var(--studio-ink)}
#directorWorkbenchView .summary-estimate-section.is-loading .summary-estimate{color:var(--studio-muted)}
#directorWorkbenchView .ready-list{display:flex;flex-direction:column;gap:3px}
#directorWorkbenchView .ready-list span{font-size:10px;color:var(--st-ok-fg)}
#directorWorkbenchView .ready-list span:before{content:"✓";margin-right:5px;color:var(--st-ok-fg)}
#directorWorkbenchView .ready-list span.pending{color:var(--studio-muted)}
#directorWorkbenchView .ready-list span.pending:before{content:"○";color:#cbd5e1}
/* U6（2026-09-22）：商品图未选是「可选、未选」，不是「待完成」——
   pending 的○+灰读作后者，会与同屏「传商品图即可开始」和真实行为（不阻断）都不是一回事。
   故给一个中性档：勾号不变（这条路已了结），只把文字弱化，不制造待办感。 */
#directorWorkbenchView .ready-list span.optional{color:var(--studio-muted)}
#directorWorkbenchView .ready-list span.optional:before{color:#cbd5e1}

/* ---------- 7. 中央 Canvas ---------- */
.studio-canvas{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:radial-gradient(circle at 50% 20%,rgba(255,255,255,.98),rgba(244,247,251,.95) 43%,rgba(232,237,244,.9))}
.studio-canvas:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.3;mix-blend-mode:multiply;background-image:radial-gradient(circle at 1px 1px,rgba(15,23,42,.045) 1px,transparent 0);background-size:18px 18px;-webkit-mask-image:linear-gradient(to bottom,transparent,black 12%,black 84%,transparent);mask-image:linear-gradient(to bottom,transparent,black 12%,black 84%,transparent)}
.studio-canvas-top{position:relative;z-index:2;flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;height:52px;padding:0 22px;border-bottom:1px solid var(--studio-line-soft);background:rgba(255,255,255,.38);backdrop-filter:blur(18px)}
.studio-canvas-top h2{margin:2px 0 0;font:650 16px/normal var(--font-display);color:var(--studio-ink)}
.studio-canvas-subtitle{display:block;margin-top:3px;font-size:10px;color:var(--studio-muted)}
.studio-canvas-top .director-production-order{display:flex;align-items:center;gap:6px;font-size:10px;color:var(--studio-muted);white-space:nowrap}
.studio-canvas-top .director-production-order b{font-size:9px;font-weight:600;color:var(--studio-muted);letter-spacing:.06em}
/* P2：画布内衬逐项对齐原型 `.wb-canvas{padding:18px 22px 24px; gap:14px}`（原为 18px / 18px）。 */
.studio-canvas-body{position:relative;z-index:1;flex:1 1 auto;min-height:0;overflow-y:auto;padding:18px 22px 24px;display:flex;flex-direction:column;gap:14px}
.studio-canvas-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:22px 16px 6px}
.studio-canvas-empty h1{margin:0 0 8px;font:650 23px/1.15 var(--font-display);letter-spacing:-.03em;color:var(--studio-ink)}
.studio-canvas-empty p{margin:0;font-size:12px;color:var(--studio-muted)}
.studio-canvas-empty p b{color:var(--studio-blue);font-weight:600}
/* 原型空态没有宣传大图（`ia-prototype-v1` 里 `hero` / `example-product` 零命中）：原型空态只落在
   画布副标题（`canvasSub = "商品整套图 · 还没开始生成"`），画布主体始终是结果区 + 进度区。
   原 `.studio-hero-card`（min(820px,88%) × 2/1）是常显的，未生成时永久占掉画布约 410px 并把
   结果区推下去 ⇒ 连同 `.studio-hero-overlay` 一并移除。空态引导文案（h1 + p）保留，
   `studio-app.js` 仍向 #studioCanvasEmptyTitle / #studioCanvasEmptyDesc 写文案。
   资产 `example-product.jpg` 不删：face-upload-entry.test.js 与 character-preflight.test.js 拿它当测试图。 */
/* B3（2026-09-19 批次 B）：结果区不再背第二层卡面 —— 回到原型的裸网格。
   原型 `results()` 的结构是 `<div><div class="sec">标题</div><div class="results">网格</div></div>`，
   `.results` 自身**无描边、无圆角、无内衬**，标题直接坐在画布上。
   生产版多包了一层「描边 + r18 + pad14」卡面，把每列从约 146px 压到 136.5px，
   且画布上出现「卡面套卡面」（结果卡自己也有边框）。
   ⚠ 只去卡面，**内衬/padding 一并归零**（否则列宽还是回不到原型值）。
   标题行 `.studio-group-head` 与结果卡自身的样式保持不变 ✗。 */
.studio-canvas-results{border:0;border-radius:0;background:none;padding:0}
.studio-canvas-results .studio-group-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:0 0 10px}
.studio-canvas-results .studio-group-head h2{margin:0;font:650 12px/1.3 var(--studio-font);color:var(--studio-ink)}
.studio-canvas-results .studio-group-head span{font-size:10px;color:var(--studio-muted)}
/* P2-c（2026-09-18 审核补做）：结果网格对齐原型 `.results{repeat(auto-fill,minmax(128px,1fr));gap:10px}`
   —— 原为 `minmax(168px,208px) + justify-content:start`：卡片定宽、右侧留一条无效空白，
   与原型「每行填满」的栅格行为不一致 ✗。
   生产结果卡比原型多两行状态（人工 / 归档），故给状态行加 `min-width:0` + 换行兑底，
   保证 128px 下不溢出（不改任何卡片内部结构）。

   2026-09-23（用户裁定「宽屏别把画布空着」）：**张数 ≥4 时改用 auto-fit**，让实际张数填满整行。
   为什么 ≥4 才换：auto-fill 会为空轨道留位（预留「以后可能更多」），而单批张数是**已知**的
   （默认 4、骨架态固定 4、镜头数 × 倍数，上限 24）⇒ 宽屏上 4 张只占左边一条：
   1920 实测右侧空 571px、2560 空 1188px；更反直觉的是同一批卡片在 1920 比 1440 还小
   （133px < 156px）——屏幕越大卡片反而越小，是 auto-fill 的典型症状。
   auto-fit 折叠空轨道、由实际张数瓜分整宽 ⇒ 空隙归零。轨道数计算两法相同，
   故 1440（4 张＝正好 4 轨道，本无空轨道）与改前**逐像素一致**（实测 156×227 不变），
   差异只出现在 ≥1600。
   为什么 1–3 张**保持** auto-fill：那种状态只出现在部分失败 / 单角度少张，auto-fit 会把
   1 张撑成整宽巨卡（1920 实测 1130×1526，高过可视区、要滚很久才看完一张图）。
   两害相权保留原行为（小卡 + 留白）：不改就是无回归，且它只占少数批次。 */
.studio-canvas-results .studio-result-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:10px}
.studio-canvas-results .studio-result-grid:has(>:nth-child(4)){grid-template-columns:repeat(auto-fit,minmax(128px,1fr))}
.studio-result-card{min-width:0}
.studio-result-status{flex-wrap:wrap;row-gap:2px}
.studio-result-status span{min-width:0;overflow-wrap:anywhere}

/* P2-d（2026-09-18 审核补做）：画布「商品 / 底图 / 参考素材」上下文条（原型 `protoRow`）。
   原型画布的第一块就是它（缩略图 + 名称 + 来源元信息）；生产版此前只有空态与结果区，缺这一块 ✗。
   **只渲染真实存在的上下文**（没传图就不出现），不造占位框 ✗；缩略图用既有图片，不引入新资源 ✗。 */
.studio-canvas-context{flex:none;display:flex;align-items:center;gap:12px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.66);padding:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
.studio-canvas-context[hidden]{display:none!important}
.studio-canvas-context-thumb{width:74px;height:74px;flex:none;border-radius:12px;background:#e2e8f0 center/cover no-repeat;border:1px solid var(--studio-line-soft)}
.studio-canvas-context-copy{min-width:0}
.studio-canvas-context-copy strong{display:block;font-size:13px;font-weight:650;color:var(--studio-ink);overflow-wrap:anywhere}
.studio-canvas-context-copy span{display:block;margin-top:3px;font-size:11px;line-height:1.5;color:var(--studio-muted);overflow-wrap:anywhere}
@media(max-width:520px){.studio-canvas-context-thumb{width:56px;height:56px}}
/* 画布已有真实结果时隐藏空态引导（对齐原型：结果出现即占据画布），结果区撑满可用高度、超出可滚动。 */
.studio-canvas-body:has(#directorResultGrid[data-live="1"]) .studio-canvas-empty{display:none}
.studio-canvas-body:has(#directorResultGrid[data-live="1"]) .studio-canvas-results{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.studio-canvas-body:has(#directorResultGrid[data-live="1"]) .studio-result-grid{overflow-y:auto;align-content:start;padding-right:2px}

/* ---------- 帮助面板（rail 底部入口）与契约抽屉（仅 contract=1 的开发/评审模式） ---------- */
.studio-rail-help{margin-top:auto;width:40px;min-height:44px;border:0;border-radius:var(--studio-r-control);background:transparent;color:var(--studio-muted);font:400 9px/1.15 var(--studio-font);padding:5px 1px;cursor:pointer}
.studio-rail-help:hover{background:rgba(255,255,255,.86);color:var(--studio-ink);box-shadow:var(--studio-sh-control)}
.studio-rail-help span{display:block;font-size:16px;line-height:18px;margin-bottom:3px}
/* F3（2026-09-21）：<small> 默认吃 UA 的 font-size:smaller（0.8333em）—— 父级 9px ⇒ 实测渲染 7.5px，
   是「没人声明字号」型缺陷（原型可见字号档里没有 7.5）。显式声明到原型的 8px 档，不再依赖 UA 缩放。 */
.studio-rail-help small{font-size:8px;line-height:1.2}
.studio-overlay{position:fixed;inset:0;z-index:60;display:none;justify-content:flex-end;background:rgba(15,23,42,.35);backdrop-filter:blur(4px)}
.studio-overlay.show{display:flex}
.studio-overlay-panel{width:min(470px,92vw);height:100%;overflow:auto;background:rgba(248,250,252,.97);padding:20px;box-shadow:-18px 0 50px rgba(15,23,42,.2)}
.studio-overlay-kbd{display:inline-block;border:1px solid var(--studio-line-2);border-radius:8px;background:#fff;padding:1px 6px;font:600 10px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--studio-ink)}
.studio-overlay-head{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:1px solid var(--studio-line);padding-bottom:11px;margin-bottom:14px}
.studio-overlay-head h2{font-size:18px;margin:4px 0;font-weight:650}
.studio-overlay-close{border:0;background:none;font:400 23px/1 var(--studio-font);color:#64748b;cursor:pointer}
.studio-overlay h3{font-size:12px;margin:18px 0 6px;font-weight:650}
.studio-overlay p,.studio-overlay li{font-size:11px;color:var(--studio-muted);line-height:1.7}
.studio-overlay ul{margin:0;padding-left:18px}
.studio-overlay pre{background:#111827;color:#dbeafe;border-radius:12px;padding:12px;white-space:pre-wrap;font:9px/1.55 ui-monospace,SFMono-Regular,monospace;max-height:280px;overflow:auto}
.studio-overlay-row{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid #eef2f7;font-size:11px}
.studio-contract-trigger{position:absolute;right:16px;bottom:16px;z-index:4;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.9);color:var(--studio-blue);font:600 10px/1.2 var(--studio-font);padding:7px 11px;cursor:pointer;box-shadow:var(--studio-sh-control)}
.studio-contract-trigger:hover{background:#fff}
.studio-contract-badge{display:inline-block;margin-left:6px;border-radius:8px;background:var(--studio-blue-soft);color:#2563eb;padding:1px 6px;font:600 9px/1.6 var(--studio-font)}
/* D1-丙（2026-09-19 用户裁定：统一几何、保留虚线↔实线的可点语义）：
   原型的结果卡**两种状态共用一套 `.rcard`**（.pending 只换底纹），所以生成完成时不会换框；
   生产是骨架槽 `.director-result` 与真实卡 `.studio-result-card` 两套 DOM ＋ 两套皮 ⇒ 完成瞬间几何跳变。
   丙只把**几何**对齐原型 `.rcard`（r12 · padding7 · 缩略图 r9），外框语义不动：
   骨架槽保持 dashed（未生成）、真实卡保持 solid ＋ hover ＋ cursor:pointer（可点开批次详情，原型无此交互，属生产增量）。
   padding 8→7：这是原型的值，也是两族系之间跳变的来源（C2 已让比例同为 3:4，此处收掉最后一处高度差）。 */
.studio-canvas-results .director-result{border:2px dashed var(--studio-line-2);border-radius:12px;background:rgba(255,255,255,.72);padding:7px}
/* C2（2026-09-19 用户裁定）：未生成槽位与真实结果卡**同比例**（3:4 · ＝原型 .rcard .img / .pair .img）。
   原实现此处是定高 height:130px、真实结果卡是 aspect-ratio:1 —— 两者不一致，
   生成完成的瞬间卡片高度会跳（骨架槽→真实卡）。两族系同步改为 3:4 后高度一致 ✓。
   height 改为 auto：由 aspect-ratio × 列宽算高（原定高在窄列下会与真实卡不等）。 */
.studio-canvas-results .director-result-img{height:auto;aspect-ratio:3/4;border-radius:9px;background:rgba(226,232,240,.7) center/cover no-repeat}
/* B1（2026-09-19 批次 B）：未生成槽位回到原型的斜纹底。
   原型 `.rcard.pending .img` 用斜纹表达「此处尚未生成」；原实现是纯灰底，
   灰底与「加载中」的视觉语言撞车 —— 用户分不清「还没开始」还是「卡住了」。
   参数逐字取原型：135deg / rgba(241,245,249,.95) 0 9px / rgba(226,232,240,.8) 9px 18px。
   作用域**只限骨架态**（.is-skeleton 由 studio-canvas-results.js 的 skeletonOrPlaceholder 写入），
   真实结果卡走 .studio-result-thumb，不受影响 ✗。 */
.studio-canvas-results .director-result.is-skeleton .director-result-img{
  background:repeating-linear-gradient(135deg,rgba(241,245,249,.95) 0 9px,rgba(226,232,240,.8) 9px 18px);
}
.studio-canvas-results .director-result-meta{display:flex;justify-content:space-between;gap:8px;padding:8px 2px 2px;font-size:10px;color:var(--studio-ink)}
.studio-canvas-results .director-result-meta span{color:var(--studio-muted)}
.studio-canvas-status{position:relative;z-index:2;flex:none;padding:10px 22px 12px;border-top:1px solid var(--studio-line-soft);background:rgba(255,255,255,.66);backdrop-filter:blur(18px)}
.studio-canvas-status .prog{display:none;align-items:center;gap:10px;margin:0 0 8px}
.studio-canvas-status .prog.show{display:flex}
.studio-canvas-status .prog .track{flex:1;height:7px;border-radius:8px;border:0;background:#e2e8f0;overflow:hidden}
.studio-canvas-status .prog .bar{height:100%;width:0;border-radius:8px;background:linear-gradient(90deg,#60a5fa,#2563eb);transition:width .25s linear}
.studio-canvas-status .prog .ptxt{min-width:44px;text-align:right;font:600 10px/1 var(--studio-font);color:var(--studio-muted);font-variant-numeric:tabular-nums}
.studio-canvas-status .log{margin:0;padding:8px 10px;border-radius:10px;background:rgba(241,245,249,.9);border:1px solid var(--studio-line-soft);color:var(--studio-muted);font:10px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;min-height:0;max-height:96px;overflow:auto;white-space:pre-wrap;word-break:break-word}
.studio-canvas-status .log .dim{color:var(--studio-muted)}
.studio-canvas-status .log .err{color:#dc2626}
.studio-canvas-status .generation-queue{display:none;margin-top:8px;padding:8px 10px;border:1px solid var(--studio-line);border-radius:10px;background:rgba(255,255,255,.8);font-size:10px;color:var(--studio-muted)}
.studio-canvas-status .generation-queue.show{display:block}
.studio-canvas-status .generation-queue-title{font-size:9px;color:var(--studio-muted);margin-bottom:5px;letter-spacing:.04em}
.studio-canvas-status .generation-queue-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 0;border-top:1px solid var(--studio-line-soft)}
.studio-canvas-status .generation-queue-row:first-of-type{border-top:0}
.studio-canvas-status .generation-queue-status{color:var(--studio-blue);white-space:nowrap}
.studio-canvas-status .generation-queue-view{border:0;background:none;color:var(--studio-blue);font:600 10px/1.2 var(--studio-font);cursor:pointer;padding:0}
.studio-canvas-status .generation-queue-view:hover{text-decoration:underline}

/* 生产状态单一出口：free 的兼容节点仍保留，但只显示 free 自己的进度、日志和队列。 */
#directorWorkbenchView[data-workbench-mode="free"] .studio-canvas-status>#prog,
#directorWorkbenchView[data-workbench-mode="free"] .studio-canvas-status>#log,
#directorWorkbenchView[data-workbench-mode="free"] .studio-canvas-status>#generationQueue{display:none}
#directorWorkbenchView[data-workbench-mode="free"] .studio-canvas-status>#freeProgressCard{display:flex;flex-direction:column;gap:8px;padding:0;border:0;background:transparent;box-shadow:none}
#directorWorkbenchView[data-workbench-mode="free"] .studio-canvas-status>#freeProgressCard>.summary-label{display:none}
#directorWorkbenchView:not([data-workbench-mode="free"]) .studio-canvas-status>#freeProgressCard[hidden]{display:none}

/* ---------- 8. 自由创作 / 参考图拓展（同壳呈现） ---------- */
#directorWorkbenchView .studio-config-scroll>:is(.free-creation-layout,.reference-extension-layout){display:flex;flex-direction:column;gap:14px;min-width:0;padding:0;border:0;background:transparent}
#directorWorkbenchView .studio-config-scroll>:is(.free-creation-layout,.reference-extension-layout)[hidden]{display:none!important}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card){padding:12px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.66)}
/* B 轮视觉统一（2026-10-06）：本条此前给 free 的 02/03 步**换了一套反向卡面** ——
   灰底 rgba(248,250,252,.72) + 只改 border-color 却不给 border 宽度（author 源的 border-color
   单独存在不会画线）⇒ 实测 bw=0 / r=0 / 无描边，而同屏 01 步是白底描边圆角 ⇒ 一个面板两套卡语言。
   步骤标题同批被压成 --studio-muted（读起来像「不可用步骤」）。
   现并入《工作台步骤卡面》唯一事实源；内层容器统一降为内容布局（下面这条）。 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout) :is(.free-prompt-panel,.reference-extension-prompt-panel,.free-reference-card,.free-settings-card,.reference-extension-card){border:0;border-radius:0;background:transparent;padding:0;box-shadow:none}
/* B 轮视觉统一（2026-10-06）：描述字段的排版已收口到 `.studio-desc-field`（见步骤卡面段落），
   此处原先的三条按 `.free-prompt-panel` / `.reference-extension-prompt-panel` 单独声明的规则已删，
   不再让自由创作·参考图复刻的描述框与 angle·tryon 各管各的。 */
#directorWorkbenchView :is(.free-reference-grid,.reference-extension-grid){display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
#directorWorkbenchView :is(.free-reference-card,.reference-extension-card) h3{margin:0 0 8px;font:650 11px/1.3 var(--studio-font);color:var(--studio-ink)}
/* F3（2026-09-21）：:is(.free-settings-card,.reference-extension-settings-card) h3 原先**没有任何字号/字体族声明** ⇒ 同步吃 UA 的 h3 默认
   （font-size:1.17em ≈ 15.21px、font-weight:bold、衬线族）—— 实测渲染 15.21px/700/Noto Serif SC，
   而同屏同类卡片标题（:is(.free-reference-card,.reference-extension-card) h3）是 11px/650 无衬线 ⇒ 一个视图里两套标题语言。
   这里按同屏先例补齐（11px/650/无衬线），同时消掉字号、字重、字体族三处 UA 泄漏。 */
#directorWorkbenchView :is(.free-settings-card,.reference-extension-settings-card) h3{margin:0 0 8px;font:650 11px/1.3 var(--studio-font);color:var(--studio-ink)}
#directorWorkbenchView :is(.free-reference-card,.reference-extension-card) em{font-style:normal;font-weight:400;font-size:9px;color:var(--studio-muted);margin-left:4px}
#directorWorkbenchView :is(.free-choice,.reference-extension-choice){border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:#fff;color:var(--studio-text);padding:8px 12px;font:400 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorWorkbenchView :is(.free-choice,.reference-extension-choice):hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView :is(.free-choice,.reference-extension-choice).active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue);font-weight:600}
#directorWorkbenchView :is(.free-reference-row,.reference-extension-row){display:flex;flex-wrap:wrap;gap:6px}
#directorWorkbenchView :is(.free-reference-card,.reference-extension-card) select,
#directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid) select,
#directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid) input{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font)}
#directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid){display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
#directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid) label{display:flex;flex-direction:column;gap:5px;font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload){display:block;padding:14px;border:2px dashed var(--studio-line-2);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.56);text-align:center;color:var(--studio-muted);font-size:10px;cursor:pointer;transition:.18s ease}
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload):hover{border-color:var(--studio-blue-line);background:#fff}
/* 视觉隐藏而非 display:none（见 .create-side .drop input 注释）：保住键盘可达。
   本选择器在 .create-side .drop input 那条通用隐藏规则之后，且特异性更高，故一并接管此处的隐藏形态。 */
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload) input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
#directorWorkbenchView :is(.free-reference-status,.reference-extension-status){margin-top:8px;font-size:10px;line-height:1.5;color:var(--studio-muted)}
/* U5（2026-09-22）：张数保存的就地状态（#replicationCountStatus）。三态各自的色只走既有令牌，
   零自造值；失败态额外做成可点（cursor + 可聚焦），因为它的文案里有「点此重试」这句承诺。 */
#directorWorkbenchView :is(.free-reference-status,.reference-extension-status).is-ok{color:var(--st-ok-fg)}
#directorWorkbenchView :is(.free-reference-status,.reference-extension-status).is-error{color:var(--st-err-fg);text-decoration:underline;cursor:pointer}
#directorWorkbenchView :is(.free-reference-status,.reference-extension-status).is-error:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px}
/* R-a（2026-09-18 用户裁定「就近入口」）：上传状态行与分析按钮同行，按钮在右、不增加卡高。 */
#directorWorkbenchView :is(.free-reference-status-row,.reference-extension-status-row){display:flex;align-items:center;justify-content:space-between;gap:10px}
#directorWorkbenchView :is(.free-reference-status-row,.reference-extension-status-row) :is(.free-reference-status,.reference-extension-status){margin-top:8px;min-width:0;overflow-wrap:anywhere}
#directorWorkbenchView #replicationCreationLayout .reference-extension-card{grid-template-columns:minmax(0,1fr)}
#directorWorkbenchView #replicationCreationLayout .reference-extension-card>.guide-chip{width:100%;max-width:100%;min-width:0;box-sizing:border-box}
#directorWorkbenchView #replicationCreationLayout .reference-extension-card>.guide-chip span{min-width:0}
/* 「分析参考图」是复刻模式的必做动作（不分析就走不下去），但**不是**第二个提交按钮 ——
   所以用蓝色描边 + 浅蓝底把自己与旁边的灰色状态文字区分开，同时不抢底部主按钮的权重。
   沿用 :is(.free-choice,.reference-extension-choice) 的尺寸与圆角，只换颜色三项（token 与 :is(.free-choice,.reference-extension-choice).active 同套，非新设计）。 */
#directorWorkbenchView .repl-analyze-action{flex:none;margin-top:8px;border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}
#directorWorkbenchView .repl-analyze-action:disabled{border-color:var(--studio-line);background:rgba(241,245,249,.72);color:var(--studio-muted);cursor:not-allowed}
#directorWorkbenchView .reference-extension-inline-note{padding:10px 12px;border:1px solid var(--studio-blue-line);border-radius:var(--studio-r-control);background:var(--studio-blue-soft);color:var(--studio-blue);font-size:10px;line-height:1.55}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card){display:flex;flex-direction:column;gap:8px}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .summary-label{font-size:9px;color:var(--studio-muted);letter-spacing:.04em}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .prog{display:none;align-items:center;gap:10px}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .prog.show{display:flex}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .track{flex:1;height:7px;border-radius:8px;border:0;background:#e2e8f0;overflow:hidden}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .bar{height:100%;width:0;border-radius:8px;background:linear-gradient(90deg,#60a5fa,#2563eb);transition:width .25s linear}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .ptxt{min-width:44px;text-align:right;font:600 10px/1 var(--studio-font);color:var(--studio-muted)}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .log{margin:0;padding:8px 10px;border-radius:10px;background:var(--studio-placeholder-bg);border:1px solid var(--studio-line-soft);color:var(--studio-muted);font:10px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;min-height:0;max-height:180px;overflow:auto;white-space:pre-wrap;word-break:break-word}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .generation-queue{display:none;padding:8px 10px;border:1px solid var(--studio-line);border-radius:10px;background:rgba(255,255,255,.8);font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .generation-queue.show{display:block}

/* ---------- 9. 窄屏安全降级（桌面优先，1120px 为最小桌面宽度） ---------- */
@media(max-width:1279px){
  #appShell.app-shell{--studio-config-w:352px}
}
@media(max-width:1119px){
  #appShell.app-shell{--studio-config-w:320px}
  .studio-session-hint{display:none}
}
@media(max-width:900px){
  #appShell.app-shell{grid-template-columns:var(--studio-rail-w) minmax(0,1fr);margin:8px;width:calc(100vw - 16px);height:calc(100vh - 16px)}
  .studio-workbench{grid-template-columns:minmax(0,320px) minmax(0,1fr)}
  #directorWorkbenchView .studio-settings-grid,
  #directorWorkbenchView .studio-intent-grid,
  #directorWorkbenchView .studio-shots-panel,
  #directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid){grid-template-columns:minmax(0,1fr)}
}

/* ---------- 10. 中央 Canvas 状态卡（Phase 3） ---------- */
.studio-canvas-status .studio-status-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:8px}
.studio-canvas-status .studio-status-title{font-size:10px;font-weight:650;color:var(--studio-muted);letter-spacing:.04em}
.studio-canvas-status .studio-status-hint{font-size:11px;color:var(--studio-muted)}
/* 失败 / 供应商待确认：日志出现错误行时，状态卡整体转为警示态（只改呈现，不改文案来源） */
.studio-canvas-status:has(.log .err){background:rgba(254,242,242,.92);border-top-color:rgba(248,113,113,.45)}
.studio-canvas-status:has(.log .err) .studio-status-title{color:#b91c1c}
/* 任务进行中：空态示例让位给状态卡 */
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-canvas-empty{display:none}
/* 生成态：底部状态条切换成原型式的居中任务卡。
   触发条件只用 #prog.show：startProgress 仅在「当前焦点任务真正开始生成」时置位（唯一调用点），
   stopProgress 在完成/失败后自动收回。反例：不能用 #generationQueue.show —— activeGenerationTasks
   在页面生命周期内从不清理，出图完成后队列仍带 .show，大卡会永久压住画布（结果区被 dim 且
   pointer-events:none，批次 3 的画布结果卡点不动）。也不要用 :has() 嵌套判定队列行状态：
   CSS 规范禁止 :has() 内嵌 :has()，整条规则会被浏览器丢弃。
   触发只用既有 class（#prog.show / #generationQueue.show）——零 JS；
   #prog / #progBar / #progTxt / #log / #generationQueue 及其层级一个都没动，
   所以主脚本、状态机与相关测试完全不受影响。 */
.studio-task-loader{display:none;justify-content:center;gap:7px;margin-bottom:16px}
.studio-task-loader i{width:9px;height:9px;border-radius:50%;background:var(--studio-blue);animation:studio-task-pulse 1.2s infinite ease-in-out}
.studio-task-loader i:nth-child(2){animation-delay:.15s}
.studio-task-loader i:nth-child(3){animation-delay:.3s}
@keyframes studio-task-pulse{0%,80%,100%{opacity:.25;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){.studio-task-loader i{animation:none;opacity:.85}}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-canvas-status{
  position:absolute;inset:52px 0 0;margin:auto;z-index:3;
  width:min(560px,88%);height:max-content;max-height:calc(100% - 72px);overflow:auto;
  padding:27px;text-align:center;
  border:1px solid rgba(255,255,255,.94);border-radius:22px;
  background:rgba(255,255,255,.74);backdrop-filter:blur(22px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 20px 55px rgba(15,23,42,.14);
}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-task-loader{display:flex}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-status-head{flex-direction:column;align-items:center;gap:5px;text-align:center;margin-bottom:16px}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-status-title{font-size:20px;font-weight:650;color:var(--studio-ink);letter-spacing:-.01em}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-status-hint{font-size:11px;color:var(--studio-muted)}
/* U3（2026-09-23）· 空闲态：把日志框的终端外观（深色内衬 + 等宽字体 + `# 等待指令…`）收成一行中性说明。
   为什么：空闲时它读起来像「任务已经在跑，卡在这一行」；而那行字恰恰是「还没有任何指令」。
   事实源与其它空闲态规则**完全同款**（#prog.show 未起 + 无真实结果），不新增状态位。
   离开空闲即自动还原既有样式 —— 生成期与失败态（.log .err）的既有规则一条不动。 */
.studio-canvas:not(:has(.studio-canvas-status .prog.show)):not(:has(#directorResultGrid[data-live="1"])) .studio-canvas-status .log{
  background:transparent;border:0;padding:2px 0;font-family:var(--studio-font);font-size:10px;
}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-canvas-status .log{text-align:left;margin-top:10px}
.studio-canvas:has(.studio-canvas-status .prog.show) .studio-canvas-results{opacity:.4;filter:saturate(.6) blur(1px);pointer-events:none}

/* 失败态逃生口：日志出现 .err 时不再占据画布中央，收回底部细条并由既有红调规则接管
   （失败后卡片一直悬在中央会比原来的细条更烦人；这里只改呈现，不动任何状态）。 */
.studio-canvas:has(.studio-canvas-status .log .err) .studio-canvas-status{
  position:relative;inset:auto;margin:0;width:auto;height:auto;max-height:none;
  text-align:left;padding:10px 16px 12px;border-radius:0;border:0;border-top:1px solid rgba(248,113,113,.45);
  background:rgba(254,242,242,.92);backdrop-filter:blur(18px);box-shadow:none;
}
.studio-canvas:has(.studio-canvas-status .log .err) .studio-task-loader{display:none}
.studio-canvas:has(.studio-canvas-status .log .err) .studio-status-head{flex-direction:row;align-items:baseline;justify-content:space-between;text-align:left;margin-bottom:8px}
.studio-canvas:has(.studio-canvas-status .log .err) .studio-status-title{font-size:10px;font-weight:650;color:#b91c1c;letter-spacing:.04em}
.studio-canvas:has(.studio-canvas-status .log .err) .studio-status-hint{font-size:11px;color:var(--studio-muted)}
.studio-canvas:has(.studio-canvas-status .log .err) .studio-canvas-results{opacity:1;filter:none;pointer-events:auto}

/* ---------- 画布内结果卡：与原型的 result-card 对齐（QA 徽章 + 人工/归档三状态行） ----------
   内容由独立脚本 studio-canvas-results 渲染，走既有画廊接口；
   这里只定义呈现，不引入新的业务字段。 */
/* D1-丙（2026-09-19 用户裁定）：真实结果卡的**几何**对齐原型 `.rcard` —— 内衬 5px→7px、圆角 14px→12px。
   与骨架槽（`#directorResultGrid .director-result`）现在同几何 ⇒ 生成完成时不再「换框」。
   **保留**的语义（原型的 .rcard 没有这层，属生产增量，丙明确不动）：solid 外框 ＋ hover 上浮 ＋ cursor:pointer
   —— card 由 studio-canvas-results.js 绑 click 打开批次详情（搜 card.addEventListener），「可点」必须在视觉上可读。
   C2 的比例（3:4）已把两族系拉齐，本条收掉最后一处几何差。 */
.studio-result-card{position:relative;border:1px solid var(--studio-line-soft);border-radius:12px;background:rgba(255,255,255,.9);padding:7px;box-shadow:var(--studio-sh-control);transition:.2s ease}
.studio-result-card:hover{transform:translateY(-2px);box-shadow:0 12px 25px rgba(15,23,42,.12)}
/* C2（2026-09-19 用户裁定）：结果卡比例 1:1 → 3:4（＝原型 .rcard .img / .pair .img 两处都是 3:4）。
   理由不只是好看：默认出图比例就是 3:4 竖版，而缩略图是 object-fit:cover（裁切填满）
   ⇒ 方形框会把每张成片**左右各裁掉约 25%**。而验收动作（采用/打回）恰恰就在这块区域做，
   属于「看得见多少」的问题。改的是比例值本身，object-fit 与其余规则不动 ✗。 */
/* D1-丙：缩略图圆角 10px→9px（＝原型 `.rcard .img{border-radius:9px}`），与骨架槽的 .director-result-img 同值。
   两族系的「图 ↔ 框」内缩关系至此完全一致。 */
.studio-result-thumb{position:relative;aspect-ratio:3/4;border-radius:9px;overflow:hidden;background:#e2e8f0}
.studio-result-thumb img{width:100%;height:100%;object-fit:cover;display:block}
/* D4（2026-09-19 用户裁定，照批次 B1 现成参数）：换装对照「生成中」侧补斜纹底。
   原型在**两处**用同一套斜纹表达「此处尚未有图」：`.rcard.pending .img`（未生成槽位，＝批次 B1 已做）
   与 `.half.rcard.pending`（换装对照的生成中侧，＝本条）。
   生产原先只有「加载中…」文字、底是纯灰 #e2e8f0 —— 灰色与「图片本身是灰的」撞车，
   用户分不清「还没好」还是「图就是这样」。斜纹是原型对此的确定性语义。
   参数逐字取原型 `.rcard.pending .img`：135deg / rgba(241,245,249,.95) 0 9px / rgba(226,232,240,.8) 9px 18px。
   作用域：`.is-pending` 全仓**只有一处使用**（studio-canvas-results.js 的 .studio-result-thumb 左侧缩略图），
   且图加载出来即 remove('is-pending')（L19/L21）—— 斜纹只在「图还没到」期间出现 ✓。
   「加载中…」文字层保留（生产增量：比原型的空块更准确），叠在浅斜纹上不影响可读性。 */
.studio-result-thumb.is-pending{background:repeating-linear-gradient(135deg,rgba(241,245,249,.95) 0 9px,rgba(226,232,240,.8) 9px 18px)}
.studio-result-thumb.is-pending::after{content:"加载中…";position:absolute;inset:0;display:grid;place-items:center;color:var(--studio-muted);font-size:9px}
.studio-result-meta{padding:7px 5px 3px}
.studio-result-meta strong{display:block;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.studio-result-meta small{display:block;color:var(--studio-muted);font-size:8px;margin-top:2px}
.studio-result-status{display:flex;justify-content:space-between;gap:6px;border-top:1px solid #eef2f7;margin-top:5px;padding-top:5px;color:var(--studio-muted);font-size:8px}
.studio-result-status b{color:var(--st-ok-fg);font-weight:600}
.studio-result-status b.warn{color:var(--st-wait-fg)}
.studio-result-status b.err{color:var(--st-err-fg)}

/* 生成卡的四格元信息（状态 / 队列位次 / 进度 / 扣费）：只在生成态卡片里出现，
   由独立脚本 studio-task-meta 依据 /api/tasks/:id/status 渲染。 */
.studio-task-meta{display:none;grid-template-columns:repeat(4,1fr);gap:6px;text-align:left;margin:0 0 10px}
.studio-task-meta div{padding:8px;border-radius:10px;background:rgba(241,245,249,.85)}
.studio-task-meta label{display:block;color:var(--studio-muted);font-size:8px}
.studio-task-meta b{display:block;margin-top:2px;font:600 10px/1.3 var(--studio-font);font-variant-numeric:tabular-nums}
.studio-canvas:has(.studio-canvas-status .prog.show):not(:has(.studio-canvas-status .log .err)) .studio-task-meta{display:grid}

/* ---------- 11. 成片画廊（Phase 4） ---------- */
#appShell.app-shell.director-mode>.director-main{padding:0;max-width:none;margin:0}
/* A′（2026-09-22）：资产中心原为 `padding:20px 22px 26px` ⇒ 内容列 1312px，是四屏里唯一
   没有限宽机制的。收到与另三屏同一条原型规则（1240 内容列）。
   纵向 20/26 保持不动 —— 本轮只收正文宽度，不改纵向节奏。 */
#directorGalleryView{padding:20px max(30px,calc((100% - 1240px)/2)) 26px;height:100%;overflow-y:auto;box-sizing:border-box;font-family:var(--studio-font)}
#directorPlanningView{padding:28px 30px 34px;height:100%;overflow-y:auto;box-sizing:border-box}
#directorGalleryView .director-gallery-top{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;border-bottom:1px solid var(--studio-line);padding-bottom:0;margin-bottom:16px} /* 区域头统一化：pb 14→0（对齐原型）*/
#directorGalleryView .director-eyebrow{font-size:9px;letter-spacing:.16em;color:var(--studio-muted);font-weight:600}
/* 2026-09-19 字距对齐原型：原型 .page-head h1{letter-spacing:-.01em}（23px ⇒ -0.23px），
   四区页面头共用这一条规则；本仓三处页面头（资产/灵感/设置）原为 -.02em（-0.46px）。
   改 -.01em 后三个区与原型逐值一致，且三者之间仍互相一致（未破坏统一性）。
   ⚠ 工作台的 #studioCanvasEmptyTitle 是**空态标题**（非页面头），原型该区根本没有页面头（首元素是 h2 画布标题）
   ⇒ 它不属于页面头族，本次不动（仍 -.03em）。 */
#directorGalleryView h1{margin:6px 0 0;font:650 23px/1.2 var(--font-display);letter-spacing:-.01em;color:var(--studio-ink)}
#directorGalleryView .director-gallery-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end}
#directorGalleryView .director-gallery-actions select{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.85);color:var(--studio-text);padding:7px 9px;font:11px/1.2 var(--studio-font);box-shadow:var(--studio-sh-control)}
#directorGalleryView .director-filter{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:#4b5563;padding:7px 11px;font:600 11px/1.2 var(--studio-font);cursor:pointer;box-shadow:inset 0 1px 0 rgba(255,255,255,.9);transition:.18s}
#directorGalleryView .director-filter:hover{background:#fff;box-shadow:var(--studio-sh-control)}
/* 资产中心二选一（P2 过渡，P4 换正式四区 tab）。
   注意：两个承载容器各一份（#directorGalleryView 与 #screen-accounts），
   所以用类选择器而不是 #id 作用域，否则其中一份会退回浏览器默认按钮样式。 */
.director-asset-switch{display:flex;gap:6px;margin-top:10px}
.director-asset-switch .director-filter{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:#4b5563;padding:7px 11px;font:600 11px/1.2 var(--studio-font);cursor:pointer;box-shadow:inset 0 1px 0 rgba(255,255,255,.9);transition:.18s}
.director-asset-switch .director-filter:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.director-asset-switch .director-filter[aria-selected="true"]{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue)}
#directorGalleryView .director-summary{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px}
#directorGalleryView .director-summary-chip{display:flex;align-items:baseline;gap:7px;padding:9px 13px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}
#directorGalleryView .director-summary-chip b{font:650 16px/1 var(--studio-font);color:var(--studio-ink)}   /* A4：17→16（汇总计数；实测本屏 2 个元素） */
#directorGalleryView .director-summary-chip span{font-size:10px;color:var(--studio-muted)}
#directorGalleryView .gallery-archived-all{background:#ecfdf5;border-color:rgba(16,185,129,.3);color:#047857}
#directorGalleryView .gallery-failure-notice{padding:9px 12px;border:1px solid rgba(248,113,113,.35);border-radius:var(--studio-r-control);background:#fef2f2;color:#b91c1c;font-size:10px;line-height:1.6;margin-bottom:14px}
#directorGalleryView .gallery-lifecycle-notice{padding:9px 12px;border:1px solid rgba(96,165,250,.28);border-radius:var(--studio-r-control);background:var(--studio-blue-soft);color:#3973bd;font-size:10px;line-height:1.6;margin-bottom:14px}
#directorGalleryView .director-gallery-layout{display:grid;grid-template-columns:minmax(0,1fr) 296px;gap:18px;align-items:start}
#directorGalleryView .director-gallery-layout>section{min-width:0}
#directorGalleryView .director-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(196px,1fr));gap:14px}
/* C 批 L8-B：成片按批次分段的段首（跨列；仅「全部批次」模式下由 JS 插入）。
   卡片本身仍是 .director-gallery-grid 的直接子节点，布局列定义无需改动。 */
#galleryReal>.gallery-batch-head{grid-column:1/-1;display:flex;align-items:baseline;gap:10px;min-width:0;padding:0 0 6px;margin-top:2px;border-bottom:1px solid var(--studio-line)}
#galleryReal>.gallery-batch-head b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:650 12px/1.4 var(--studio-font);color:var(--studio-ink)}
#galleryReal>.gallery-batch-head small{white-space:nowrap;font-size:10px;color:var(--studio-muted)}
/* T1（2026-09-18 用户勾选）：卡片圆角归一到面板令牌 18px（与商品资产卡一致 ✓、与原型 --r-panel 同值 ✓）。
   原先这里硬写 12px（控件令牌的值）—— 卡片跟控件用了两个尺度，属不一致 ✗。 */
#directorGalleryView .director-gallery-card{position:relative;min-width:0;padding:4px;border:1px solid rgba(255,255,255,.95);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84);box-shadow:0 1px 2px rgba(15,23,42,.05);transition:.2s ease;overflow:hidden}
#directorGalleryView .director-gallery-card:hover{transform:translateY(-2px);box-shadow:0 12px 25px rgba(15,23,42,.12)}
#directorGalleryView .director-gallery-card.is-accepted{border-color:rgba(16,185,129,.45);box-shadow:inset 0 0 0 1px rgba(16,185,129,.28)}
#directorGalleryView .director-gallery-card.is-rejected{opacity:.7}
#directorGalleryView .director-gallery-image{position:relative;aspect-ratio:3/4;border-radius:9px;background:rgba(226,232,240,.7) center/cover no-repeat;cursor:zoom-in;overflow:hidden}
#directorGalleryView .director-gallery-image:focus-visible{outline:2px solid var(--studio-blue);outline-offset:-3px}
#directorGalleryView .director-gallery-status{position:absolute;z-index:2;top:8px;left:8px;padding:4px 7px;border-radius:8px;background:rgba(239,246,255,.94);color:#3973bd;font:600 9px/1.2 var(--studio-font);box-shadow:0 1px 2px rgba(15,23,42,.08)}
#directorGalleryView .director-gallery-status.review{background:rgba(255,247,237,.95);color:#b45309}
#directorGalleryView .director-gallery-archive{position:absolute;z-index:2;right:8px;bottom:8px;padding:3px 6px;border-radius:8px;background:rgba(255,255,255,.92);color:#4f8b67;font-size:9px;box-shadow:0 1px 2px rgba(15,23,42,.08)}
#directorGalleryView .director-gallery-archive.archive-failed{color:#c66a32}
#directorGalleryView .director-gallery-archive.archive-rejected{color:var(--studio-muted)}
#directorGalleryView .generation-failed-preview{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:rgba(241,245,249,.85)!important}
#directorGalleryView .generation-failed-preview strong{font-size:11px;color:var(--studio-ink)}
#directorGalleryView .generation-failed-preview span{font-size:11px;color:#5b6472}
#directorGalleryView .gallery-zoom-control{position:absolute;z-index:3;right:8px;top:8px;width:26px;height:26px;border:1px solid rgba(255,255,255,.85);border-radius:8px;background:rgba(255,255,255,.86);color:#475569;font-size:12px;line-height:1;cursor:pointer;opacity:0;transition:.18s ease}
#directorGalleryView .director-gallery-card:hover .gallery-zoom-control,
#directorGalleryView .director-gallery-image:focus-visible .gallery-zoom-control{opacity:1}
#directorGalleryView .director-gallery-meta{display:block;padding:9px 6px 4px}
#directorGalleryView .director-gallery-meta b{display:block;font-size:10px;font-weight:650;color:var(--studio-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#directorGalleryView .director-gallery-meta small{display:block;margin-top:3px;font-size:9px;line-height:1.5;color:var(--studio-muted)}
#directorGalleryView .director-gallery-foot{display:flex;flex-wrap:wrap;gap:5px;padding:6px 4px 4px}
#directorGalleryView .director-gallery-foot button{flex:1 1 62px;min-width:62px;white-space:nowrap;border:1px solid var(--studio-line);border-radius:9px;background:rgba(241,245,249,.8);color:#334155;padding:6px 4px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorGalleryView .director-gallery-foot button:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorGalleryView .director-gallery-foot button:disabled{opacity:.6;cursor:not-allowed}
#directorGalleryView .gallery-card-action-primary{background:linear-gradient(135deg,#111827,#071022)!important;color:#fff!important;border-color:transparent!important}
#directorGalleryView .gallery-card-action-secondary{background:rgba(241,245,249,.8)!important;color:#334155!important}
#directorGalleryView .gallery-card-action-primary:hover:not(:disabled){filter:brightness(1.15);box-shadow:var(--studio-sh-control)}
#directorGalleryView .gallery-card-action-primary:active:not(:disabled){transform:translateY(1px) scale(.985)}
#directorGalleryView .gallery-card-action-primary:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}
#directorGalleryView .director-qa{position:sticky;top:0;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}
#directorGalleryView .director-qa-head{padding:14px;background:linear-gradient(135deg,rgba(239,246,255,.9),rgba(255,255,255,.7));border-bottom:1px solid var(--studio-line)}
#directorGalleryView .director-qa-head h3{margin:4px 0;font:650 14px/1.3 var(--font-display);color:var(--studio-ink)}
#directorGalleryView .director-qa-head p{margin:0;font-size:10px;line-height:1.55;color:var(--studio-muted)}
#directorGalleryView .director-qa-body{padding:12px 14px 14px}
#directorGalleryView .qa-block label{display:block;font-size:9px;color:var(--studio-muted);margin-bottom:3px}
#directorGalleryView .qa-block strong{font-size:11px;color:var(--studio-ink)}
#directorGalleryView .director-cta{width:100%;margin-top:12px;height:36px;border:0;border-radius:var(--studio-r-control);background:linear-gradient(135deg,#111827,#071022);color:#fff;font:650 11px/1 var(--studio-font);cursor:pointer;transition:.18s}
#directorGalleryView .director-cta:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 20px rgba(15,23,42,.18)}
#directorGalleryView .director-cta:disabled{background:#cbd5e1;color:#64748b;cursor:not-allowed}
#directorGalleryView .empty-gallery{grid-column:1/-1;padding:44px 20px;border:1px dashed var(--studio-line-2);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.6);text-align:center;color:var(--studio-muted);font-size:11px}

/* ---------- 12. 单张验收灯箱（Phase 4） ---------- */
.director-review-mask{background:rgba(15,23,42,.66);backdrop-filter:blur(8px)}
/* ⚠️ 2026-09-22 修复：灯箱内二次弹层必须浮在灯箱(90)之上。
   事故：f29e09f0 把「点验收后关闭灯箱」去掉（灯箱改作连续验收工作面），但被它临时掩盖的
   层级冲突没同步处理 —— 待复核的备注输入框、参考图拓展重试的微调框、重试报价确认框
   都还停在旧壳层 .mask(60)，被灯箱整个盖住。真实页面实测：elementFromPoint 命中
   directorReviewImage，弹层按钮点不到 ⇒ 「待复核」功能死路。
   判据同抽屉那次（见「抽屉在 #appShell>main 内」那条）：三者与灯箱是 body 内同层的兄弟节点、祖先无 transform/opacity
   ⇒ 同在根层叠上下文，直接比数值。
   ⚠️ 不动 .mask 的 60：那是 6 个旧壳弹层共用的层（discMask/dnaMask/…），属跨模块。
      故只给「会在灯箱内被打开」的这两个 id 单独提档到 92（高于 90、低于 94/95）。 */
#askTextMask,
#replicationRetryConfirmMask{z-index:var(--ui-overlay-modal)}
.director-review-panel{border-radius:18px;background:#fff;box-shadow:0 28px 70px rgba(0,0,0,.35);grid-template-columns:minmax(0,1fr) 200px}
.director-review-image{background:#1e2530}
.director-review-pager{border:0;border-radius:10px;background:rgba(15,23,42,.65);color:#fff;box-shadow:0 4px 14px rgba(0,0,0,.25);transition:.18s}
.director-review-pager:hover{background:rgba(15,23,42,.85)}
.director-review-counter{position:absolute;left:14px;right:auto;bottom:14px;transform:none;padding:4px 9px;border-radius:8px;background:rgba(15,23,42,.62);color:#e2e8f0;font:600 10px/1.2 var(--studio-font);letter-spacing:.02em}
/* 2026-10-02 UX 优化第二轮方向三：验收按钮底部浮层 */
.director-review-actions-float{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);display:flex;gap:8px;padding:8px 12px;background:rgba(15,23,42,.72);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:12px;z-index:5;transition:opacity .2s}
.director-review-actions-float button{padding:8px 18px;border:0;border-radius:8px;font:600 12px/1 var(--studio-font);cursor:pointer;white-space:nowrap;background:rgba(255,255,255,.15);color:#fff}
.director-review-actions-float button:hover{background:rgba(255,255,255,.25)}
.director-review-actions-float .primary{background:#fff;color:#111827}
.director-review-actions-float .primary:hover{background:#f1f5f9}
.director-review-actions-float .is-danger{background:rgba(239,68,68,.9);color:#fff}
.director-review-actions-float .is-danger:hover{background:rgba(239,68,68,1)}
.director-review-actions-float .gallery-review-more{position:relative}
.director-review-actions-float .gallery-review-more summary{list-style:none;cursor:pointer;padding:8px 14px;border-radius:8px;background:rgba(255,255,255,.15);color:#fff;font:600 12px/1 var(--studio-font)}
.director-review-actions-float .gallery-review-more summary::-webkit-details-marker{display:none}
.director-review-actions-float .gallery-review-more-body{position:absolute;bottom:calc(100% + 8px);right:0;min-width:140px;padding:6px;background:rgba(15,23,42,.95);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.3)}
.director-review-actions-float .gallery-review-more-body button{display:block;width:100%;text-align:left;padding:7px 10px;background:none;color:#e2e8f0;font:400 11px/1.3 var(--studio-font);border-radius:7px}
.director-review-actions-float .gallery-review-more-body button:hover{background:rgba(255,255,255,.1)}
.director-review-actions-float .gallery-review-more-body .is-danger{color:#fca5a5}
.director-review-actions-float:empty{display:none}
.director-review-content{background:#fff;padding:16px 16px 18px;overflow-y:auto}
.director-review-content .director-eyebrow{color:#64748b}
.director-review-content h3{margin:5px 0 10px;font:650 16px/1.3 var(--font-display);color:var(--studio-ink)}
.director-review-content .close{top:14px;right:14px;width:28px;height:28px;border:1px solid var(--studio-line);border-radius:9px;background:rgba(255,255,255,.9);color:#64748b;font-size:16px;line-height:1;cursor:pointer}
.director-review-content .close:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.director-review-actions{display:grid;gap:7px;margin-top:14px}
.director-review-actions button{border:1px solid var(--studio-line);border-radius:10px;background:#f8fafc;color:#334155;padding:9px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s}
.director-review-actions button:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.director-review-actions button.primary{background:linear-gradient(135deg,#111827,#071022);color:#fff;border-color:transparent}
/* ---------- 12b. 单张验收灯箱：图片查看（2026-09-22 P0，用户裁定） ----------
   用户反馈：「点进大图看不到全貌，也不能上下滑动」。根因是**级联**，不是尺寸不够：
     · 本来声明了 `background:var(--studio-placeholder-bg) center/contain no-repeat`（意图＝完整显示整张）；
     · 但 .director-review-image 那条的 `background:#1e2530` 是 **shorthand**，它把 background-size 重置回 auto
       ⇒ 图按原图像素尺寸铺开，被 `.director-review-panel{overflow:hidden}` 裁掉；
     · 而整条链路里**没有任何可滚动容器** ⇒ 长图只能看到一角，且无从操作。
   （这就是「1618 条测试全绿也照样发生」的那类缺陷：规则都在，计算值错了。）
   修法（用户裁定）：换成真实 <img> + 默认完整显示 + 独立原图滚动区 + 加载/失败状态。
   为什么必须是 <img> 而不是继续用背景图：背景图拿不到 naturalWidth（判不出「原图多大」）、
   没有加载/失败语义、也不参与无障碍 —— 三件事都做不了。
   ⚠️ 不要再给 .director-review-image 设 background-image：那条 shorthand 覆盖陷阱会原样复现。 */
.director-review-canvas{position:absolute;inset:0;overflow:auto;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);place-items:center;padding:18px}
.director-review-canvas:focus-visible{outline:2px solid var(--studio-blue);outline-offset:-3px}
/* 默认＝适配窗口：完整显示整张，不裁切（用户要求的首屏低门槛状态）。
   ⚠️ 上面 `grid-template-rows:minmax(0,1fr)` 不是装饰：没有**确定尺寸的轨道**时，
   网格项的 `max-height:100%` 百分比无从解析（轨道是 auto ⇒ 随内容长），
   高度约束会整个失效 —— 真机实测：1600×2400（本产品默认的 3:4 竖图）
   在 746px 高的图片区里渲染成 986×1478，**照样看不全**，与本次要修的问题同形。
   横图会侥幸通过（宽度先被 max-width 夹住，高度随之变矮），所以只测横图发现不了。
   1fr 在滚动容器里按容器自身尺寸解析 ⇒ 轨道确定 ⇒ 百分比生效；图片超出时由
   minmax 的 0 下限兜住，不会把轨道撑大（撑大由下面「原图档」显式接管）。 */
.director-review-photo{display:block;max-width:100%;max-height:100%;object-fit:contain;user-select:none;-webkit-user-drag:none}
/* 原图模式：取消尺寸限制 ⇒ 超出即由 .director-review-canvas 独立滚动。
   同时把居中改为 start —— 居中的溢出让左上角变成**不可达溢出**（滚动条到不了），
   这不是审美取舍，是可见区域的正确性。轨道改回 auto，否则 1fr 会把图钉在容器高度上。 */
.director-review-image[data-photo-mode="actual"] .director-review-canvas{grid-template-rows:auto;place-items:start}
.director-review-image[data-photo-mode="actual"] .director-review-photo{max-width:none;max-height:none}
.director-review-photo[hidden],.director-review-photo-state[hidden]{display:none}
.director-review-photo-state{position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:24px;text-align:center;color:#cbd5e1;font:600 12px/1.6 var(--studio-font);pointer-events:none}
.director-review-photo-state span{max-width:32ch}
.director-review-photo-retry{pointer-events:auto;min-height:30px;padding:0 14px;border:1px solid var(--studio-blue-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.94);color:#1d4ed8;font:600 11px/1.2 var(--studio-font);cursor:pointer}
.director-review-photo-retry:hover{background:#fff;border-color:rgba(59,130,246,.55)}
#directorReviewBody{display:grid;gap:10px}
#directorReviewBody .gallery-review-status-line{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--studio-line-soft)}
#directorReviewBody .gallery-review-status{display:inline-flex;align-items:center;min-height:24px;padding:0 8px;border:1px solid var(--studio-line);border-radius:8px;background:#f8fafc;color:var(--studio-muted);font:650 11px/1.2 var(--studio-font)}
#directorReviewBody .gallery-review-status.is-ok{background:var(--st-ok-bg);border-color:var(--st-ok-bd);color:var(--st-ok-fg)}
#directorReviewBody .gallery-review-status.is-warn{background:var(--st-wait-bg);border-color:var(--st-wait-bd);color:var(--st-wait-fg)}
#directorReviewBody .gallery-review-status.is-error{background:var(--st-err-bg);border-color:var(--st-err-bd);color:var(--st-err-fg)}
#directorReviewBody .gallery-review-human{font-size:11px;color:var(--studio-ink)}
#directorReviewBody .gallery-review-delivery{padding:8px 10px;border:1px solid var(--studio-line-soft);border-radius:9px;background:#f8fafc;color:var(--studio-muted);font-size:11px;line-height:1.5}
#directorReviewBody .gallery-review-evidence{border:1px solid var(--studio-line);border-radius:9px;background:#fff}
#directorReviewBody .gallery-review-evidence summary{padding:9px 10px;color:var(--studio-ink);font:600 11px/1.2 var(--studio-font);cursor:pointer;list-style:none}
#directorReviewBody .gallery-review-evidence summary::-webkit-details-marker{display:none}
#directorReviewBody .gallery-review-evidence summary::after{content:'⌄';float:right;color:var(--studio-muted);transition:.18s}
#directorReviewBody .gallery-review-evidence[open] summary::after{transform:rotate(180deg)}
#directorReviewBody .gallery-review-evidence-body{display:grid;gap:7px;padding:0 10px 10px;border-top:1px solid var(--studio-line-soft)}
#directorReviewBody .gallery-review-evidence-row{display:grid;grid-template-columns:68px minmax(0,1fr);gap:8px;padding-top:7px;font-size:11px;line-height:1.5}
#directorReviewBody .gallery-review-evidence-row b{color:var(--studio-muted);font-weight:600}
#directorReviewBody .gallery-review-evidence-row span{min-width:0;color:var(--studio-ink);word-break:break-word}
#directorReviewBody .gallery-review-evidence-empty{padding-top:8px;color:var(--studio-muted);font-size:11px}
#directorReviewActions .gallery-review-more{display:block}
#directorReviewActions .gallery-review-more summary{min-height:34px;padding:0 9px;border:1px solid var(--studio-line);border-radius:10px;background:#f8fafc;color:#334155;font:600 11px/34px var(--studio-font);cursor:pointer;list-style:none;text-align:center}
#directorReviewActions .gallery-review-more summary::-webkit-details-marker{display:none}
#directorReviewActions .gallery-review-more summary::after{content:'⌄';margin-left:5px;color:var(--studio-muted)}
#directorReviewActions .gallery-review-more[open] summary::after{content:'⌃'}
#directorReviewActions .gallery-review-more-body{display:grid;gap:7px;margin-top:7px}
#directorReviewActions .gallery-review-more-item{width:100%}
#directorReviewActions .gallery-review-more-item.is-danger{border-color:var(--st-err-bd);background:#fff;color:var(--st-err-fg)}
#directorReviewActions .gallery-review-more-item.is-danger:hover{background:var(--st-err-bg)}

/* ---------- 13. 生成记录浮层（Phase 5 / 方案 §9.1） ---------- */
.studio-history-pop{position:absolute;z-index:40;top:calc(var(--studio-toolbar-h) + 6px);right:14px;width:340px;max-height:min(560px,calc(100% - var(--studio-toolbar-h) - 24px));display:flex;flex-direction:column;border:1px solid rgba(148,163,184,.28);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.94);backdrop-filter:blur(22px);box-shadow:0 20px 55px rgba(15,23,42,.22);overflow:hidden;font-family:var(--studio-font)}
.studio-history-pop[hidden]{display:none!important}
.studio-history-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:13px 14px;border-bottom:1px solid var(--studio-line)}
.studio-history-head strong{display:block;font-size:12px;font-weight:650;color:var(--studio-ink)}
.studio-history-head span{display:block;margin-top:2px;font-size:9px;color:var(--studio-muted)}
.studio-history-close{width:24px;height:24px;flex:none;border:1px solid var(--studio-line);border-radius:8px;background:rgba(255,255,255,.9);color:#64748b;font-size:14px;line-height:1;cursor:pointer}
.studio-history-close:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.studio-history-filter{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:10px 14px 8px}
.studio-history-filter button{border:1px solid var(--studio-line);border-radius:9px;background:rgba(241,245,249,.72);color:var(--studio-muted);padding:6px 4px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s}
.studio-history-filter button:hover{background:#fff;color:var(--studio-text)}
.studio-history-filter button.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}
.studio-history-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:0 14px 10px;display:flex;flex-direction:column;gap:6px}
.studio-history-row{display:flex;align-items:center;gap:8px;width:100%;padding:8px 9px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);cursor:pointer;text-align:left;transition:.18s;font-family:inherit}
.studio-history-row:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.studio-history-main{flex:1;min-width:0}
.studio-history-main b{display:block;font-size:10px;font-weight:600;color:var(--studio-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.studio-history-main small{display:block;margin-top:2px;font-size:9px;color:var(--studio-muted)}
.studio-history-pill{flex:none;padding:3px 7px;border-radius:8px;background:#eef2f7;color:#64748b;font-size:9px;font-weight:600;white-space:nowrap}
.studio-history-pill.active{background:var(--studio-blue-soft);color:var(--studio-blue)}
.studio-history-pill.done{background:#ecfdf5;color:#047857}
.studio-history-pill.review{background:var(--st-wait-bg);color:var(--st-wait-fg)}
.studio-history-pill.failed{background:var(--st-err-bg);color:var(--st-err-fg)}
.studio-history-empty{padding:26px 14px;border:1px dashed var(--studio-line-2);border-radius:var(--studio-r-control);background:rgba(255,255,255,.6);text-align:center;font-size:10px;line-height:1.6;color:var(--studio-muted)}

/* ---------- 14. 生成方式 / 商品内容模块（P1） ---------- */
/* [hidden] 兜底：.studio-group 与 .summary-section 都设了 display，UA 的 [hidden]{display:none} 优先级不够 */
#guidedCreationLayout .studio-group[hidden],
.studio-config-scroll .studio-group[hidden],
#summaryConfigSections .summary-section[hidden],
.summary-config-section[hidden]{display:none!important}

.studio-axis-panel{padding:12px}
/* A2（2026-09-19）：档位数不再固定为 2 —— 第三档（随机动作）由入口脚本按挂载结果显形，
   内容模块档又只在电商主图下出现。写死 repeat(2,…) 会让三档挤成两列、两档留一个空列，
   故改用隐式列：可见按钮几个就均分几列（[hidden] 的按钮不参与布局）。 */
.studio-axis-switch{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:5px}
.studio-axis-btn{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-muted);padding:8px 6px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
.studio-axis-btn:hover{background:#fff;color:var(--studio-text)}
.studio-axis-btn.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue);box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.studio-axis-hint{margin:9px 0 0;font-size:10px;line-height:1.6;color:var(--studio-muted)}
.studio-module-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:11px}
.studio-module-grid[hidden]{display:none!important}
.studio-module-tile{position:relative;display:block;min-height:56px;padding:8px 24px 8px 9px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.62);color:var(--studio-text);text-align:left;cursor:pointer;transition:.18s ease;font-family:inherit}
.studio-module-tile:hover{transform:translateY(-1px);background:#fff;box-shadow:var(--studio-sh-control)}
.studio-module-tile.active{border-color:var(--studio-blue-line);background:linear-gradient(180deg,rgba(239,246,255,.98),rgba(219,234,254,.68));box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.studio-module-tile input{position:absolute;opacity:0;width:1px;height:1px}
.studio-module-tile b{display:block;font-size:11px;font-weight:650;color:var(--studio-ink)}
.studio-module-tile small{display:block;margin-top:3px;font-size:9px;line-height:1.45;color:var(--studio-muted)}
.studio-module-tile .studio-module-check{position:absolute;right:8px;top:8px;width:14px;height:14px;display:grid;place-items:center;border:1px solid var(--studio-line-2);border-radius:50%;font-size:9px;line-height:1;color:var(--studio-blue)}
.studio-module-tile.active .studio-module-check{border-color:var(--studio-blue);background:var(--studio-blue);color:#fff}
.studio-module-actions{display:flex;align-items:center;gap:6px;margin-top:9px}
.studio-module-actions[hidden]{display:none!important}
.studio-module-actions button{border:1px solid var(--studio-line);border-radius:9px;background:rgba(255,255,255,.72);color:var(--studio-blue);padding:6px 9px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s}
.studio-module-actions button:hover{background:#fff;box-shadow:var(--studio-sh-control)}
.studio-group-action{border:0;background:none;color:var(--studio-blue);font:600 10px/1.2 var(--studio-font);padding:2px 0;cursor:pointer}
.studio-group-action:hover{text-decoration:underline}
.studio-module-count{margin-left:auto;font-size:10px;color:var(--studio-muted)}

/* ---------- 15. 灵感与配方（视觉统一到 Studio 体系） ----------
   目标：与生图工作台 / 成片画廊同一视觉体系（蓝灰玻璃 + 无衬线 + 12/18px 圆角 + 柔阴影）。
   约束：① 只改呈现层 —— 筛选词表、分页、事件、planningApply 链路一律不动；
        ② 全部规则以 #directorPlanningView 限定，不污染共享类（director-cta / director-eyebrow /
           guide-chip / planning-copy-prompt 均为跨视图共用）与其他视图；
        ③ 先用变量重绑定覆盖旧令牌引用，几何/字体差异再逐条收口。 */

/* ① 令牌重绑：纸墨砖红 → Studio 冷色（仅子树内生效，不动 :root） */
#directorPlanningView{
  font-family:var(--studio-font);
  color:var(--studio-text);
  /* 2026-09-19 元素级视觉比对：:root 的 --studio-muted 现为达标灰 #5b6472（白卡上 5.98:1）。
     与 #directorGalleryView 同口径就地重绑为达标灰（5.98:1）。
     一处声明三链同时生效：本子树内 var(--studio-muted) 直用、--prototype-muted、--c-ink-soft 都指向它，
     覆盖 .planning-sub / .planning-tags i / .planning-card-foot 等统一主库规则。
     安全性：本作用域内该令牌只作文字色（无 background/border 用法）⇒ 不会让任何面板或描边变色。 */
  --studio-muted:#5b6472;
  --prototype-paper:transparent;
  --prototype-paper-2:rgba(241,245,249,.72);
  --prototype-white:rgba(255,255,255,.84);
  --prototype-line:var(--studio-line);
  --prototype-ink:var(--studio-ink);
  --prototype-muted:var(--studio-muted);
  --prototype-red:var(--studio-blue);
  --prototype-olive:var(--studio-blue);
  --prototype-olive-wash:var(--studio-blue-soft);
  --prototype-olive-deep:#3973bd;
  /* ⚠ 以下间接令牌已在 :root 解析固化，必须就地重绑，否则继续吐暖色 */
  --site-eyebrow-color:#64748b;
  --site-rule:var(--studio-line);
  --c-line:var(--studio-line);
  --c-line-soft:var(--studio-line-soft);
  --c-ink:var(--studio-ink);
  --c-ink-soft:var(--studio-muted);
  --c-accent:var(--studio-blue);
  /* 排版层：衬线 → 无衬线 */
  --site-font-display:var(--studio-font);
  --site-font-body:var(--studio-font);
}

/* ② 页面头：对齐 #directorGalleryView（22px 无衬线 / 9px eyebrow 达 AA 对比度 / 细底线） */
#directorPlanningView .planning-toolbar{min-height:0;align-items:flex-end;gap:18px;padding-bottom:0;margin-bottom:16px;border-bottom:1px solid var(--studio-line)} /* 区域头统一化：pb 14→0（对齐原型）*/
#directorPlanningView .planning-toolbar h1{margin:6px 0 0;font:650 23px/1.2 var(--font-display);letter-spacing:-.01em;color:var(--studio-ink)} /* 2026-09-19 字距对齐原型 .page-head h1（-.01em）；见 #directorGalleryView h1 上的说明 */
#directorPlanningView .planning-toolbar .director-eyebrow{font-size:9px;letter-spacing:.16em;color:var(--site-eyebrow-color);font-weight:600;margin:0}
/* 2026-09-19 行高对齐原型：原型 .page-head .sub 不写行高，随 body{1.5} ⇒ 12px×1.5＝18px；
   本条原写死 1.6（19.2px）。改 1.5 后实测 18px ＝原型值。 */
#directorPlanningView .planning-toolbar .planning-sub{margin-top:5px;color:var(--studio-muted);font-size:12px;line-height:1.5}

/* ③ 筛选标签行：本段原有 5 条规则共 10 条声明，2026-09-21 用「逐条隔离 + 计算值」实测后
   **只保留仍在生效的 2 条**，其余 8 条确认可删。为什么要改写而不是整段删：我先前两次判断
   （「整段 100% 死」→「只有 align-items 活」）都是错的 —— CSS 规则可以**部分生效**，
   必须逐条声明隔离，不能按规则整块判。
   —— 逐条隔离实测（把该声明单独拿掉再量，标 ⚠️ 的是会变的）：
      `gap:5px`          → 死。被统一灵感筛选 chip 规则的 gap:6px 抢走，
                           实测 gap 恒为 6px。
      `align-items:center` → ⚠️ **活**。那条 (2,0,0) 只抢 justify-content 与 gap，没声明
                           align-items ⇒ 拿掉它 tab 容器退回基础层 align-items:stretch。
      `min-height:0`     → ⚠️ **活**（在下面第二条规则里）。基础层给
                           `.planning-tab,.planning-filter{min-height:var(--ui-control-h)}`（40px），
                           而赢家 `#directorPlanningView .planning-tabs .planning-tab` 只写 height:28px、
                           **没写 min-height** ⇒ min-height 由本段收口。拿掉它 tab 高 28px → 40px。
      `border` / `border-radius:9px` / `background` / `color` / `padding:6px 11px` /
      `font:600 10px` / `cursor` / `transition`  → 死。全被
                           `#directorPlanningView .planning-tabs .planning-tab`（(1,2,0)）压死
                           （实测 圆角 12px 而非 9px、字号 11.5px 而非 10px、padding 0 11px 而非 6 11px）。
      后 4 条（:hover / .active）→ 死。`.planning-tab` 侧被 `#directorPlanningView .planning-tabs
                           .planning-tab:hover`（(1,2,1)）与 `...active`（(1,3,0)）压死；
                           `.planning-filter` 侧连元素都不存在（全 DOM 实测 0 个、全仓无 JS 引用）。
   —— 判据是**计算值**不是规则存在：以上每个数字都取自 getComputedStyle 与
      CSS.getMatchedStylesForNode 的实测输出，且改动前后的全屏像素比对为 0 差异。 */
#directorPlanningView .planning-tabs{align-items:center}
#directorPlanningView .planning-tab{min-height:0}

/* ④ 左侧筛选面板：玻璃白面板（同 .director-qa） */
/* 定稿原型还原 R2（2026-09-18 用户裁定）：本区筛选已改成顶部 chip 行（见本节上方基础层）
   ⇒ 这条面板皮必须撤掉，否则会给整行筛选画一个玻璃盒子（原型 .filter-row 没有容器）。
   .planning-filters 类名与「事件委托容器」身份不变。 */
#directorPlanningView .planning-filters{border:0;border-radius:0;background:none;padding:0;box-shadow:none}
#directorPlanningView .planning-filter-title{color:var(--studio-muted);font-size:9px;letter-spacing:.08em;margin:0 0 7px}
/* 定稿原型还原 R2：商品类别从竖排列表改为原型 .chip（胶囊、28px高、选中 = 深色底白字）。
   2026-09-19 视觉对比：选中底色对齐原型 .chip.active ＝ var(--ink) #111827（原是 #172033，色号偏了）。 */
#directorPlanningView .planning-filter-row .planning-filter-title{font-size:11px;letter-spacing:0;margin:0}
#directorPlanningView .planning-category{height:28px;display:inline-flex;align-items:center;width:auto;text-align:left;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.8);color:var(--studio-muted);padding:0 11px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorPlanningView .planning-category:not(.active):hover{background:#fff;color:var(--studio-text);box-shadow:var(--studio-sh-control)}
#directorPlanningView .planning-category.active{border-color:var(--studio-ink);background:var(--studio-ink);color:#fff;font-weight:600}
#directorPlanningView .planning-tag{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.8);color:var(--studio-muted);padding:5px 10px;margin:0;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorPlanningView .planning-tag:not(.active):hover{background:#fff;color:var(--studio-text)}
#directorPlanningView .planning-tag.active{border-color:var(--studio-ink);background:var(--studio-ink);color:#fff}
#directorPlanningView #inspirationTagFilterRow[hidden],#directorPlanningView #inspirationTagSearchResults[hidden]{display:none!important}
#directorPlanningView .inspiration-tag-filter-controls{display:flex;align-items:center;flex-wrap:wrap;gap:7px;flex:1;min-width:0}
#directorPlanningView .inspiration-tag-search{box-sizing:border-box;width:190px;max-width:100%;height:28px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.9);color:var(--studio-text);padding:0 9px;font:11px/1.2 var(--studio-font)}
#directorPlanningView .inspiration-tag-search:focus{outline:2px solid var(--studio-blue-line);outline-offset:1px}
#directorPlanningView .inspiration-tag-search-results{display:flex;flex:1 0 100%;flex-wrap:wrap;gap:5px;padding:4px 0}
#directorPlanningView .inspiration-tag-search-results button span{opacity:.7;font-variant-numeric:tabular-nums}
#directorPlanningView .inspiration-tag-search-empty{padding:5px 0;color:var(--studio-muted);font-size:11px}

/* ⑤ 原则块：黑底 → 浅蓝渐变信息卡（同 .director-brief-head / .director-qa-head） */
/* 定稿原型还原 R2：原则块从「黑底面板 + 负边距出血」改为原型语言的弱提示条
   （筛选已不是面板，负边距会把它拽出容器）。 */
#directorPlanningView .planning-principle{margin:0;padding:9px 12px;border:1px solid var(--studio-line);border-radius:10px;background:linear-gradient(135deg,rgba(239,246,255,.75),rgba(255,255,255,.7));color:var(--studio-muted);font-size:11px;line-height:1.6}
#directorPlanningView .planning-principle .director-eyebrow{font-size:9px;letter-spacing:.16em;color:#475569;font-weight:600}
#directorPlanningView .planning-principle b{display:inline;margin:0 4px 0 0;font:650 11px/1.35 var(--studio-font);color:var(--studio-ink)}

/* ⑥ 目录头与卡片网格 */
#directorPlanningView .planning-catalog-head{color:var(--studio-muted);font-size:10px;margin-bottom:10px}
/* 2026-09-19 元素级视觉比对（用户裁定「改成原型描边」）：描边回到原型 .case 的 var(--line)
   ＝ var(--studio-line) rgba(148,163,184,.22)（逐字节同值），并去掉原型没有的 1px 微投影。
   ⚠ 必须与下一条 :hover 同改 —— 只改这条会让悬停时描边跳回白色（本仓已有「:hover 与 .active 同分且在后」的回归先例）。
   代价（用户已知）：与 #directorGalleryView 成片卡的白玻璃描边不再统一；作用域限定，其余四区不受影响。 */
#directorPlanningView .planning-card{border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.82);transition:.2s ease;overflow:hidden}
#directorPlanningView .planning-card:hover{transform:translateY(-2px);border-color:var(--studio-blue);box-shadow:0 12px 25px rgba(15,23,42,.12)}
/* 2026-09-19 视觉对比：原型 .case .cover 的底色是不透明 #e2e8f0（原写 .7 透明度）；
   同时补上原型 .case .cover 的下沿分隔线（--studio-line-soft ≡ 原型 --line-soft，逐字节同值）。
   box-sizing:border-box ⇒ 该 1px 被吸收，封面实测仍 296px、卡片不增高。 */
#directorPlanningView .planning-cover{background-color:#e2e8f0;border-bottom:1px solid var(--studio-line-soft)}
/* 浮层标签：对齐 .director-gallery-status */
#directorPlanningView .planning-cover span{top:8px;right:8px;border-radius:8px;background:rgba(239,246,255,.94);color:var(--st-ok-fg);padding:4px 7px;font:600 9px/1.2 var(--studio-font);box-shadow:0 1px 2px rgba(15,23,42,.08)}
#directorPlanningView .planning-type-chip{top:8px;left:8px;border-radius:8px;background:rgba(255,255,255,.92);color:#475569;padding:4px 7px;font:600 9px/1.2 var(--studio-font);box-shadow:0 1px 2px rgba(15,23,42,.08)}
#directorPlanningView .planning-card-body{padding:11px 12px 12px}
/* 定稿原型还原 R2③：卡面字号回到原型（.case h3 = 12.5px）。列数改成 auto-fill 后单卡更窄，
   14px 标题会挤成两三行 —— 这条同时是密度与忠实度两个理由。
   2026-09-19 元素级视觉比对：原型的 .case h3 不写行高、不写字距，靠 body{line-height:1.5} 继承
   ⇒ 实测 18.75px / normal；本行原写死 1.35（16.875px）并多一条原型没有的 letter-spacing:-.01em。
   行高改 1.5、字距回 normal（保留生产的 margin 与 color 增量，不动）。 */
#directorPlanningView .planning-card-body h3{margin:0 0 6px;font:650 12px/1.5 var(--font-display);letter-spacing:normal;color:var(--studio-ink)}
/* 描述已从卡面移出（原型卡面没有它；仍在详情面板的 #planningDetailDescription 可读）⇒ 仅兜底保留样式 */
/* 2026-09-21 删除 #directorPlanningView .planning-card-body p：卡片模板（studio-app.js planningCardHtml）
   里**没有 <p>** —— 描述 c.desc 已按 2026-09-18 裁定移出卡面、只留在详情面板
   ⇒ 本条与基础层 4 条 .planning-card-body p 全部永不匹配（实测 computed 取值 NO-EL）。
   删除的同时把基础层那 4 条一并清掉，见 2383/2455/2574/2760。 */
/* 2026-09-19 行高对齐原型：原型同位置的 .tiny.muted 不写行高，随 body{1.5} ⇒ 11px×1.5＝16.5px；
   本条原写 1.55（17.05px）。改 1.5 后实测 16.5px ＝原型值。 */
#directorPlanningView .planning-card-context{gap:2px;margin:8px 0 0;color:var(--studio-muted);font-size:11px;line-height:1.5}
#directorPlanningView .planning-category-hint{color:var(--studio-blue);font-weight:600}
#directorPlanningView .planning-tags{gap:5px;min-height:0;margin:0}
/* 定稿原型还原 R2③ + 2026-09-19 视觉对比：标签回到原型的「细边框 + 透明底 + 弱色文字」（原型 .case .tag 无背景色） */
#directorPlanningView .planning-tags i{border:1px solid var(--studio-line);border-radius:8px;background:transparent;color:var(--studio-muted);padding:1px 6px;font-size:10px}
/* 定稿原型还原 R2③：卡脚去掉分隔线（原型 .case .acts 无 border-top），按钮回到原型形态：
   次要按钮（查看拍法）描边弱化、主操作（拍同款）深色渐变；两者顺序已在 planningCardHtml 里对调。 */
#directorPlanningView .planning-card-foot{border-top:0;padding-top:0;margin-top:10px;display:flex;align-items:center;gap:7px;color:var(--studio-muted);font-size:10px}
/* 卡脚按钮＝原型 .btn.sm（高 30 / 内衬 11 / 11.5px / 圆角＝控件令牌 12px）—— 视觉对比实测原 25/11px/r8 小一圈 ✗ */
#directorPlanningView .planning-card-foot button{height:30px;display:inline-flex;align-items:center;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.85);color:var(--studio-muted);font:600 11px/1.2 var(--studio-font);padding:0 11px;cursor:pointer}
#directorPlanningView .planning-card-foot button:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorPlanningView .planning-card-foot .planning-view{margin-left:auto}
#directorPlanningView .planning-card-foot .planning-use{border:0;border-radius:var(--studio-r-control);background:linear-gradient(135deg,#111827,#071022);color:#fff;padding:0 11px}
/* P0：查看拍法仍是键盘可达的真实按钮，但降为文字型次操作；卡片只保留一个视觉主 CTA。 */
#directorPlanningView .planning-card-foot button.planning-view{height:auto;min-height:0;border:0;background:transparent;color:var(--studio-muted);padding:3px 2px;font:600 10px/1.2 var(--studio-font);box-shadow:none}
#directorPlanningView .planning-card-foot button.planning-view:hover{background:transparent;color:var(--studio-text);box-shadow:none;text-decoration:underline}

/* ⑦ 分页器 */
#directorPlanningView .planning-pager-btn{border:1px solid var(--studio-line);border-radius:9px;background:rgba(241,245,249,.8);color:#334155;padding:7px 12px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorPlanningView .planning-pager-btn:hover:not(:disabled){background:#fff;box-shadow:var(--studio-sh-control)}
#directorPlanningView .planning-pager-btn:disabled{opacity:.45;cursor:not-allowed}
#directorPlanningView .planning-pager span{color:var(--studio-muted);font-size:10px}

/* ⑧ 详情面板（保持内嵌，仅换皮） */
#directorPlanningView .planning-detail{border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);padding:14px;box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}
#directorPlanningView .planning-detail-shot{border-radius:10px;background-color:rgba(226,232,240,.7)}
#directorPlanningView .planning-detail-shot span{left:8px;bottom:8px;border-radius:8px;background:rgba(15,23,42,.7);color:#fff;padding:3px 6px;font:600 9px/1.2 var(--studio-font)}
/* 示例图缺失的显式占位（2026-09-20）：原先拿封面复制 4 份冒充示例图，现改为明确的空态。
   虚线边 + 无背景图，一眼可辨「这里还没有图」，而不是「这张图就长这样」。 */
#directorPlanningView .planning-detail-shot.is-placeholder{border:1px dashed var(--studio-line-2);background-image:none;background-color:rgba(241,245,249,.6)}
#directorPlanningView .planning-detail-shot.is-placeholder i{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-style:normal;font-size:10px;color:var(--studio-muted);white-space:nowrap}
#directorPlanningView .planning-detail-copy h2{margin:6px 0 8px;font:650 18px/1.35 var(--font-display);letter-spacing:-.01em;color:var(--studio-ink)}
#directorPlanningView .planning-detail-copy p{color:var(--studio-muted);font-size:11px;line-height:1.7}
#directorPlanningView .planning-case-meta i{border-radius:8px;background:var(--studio-blue-soft);color:var(--st-ok-fg);padding:4px 7px;font-size:9px}
#directorPlanningView .planning-shot-list{border-top:1px solid var(--studio-line);margin-top:12px;padding-top:10px}
#directorPlanningView .planning-shot{border-bottom:1px solid var(--studio-line-soft);padding:7px 0;font-size:10px}
#directorPlanningView .planning-shot b{color:var(--studio-blue)}
/* 详情侧栏：黑底 → 白玻璃 + 浅蓝渐变；主按钮 = 工作台同款深色渐变 */
#directorPlanningView .planning-detail-side{border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:linear-gradient(135deg,rgba(239,246,255,.9),rgba(255,255,255,.7));color:var(--studio-text);padding:16px}
#directorPlanningView .planning-detail-side .director-eyebrow{font-size:9px;letter-spacing:.16em;color:#475569;font-weight:600}
#directorPlanningView .planning-detail-side h3{margin:5px 0 7px;font:650 14px/1.3 var(--font-display);color:var(--studio-ink)}
#directorPlanningView .planning-detail-side p{color:var(--studio-muted);font-size:10px;line-height:1.65}
#directorPlanningView .planning-detail-side p.planning-detail-material{color:var(--studio-ink);font-weight:600;margin-top:6px}
#directorPlanningView .planning-detail-side .director-cta{width:100%;height:38px;margin-top:12px;border:0;border-radius:var(--studio-r-control);background:linear-gradient(135deg,#111827,#071022);color:#fff;font:650 11px/1 var(--studio-font);cursor:pointer;box-shadow:0 8px 18px rgba(15,23,42,.16);transition:.18s}
#directorPlanningView .planning-detail-side .director-cta:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}
#directorPlanningView .planning-copy-prompt{width:100%;margin-top:8px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:#4b5563;padding:9px;font:600 10px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorPlanningView .planning-copy-prompt:hover{background:#fff;box-shadow:var(--studio-sh-control)}

/* ⑨ 能力指引条已删（2026-09-22 A 口径收口）：本区不再有 .guide-bar / .guide-chip，
   指引改为工作台就近挂点（商品图区 / 复刻上传区）。 */

/* ⑩ 空态 / 骨架屏 */
#directorPlanningView .planning-empty{border-color:var(--studio-line-2)!important;color:var(--studio-muted)!important;font-size:11px!important;padding:44px 20px!important;border-radius:var(--studio-r-panel)}
/* P1-2（2026-09-22 用户裁定）：筛选空态的「清除筛选」出口。
   既有 .planning-empty 只做描边/字号/内衬（无 layout），加 strong/span/button 三个块级子元素
   必须显式给 flex 列 —— 否则它们会按 inline 挤在一行。
   形态与文案层级对齐本仓既有空态词汇 .director-asset-state（strong 主句 + span 说明 + 主按钮）。 */
#directorPlanningView .planning-empty-clear{margin-top:4px;height:30px;display:inline-flex;align-items:center;
  border:1px solid var(--studio-blue-line);border-radius:var(--studio-r-control);background:var(--studio-blue-soft);
  color:var(--studio-blue);padding:0 14px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorPlanningView .planning-empty-clear:hover{background:#dbeafe;box-shadow:var(--studio-sh-control)}
/* P1-3（2026-09-22 用户裁定）：预设空态换成 strong + span + 主按钮的同一形态。
   复用 .director-asset-state 的既有视觉语言，不新造空态样式体系。 */
#directorPlanningView .inspire-preset-empty{display:flex;flex-direction:column;align-items:flex-start;gap:6px;
  min-height:92px;padding:22px 20px;border:1px dashed var(--studio-line-2);border-radius:var(--studio-r-panel);
  background:rgba(255,255,255,.6);color:var(--studio-muted);font-size:12px;line-height:1.6}
#directorPlanningView .inspire-preset-empty strong{color:var(--studio-ink);font-size:13px;font-weight:650}
#directorPlanningView .inspire-preset-empty span{max-width:62ch}

/* ⑪ 键盘焦点环（2026-09-21 补；R1）
   —— 为什么必须补：.mask,.director-review-mask,.npop,.img-lightbox,.login-mask 那条焦点环基线只列了 11 个类
      （.btn / .director-cta / .director-gallery-foot button / .director-gallery-foot a /
        .director-filter / .director-intent / .director-dna-card / .director-category-grid button /
        .director-upload / .src-tab / .drop），本屏大量可聚焦元素**一个都不在列**：
      实测键盘 Tab 到 .planning-tab / .planning-category / .planning-tag / .planning-view /
      .planning-use / .planning-copy-prompt / .capture-card 上时**无任何视觉反馈**，
      用户看不到焦点在哪 —— 而它们恰是 IA-UX6 刚补上键盘通路的那些元素（能做，但看不见自己在哪）。
   —— 写法与 #directorGalleryView 的 S4.9「焦点态统一」逐字同构（button/a/select/input/
      [role=button]/[tabindex] 通配 + !important），不再逐个类名列举：
      逐类列举必然漏掉后加的元素，而本屏的可聚焦元素由 planningRenderTabs / captureRender
      等函数动态生成，类名集合会变。**通配才是不会随时间失效的写法。**
   —— 为什么用 !important：与资产中心同因 —— 本屏存在 `.planning-tabs .planning-tab`
      这类 (1 id + 2 类) 的规则，而 `:focus-visible` 伪类本身不计特异性，
      不用 !important 会被更高特异性的普通规则在同一属性上抢走（outline 三属性各自独立竞争）。
   —— 作用域限本屏（用户 2026-09-21 裁定「只做本屏」）：只加 #directorPlanningView 前缀，
      不写成裸选择器，避免波及资产中心/设置区等共用 .director-filter 的屏。 */
#directorPlanningView button:focus-visible,
#directorPlanningView a:focus-visible,
#directorPlanningView select:focus-visible,
#directorPlanningView input:focus-visible,
#directorPlanningView [role="button"]:focus-visible,
#directorPlanningView [tabindex]:focus-visible {
  outline: 2px solid var(--studio-blue) !important;
  outline-offset: 2px !important;
}
/* ---------- 16. 旧壳三页（概览 / 网红 DNA 档案 / 我的飞书）视觉统一到 Studio 体系 ----------
   与第 15 段同一手法：作用域内令牌重绑定打底 + 高特异性收口几何与字体。
   作用域 .app-shell>.app 只覆盖旧壳（director 三视图在 .director-main 内、弹层在 .app 之外，均不受影响）。 */
.app-shell>.app{
  font-family:var(--studio-font);
  color:var(--studio-text);
  /* ① 用户决策：展示字体保留 Noto Serif SC，不做衬线→无衬线覆盖 */
  /* ② 已在 :root 解析固化的间接令牌，必须就地重绑 */
  --site-eyebrow-color:#64748b;
  --site-rule:var(--studio-line);
  /* ③ 第一代暖色纸墨 → Studio 冷色 */
  --c-bg:transparent;
  --c-surface:rgba(255,255,255,.84);
  --c-surface-2:rgba(241,245,249,.72);
  --c-surface-3:rgba(226,232,240,.7);
  --c-ink:var(--studio-ink);
  --c-ink-soft:var(--studio-muted);
  --c-ink-faint:var(--studio-muted);
  --c-line:var(--studio-line);
  --c-line-soft:var(--studio-line-soft);
  --c-brand:var(--studio-blue);
  --c-brand-deep:#2563eb;
  --c-brand-wash:var(--studio-blue-soft);
  --c-brand-line:var(--studio-blue-line);
  /* ④ prototype 词表（旧壳 .sec-label / .role-card 等仍在用） */
  --prototype-ink:var(--studio-ink);
  --prototype-muted:var(--studio-muted);
  --prototype-line:var(--studio-line);
  --prototype-white:rgba(255,255,255,.84);
  --prototype-paper:rgba(241,245,249,.6);
  --prototype-paper-2:rgba(241,245,249,.72);
  --prototype-red:var(--studio-blue);
  --prototype-olive:var(--studio-blue);
  --prototype-olive-wash:var(--studio-blue-soft);
  --prototype-olive-deep:#3973bd;
  /* 设计统一 P0-3（2026-10-01）：本块此前漏绑 --studio-muted ⇒ 旧壳子树弱文字渲染 :root 的
     #5b6472（5.98:1，达 AA）。同型补绑在 workbench/planning/遮罩/gallery
     四处都有先例，此处补齐；取值同四块 = #5b6472（5.98:1 达 AA）。 */
  --studio-muted:#5b6472;
}



/* A-2 衬线收口：:root 的 --ui-font-display 是 "Noto Serif SC",serif，
   被全局 `h1,h2,h3,h4{font-family:var(--ui-font-display)}` 那条消费。
   旧壳块重绑了 --font-display / --site-font-display，**漏了 --ui-font-display** ⇒
   两个 pane 区头 h2（角色资产 / 商品资产）退回宋体（实测 computed = "Noto Serif SC" 18px）。
   这里显式声明字体族，与资产中心的标题规则同一根因。
   ⚠️ 不用 font: 简写 —— 简写会把 line-height 重置为 normal。 */
#directorGalleryView .director-section-label h2{font-family:var(--font-display)}

/* A-3 chip 激活态：--studio-blue(#3b82f6) 落在 --studio-blue-soft(#eff6ff) 上只有 3.38:1，不达 AA。
   与新壳 S4.12 修过的是同一个坑（见「S4.12 对比度收口」段），收到已达标的 #1d4ed8（6.16:1），取值同先例。 */
#directorGalleryView .chip.active{color:#1d4ed8}

/* 页面头：对齐 director 三视图（22px 无衬线 / 9px 灰蓝 eyebrow） */
.app-shell>.app .phead h1,
.app-shell>.app .site-page-head h1{margin:6px 0 0;font:650 23px/1.2 var(--font-display);letter-spacing:-.01em;color:var(--studio-ink)} /* 2026-09-19 字距对齐原型 .page-head h1（-.01em）；见 #directorGalleryView h1 上的说明 */
.app-shell>.app .site-page-eyebrow{font-size:9px;letter-spacing:.16em;color:var(--studio-muted);font-weight:600}
.app-shell>.app .phead p{color:var(--studio-muted);font-size:11px;line-height:1.65}
.app-shell>.app .sec-label{color:var(--studio-muted);font-size:10px;font-weight:650;letter-spacing:.1em}

/* 面板族 → 18px 玻璃白 */
.app-shell>.app .card,
.app-shell>.app .create-side,
.app-shell>.app .feishu-connect-card,
.app-shell>.app .feishu-section,
.app-shell>.app .overview-batch,
.app-shell>.app .overview-action-body,
.app-shell>.app .dna-result,
.app-shell>.app .rough-note{border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}

/* 卡片族 → 12px */
.app-shell>.app .role-card,
.app-shell>.app .asset-card,
.app-shell>.app .job,
.app-shell>.app .overview-status-item,
.app-shell>.app .feishu-kpi,
.app-shell>.app .login-box,
.app-shell>.app .modal,
.app-shell>.app .npop .box,
.app-shell>.app .planlist{border-radius:12px;background:rgba(255,255,255,.84);box-shadow:0 1px 2px rgba(15,23,42,.05)}

/* 控件族 → 12px + 统一底色 */
.app-shell>.app .btn,
.app-shell>.app .btn.ghost,
.app-shell>.app .btn.small,
.app-shell>.app .btn.block,
.app-shell>.app .chip,
.app-shell>.app .src-tab,
.app-shell>.app .drop,
.app-shell>.app .hint,
.app-shell>.app .pill,
.app-shell>.app .feishu-pill,
.app-shell>.app .feishu-binding-strip,
.app-shell>.app input[type=text],
.app-shell>.app select,
.app-shell>.app textarea{border-radius:var(--studio-r-control)}

/* 主按钮 → 工作台同款深色渐变；次级按钮 → 玻璃白细边框 */
.app-shell>.app .btn:not(.ghost){border-color:transparent;background:linear-gradient(135deg,#111827,#071022);color:#fff;font-weight:650;box-shadow:0 8px 18px rgba(15,23,42,.16)}
.app-shell>.app .btn:not(.ghost):hover{transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}
.app-shell>.app .btn.ghost{border:1px solid var(--studio-line);background:rgba(255,255,255,.72);color:#4b5563}
.app-shell>.app .btn.ghost:hover{background:#fff;box-shadow:var(--studio-sh-control)}

/* chip / 分段 tab：默认状态 + 浅蓝激活态（同 studio-category-grid） */
.app-shell>.app .chip{border:1px solid var(--studio-line);background:rgba(241,245,249,.72);color:var(--studio-muted)}
.app-shell>.app .chip:hover{background:#fff;color:var(--studio-text)}
.app-shell>.app .chip.active,
.app-shell>.app .src-tab.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}

/* 表单控件 */
.app-shell>.app input[type=text],
.app-shell>.app select,
.app-shell>.app textarea{border:1px solid var(--studio-line);background:#fff;color:var(--studio-text);font-size:11px}
.app-shell>.app input[type=text]:focus,
.app-shell>.app select:focus,
.app-shell>.app textarea:focus{outline:2px solid var(--studio-blue);outline-offset:1px}
.app-shell>.app .overview-userbar{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.84);color:var(--studio-muted)}
.app-shell>.app .overview-userbar b{color:var(--studio-ink)}

/* KPI / 漏斗数字：硬编码衬线体 → 无衬线等宽数字 */
.app-shell>.app .overview-status-item .num,
.app-shell>.app .kpi .num,
.app-shell>.app .conf .num,
.app-shell>.app .feishu-kpi strong,
.app-shell>.app .overview-fseg .fnum,
.app-shell>.app .overview-funnel .fnum{font-family:var(--studio-font);font-weight:650;font-variant-numeric:tabular-nums;color:var(--studio-ink)}
.app-shell>.app .overview-batch-main strong{font:650 16px/1.4 var(--studio-font);color:var(--studio-ink)}
/* A′（2026-09-22）：区块标题收到原型 `.sec h2` = 14px（原型 99 行）。原来是 16px。 */
.app-shell>.app .overview-section-label h2{font:650 14px/1.4 var(--font-display);color:var(--studio-ink)}
.app-shell>.app .overview-batch-tag,
.app-shell>.app .badge,
.app-shell>.app .plan{border-radius:7px}

/* 侧栏「当前待处理」黑底卡 → 浅蓝渐变玻璃 */
.app-shell>.app .overview-action-head{border-radius:var(--studio-r-panel) var(--studio-r-panel) 0 0;background:linear-gradient(135deg,rgba(239,246,255,.9),rgba(255,255,255,.7));color:var(--studio-text)}
.app-shell>.app .overview-action-head h3,
.app-shell>.app .overview-action-head strong{color:var(--studio-ink)}
.app-shell>.app .overview-action-head p{color:var(--studio-muted)}
.app-shell>.app .overview-action-block{border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);border:1px solid var(--studio-line);box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}

/* DNA 档案：角色卡与选中态 */
.app-shell>.app .role-card.active{border-color:var(--studio-blue-line);box-shadow:inset 0 0 0 1px var(--studio-blue-line),0 12px 25px rgba(15,23,42,.12)}
.app-shell>.app .rc-img{border-radius:10px}
.app-shell>.app .badge.example{border:1px solid var(--studio-line);background:rgba(241,245,249,.8);color:var(--studio-muted)}
.app-shell>.app .drop{border:1px dashed var(--studio-line-2);background:rgba(255,255,255,.7);color:var(--studio-muted)}
.app-shell>.app .drop:hover{border-color:var(--studio-blue-line);background:#fff}

/* 飞书页 */
.app-shell>.app .feishu-connect-card h2{font:650 14px/1.4 var(--font-display);color:var(--studio-ink)}

/* 列表行 / 结构件 */
.app-shell>.app .planlist .prow,
.app-shell>.app .prow{border:1px solid var(--studio-line);border-radius:10px;background:rgba(255,255,255,.84)}
.app-shell>.app .planlist .pbar,
.app-shell>.app .pbar{border-radius:999px;background:rgba(226,232,240,.8)}
.app-shell>.app .planlist .pbar i,
.app-shell>.app .pbar i{border-radius:999px;background:var(--studio-blue)}
.app-shell>.app .conf{border:1px solid var(--studio-line);border-radius:12px;background:rgba(255,255,255,.72)}
.app-shell>.app .conf .num{color:var(--studio-blue)}
.app-shell>.app .rc-img,
.app-shell>.app .pf-ico{border-color:var(--studio-line)}

/* 成片画廊：BATCH QA 头部的 eyebrow 残留（内联 style="color:#d78670" 已删，此处补冷色规则）。
   注：白底 eyebrow 用 #64748b（4.76:1）；浅蓝渐变底容器内用 #475569（≥5.7:1，保证渐变首端也达 AA） */
#directorGalleryView .director-qa-head .director-eyebrow{font-size:9px;letter-spacing:.16em;color:#475569;font-weight:600}

/* ---------- 17. 弹层与浮层转冷 ----------
   弹层挂在 .app 之外（body 直挂 + position:fixed），第 16 段作用域覆盖不到，故单独处理；
   手法相同：先在弹层容器上重绑定令牌，再收口遮罩底色与面板几何。.
   注：.face-mask / .guide-mask 的遮罩本就是冷黑，这里只统一到同一档。 */
.mask,.npop,.login-mask,.director-retry-upload-mask,.plib-mask,.director-dna-pool-mask{
  background:rgba(15,23,42,.62);
  backdrop-filter:blur(6px);
  /* 用户决策：展示字体保留 Noto Serif SC，不做衬线→无衬线覆盖 */
  --c-surface:rgba(255,255,255,.96);
  --c-surface-2:var(--studio-placeholder-bg);
  --c-surface-3:rgba(226,232,240,.85);
  --c-line:var(--studio-line);
  --c-line-soft:var(--studio-line-soft);
  --c-ink:var(--studio-ink);
  --c-ink-soft:var(--studio-muted);
  --c-ink-faint:var(--studio-muted);
  --c-brand:var(--studio-blue);
  --c-brand-deep:#2563eb;
  --c-brand-wash:var(--studio-blue-soft);
  --c-brand-line:var(--studio-blue-line);
  --prototype-white:rgba(255,255,255,.96);
  --prototype-paper:rgba(255,255,255,.96);
  --prototype-paper-2:var(--studio-placeholder-bg);
  --prototype-line:var(--studio-line);
  --prototype-ink:var(--studio-ink);
  --prototype-muted:var(--studio-muted);
  /* V4（2026-09-30）：本块此前漏绑 --studio-muted ⇒ var(--studio-muted) 继承 :root 的
     #5b6472（5.98:1，达 AA），实测弹层卡 span/preview.is-missing 等弱文字全部不达标。
     补绑达标灰 #5b6472（5.98:1，同 workbench/gallery 先例；同型修法见 #inspireOverwriteMask）。 */
  --studio-muted:#5b6472;
  --prototype-red:var(--studio-blue);
  --prototype-olive-wash:var(--studio-blue-soft);
  --prototype-olive-deep:#3973bd;
  font-family:var(--studio-font);
}
/* 浮层面板：圆角 + 冷色玻璃（旧壳 .mask 系列与三个 director 弹层的面板） */
.login-box,.npop .box,.plib-panel,.director-dna-pool-panel,.director-retry-upload-panel,.modal{
  border:1px solid var(--studio-line);
  border-radius:var(--studio-r-panel);
  background:rgba(255,255,255,.96);
  box-shadow:0 28px 70px rgba(15,23,42,.3);
  color:var(--studio-text);
}

/* 角色卡定位上下文：.role-card 原本缺 position:relative，卡内绝对定位的 .badge（「示例」/「就绪」/
   「历史卡·待预检」）会以更外层容器为基准，飘到内容区左上角并与 eyebrow 文字重叠。
   补上定位上下文后 badge 回到卡片左上角（top:10px / left:10px）。 */
.role-card{position:relative}

/* 候选人池预览区：冷色占位底（V2 2026-09-30：原补丁值已并入上方同族定义，本行删除避免双定义） */
.director-dna-pool-head p{color:#cbd5e1}

/* 审计修复：第 16 段作用域（.app）盖不到弹层内的 .dna-result，补圆角；.warn 子块同理 */
.dna-result{border-radius:var(--studio-r-control)}
.dna-result .warn{border-radius:var(--studio-r-control)}
/* 审计修复：全局 toast 动态创建时曾用内联 border-radius:0（已删，圆角回归本处 CSS 管理）；
   背景不在此覆盖 —— toast() 按 ok/err/warn 传入 --tone-* 语义色，覆盖会破坏状态语义 */
.toast{border-radius:var(--studio-r-control)}
/* 审计修复：#legacy-state 兼容节点（.app 外、隐藏）的选中态收口暖色残留，仅防回显 */
#legacy-state .role-card.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);box-shadow:none}

/* ---------- 18. 弹层按钮层级：对齐工作台（主 = 深色渐变 / 次 = 玻璃白 / 切换 = 浅蓝 chip） ----------
   弹层没有统一容器前缀，所以按「弹层容器 + 按钮类」逐个限定，避免影响弹层之外的同名类。
   主按钮取值与 .studio-config-footer .director-cta / 画廊卡片主操作逐字一致。 */
.mask .btn:not(.ghost),
.npop .box .btn:not(.ghost),
.login-box .btn:not(.ghost),
.modal .btn:not(.ghost),
.plib-panel .btn:not(.ghost),
.director-dna-pool-panel .btn:not(.ghost),
.director-retry-upload-panel .btn:not(.ghost),
.director-retry-upload-actions .primary{
  border:0;border-radius:var(--studio-r-control);
  background:linear-gradient(135deg,#111827,#071022);
  color:#fff;font-weight:650;
  box-shadow:0 8px 18px rgba(15,23,42,.16);
  transition:.18s ease;
}
.mask .btn:not(.ghost):hover,
.npop .box .btn:not(.ghost):hover,
.login-box .btn:not(.ghost):hover,
.modal .btn:not(.ghost):hover,
.plib-panel .btn:not(.ghost):hover,
.director-dna-pool-panel .btn:not(.ghost):hover,
.director-retry-upload-panel .btn:not(.ghost):hover,
.director-retry-upload-actions .primary:hover{transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}
.mask .btn:not(.ghost):disabled,
.login-box .btn:not(.ghost):disabled,
.director-retry-upload-panel .btn:not(.ghost):disabled,
.director-retry-upload-actions .primary:disabled{background:#cbd5e1;color:#64748b;box-shadow:none;cursor:not-allowed;transform:none}

/* 次级按钮（取消 / 关闭 / 知道了）：玻璃白 + 细边框 */
.mask .btn.ghost,
.npop .box .btn.ghost,
.login-box .btn.ghost,
.modal .btn.ghost,
.director-retry-upload-actions button:not(.primary){
  border:1px solid var(--studio-line);
  border-radius:var(--studio-r-control);
  background:rgba(255,255,255,.72);
  color:#4b5563;font-weight:600;
}
.mask .btn.ghost:hover,
.npop .box .btn.ghost:hover,
.login-box .btn.ghost:hover,
.modal .btn.ghost:hover,
.director-retry-upload-actions button:not(.primary):hover{background:#fff;box-shadow:var(--studio-sh-control)}

/* 登录方式切换：chip 规格（同 .studio-category-grid），与下方主按钮拉开层级 */
.login-box #personalLoginTab{border:1px solid var(--studio-blue-line);border-radius:9px;background:var(--studio-blue-soft);color:var(--studio-blue);font-weight:600;box-shadow:none}
.login-box #guestLoginTab{border:1px solid var(--studio-line);border-radius:9px;background:rgba(241,245,249,.72);color:var(--studio-muted);box-shadow:none}
/* ===== C2（2026-09-14）：原 index.html 内联 style 属性迁出的工具类 =====
   命名由声明缩写生成（如 u-mt-8px = margin-top:8px），逐条与原内联声明等价。

   两个刻意的设计（都是为了「零视觉变化」与「不改运行时行为」）：
   1) 选择器双写 .u-x.u-x，把特异性提到 (0,2,0)。单类 (0,1,0) 会被既有组件规则压过
      ——实测被压过 6 处（input[type=text] 的 padding/font-size、(1,1,0) 级容器规则等）。
   2) 不使用 !important。站内有 80+ 处 JS 用 el.style.x = … 改写内联样式（如进度条宽度、
      浮层显隐）；inline 本就胜于任何非 !important 规则，加了 !important 反而会让那些
      运行时写入失效。双写特异性既压过了组件规则，又保住了 JS 写入的优先级——
      这正是原内联属性的真实行为。

   放在样式表末尾：同特异性时由后面的规则胜出。
   改动本文件必须同步 index.html 里的 ?v= 版本号。 */
.u-d-none.u-d-none.u-d-none { display:none; }
/* ↑ 三写类名 = 特异性 (0,3,0)，不是笔误。
   原因：`.app-shell>.app .btn` 等组件规则是 (0,3,0)，二写的 (0,2,0) 会被静默压过——
   2026-09-14 在 #authBtn（<button class="btn ghost u-d-none">）上实测「加了 u-d-none 仍然可见」。
   这里靠"同特异性 + 本规则在文件末尾"取胜；**不用 !important**：站内有 80+ 处 el.style.x = 的
   运行时写入，!important 会让它们全部失效（inline 只输给 !important）。
   守卫测试：test/frontend-utility-specificity.test.js。 */
#authBtn.u-d-none { display:none; }   /* 额外保险：id 级 (1,1,0)，防将来出现 id 级 display 规则 */
/* 运行时 classList.add('u-d-none') 的同款保险（2026-09-15）：上面那条守卫测试只掃**静态**同元素类，
   而「质量档」两个字段是 js 动态隐藏的——#directorWorkbenchView .studio-advanced-field{display:flex}(1,1,0)
   与 #directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid) label{display:flex}(1,1,1) 都比 u-d-none 的 (0,3,0) 高，
   不补这两条的话，切到不支持质量的模型（gpt-image-2.5 / nano）时整行仍会显示。
   注：flare 独有能力，默认隐藏之外的模型必须真的看不见。 */
#directorWorkbenchView .studio-advanced-field.u-d-none,
#directorWorkbenchView :is(.free-settings-grid,.reference-extension-settings-grid) label.u-d-none { display:none; }
.u-mt-5px-c-c-ink-soft.u-mt-5px-c-c-ink-soft { margin-top:5px;color:var(--c-ink-soft); }
.u-mt-8px.u-mt-8px { margin-top:8px; }
.u-maxw-100-maxh-220px-d-block-mt-10px-bd-2px-solid.u-maxw-100-maxh-220px-d-block-mt-10px-bd-2px-solid { max-width:100%;max-height:220px;display:block;margin-top:10px;border:2px solid var(--studio-line); }
.u-gc-1-1.u-gc-1-1 { grid-column:1/-1; }
.u-fst-normal-c-prototype-muted.u-fst-normal-c-prototype-muted { font-style:normal;color:var(--studio-muted); }
.u-mt-10px.u-mt-10px { margin-top:10px; }
.u-ws-pre-wrap.u-ws-pre-wrap { white-space:pre-wrap; }
.u-cur-pointer.u-cur-pointer { cursor:pointer; }
.u-ws-pre-wrap-fs-12px-p-10px-bg-prototype-paper-bd.u-ws-pre-wrap-fs-12px-p-10px-bg-prototype-paper-bd { white-space:pre-wrap;font-size:12px;padding:10px;background:var(--studio-paper);border:1px solid var(--studio-line);max-height:300px;overflow:auto; }
.u-mt-10px-bd-1px-solid-prototype-line-p-10px-bg-pr.u-mt-10px-bd-1px-solid-prototype-line-p-10px-bg-pr { margin-top:10px;border:1px solid var(--studio-line);padding:10px;background:var(--studio-paper); }
.u-fwt-600-mb-6px.u-fwt-600-mb-6px { font-weight:600;margin-bottom:6px; }
.u-fwt-600-m-8px-0-6px.u-fwt-600-m-8px-0-6px { font-weight:600;margin:8px 0 6px; }
.u-w-100-fs-12px.u-w-100-fs-12px { width:100%;font-size:12px; }
.u-mt-8px-d-flex-gap-8px.u-mt-8px-d-flex-gap-8px { margin-top:8px;display:flex;gap:8px; }
.u-mt-6px.u-mt-6px { margin-top:6px; }
.u-w-0.u-w-0 { width:0%; }
.u-fs-13px.u-fs-13px { font-size:13px; }
.u-w-100-mt-6px.u-w-100-mt-6px { width:100%;margin-top:6px; }
.u-mt-8px-fs-12px-c-69665f-lh-1-7.u-mt-8px-fs-12px-c-69665f-lh-1-7 { margin-top:8px;font-size:12px;color:var(--studio-muted);line-height:1.7; }
.u-minw-220px-w-auto.u-minw-220px-w-auto { min-width:220px;width:auto; }
.u-minw-130px-w-auto.u-minw-130px-w-auto { min-width:130px;width:auto; }
.u-gc-1-1-ta-center-p-48px-c-prototype-muted.u-gc-1-1-ta-center-p-48px-c-prototype-muted { grid-column:1/-1;text-align:center;padding:48px;color:var(--studio-muted); }
.u-w-100-mt-8px.u-w-100-mt-8px { width:100%;margin-top:8px; }
.u-d-flex-gap-10px-ai-center-fw-wrap.u-d-flex-gap-10px-ai-center-fw-wrap { display:flex;gap:10px;align-items:center;flex-wrap:wrap; }
.u-fs-12px-c-c-ink-soft-mt-8px.u-fs-12px-c-c-ink-soft-mt-8px { font-size:12px;color:var(--c-ink-soft);margin-top:8px; }
.u-fs-12px.u-fs-12px { font-size:12px; }
.u-mt-16px.u-mt-16px { margin-top:16px; }
.u-fs-12px-c-prototype-muted-lh-1-8.u-fs-12px-c-prototype-muted-lh-1-8 { font-size:12px;color:var(--studio-muted);line-height:1.8; }
.u-fl-right-bd-0-bg-none-fs-22px-cur-pointer.u-fl-right-bd-0-bg-none-fs-22px-cur-pointer { float:right;border:0;background:none;font-size:22px;cursor:pointer; }
.u-c-69665f-fs-12px-lh-1-7-m-0.u-c-69665f-fs-12px-lh-1-7-m-0 { color:var(--studio-muted);font-size:12px;line-height:1.7;margin:0; }
.u-fs-12px-c-69665f-mt-10px.u-fs-12px-c-69665f-mt-10px { font-size:12px;color:var(--studio-muted);margin-top:10px; }
.u-d-grid-gtc-1fr-gap-8px-m-18px-0-14px.u-d-grid-gtc-1fr-gap-8px-m-18px-0-14px { display:grid;grid-template-columns:1fr;gap:8px;margin:18px 0 14px; }
.u-ta-left-fs-12px-c-c-ink-soft-d-block-mb-6px.u-ta-left-fs-12px-c-c-ink-soft-d-block-mb-6px { text-align:left;font-size:12px;color:var(--c-ink-soft);display:block;margin-bottom:6px; }
.u-w-100-p-10px-12px-bd-1px-solid-c-line-br-0-bg-c.u-w-100-p-10px-12px-bd-1px-solid-c-line-br-0-bg-c { width:100%;padding:10px 12px;border:1px solid var(--c-line);border-radius:0;background:var(--c-surface-2);color:var(--c-ink);font-size:14px;box-sizing:border-box; }
.u-ta-left-fs-12px-c-c-ink-soft-d-block-m-12px-0-6p.u-ta-left-fs-12px-c-c-ink-soft-d-block-m-12px-0-6p { text-align:left;font-size:12px;color:var(--c-ink-soft);display:block;margin:12px 0 6px; }
.u-w-100-mt-16px.u-w-100-mt-16px { width:100%;margin-top:16px; }
.u-w-100-p-10px-12px-m-12px-0-16px-bd-1px-solid-c-l.u-w-100-p-10px-12px-m-12px-0-16px-bd-1px-solid-c-l { width:100%;padding:10px 12px;margin:12px 0 16px;border:1px solid var(--c-line);background:var(--c-surface-2);color:var(--c-ink);font-size:14px;box-sizing:border-box; }
.u-lh-1-7-c-c-ink-soft-m-12px-0-16px.u-lh-1-7-c-c-ink-soft-m-12px-0-16px { line-height:1.7;color:var(--c-ink-soft);margin:12px 0 16px; }
/* ===== C2（2026-09-14）：工具类被更高特异性组件规则压过时的等价补回 =====
   实测 4 处工具类（(0,2,0)）被 (1,1,x) 级容器规则（#directorWorkbenchView .xxx）压过，
   造成与改造前不同的计算样式。这里用同等 id 级特异性精确补回，不用 !important——
   依然保住「JS 运行时 el.style.x 写入优先」这条与原内联一致的语义。
   逐条对应改造前快照比对发现的差异，不是预防性堆砌。 */
#replicationEditStatus.u-mt-6px.u-mt-6px { margin-top:6px; }
#summarySuite.u-fs-13px.u-fs-13px { font-size:13px; }
#directorWorkbenchView :is(.free-reference-card,.reference-extension-card) em.u-fst-normal-c-prototype-muted.u-fst-normal-c-prototype-muted { font-style:normal; color:var(--studio-muted); }
#directorWorkbenchView :is(.free-progress-card,.reference-extension-progress-card) .bar.u-w-0.u-w-0 { width:0%; }

/* C2 批量 7（JS 生成侧·首屏可见）：把模板里还在写 style= 的声明换成工具类。
   与批量 6 同一约定：类名双写抬特异性到 (0,2,0)，不用 !important——
   站内有 80+ 处 el.style.x= 的运行时写入，!important 会让它们全部失效。 */
.u-gc-1-1-ta-center.u-gc-1-1-ta-center { grid-column:1/-1;text-align:center; }
.u-cur-zoom-in.u-cur-zoom-in { cursor:zoom-in; }
.u-mt-14px.u-mt-14px { margin-top:14px; }
.u-cur-pointer-fs-11px-c-studio-muted.u-cur-pointer-fs-11px-c-studio-muted { cursor:pointer;font-size:11px;color:var(--studio-muted); }
.u-cur-pointer-fs-10px-c-studio-muted.u-cur-pointer-fs-10px-c-studio-muted { cursor:pointer;font-size:10px;color:var(--studio-muted); }
.u-fs-10px-c-studio-muted-lh-1-8-mt-6px.u-fs-10px-c-studio-muted-lh-1-8-mt-6px { font-size:10px;color:var(--studio-muted);line-height:1.8;margin-top:6px; }

/* C2 批量 8b（生成式样式属性）：静态值进类/组件规则；动态值（封面图、进度条宽度）
   改由模板带 data-* 属性 + 插入后用 CSSOM 写入——CSSOM 不触发内联样式检查（C2-7 已逐 API 实测）。 */
#ovRetryBtn { margin-left:8px;padding:2px 10px; }
.pgo[disabled] { opacity:0.4;cursor:not-allowed; }
.planning-pager { grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:10px;padding:6px 0 2px; }
.studio-bg-preset-head em { font-style:normal;font-size:9px;color:var(--studio-muted);opacity:.8; }
.face-entry-body em { font-style:normal;color:#6b7688; }

/* C2 批量 8c（飞书面板）：静态声明进组件类/作用域规则；两个显示开关（#discoverResult / #authBtn）
   由内联 display 改为 u-d-none 类，JS 同步用 classList（漏改会导致结果卡/授权按钮永不出现）。 */
.feishu-technical-details .feishu-bind { margin:0 0 12px; }
.feishu-tech-title { font-weight:650; }
.feishu-tech-sub { font-size:12px;color:var(--c-ink-soft); }
#authBtn { margin:12px 0 0 8px; }
.feishu-discover-err { color:#c44; }
.feishu-match-name { font-size:12px;color:var(--c-ink-soft);margin-top:2px; }
.feishu-match-select { margin-top:4px;font-size:12px;padding:4px 6px;border:1px solid var(--c-line);background:var(--c-surface-2);color:var(--c-ink);max-width:220px; }
.feishu-match-row { display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid var(--c-line); }
.feishu-match-row .sec-label { margin:0; }
.feishu-badge-ok { font-size:12px;color:var(--tone-ok-bright);background:var(--tone-ok-wash);padding:3px 8px;border-radius:0; }
.feishu-badge-missing { font-size:12px;color:#999; }
.feishu-discover-actions { margin-top:12px;text-align:right; }
.feishu-discover-card { background:var(--tone-ok-wash);border:1px solid var(--tone-ok-line);border-radius:0;padding:14px 16px; }
.feishu-discover-title { font-weight:650;color:var(--tone-ok);font-size:14px;margin-bottom:8px; }
/* #authBtn 的显示开关：u-d-none(0,2,0) 在该元素上被更高特异性的规则压过（实测 computed 仍为 inline-flex），
   按 C2-6 的同款做法用 id 级选择器精确补回；JS 侧仍只用 classList 切 u-d-none。 */
#authBtn.u-d-none { display:none; }

/* C2 批量 8d（生成侧剩余 18 处）：全部为静态声明，进类/作用域规则。
   两处需与既有 id 级规则同特异性（并靠"追加在文件末尾"取胜）：
   #directorGalleryView .empty-gallery、#directorPlanningView .planning-copy-prompt。 */
.rr-field-label { display:block;margin-bottom:4px; }
.rr-field-input { width:100%;font-size:12px; }
#directorGalleryView .empty-gallery { grid-column:1/-1;text-align:center;padding:48px;color:var(--studio-muted); }
#directorGalleryView .empty-gallery.is-error { color:var(--c-danger); }
.review-gen-error { margin-top:12px;color:var(--st-err-fg); }
.review-retry-hist { margin-top:10px; }
.retry-confirm-note { margin-top:8px;color:var(--c-ink-soft); }
#directorPlanningView .planning-copy-prompt { display:block;text-align:center;text-decoration:none;box-sizing:border-box; }

/* ── 随机动作（angle 入口，2026-09-15）─────────────────────────────────────────────
   为什么在主样式表里而不是入口脚本注入 <style>：
   CSP 基线是 default-src 'self'（src/csp.js 未单独给 style-src），注入的内联样式在
   report-only 下会刷违规日志、切到 enforce 后会被直接拦掉（界面无样式）。
   所以本入口的样式与其它资产一样落在外部样式表里——入口脚本只负责结构与行为。
   命名前缀 .angle-* 只在本模式内使用，不影响既有任何模式。 */
#directorWorkbenchView #angleCreationLayout.angle-layout{display:flex;flex-direction:column;gap:14px}
/* [hidden] 必须显式关掉：类规则（author）会盖过 UA 的 [hidden]{display:none}，
   少了这条，切回其它模式时角度布局仍会显示，浮层更会一直盖在页面上（2026-09-15 截图抓到）。 */
#directorWorkbenchView #angleCreationLayout.angle-layout[hidden]{display:none}
/* B7 D2-A（2026-10-02）曾在此给 angle 补第二份卡面声明；2026-10-06 已上收到
   《工作台步骤卡面 —— 四模式唯一事实源》（见 guided 步骤组段落）。 */
#directorWorkbenchView #angleCreationLayout .angle-group{gap:8px}
#directorWorkbenchView #angleCreationLayout .angle-drop{display:flex;align-items:center;justify-content:center;min-height:96px;border:2px dashed rgba(148,163,184,.5);border-radius:12px;cursor:pointer;text-align:center;padding:12px}
#directorWorkbenchView #angleCreationLayout .angle-drop.is-over{border-color:#3b82f6;background:rgba(59,130,246,.06)}
#directorWorkbenchView #angleCreationLayout .angle-drop:focus-within{border-color:#3b82f6;background:rgba(59,130,246,.06)}
#directorWorkbenchView #angleCreationLayout .angle-drop input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
#directorWorkbenchView #angleCreationLayout .angle-drop strong{display:block;font-size:12px}
#directorWorkbenchView #angleCreationLayout .angle-drop small{display:block;margin-top:4px;font-size:12px;opacity:.7}
#directorWorkbenchView #angleCreationLayout .angle-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:8px}
#directorWorkbenchView #angleCreationLayout .angle-thumb{position:relative;margin:0;aspect-ratio:1;border-radius:10px;overflow:hidden;background:rgba(148,163,184,.12)}
#directorWorkbenchView #angleCreationLayout .angle-thumb img{width:100%;height:100%;object-fit:cover;display:block}
#directorWorkbenchView #angleCreationLayout .angle-remove{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;border:0;background:rgba(15,23,42,.7);color:#fff;cursor:pointer;line-height:1}
#directorWorkbenchView #angleCreationLayout .angle-counters{display:flex;flex-direction:column;gap:8px}
#directorWorkbenchView #angleCreationLayout .angle-counter{display:flex;align-items:center;gap:8px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.56);padding:7px 10px}
#directorWorkbenchView #angleCreationLayout .angle-counter-label{flex:1;min-width:44px;font-size:11px}
#directorWorkbenchView #angleCreationLayout .angle-step{width:30px;height:30px;border-radius:8px;border:1px solid rgba(148,163,184,.4);background:transparent;cursor:pointer;font-size:16px;line-height:1}
#directorWorkbenchView #angleCreationLayout .angle-count{min-width:24px;text-align:center;font-variant-numeric:tabular-nums}
#directorWorkbenchView #angleCreationLayout .angle-unit{font-size:12px;opacity:.6}
#directorWorkbenchView #angleCreationLayout .angle-sub{margin:0;font-size:12px;opacity:.7;line-height:1.5}
#directorWorkbenchView #angleCreationLayout .angle-actions{display:flex;align-items:center;gap:8px}
/* B 轮视觉统一（2026-10-06）：angle 描述框曾自带 10px 圆角 / 12px 字号 / rgba(148,163,184,.35) 描边，
   与同屏其它字段的 --studio-r-control 不是一套。现由 `.studio-desc-field>textarea` 统一供养。 */
#directorWorkbenchView #angleCreationLayout .angle-cta{width:100%}
#directorWorkbenchView #angleCreationLayout #angleGenerateBtn[hidden]{display:none!important}
#directorWorkbenchView #angleCreationLayout .angle-step:disabled{opacity:.35;cursor:not-allowed;pointer-events:none}
#directorWorkbenchView #angleCreationLayout .angle-actions .angle-sub{min-width:0;flex:1 1 auto;white-space:nowrap}
body .angle-mask[data-angle-ui]{position:fixed;inset:0;background:rgba(15,23,42,.55);display:flex;align-items:center;justify-content:center;z-index:60;padding:20px}
body .angle-mask[data-angle-ui][hidden]{display:none}
body .angle-mask[data-angle-ui] .angle-picker{background:#fff;border-radius:var(--studio-r-panel);max-width:880px;width:100%;max-height:82vh;overflow:auto;padding:16px}
body .angle-mask[data-angle-ui] .angle-picker header{display:flex;align-items:center;justify-content:space-between}
body .angle-mask[data-angle-ui] .angle-picker h3{margin:0;font-size:16px}
body .angle-mask[data-angle-ui] .angle-close{border:0;background:transparent;font-size:20px;cursor:pointer;line-height:1}
body .angle-mask[data-angle-ui] .angle-chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
body .angle-mask[data-angle-ui] .angle-chip{border:1px solid rgba(148,163,184,.4);background:transparent;border-radius:var(--studio-r-control);padding:4px 10px;font-size:12px;cursor:pointer}
body .angle-mask[data-angle-ui] .angle-chip.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}
body .angle-mask[data-angle-ui] .angle-picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-top:8px}
body .angle-mask[data-angle-ui] .angle-ref{margin:0}
body .angle-mask[data-angle-ui] .angle-ref img{width:100%;border-radius:10px;display:block;border:1px solid rgba(148,163,184,.25)}
body .angle-mask[data-angle-ui] .angle-ref figcaption{display:flex;flex-direction:column;gap:2px;margin-top:4px;font-size:12px}
body .angle-mask[data-angle-ui] .angle-ref figcaption span{opacity:.7;line-height:1.4}
body .angle-mask[data-angle-ui] .angle-asset-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px}
body .angle-mask[data-angle-ui] .angle-asset-card{position:relative;margin:0;cursor:pointer;border:2px solid transparent;border-radius:12px}
body .angle-mask[data-angle-ui] .angle-asset-card.active{border-color:#3b82f6}
body .angle-mask[data-angle-ui] .angle-asset-card img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:10px;display:block;background:rgba(148,163,184,.12)}
/* 批次07A：预览不可用占位，与img同尺寸 */
body .angle-mask[data-angle-ui] .angle-asset-card .angle-asset-preview-unavailable{width:100%;aspect-ratio:1;border-radius:10px;display:flex;align-items:center;justify-content:center;background:rgba(148,163,184,.12);color:#94a3b8;font-size:12px}
/* 批次07B：加载更多按钮 */
body .angle-mask[data-angle-ui] .angle-load-more{width:100%;margin-top:12px;padding:10px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;color:#3b82f6;font-size:13px;cursor:pointer;grid-column:1/-1}
body .angle-mask[data-angle-ui] .angle-load-more:hover{background:#f8fafc}
body .angle-mask[data-angle-ui] .angle-load-more:disabled{opacity:.6;cursor:not-allowed}
body .angle-mask[data-angle-ui] .angle-asset-card figcaption{display:flex;flex-direction:column;gap:2px;margin-top:4px;font-size:12px}
body .angle-mask[data-angle-ui] .angle-asset-card figcaption span{opacity:.7;line-height:1.4}
body .angle-mask[data-angle-ui] .angle-asset-card .angle-picked{position:absolute;top:6px;right:6px;background:#3b82f6;color:#fff;border-radius:999px;font-size:11px;padding:1px 7px}


/* ── 一键换装（tryon 入口，2026-09-15 从入口脚本外置）───────────────────────────
   与 angle 入口同因：CSP 基线只有 default-src 'self'（未单列 style-src），
   脚本注入的 <style> 在 report-only 下刷违规、切 enforce（C3）后会被直接拦掉。
   规则逐条原样搬迁（含两条 [hidden] 护栏），选择器全部 .tryon-* 前缀，与既有样式零冲突。 */
.tryon-layout{display:flex;flex-direction:column;gap:14px;padding:14px 16px 18px}
.tryon-layout[hidden]{display:none}
/* Stage 1（studio-edit 视觉语言对齐 · 2026-09-18 用户勾选 · 纯 CSS）：
   tryon（编辑已有图片）的三个步骤组原先**没有卡面**（pad 0 / 无边框 / r 0 ✗），
   与同一工作台其它模式的 #directorWorkbenchView .studio-panel 以及原型 .step **不一致** ✗。
   这里复用同一套既有权重令牌（与原型 .step 逐字同值 ✓）：
   border 1px var(--studio-line)（=rgba(148,163,184,.22) ✓）· radius var(--studio-r-panel)(18px ✓)
   · background rgba(255,255,255,.66) ✓ · padding 12px ✓。
   并把 .tryon-layout 的多余内缩去掉（原 14px 16px 18px ⇒ 卡宽 ≈351，原型 347 ✓）。
   作用域**仅限 tryon** ✓：其它模式（ecom/repl/free）不套 .tryon-group，不受影响 ✓。 */
#tryonCreationLayout{padding:0}
/* Stage 1（2026-09-18）曾在此给 tryon 补第三份卡面声明；2026-10-06 已上收到
   《工作台步骤卡面 —— 四模式唯一事实源》（见 guided 步骤组段落）。 */
.tryon-drop{display:flex;align-items:center;justify-content:center;min-height:96px;border:2px dashed var(--studio-line);border-radius:12px;cursor:pointer;background:rgba(255,255,255,.6);overflow:hidden;position:relative;font-size:12px;color:var(--studio-muted);text-align:center;padding:8px}
.tryon-drop input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer}
.tryon-drop img{max-width:100%;max-height:190px;border-radius:10px;display:block}
.tryon-drop-base{min-height:150px}
.tryon-garments{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.tryon-garment{display:flex;flex-direction:column;gap:6px}
.tryon-tag{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);padding:8px;font:11px/1.4 var(--studio-font);background:rgba(241,245,249,.72);color:var(--studio-text);box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
.tryon-mini{border:1px solid var(--studio-line);background:#fff;border-radius:var(--studio-r-control);padding:4px 8px;font-size:11px;color:var(--studio-muted);cursor:pointer}
.tryon-chips{display:flex;gap:8px;flex-wrap:wrap}
.tryon-chip{border:1px solid var(--studio-line);background:#fff;border-radius:var(--studio-r-control);padding:8px 12px;font:400 11px/1.2 var(--studio-font);cursor:pointer;color:var(--studio-ink)}
.tryon-chip.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue);font-weight:600}
.tryon-count{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:12px;color:var(--studio-muted)}
.tryon-count select{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
/* B 轮视觉统一（2026-10-06）：tryon 补充描述框同 angle，已收口到 `.studio-desc-field>textarea`。 */
/* D2（2026-09-24 用户裁定）：张数合计行，紧贴「输出张数」下方解释「底图数 × 张数」这层算术。
   取值 > 1 才显示（由 tryon-entry.js 的 renderCountNote 控制 hidden）。
   ⚠ 必须显式写 [hidden] 兜底：本文件顶部有 `*{margin:0;padding:0}` 之类的重置，
   而 display 值一旦被作者样式声明过，就会盖过 UA 的 [hidden]{display:none}（本仓踩过多次）。 */
.tryon-count-note{margin-top:6px}
.tryon-count-note[hidden]{display:none}
.tryon-cta{margin-top:12px;width:100%}
.tryon-empty{font-size:12px;color:var(--st-wait-fg);background:var(--st-wait-bg);border:1px solid var(--st-wait-bd);border-radius:10px;padding:8px 10px}
/* B 轮视觉统一（2026-10-06）：tryon / angle 的「高级设置」「更多设置」原本是 <details> 折叠条，
   现已升为正式步骤卡（见各入口脚本的 layoutHtml）⇒ 折叠盒 / summary / 箭头 / [open] 四条已无宿主，
   连同它们的 .tryon-adv / .angle-adv 盒一起删除。余下的 *-adv-body / *-adv-field / *-adv-hint 仍在用，
   改为与 .studio-field 同一套排版（在步骤卡内直接展开，不再需要 10px 内缩）。
   注意：不得给 .angle-* 写无作用域的裸选择器 —— 见 test/frontend-angle-root-cause.test.js。 */
/* 入口脚本共享的高级设置外观：业务类仍保留用于状态与测试，视觉只维护一份。 */
#directorWorkbenchView .studio-entry-adv-body{display:flex;flex-direction:column;gap:10px;padding:0}
#directorWorkbenchView .studio-entry-adv-field{display:flex;flex-direction:column;gap:5px;font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .studio-entry-adv-field select{width:100%;box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
#directorWorkbenchView .studio-entry-adv-hint{font-size:11px;color:var(--studio-muted);margin:0}
.tryon-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);display:flex;align-items:center;justify-content:center;z-index:60}
.tryon-mask[hidden]{display:none}
.tryon-mask-card{background:#fff;border-radius:var(--studio-r-panel);padding:16px 18px;max-width:420px;width:calc(100% - 32px);box-shadow:0 20px 50px rgba(15,23,42,.25)}
.tryon-mask-card h3{margin:0 0 8px;font-size:16px}
.tryon-mask-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}
/* 换装入口 · 素材库选图（Phase 1b）：从商品库选图的小面板。
   样式外置（CSP 纪律：入口不注入内联 <style>）。 */
.tryon-picker-mask{position:fixed;inset:0;background:rgba(15,17,26,.55);display:flex;align-items:center;justify-content:center;z-index:60}
.tryon-picker{background:#fff;border-radius:var(--studio-r-panel);max-width:min(92vw,720px);max-height:80vh;overflow:auto;padding:14px 16px;box-shadow:0 18px 48px rgba(0,0,0,.28)}
.tryon-picker-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:6px}
.tryon-picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:10px;margin-top:10px}
.tryon-picker-card{display:flex;flex-direction:column;gap:6px;border:1px solid #e6e8ef;border-radius:10px;background:#fff;padding:6px;cursor:pointer}
.tryon-picker-card:hover{border-color:#3b82f6}
.tryon-picker-thumb{display:block;width:100%;aspect-ratio:3/4;border-radius:8px;background:#f2f4f9 center/cover no-repeat}
.tryon-picker-card em{font-style:normal;font-size:11px;color:#4a4f63;text-align:center;line-height:1.3}

/* ── A′ 布局减负（2026-09-30）· 作用域仅换装 ─────────────────────────
   目标：配置列总高 空≤950 / 常规≤1150 / 极限≤1500（现状 2498/3438/4266，实测口径）。
   纪律：不删任何 id 节点（studio-app.js 跨模块读取 #tryonExtra/#tryonRatio/#tryonCount
   与 #tryonBaseBox 槽位分母），#tryonGenerateBtn 仅 CSS 隐藏（footer 镜像数据源）。 */
/* A1 底图槽：3 列缩略网格；上传图 1:1 裁切；hidden 槽必须真隐藏（分母保真，D2） */
#tryonBaseBox{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
#tryonBaseBox>p.director-sub{grid-column:1/-1;margin:2px 0 0}
.tryon-base-slot{position:relative}
.tryon-base-slot[hidden]{display:none!important}
.tryon-base-slot>img{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:10px;display:block}
.tryon-base-slot .tryon-drop-base{min-height:0;aspect-ratio:1/1;padding:4px;font-size:11px;line-height:1.3}
.tryon-base-slot .tryon-mini{position:absolute;right:4px;bottom:4px;padding:2px 6px;font-size:10px;background:rgba(255,255,255,.92)}
/* A2 服装图：只限高，不动 .tryon-garment 的 flex（flex 按钮并行实测 overflowX=305px，否决留档） */
.tryon-garments{grid-template-columns:repeat(2,minmax(0,1fr))}
.tryon-garment .tryon-drop{min-height:0;padding:0;overflow:hidden}
/* 审计修复（2026-09-30）：空槽必须保留与有图槽等高的上传可供性（96px→118px 与图高一致，上传零跳动）。
   min-height:0 曾把空槽点击目标压到 ~32px——上传服装图是核心动作，不省这 86px。 */
.tryon-garment .tryon-drop:not(:has(img)){min-height:118px}
.tryon-garment .tryon-drop img{max-height:118px;width:100%;object-fit:contain;background:#f8fafc}
.tryon-garment .tryon-tag{padding:8px}
.tryon-garment .tryon-mini{padding:3px 4px;font-size:10px}
/* A3 背景/身份参考图：矮行并排（.tryon-ref-row 由批 2 DOM 提供） */
.tryon-ref-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.tryon-bg-ref .tryon-drop-base{min-height:56px;font-size:11px}
.tryon-bg-ref>img{max-height:72px;width:auto;border-radius:8px;display:block}
/* A4 chips 紧凑 */
#tryonCreationLayout .tryon-chips{gap:6px}
/* A5 动作模式语义说明（D5：动作常显，需说明与换装互斥） */
.tryon-action-note{margin:4px 0 0;font-size:10px;line-height:1.5;color:var(--studio-muted)}
.tryon-action-note[hidden]{display:none!important}
/* A6 比例 + 张数同行（.tryon-field-row 由批 2 DOM 提供） */
.tryon-field-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.tryon-field-row>.tryon-count{margin-top:0}
/* A7 布局内 CTA 隐藏（节点保留：footer 镜像数据源 + frontend-tryon-entry.test.js 源码级锁定） */
#tryonCreationLayout #tryonGenerateBtn{display:none}
/* A8 补充描述压低（D4：保持常显）+ 折叠容器（批 2 DOM）
   B 轮视觉统一（2026-10-06）：.tryon-extra 的行内样式已收口到 `.studio-desc-field>textarea`，
   原 min-height:52px 在特异性上永远输给那条（且会造成 tryon 与其它三个面板的输入框高度不一致）⇒ 删除。 */
.tryon-more-body{display:flex;flex-direction:column;gap:8px;padding:0}
/* ── A′ 布局减负结束 ───────────────────────────────────────────── */
/* B′-lite：换装画布预览（2026-09-30）· 模式类驱动可见性；结果出炉自动让位；
   先例：.studio-canvas-body:has(#directorResultGrid[data-live="1"])（本文件结果区段） */
#tryonCanvasPreview{display:none;flex-wrap:wrap;gap:12px;align-items:flex-start;padding:2px 0 8px}
.studio-workbench.mode-tryon #tryonCanvasPreview{display:flex}
#tryonCanvasPreview[hidden]{display:none!important}
.studio-canvas-body:has(#tryonCanvasPreview:not([hidden])) .studio-canvas-empty{display:none}
.studio-canvas-body:has(#directorResultGrid[data-live="1"]) #tryonCanvasPreview{display:none}
.tryon-canvas-main{position:relative;max-width:min(420px,46%)}
.tryon-canvas-main img{width:100%;max-height:460px;object-fit:contain;border-radius:14px;border:1px solid var(--studio-line);background:rgba(255,255,255,.66);display:block}
.tryon-canvas-cap{display:block;margin-top:4px;font-size:10px;color:var(--studio-muted)}
.tryon-canvas-garments{display:flex;flex-direction:column;gap:10px}
.tryon-canvas-g img{width:132px;height:132px;object-fit:contain;border-radius:12px;border:1px solid var(--studio-line);background:rgba(255,255,255,.66);display:block}
.tryon-canvas-g span{display:block;margin-top:3px;font-size:10px;color:var(--studio-muted)}

/* D4（2026-09-18）：能力拓展屏「采集工具」卡的动作行 —— 主/次按钮（原型同层级 ✓）。
   纯样式 ✓ 作用域仅该卡 ✓；链接地址与 download 属性未变 ✗。 */
.capability-tool-actions{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}
.capability-tool-primary{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:var(--studio-r-control);background:linear-gradient(135deg,#111827,#071022);color:#fff;font:600 12px/1 var(--studio-font);text-decoration:none}
.capability-tool-primary:hover{transform:translateY(-1px);box-shadow:0 10px 18px rgba(15,23,42,.18)}
.capability-tool-secondary{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:var(--studio-ink);font:600 12px/1 var(--studio-font);cursor:pointer}
.capability-tool-secondary:hover{background:#fff;box-shadow:0 4px 12px rgba(15,23,42,.08)}
/* Stage 3b（2026-09-18 用户裁定）：换装结果「原图 / 换装后」逐组对照（原型 .pair 同构 ✓）。
   只在凭据匹配当次任务时由脚本加 .is-pair ✓（无凭据 ⇒ 卡片结构与之前逐字一致 ✗ 不受影响）。 */
.studio-result-card.is-pair .studio-result-pair{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.studio-result-card.is-pair .studio-result-side{display:flex;flex-direction:column;gap:3px;min-width:0}
.studio-result-card.is-pair .studio-result-side>span{font-size:9px;text-align:center;color:var(--studio-muted)}
.studio-result-card.is-pair .studio-result-thumb.is-base img{opacity:.94}
.studio-result-grid.is-pair .studio-result-card{min-width:0}
/* ══════════════════════════════════════════════════════════════════════
   原型复刻（P1/P2 · 2026-09-18）
   基准＝`验收/ia-prototype-v1/index.html` 的 .wb / .start-pick / .step / .lock / .canvas-top。
   纪律：只把**原型已有、生产缺或走偏**的形态补回来，几何值逐项对齐原型；
   不引入新配色、新圆角、新字体、新动效 ✗；新增控件一律复用既有 --studio-* 令牌 ✓。 */

/* 起点区第 4 格「一键换装」：能力未开放时保留固定位置，并以灰态和不可点击状态说明当前不可用。 */
.studio-mode-tab.is-unavailable{color:#a3aab6;background:rgba(241,245,249,.45);border-style:dashed;cursor:not-allowed}
.studio-mode-tab.is-unavailable:hover{background:rgba(241,245,249,.45);color:#a3aab6;box-shadow:none}

/* 概览起点卡（.overview-start-card）禁用态：与 .studio-mode-tab.is-unavailable 同视觉语言。
   必须带 .app-shell>.app 前缀，否则压不过基础卡规则（见上方 ov-start-ic 注释的特异性教训）；
   hover 需额外归零 transform（基础卡 hover 有 translateY(-3px)）。 */
.app-shell>.app .overview-start-card.is-unavailable{color:#a3aab6;background:rgba(241,245,249,.45);border-color:#d0d5dd;border-style:dashed;cursor:not-allowed}
.app-shell>.app .overview-start-card.is-unavailable:hover{background:rgba(241,245,249,.45);color:#a3aab6;box-shadow:none;transform:none}
.app-shell>.app .overview-start-card.is-unavailable .ov-start-ic{opacity:.4}

/* 04 角色卡（原型 .step 第 4 格）：一行 = 缩略图 + 名称/状态 + 管理入口，与 .lock .kv 同节奏。 */
#directorWorkbenchView .studio-card-panel{padding:10px}
.studio-card-row{display:flex;align-items:center;gap:10px;min-width:0}
.studio-card-thumb{width:48px;height:60px;flex:none;border-radius:10px;background:#e2e8f0 center/cover no-repeat;overflow:hidden}
.studio-card-thumb.is-empty{display:grid;place-items:center;padding:4px;text-align:center;font-size:9px;line-height:1.3;color:var(--studio-muted);background:rgba(241,245,249,.8)}
.studio-card-copy{min-width:0;flex:1 1 auto}
.studio-card-copy strong{display:block;font-size:12px;font-weight:650;color:var(--studio-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.studio-card-copy span{display:block;margin-top:3px;font-size:10px;line-height:1.45;color:var(--studio-muted)}
.studio-card-manage{flex:none;margin-left:auto;border:1px solid var(--studio-line);border-radius:10px;background:rgba(255,255,255,.72);color:var(--studio-blue);padding:6px 9px;font:600 10px/1.2 var(--studio-font);cursor:pointer;white-space:nowrap}
.studio-card-manage:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .studio-card-note{margin:8px 0 0;font-size:11px;line-height:1.5;color:var(--studio-muted)}

/* P2（2026-09-18）：**步骤卡的卡面归位到 .studio-group 自身** —— 原型 `.step` 是
   「一个带描边/圆角的卡，标题就在卡内（`.step > .step-head`）」。
   生产版把标题放在卡外、由内层 .studio-panel 当卡，于是左栏看上去是一串「浮动标签 + 卡」
   （卡与卡之间多出一层视觉台阶），与原型不是一回事。
   这里把两者对调 —— **纯 CSS**：外组背卡面，内层 .studio-panel 去卡面 ✓（DOM/JS 一字未动）。
   作用域限 `#guidedCreationLayout >`（仅 01–06 这六个直接子组），嵌套的镜头组与
   free/tryon/angle 自持布局均不受影响 ✓。 */
/* A2（2026-09-19 审核修复）：下面三条原写作 `#guidedCreationLayout>.studio-group`（直接子）。
   但 C1 给 01/02 加了纯包层 `.studio-quick-zone`、把 03–06 收进 `<details>`，A2 又新增了
   「生成方式」块 —— 三个包装层都把「直接子」关系打断，规则**整条失效**（页面上不报错，
   只是卡面变成裸文字 + 卡间距塌成 0）。实测：01 商品组 border 由 1px 掉到 0px（对照 pre-C1
   基线 2d129fc），01→02 间距由 14px 掉到 0px。
   改用 `:is()` 收口 —— 卡面/去卡面/组头间距只定义一次，包装层怎么变都不会再失效。
   `:is()` 兼容目标环境（本仓已用 :has()/:where() 同代特性），且不改变任何原有选择器语义。 */
/* ── 工作台步骤卡面 —— 四模式唯一事实源（B 轮视觉统一 2026-10-06）─────────────────────
   改前同一张卡面被声明了四次：guided（本处）/ angle（L5024 区）/ tryon（Stage 1 区），
   而 free·repl 走的是**反向分叉**（灰底、无描边、灰标题）。四处各自漂移的结果：同一个左栏
   切换模式就从「卡片式表单」变成「分隔线式表单」，产品感像换了一个应用。
   现在只在这里定义一次。作用域 = 工作台视图 × 五个布局根（实测五者同为 #studioConfigScroll
   的直接子、同在 #directorWorkbenchView 下），不外溢到灵感 / 资产中心 / 设置屏。
   包装层（.studio-quick-zone / .studio-advanced-fold-body）与直挂两种形态都收，沿用 A2 的 :is() 手法。 */
#directorWorkbenchView :is(#guidedCreationLayout,#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
#directorWorkbenchView :is(#guidedCreationLayout,#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout)>.studio-group{border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.66);padding:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
/* 卡面归步骤组自身 ⇒ 内层容器只做内容布局，不再画第二层卡（避免卡中卡）。 */
#directorWorkbenchView :is(#guidedCreationLayout,#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group>.studio-panel,
#directorWorkbenchView :is(#guidedCreationLayout,#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout)>.studio-group>.studio-panel{border:0;border-radius:0;background:none;box-shadow:none;padding:0}
/* 步骤标题层级：卡内标题恒为深色主文字。改前 free 的 02/03 被压成 --studio-muted ——
   它们其实是当前流程的正式步骤，降色会让用户读成「次要 / 不可用」。
   「可选」这类语义一律走组头右侧的辅助说明，不靠降低标题颜色表达。 */
#directorWorkbenchView :is(#guidedCreationLayout,#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group>.studio-group-head h2,
#directorWorkbenchView :is(#guidedCreationLayout,#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout)>.studio-group>.studio-group-head h2{color:var(--studio-ink)}

/* ── 工作台描述字段 —— 统一字段标注（B 轮视觉统一 2026-10-06）───────────────────────
   angle / tryon 的描述输入改前**只有 placeholder**（失焦即消失 ⇒ 字段语义无处可查）。
   统一为：可见字段名 + 输入框 + 可选辅助说明，与 .studio-field label 同一排版。 */
#directorWorkbenchView .studio-desc-field{display:flex;flex-direction:column;gap:6px;min-width:0}
/* 注意：这里**不得**声明 display —— 规则特异性 (1,1,0) 会压过工具类 .u-d-none，
   让运行时给本容器子树加的 u-d-none 隐不掉（test/frontend-utility-specificity.test.js 会拦）。
   容器本身已是 flex column，子项会被 blockify，无需再写 display。 */
#directorWorkbenchView .studio-desc-field>:is(span,label){font-size:10px;color:var(--studio-muted);margin:0 0 0 2px}
#directorWorkbenchView .studio-desc-field>textarea{width:100%;box-sizing:border-box;min-height:64px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);padding:8px;font-family:var(--studio-font);font-size:11px;line-height:1.6;resize:vertical}
#directorWorkbenchView .studio-desc-field>small{font-size:11px;line-height:1.5;color:var(--studio-muted)}
/* 自由创作的 Prompt 是主创作输入（rows=7）⇒ 比其它三个选填补充框高。这是业务差异，不是样式分歧。 */
#directorWorkbenchView #freeStepPrompt .studio-desc-field>textarea{min-height:120px}
/* 组头在卡内 ⇒ 标题与首行内容的间距按原型 `.step-head{margin:0 0 9px}`。 */
#guidedCreationLayout :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group>.studio-group-head,
#guidedCreationLayout>.studio-group>.studio-group-head{margin:0 0 9px}
/* 05 输出设置的摘要镜像（P2-5：改第二行整行展示，同 P2-5 那组 .studio-group-head flex-wrap 规则成对修改）。 */
#guidedCreationLayout :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-output-step .studio-advanced-sum,
#guidedCreationLayout>.studio-output-step .studio-advanced-sum{flex-basis:100%;order:9;margin:2px 0 0;font:400 9px var(--studio-font);color:var(--studio-muted);text-align:left;white-space:normal;overflow:visible}
/* P2-5：仅 06 的组头开 flex-wrap（摘要 order:9 + basis:100% 才能落到第二行）。 */
#guidedCreationLayout :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-output-step>.studio-group-head,
#guidedCreationLayout>.studio-output-step>.studio-group-head{flex-wrap:wrap}
/* 快速生产区与折叠体内的**步骤卡之间**要有 14px 节奏（原由 #guidedCreationLayout 的 flex gap 提供，
   现被包装层截断）。只加纵向间距，不动卡内布局。 */
#guidedCreationLayout>.studio-quick-zone{display:flex;flex-direction:column;gap:14px;min-width:0}

/* P2：05 镜头方案 —— 原型是**单列行列表**（`.rows > .row`：无卡面、行间柔软分隔线、
   左侧方形勾选块），生产版原本是 2 列描边小卡 ✗。这里按原型改回行列表。
   勾选框是真 `<input type=checkbox>`（无障碍/键盘行为不变）；`<input>` 不能画 ::before/::after，
   故用 accent-color 上蓝（不引 data: 图标 —— CSP 纪律）。 */
#directorWorkbenchView .studio-shots-panel{display:flex;flex-direction:column;gap:0;padding:0}
#directorWorkbenchView .director-shot-row{display:flex;align-items:flex-start;gap:9px;padding:8px 0;border:0;border-bottom:1px solid var(--studio-line-soft);border-radius:0;background:none;box-shadow:none;transition:none}
#directorWorkbenchView .director-shot-row:last-child{border-bottom:0}
#directorWorkbenchView .director-shot-row:hover{background:none;box-shadow:none}
#directorWorkbenchView .director-shot-row.active{background:none;box-shadow:none;border-color:var(--studio-line-soft)}
#directorWorkbenchView .director-shot-row input[type=checkbox]{appearance:none;-webkit-appearance:none;box-sizing:border-box;width:15px;height:15px;flex:none;margin:1px 0 0;border:1px solid var(--studio-line-2);border-radius:5px;background:#fff;accent-color:var(--studio-blue);cursor:pointer}
#directorWorkbenchView .director-shot-row input[type=checkbox]:checked{background:var(--studio-blue);border-color:var(--studio-blue)}
#directorWorkbenchView .director-shot-row input[type=checkbox]:focus-visible{outline:2px solid var(--studio-blue-line);outline-offset:2px}
#directorWorkbenchView .director-shot-copy strong{font-size:11px}
#directorWorkbenchView .director-shot-copy span{font-size:11px}

/* P2-b（2026-09-18 审核补做）：自由创作的左栏按原型 `STEP_FREE` 重排为三步卡
   （01 描述画面 / 02 可选资产 / 03 输出设置）。卡面与商拍 01–06 同一套令牌；
   内层 .free-* 面板去卡面 —— 与 guided 的 .studio-panel 同一手法，避免「卡中卡」。
   作用域限 `#freeCreationLayout >`（直接子组），复刻面板与摘要/进度卡不受影响 ✓。 */
/* A2（2026-09-19 审核修复）：`#freeStepAssets` / `#freeStepOutput` 被收进
   #studioAdvancedFoldFree 后，「直接子组」关系被折叠体打断 —— 原 `#freeCreationLayout>`
   规则整条失效（02/03 两张步骤卡掉卡面，与默认区的 01 不再同一套外观）。
   与 guided 同法用 `:is()` 收口：折叠体内外一视同仁。 */
#freeCreationLayout>.studio-group,
#freeCreationLayout .studio-advanced-fold-body>.studio-group{display:flex;flex-direction:column;min-width:0;margin:0}
#directorWorkbenchView #freeCreationLayout #freeGenerateBtn[hidden]{display:none}
#directorWorkbenchView #freeCreationLayout .free-progress-card{display:none}
#freeCreationLayout>.studio-group>.studio-group-head,
#freeCreationLayout .studio-advanced-fold-body>.studio-group>.studio-group-head{margin:0 0 9px}
#freeCreationLayout>.studio-group>:is(.free-prompt-panel,.reference-extension-prompt-panel),
#freeCreationLayout>.studio-group :is(.free-reference-card,.reference-extension-card),
#freeCreationLayout>.studio-group>:is(.free-settings-card,.reference-extension-settings-card),
#freeCreationLayout .studio-advanced-fold-body>.studio-group :is(.free-reference-card,.reference-extension-card),
#freeCreationLayout .studio-advanced-fold-body>.studio-group>:is(.free-settings-card,.reference-extension-settings-card){border:0;border-radius:0;background:none;padding:0;min-height:0}
/* P2-f（2026-09-18）：参考图复刻的左栏按原型 `STEP_REPL` 组织为两张步骤卡
   （01 来源素材 / 配方、02 拍法与输出）—— 与自由创作/商拍同一套卡面令牌。
   内层 :is(.free-reference-card,.reference-extension-card) 去卡面（消「卡中卡」）；`.reference-extension-panel` 是**布局容器**，
   在工作台内不再背第二层卡面（卡面由步骤卡承担）；两卡之间用柔软分隔线分出「上传」与「分析结果」。 */
#directorWorkbenchView .reference-extension-panel{border:0;background:none;padding:0}
/* A2（2026-09-19 审核修复）：`#replStepOutput` 被收进 #studioAdvancedFoldRepl 后，
   `#replicationCreationLayout>` 的直接子规则对折叠体内那条同样失效 —— 与 free 同法收口。 */
#replicationCreationLayout>.studio-group,
#replicationCreationLayout .studio-advanced-fold-body>.studio-group{display:flex;flex-direction:column;min-width:0;margin:0}
#replicationCreationLayout>.studio-group>.studio-group-head,
#replicationCreationLayout .studio-advanced-fold-body>.studio-group>.studio-group-head{margin:0 0 9px}
#replicationCreationLayout>.studio-group>.director-sub,
#replicationCreationLayout .studio-advanced-fold-body>.studio-group>.director-sub{margin:0 0 9px}
#replicationCreationLayout>.studio-group>.reference-extension-inline-note,
#replicationCreationLayout .studio-advanced-fold-body>.studio-group>.reference-extension-inline-note{margin:0 0 10px}
#replicationCreationLayout>.studio-group :is(.free-reference-card,.reference-extension-card),
#replicationCreationLayout .studio-advanced-fold-body>.studio-group :is(.free-reference-card,.reference-extension-card){border:0;border-radius:0;background:none;padding:0;min-height:0}
#replicationCreationLayout>.studio-group :is(.free-reference-card,.reference-extension-card)+:is(.free-reference-card,.reference-extension-card),
#replicationCreationLayout .studio-advanced-fold-body>.studio-group :is(.free-reference-card,.reference-extension-card)+:is(.free-reference-card,.reference-extension-card){margin-top:10px;padding-top:10px;border-top:1px solid var(--studio-line-soft)}

/* 03 输出设置 / 复刻 02 拍法与输出：设置格按原型 `.grid.g2` 两列（与商拍 06 的 .studio-settings-grid 同制）。
   须限定在 ≥521px：基线在 ≤520px 会把它降为单列，无条件的同权重规则会把窄屏又抬回两列 ✗。 */
@media(min-width:521px){
  #freeCreationLayout>.studio-group>:is(.free-settings-card,.reference-extension-settings-card)>:is(.free-settings-grid,.reference-extension-settings-grid),
  #freeCreationLayout .studio-advanced-fold-body>.studio-group>:is(.free-settings-card,.reference-extension-settings-card)>:is(.free-settings-grid,.reference-extension-settings-grid),
  #replicationCreationLayout>.studio-group :is(.free-settings-grid,.reference-extension-settings-grid),
  #replicationCreationLayout .studio-advanced-fold-body>.studio-group :is(.free-settings-grid,.reference-extension-settings-grid){grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* 04 画面职责的「随机动作」增量入口（原型无此取法 · 应用独有 ⇒ 归位到它控制的轴旁，
   不再占起点区一格）。用虚线分隔：它是本区里的另一条取法，不是第二个区。 */
.studio-axis-alt{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:11px;padding-top:10px;border-top:1px dashed var(--studio-line)}
.studio-axis-alt[hidden]{display:none!important}
.studio-axis-alt-note{flex-basis:100%;font-size:10px;line-height:1.5;color:var(--studio-muted)}

/* 正侧背套图布局顶部的返回行：它是从 05 的增量入口进来的，必须给一条回得去的路 ✓。 */
/* 2026-10-18 基准 1:1：返回行已按验收基准删除（基准无「← 返回电商主图」）⇒ 对应三条规则一并移除，不留死规则。 */

/* 画布副标题对齐原型 `.canvas-top .sub`(11.5px) / `.order`(11px)。
   （标题 16px 已写在 .studio-canvas-top h2 本身。） */
.studio-canvas-subtitle{font-size:11px}
.studio-canvas-top .director-production-order{font-size:11px}

/* Workbench density pass: keep the benchmark's fixed rail rhythm without changing the
   existing mode grid or the desktop-only viewport contract. */
#directorWorkbenchView .studio-mode-hint{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:32px;min-height:30.8px;overflow:hidden;line-height:1.4}
#directorWorkbenchView .studio-config-scroll{padding-top:12px;padding-bottom:16px}
#directorWorkbenchView .studio-group-head{margin-bottom:6px}
#directorWorkbenchView #guidedCreationLayout{gap:10px}
#directorWorkbenchView #guidedCreationLayout .studio-advanced-fold-body{gap:10px}
#directorWorkbenchView .studio-advanced-fold-body>.studio-group>.studio-panel{padding:10px}
#directorWorkbenchView .studio-quick-plan{padding:8px 10px}
#directorWorkbenchView .studio-quick-plan>strong{font-size:11px;line-height:1.35}
#directorWorkbenchView .studio-quick-plan>span{display:none}
#directorWorkbenchView .studio-config-note{min-height:16px;margin-top:6px;line-height:1.4}
#directorWorkbenchView .studio-config-note[data-next-step="ready"]{color:var(--st-ok-fg)}
#directorWorkbenchView .studio-config-note[data-next-step="auth"],
#directorWorkbenchView .studio-config-note[data-next-step="account"]{color:var(--studio-blue)}
/* 角色卡拼图（A 档）：把成片/本地图片拼成多宫格角色卡。
   样式外置（CSP 纪律：入口不注入内联 <style>）；前缀 .cboard-* 与 IA 线 .settings-* 互不重叠。 */
.cboard-mask{position:fixed;inset:0;background:rgba(15,17,26,.55);display:flex;align-items:center;justify-content:center;z-index:70}
.cboard-mask[hidden]{display:none}
.cboard-panel{background:#fff;border-radius:14px;width:min(96vw,1080px);max-height:88vh;overflow:auto;padding:16px 18px;box-shadow:0 20px 50px rgba(15,23,42,.28)}
.cboard-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.cboard-head h3{margin:0;font-size:16px}
.cboard-hint{color:#7b8494;font-size:11px}
.cboard-close{margin-left:auto;background:0 0;border:1px solid #e2e6ef;border-radius:8px;padding:6px 12px;font-size:12px;color:#4a4f63;cursor:pointer}
.cboard-body{display:grid;grid-template-columns:250px minmax(300px,1fr);gap:16px}
.cboard-label{color:#6a7387;font-size:11px;margin:12px 0 7px}
.cboard-items{display:flex;flex-direction:column;gap:6px}
.cboard-item{display:flex;align-items:center;gap:6px;border:1px solid #e9ecf3;border-radius:9px;padding:5px 6px}
.cboard-thumb{width:34px;height:34px;flex-shrink:0;border-radius:8px;background:#f2f4f9 center/cover no-repeat}
.cboard-item-name{flex:1;min-width:0;font-size:11px;color:#4a4f63;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cboard-mini{background:0 0;border:1px solid #e2e6ef;border-radius:8px;padding:3px 7px;font-size:11px;color:#5b6274;cursor:pointer}
.cboard-mini:disabled{opacity:.4;cursor:default}
.cboard-add{display:inline-flex;align-items:center;justify-content:center;margin-top:8px;border:1px dashed #c9cfdd;border-radius:9px;padding:9px;font-size:12px;color:#4a4f63;cursor:pointer}
.cboard-add:hover{border-color:#3b82f6;color:#2563eb}
.cboard-templates,.cboard-tier{display:flex;flex-direction:column;gap:6px}
.cboard-tpl,.cboard-tier-btn{text-align:left;background:0 0;border:1px solid #e2e6ef;border-radius:9px;padding:8px 10px;font-size:12px;color:#4a4f63;cursor:pointer}
.cboard-tpl.active,.cboard-tier-btn.active{border-color:#3b82f6;color:#2563eb;background:#f4f6ff}
.cboard-stage{background:#eef1f7;border-radius:10px;padding:12px;display:flex;justify-content:center}
.cboard-canvas{max-width:100%;border-radius:8px;box-shadow:0 4px 14px rgba(23,35,64,.12)}
.cboard-facts{color:#6a7387;font-size:11px;line-height:1.6;margin:10px 0 0}
.cboard-actions{display:flex;gap:8px;margin-top:12px}
.cboard-primary{border:0;border-radius:9px;padding:9px 14px;font-size:12px;color:#fff;background:#3b82f6;cursor:pointer}
.cboard-busy{color:#2563eb;font-size:11px;margin-top:8px}
.cboard-error{color:#c0392b;font-size:11px;margin-top:6px}
@media (max-width:820px){.cboard-body{grid-template-columns:1fr}.cboard-stage{padding:8px}}
.cboard-mini.active,.cboard-tpl.active{border-color:#3b82f6;color:#2563eb;background:#f4f6ff}
.cboard-help{color:#7b8494;font-size:11px;line-height:1.6;margin:4px 0 0}
.cboard-item.active{border-color:#3b82f6;background:#f6f7ff}
.cboard-picker-mask{z-index:80}
.cboard-picker{background:#fff;border-radius:14px;width:min(94vw,720px);max-height:86vh;overflow:auto;padding:14px 16px;box-shadow:0 18px 48px rgba(0,0,0,.28)}
.cboard-pick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:10px;margin:8px 0 12px}
.cboard-pick-card{display:flex;flex-direction:column;gap:5px;border:1px solid #e6e8ef;border-radius:10px;background:#fff;padding:6px;cursor:pointer}
.cboard-pick-card.active{border-color:#3b82f6;background:#f4f6ff}
.cboard-pick-thumb{width:100%;aspect-ratio:3/4;border-radius:8px;background:#f2f4f9 center/cover no-repeat}
.cboard-pick-label{font-size:11px;color:#4a4f63;text-align:center;line-height:1.3}

/* 角色卡拼图（A 档）P4：写回飞书区块 */
.cboard-writeback{margin-top:12px;border-top:1px solid #eef0f6;padding-top:10px}
.cboard-check{display:flex;align-items:center;gap:7px;font-size:12px;color:#4a4f63;cursor:pointer}
.cboard-wb-row{display:flex;gap:6px;align-items:center;margin-top:7px}
.cboard-wb-row select{flex:1;min-width:0;font-size:12px;padding:5px 7px;border:1px solid #e2e6ef;border-radius:8px;color:#4a4f63}

/* 角色卡拼图（A 档）审核修复：窄屏降级 */
.cboard-mobile-hint{background:#fff7ec;border:1px solid #f5d9b0;border-radius:8px;color:#8a5a12;font-size:11px;line-height:1.6;padding:8px 10px;margin-top:10px}
.cboard-narrow .cboard-tools,.cboard-narrow .cboard-help{display:none}

/* ---- S1/S2/S3 前端原型对齐（2026-09-17）---- */
/* P2/S3：复用既有 .overview-recent-image 类（原先只有 2 条规则、无渲染点 = 死类）。
   本规则在文件更靠后处声明 ⇒ 尺寸以这里为准，同时白捡既有的 hover 缩放。 */
.overview-recent-image{flex:none;width:44px;height:44px;border-radius:10px;overflow:hidden;display:block;background:#f1f5f9}
.overview-recent-image img{width:100%;height:100%;object-fit:cover;display:block}
.overview-recent-image.is-empty{background-image:repeating-linear-gradient(135deg,rgba(148,163,184,.22) 0 6px,rgba(148,163,184,.06) 6px 12px)}
/* 生产统计：待验收 > 0 时高亮引导（2026-10-02 用户裁定：验收是最高频后续操作） */
.app-shell>.app .overview-todo.has-pending{border-left:3px solid var(--tone-warn);padding-left:10px}
.app-shell>.app .overview-todo.has-pending .pending-cta{display:block;margin-top:2px;font-size:10px;color:var(--tone-warn);font-weight:650;letter-spacing:.02em}
.app-shell>.app .overview-todo .pending-cta{display:none}
/* 新用户空态精简（2026-10-02 UX 优化）：无生产任务且无 gallery 记录时，
   隐藏统计条/最近使用/任务列表，首屏只保留「开始生产」4 入口。
   两级判定：tasks 为空 → 加 is-empty；gallery 有数据 → 移除 is-empty。 */
#screen-overview.is-empty .overview-task-label,
#screen-overview.is-empty .overview-todo-strip,
#screen-overview.is-empty #overviewRecentUsage,
#screen-overview.is-empty .overview-progress-label,
#screen-overview.is-empty #planList{display:none}
.overview-recent-card{display:flex;align-items:center;gap:10px}

/* S6 的「折叠区 summary 步骤编号」规则已删除（P1-c 2026-09-18）：输出设置不再是折叠区，
   它的编号跑 .studio-group-head h2 .guided-no 那条既有规则（与 01–04 同款观感 ✓）。
   2026-10-02 编号平移：原 06 → 05（04 角色卡合并入 03 后顺次前移）。 */

/* ⑥ 最近使用三列（配方 / 角色卡 / 商品）—— 值逐项取自原型 .recent / .panel / .recent .row */
#screen-overview .overview-recent-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:16px}
.home-recent-panel{border:1px solid var(--studio-line,#e5e7eb);border-radius:var(--studio-r-panel,14px);
  background:rgba(255,255,255,.72);padding:14px 16px;min-width:0}
.home-recent-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.home-recent-head .tiny{font-size:11px;color:var(--studio-muted,#7b8492)}
.home-recent-more{margin-left:auto;background:none;border:0;padding:0;font:inherit;font-size:11px;
  color:var(--studio-muted,#7b8492);cursor:pointer}
.home-recent-more:hover{color:var(--studio-accent,#3b82f6)}
.home-recent-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--prototype-line-soft,#eef2f7)}
.home-recent-row:last-child{border-bottom:0}
.home-recent-row.is-go{cursor:pointer}
.home-recent-row.is-go:hover .home-recent-copy b{color:var(--studio-accent,#3b82f6)}
/* 复用 S3 的缩略图类（含斜纹占位），在此上下文里按原型的 40px 呈现 */
.home-recent-row .overview-recent-image{width:40px;height:40px;border-radius:10px}
.home-recent-copy{min-width:0;display:flex;flex-direction:column;gap:1px}
.home-recent-copy b{font-size:12px;font-weight:600;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.home-recent-copy small{font-size:11px;color:var(--studio-muted,#7b8492);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.home-recent-empty{font-size:11px;color:var(--studio-muted,#7b8492);padding:6px 0;line-height:1.6}
.home-recent-hint{font-size:11px;color:var(--studio-muted,#7b8492);margin-bottom:4px}

/* 资产中心区域副标题（含批次与交付 / 角色资产等子区共用）—— 值逐项取自原型 .sub 实测：
   12px / rgb(123,132,146) / line-height 18px / margin-top 5px。
   两屏（#directorGalleryView 与 #screen-accounts）各有一份表头，但**互斥显示**，故不会重复。 */
/* 注意：不加 .app-shell>.app 前缀 —— 画廊屏（#directorGalleryView）不在那条祖先链里，
   带前缀会「看起来改了实则没匹配上」（本次实测踩到，用 CSSOM 枚举才发现）。
   同特异性 + 在文件更后 ⇒ 覆盖前面那条 13px 的 .director-gallery-top .director-sub。 */
.director-gallery-top .director-sub,
.app-shell>.app .phead .director-sub{font-size:12px;line-height:18px;margin:5px 0 0;color:var(--studio-muted)}

/* 首页 phead 左侧组（小标 + 主标题）：让它成为 flex 的一个子项，避免被 space-between 顶到中间 */
.phead-lead{min-width:0}

/* #1 起点卡图标：几何与颜色逐项取自原型 `.start-card .ic` / `.ic svg`
   （30×30 · radius 9 · blue-soft 底；svg 16×16 · 描边 · sw 1.8 · 圆头圆角） */
/* 必须带上 .app-shell>.app 前缀：否则 `.app-shell > .app .overview-start-card span`
   （3 类 + 元素）会把这里的 color 压成 --studio-muted —— 实测图标描边变灰、与原型蓝不符。
   同时保留无前缀版本，防止将来祖先链变化时失效。 */
.overview-start-card .ov-start-ic,
.app-shell>.app .overview-start-card .ov-start-ic{width:30px;height:30px;border-radius:9px;
  background:var(--studio-blue-soft,#eff6ff);color:var(--studio-blue,#3b82f6);
  display:grid;place-items:center}
.overview-start-card .ov-start-ic svg,
.app-shell>.app .overview-start-card .ov-start-ic svg{width:16px;height:16px;fill:none;
  stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* #2 「当前待处理」计数块：数值逐项取自原型 `.todo` / `.todo .n` / `.todo .l`
   （数字 20px/700 · 标签 11.5px · 底色 .78 · 无最小高度 · hover 上浮 1px） */
/* 起点卡几何对齐原型 `.start-card`（padding 14px · gap 8px · 标题 13px；原型无 min-height，
   原 88px 是多余的硬下限）*/

.cap-state{margin-left:8px;font-size:10px;padding:1px 7px;border-radius:999px;font-weight:600;
  background:var(--studio-muted-soft,#f1f5f9);color:var(--studio-muted,#7b8492)}
.cap-state.on{background:var(--studio-blue-soft,#eff6ff);color:var(--studio-blue,#3b82f6)}

/* 间距体系对齐（原型首页 .page-head：margin-bottom 16px、无 76px 高度下限、无额外下内边距）。
   注意：那条 `.director-topline.site-page-head, .director-gallery-top, .planning-toolbar,
   .app-shell>.app .phead{min-height:76px; margin-bottom:24px}` 是
   **区域头共用**的 ⇒ 沿用 S1 立的先例「只改规则自身、不动共享规则」，这里**只覆写首页**。
   其余区域头（资产中心 / 灵感）是否也要跟着降，另立待办、不顺手改。
   ⚠️ 选择器**必须 1 id + 4 类**：赢家是 `.app-shell>.app #screen-overview>.phead`（1 id + 3 类），
   用 1 id + 2 类的写法会被它压住（上一轮实测：规则在 DOM 里、也在匹配列表里，但计算值仍是 28）。 */
.app-shell>.app #screen-overview>.phead.site-page-head{min-height:0;margin-bottom:16px;padding-bottom:0}

/* A4（用户裁定 2026-09-17）：区域头下边框 —— 对齐原型。
   取证：原型 4 屏头实测 border-bottom=0 + 背景透明 ⇒ 原设计就是靠 16px 留白分隔。
   为什么这样写：这几个头的边框来自 3 条不同规则，其中 `.phead` / `.director-topline` 是
   **泛类选择器**（还被别的屏用），直接改它们会波及别处 ⇒ 用 id 级规则**只对这几个头**去边框，
   一 hunk 可整体回退。
   ⚠️ 副作用：`--site-rule` 至此无引用（定义保留 —— studio 主题里另有一份，是有意的主题位）。
   B 结构迁移（2026-09-19）：旧壳那份头（#screen-accounts>.phead）已随屏退役删除，
     资产中心如今只有 #directorGalleryView 一份头。 */
.app-shell>.app #screen-overview>.phead,
.app-shell>.app #screen-feishu>.phead,
#directorGalleryView .director-gallery-top,
#directorPlanningView .planning-toolbar{border-bottom:none}

/* 区域头 h1 行高对齐原型（2026-09-17）。
   取证：原型 h1 实测 23px / line-height 34.5px(=1.5)；交付版为 1.2（27.6px）⇒ 头矮 7px。
   真因：早前把 h1 由 22px 改 23px 时用了 `font:` 简写（`650 23px/1.2 …`），简写把 line-height 一并钉死。
   修法沿用 A4 的成熟写法：id 级规则 + 置于样式表末尾（同特异性靠顺序决胜）。
   注：首页头另有 overview-userbar（39px，已裁决保留）⇒ 它的高度不以此条为唯一决定因素。 */
.app-shell>.app #screen-overview>.phead h1,
.app-shell>.app #screen-feishu>.phead h1,
#directorGalleryView .director-gallery-top h1,
#directorPlanningView .planning-toolbar h1{line-height:1.5}

/* S2-settings（specs/final-staged-construction-plan.md）：设置区 tab 行并入区域头，对齐原型。
   原型形态：head 58px 内含 标题+副标题+tab 行，flex 同行并排。
   本次只做两件事：① HTML 把 `.settings-zones` 上移一级（已成 `.phead` 的直接子，与 `.phead-lead` 同级）
   ② 本规则让头变 row。**未改任何 id / data-* / 标签**。
   安全性依据（实测）：JS 用 `querySelectorAll('[data-settings-zone]')`（全局属性选择器）·
   CSS 侧 `.settings-zones` 是纯类名选择器（不依赖祖先）⇒ 移动不会断。
   ⚠️ 仍置于样式表末尾：同级 id 规则靠顺序决胜（A4 已验证）。 */
#screen-feishu>.phead{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}
#screen-feishu>.phead .settings-zones{margin-bottom:0}
/* 说明：`.app-shell > .app .phead h1{margin-top:6px}` 是「tab 在头外」时代为视觉对齐加的补偿，
   本区 tab 已并入头内并用 align-items:flex-end 对齐后不再需要（原型 h1 实测 margin-top:0）。
   本区限定清零；其余区域头是否同改见 specs/final-staged-construction-plan.md（逐区推进）。 */
#screen-feishu>.phead h1{margin-top:0}

/* S2-inspire · 定案（specs/final-staged-construction-plan.md）：只把 h1 的对齐补偿归零。
   实测：`.app-shell > .app .phead h1{margin-top:6px}` 是「tab 在头外」时代的补偿，
   归零后灵感头 **64 → 58 = 原型 58**，**无需任何 DOM 移动**（甲案曾试移动 tab，三宽度全面变差，已回退）。
   统一主库头部已改为动作按钮组；高度只由标题块决定。 */
#directorPlanningView>.planning-toolbar h1{margin-top:0}

/* S2-assets · 甲案（specs/final-staged-construction-plan.md）：把 `.director-asset-switch` 从标题块
   **内部**提到与标题块同级（`.director-gallery-top` 的直接子），头改回「标题 + tab」同行并排。
   **只做 DOM 提升 + 下面两条 id 级规则；不加任何窄屏规则**
   （更正：早前一次尝试把 480 弄成 381px，根因是我当时额外加了「窄屏竖排」规则，非方案本身）。
   安全性已实测：JS 用 `querySelectorAll('[data-asset-tab]')` · CSS 侧 `.director-asset-switch` 为纯类名 ⇒ 移动不断 JS/CSS。
   另：本头自带的 `.director-gallery-top{min-height:65px}` 为既有规则，本次不动。 */
#directorGalleryView>.director-gallery-top h1{margin-top:0}
#directorGalleryView>.director-gallery-top .director-asset-switch{margin-bottom:0}

/* ⑦ 区头「新建角色卡」右对齐（2026-09-19 独立裁定，原留白项）。
   原型 `验收/ia-prototype-v1/index.html:676-682` 的 `.sec` 是
   `display:flex; align-items:baseline; gap:9px`，按钮靠 `margin-left:auto` 顶到最右。
   生产原来是 `display:block`，按钮只能跟在提示文字右侧。此处照抄原型的三条 flex 属性。
   ⚠ 该行是**块流**：h2/span/button 依次排三行（实测区头高 65px）；原型同排实测 27px。

   两条必须写清楚，否则后人一改就静默坏：
   ① auto 必须给「**首个可见**按钮」，**不能**写 `>button{margin-left:auto}`（每枚各吃一个 auto ⇒
      实测两枚被撑成 x=892 / x=1354，中间 374px 裂口 ✗），也**不能**只写 `:first-of-type`
      （它按 DOM 序而非可见性匹配：真实数据下区头第一枚「新建角色卡」是隐藏的，
      auto 落在 display:none 上白白浪费 ⇒ 剩下的「刷新」退回文字右侧 x=527，
      而同屏商品区「刷新」贴右 x=1354 ⇒ 两个 pane 不一致 ✗，正是验收表要求的反面）。
      故拆成两条：可见的都先给 auto，**再**把「前面还有可见按钮」的复位为 0
      （`~` 只认 DOM 序、`[hidden]` 只认属性 ⇒ 隐藏那枚既不吃 auto 也不参与复位判定）。
      实测三态：两枚都在 ⇒ x=1257/1354 成组贴右 ✓；首枚隐藏 ⇒ 「刷新」x=1385 贴右 ✓（与商品区一致）。
   ② 必须带 `[hidden]` 兜底，理由见下条注释 —— `.btn` 的 `display` 会盖过 UA 的 hidden。

   修既有瑕疵（2026-09-17，非本轮改造引入）：两行的「刷新」按钮与说明文字之间**无间隙**
   （实测 0px，黏在一起）。根因是当时 `display:block` ⇒ `gap` 不生效，故加了左间距补偿。
   本轮改 flex 后 `gap:9px` 已接管该补偿，故 10px 那条**随承载它的布局一起撤掉**（不是失效残留）。 */
.director-section-label{display:flex;align-items:baseline;gap:9px}
.director-section-label>button:not([hidden]){margin-left:auto}
.director-section-label>button:not([hidden])~button:not([hidden]){margin-left:0}

/* ⑦ 区头按钮的 `hidden` 兜底（2026-09-19 审核实测发现，**非本轮引入**的既存缺陷）。
   现象：三个账号全有卡时按裁定 A 该隐藏「新建角色卡」，但实测按钮仍 88×40 可见可点。
   根因：那枚 `.btn` 带 `hidden` 属性，而作者样式
   `.btn,.acc-card-act{min-height:40px;display:inline-flex}` 与
   `.app-shell>.app .btn`(实测特异性 0-24-3) 都声明了 display ⇒ 压过 UA 的 `[hidden]{display:none}`。
   取证：computed `display:inline-flex`、`elementFromPoint` 命中 SELF；对照同屏
   `#directorProductAssets[hidden]`（有作者兜底）为 `display:none` ✓。
   本仓同类兜底先例：多处 `[hidden]{display:none}` 作者兜底（搜 [hidden]{display:none）。
   为什么**必须** `!important`：本文件无全局作者级 `[hidden]` 规则，
   实测不带 `!important` 的写法（0-1-1）**输了**（仍 inline-flex）✗ —— 这正是本仓
   「覆盖必须算特异性」铁律的又一例。影响面：全仓就这一处 `hidden` + `.btn` 组合。 */
.director-section-label>button[hidden]{display:none!important}
/* 商品资产搜索框（批 E · E3 根治）：改用 pane 专属类 asset-search，与工作台选择器的
   .plib-search 解耦 ⇒ 今后改任一处不再连带另一屏。属性值抄自基类，视觉等价。 */
#directorProductAssets .asset-search{width:100%;min-height:38px;border:1px solid var(--studio-line);background:var(--studio-paper);padding:0 10px;font-size:13px;max-width:360px;margin:10px 0 12px}
/* 角色卡参考图徽标（数据源：/api/dna 的 ref_count，2026-09-17 新增字段）。
   前端只在 >0 时渲染 ⇒ 此处只负责观感；沿用全站小标语言（圆角底 + 弱化文字色）。
   2026-09-17 L7：选择器扩展到 .role-card —— 「资产中心 › 角色资产」的卡也是 .role-card。 */
.director-dna-card .director-dna-refcount,.role-card .director-dna-refcount{display:inline-block;margin-top:6px;padding:2px 8px;
  border-radius:999px;background:rgba(15,23,42,.045);color:#7b8492;font-size:11px;line-height:1.6}
/* 角色资产卡（.role-card）的卡脚是 flex 行（conf | 徽标 | 按钮）：徽标**不换行**、且**不带上边距**
   —— margin-top:6px 是 DNA 卡竖排上下文的补偿，放进 flex 行会把徽标压成两行（实测「参考图 / 3 张」）。
   2026-09-17 L7 审核修复。 */
.role-card .director-dna-refcount{margin-top:0;white-space:nowrap;flex:0 0 auto}

/* ══ 三处真 bug 修复（2026-09-17 · specs/prototype-full-visual-diff-20260917.md §5）══════════ */

/* ① 资产中心：旧壳（#screen-accounts）的区域头由 block 改 row —— 与 #screen-feishu>.phead 同款。
   取证（改动前实测）：同一个 `.director-asset-switch` 组件两组摆法 ——
   新壳 #directorGalleryView 头上 58px、tab 与标题同行靠右；旧壳头 111px、tab 掉到标题下方左对齐。
   本规则只让旧壳头与设置同款（flex row + space-between），**不搬 pane、不动任何 id / data-***。
   padding-bottom/margin-bottom 与首页、设置同源清零（那两处早已清零，旧壳头漏了 ⇒ 头比它们高 14px）。
   ⚠️ 置于样式表末尾：与 A4/S2 的同类覆写保持同一分区纪律。 */

/* ② 设置 / 灵感的分区 tab 与资产中心 tab 同族。
   取证（改动前 computed）：这两组按钮**完全没吃到** `.director-filter` 的胶囊基底 ——
   border 2px outset · font 13.33px/400 · padding 0（浏览器默认按钮），只有 `.active` 一条命中
   ⇒ 三组 tab 视觉不同族。此处补上与 `.director-asset-switch .director-filter` 完全一致的基底；
   `.active` 仍在各自原处（特异性更高，天然胜出；本批已把它的 border-color 对齐同一 token）。 */
/* 设置分区 tab：保持原胶囊基底（未受本次裁定影响 ✓） */
.settings-zones .director-filter{border:1px solid var(--studio-line);border-radius:var(--studio-r-tab);background:rgba(255,255,255,.72);color:#4b5563;padding:7px 11px;font:600 11px/1.2 var(--studio-font);cursor:pointer;box-shadow:inset 0 1px 0 rgba(255,255,255,.9);transition:.18s}
.settings-zones .director-filter:hover{background:#fff;box-shadow:var(--studio-sh-control)}
/* 灵感分区 tab 与设置分区共用 9px 圆角令牌。 */
#directorPlanningView .planning-zones .director-filter{height:28px;display:inline-flex;align-items:center;border:0;border-radius:var(--studio-r-tab);background:none;color:var(--studio-muted);padding:0 12px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s}
#directorPlanningView .planning-zones .director-filter:not(.active):hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorPlanningView .planning-zones .director-filter.active{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue)}
/* 批 G · B2：三段进度（生成 → 验收 → 归档）· 只读展示
   ⚠️ D · P2-2（2026-09-19）：它随批次身份**下沉到卡片**，但当时的改动只搬了 JS 与三条门禁，
   漏了 CSS —— 全部 8 条彩点规则都限定在 `#galleryReal>.gallery-batch-head` 下 ⇒ 搬进卡片后
   **一条都不再命中**。2026-09-19 真机实测（computed）：圆点 ::before content 从圆点退回 `none`、
   字号退回 12px、<i> 的浏览器默认斜体回来了 —— 三段流程在卡片上是裸文字。
   修法与 `.gallery-record-facts` 同一纪律：**两个宿主都要覆盖**（段首那份保留：单批次模式不受影响，
   且它是本仓历史还原度基线的一部分），只加卡片这一支。 */
#galleryReal>.gallery-batch-head .gallery-batch-stepper,
#galleryReal .director-gallery-card .gallery-batch-stepper{display:inline-flex;gap:6px;margin-left:auto}
#galleryReal>.gallery-batch-head .gallery-batch-stepper i,
#galleryReal .director-gallery-card .gallery-batch-stepper i{font-style:normal;font-size:10px;padding:1px 6px;border-radius:999px;background:#eef2f7;color:var(--studio-muted)}
#galleryReal>.gallery-batch-head .gallery-batch-stepper i.doing,
#galleryReal .director-gallery-card .gallery-batch-stepper i.doing{background:rgba(255,247,237,.95);color:#b45309}
#galleryReal>.gallery-batch-head .gallery-batch-stepper i.done,
#galleryReal .director-gallery-card .gallery-batch-stepper i.done{background:rgba(16,185,129,.12);color:#047857}

/* D-1：工作台起点引导行（对齐原型「你想从哪里开始？」引导语义，纯文案）。
   A4（2026-09-19）：字重/字号/字色回到原型 `.sec h2` 口径 —— 原型这一行是**加粗深色小标题**
   （实测 12.5px / 650 / 继承 --text #202633），原实现 12px/400/#8b98a9 是浅灰常规字，层级弱了一截。
   `.sec h2` 的基础规则是 14px/650，此处按原型内联覆盖值 12.5px 取齐。 */
/* .studio-mode-lead 已随 2026-09-29 裁定删除（引导问句与 mode-hint 信息重复），死规则不留。 */

/* E11-UI 批量选择（只加样式，不改变既有布局/顺序） */
.gallery-card-select{margin:0 6px 0 0;flex:0 0 auto;align-self:center}
.gallery-sel-count{font-size:12px;color:var(--studio-muted);margin-left:8px}
.gallery-sel-btn{font-size:12px;padding:4px 8px}

/* R2 升级：批量打回原因模态（自包含；不改既有浮层与布局） */
.gallery-reason-overlay{position:fixed;inset:0;background:rgba(12,16,22,.55);display:flex;align-items:center;justify-content:center;z-index:60}
.gallery-reason-box{background:#151a22;border:1px solid #232a35;border-radius:12px;padding:16px;width:min(92vw,420px);color:#e7ecf3;font-size:13px}
.gallery-reason-hint{color:#8b98a9;font-size:12px;margin:6px 0 10px}
.gallery-reason-opt{display:block;margin:6px 0}
.gallery-reason-note{width:100%;box-sizing:border-box;margin-top:8px;background:#0e1116;color:#e7ecf3;border:1px solid #2c3546;border-radius:8px;padding:8px}
.gallery-reason-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}
.gallery-reason-ok{background:#2563eb;border-color:#2563eb;color:#fff}

/* E10 前端展示：批次段首的 配方 · 商品类别 · 角色卡（缺失不显示） */
.gallery-batch-facts{margin-left:8px;color:#8b98a9}
/* D · P2-2（2026-09-19）：元信息从**段首**下沉到**卡片**，类名随之改为 .gallery-record-facts。
   ⚠️ 必须与 .gallery-batch-facts **逐条同形**地覆盖同一批规则 —— 本仓实测过的级联坑：
   老类名在后面有 3 条更重的规则（6418 的 font-family、5946 的 color、5273 的 font-size），
   只在新类名上写一条基类是**压不住**的（特异性相同则后写者胜 ⇒ 旧规则反而赢）。
   故此处起，凡是出现 .gallery-batch-facts 的规则都成对加上新类名。 */
.gallery-record-facts{margin-left:8px;color:#8b98a9}

/* 套图模板迁入 04 画面职责步：JS 原文「套图角色定义在镜头位上」⇒ 归位到它真正控制的镜头轴旁 ✓ */
#studioAxisStep .studio-suite-row{margin:0 0 12px;padding:12px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.66)}

/* ── S3-mobile（2026-09-18）：让 ≤980 / ≤640 的既有响应式意图真正生效 ─────────────
   为什么加这一段（实测取证，见 验收/asset-center-v2/运行态审计-补遗.md §3.1）：
   本文件里**媒体查询**里的三条响应式规则被**非媒体的 id 级规则**压掉了，导致手机宽度下：
     · `#directorGalleryView .director-gallery-layout` 仍是 `minmax(0,1fr) 296px` ⇒ 两栏不堆叠
     · 成片网格 `#galleryReal` 的**渲染宽度实测 0px**（390/320），卡片只是靠溢出容器才看得见
     · `#appShell > .director-rail` 仍是竖栏 ⇒ 占掉 390 视口的 56px（约 14%）实际 65px
     · `.director-qa` 仍是 sticky + 固定 296px ⇒ 右缘超出视口 11px（390）/ 81px（320）

   级联取证（390 视口，runtime-dead-rules.py 输出）：
     #0 (max-width: 980px)  spec=[0,2,0]  .director-layout, .director-gallery-layout   = 1fr
     #1 (无媒体)             spec=[0,1,0]  .director-gallery-layout                     = minmax(0,1fr) 310px
     #2 (无媒体)             spec=[1,1,0]  #directorGalleryView .director-gallery-layout = minmax(0,1fr) 296px  ← 赢家

   修法：沿用本仓已经验证过的先例（A4 / S2-settings / S2-inspire 都是这么做的）——
   **只新增 id 级覆盖规则并置于样式表末尾**，靠「同特异性 + 顺序靠后」决胜；
   **不改上面那些共享规则自身**（`.director-layout` / `.director-rail` / `.director-qa` 还被
   #screen-accounts 等旧壳在用，直改会波及别处）。
   ⚠️ 只改呈现：不动任何 DOM / id / data-* / JS，不引入新字段与新筛选语义。
   ──────────────────────────────────────────────────────────────────────────── */
@media (max-width: 980px) {
  #directorGalleryView .director-gallery-layout { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  #directorGalleryView .director-qa { position: static; top: auto; }
}

@media (max-width: 640px) {
  /* 外壳由「工具栏(跨2列) + 竖导航 + 主区」改为三段纵向：工具栏 / 横向导航条 / 主区 */
  #appShell.app-shell {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: var(--studio-toolbar-h) auto minmax(0, 1fr);
  }
  #appShell.app-shell > .director-rail { grid-column: 1; grid-row: 2; }
  #appShell.app-shell > .director-main { grid-column: 1; grid-row: 3; }
  #appShell.app-shell:not(.director-mode) > .app { grid-column: 1; grid-row: 3; }

  #appShell > .director-rail {
    width: auto; min-width: 0; height: auto; max-height: none;
    flex-direction: row; align-items: center; gap: 8px;
    padding: 9px 10px; border-right: 0; border-bottom: 1px solid var(--studio-line-soft);
    overflow-x: auto; overflow-y: hidden;
  }
  #appShell > .director-rail .director-mark { width: 30px; height: 30px; margin-bottom: 0; border-radius: 9px; font-size: 13px; }
  /* 导航项由「图标在上、两行文字在下」改为「图标 + 单行文字」 */
  #appShell > .director-rail .director-nav {
    width: auto; min-height: 40px; flex-direction: row; gap: 6px;
    padding: 0 11px; font-size: 11px; text-align: left;
  }
  #appShell > .director-rail .director-nav br { display: none; }
  .studio-rail-help {
    margin-top: 0; width: auto; min-height: 40px;
    display: inline-flex; align-items: center; gap: 6px; padding: 0 11px; font-size: 11px;
  }
  .studio-rail-help span { margin-bottom: 0; font-size: 14px; line-height: 1; }

  /* 状态筛选行：7 个 chip 不再折成 2 行占高，改为横向滚动（与审计 §10.2 的建议一致） */
  .gallery-status-bar .gallery-status-row { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; }
  .gallery-status-row::-webkit-scrollbar { height: 0; }
  .gallery-status-row .director-filter { flex: 0 0 auto; }
}

/* ════════════════════════════════════════════════════════════════════════════
   S4-assets（2026-09-18）：资产中心按审计原型重做视觉层
   依据：验收/asset-center-v2/运行态审计-补遗.md（在真实运行的应用上实测得出）
   约束：只改呈现。不动任何 id / data-* / API 调用 / 计费与任务链路；
        不改任何业务谓词与筛选语义；所有动作 handler 与禁用判定原样保留。
   ════════════════════════════════════════════════════════════════════════════ */

/* ── S4.1 作用域内重映射「已退役的旧暖色令牌」─────────────────────────────
   实测：`--prototype-*` / `--c-*` 系列在本文件被引用 379 次，其中 6 类在资产中心
   的实际渲染里可见并造成对比度不达 AA（暖白底 rgb(255,253,248)、近黑面板
   rgb(23,24,23)、橄榄/赭石 badge 2.46:1、旧绿状态字 3.58:1 等），
   同时让同一屏里出现「蓝灰」与「暖纸」两套底色。
   修法：**只在 `#directorGalleryView` 子树内**把旧令牌重新指向现行蓝灰令牌，
   不动 `:root` 上的旧令牌定义（`#screen-accounts` 等旧壳还在用，直改会波及别处）。
   自定义属性可继承 ⇒ 一处声明，子树内所有 `var()` 引用一起生效。 */
#directorGalleryView {
  --studio-muted: #5b6472;            /* 4.5:1 达标（原 #7b8492 = 3.78:1，不达 AA） */
  --prototype-paper: #f6f8fb;
  --prototype-paper-2: #eef2f7;
  --prototype-white: #ffffff;
  --prototype-line: rgba(148, 163, 184, .22);
  --prototype-ink: #111827;
  --prototype-muted: #5b6472;
  --prototype-red: #a16207;           /* 旧品牌红退役：这一族在本屏只承担「待办」语义 ⇒ 改琥珀 */
  --prototype-olive: #047857;
  --prototype-olive-wash: #ecfdf5;
  --prototype-olive-deep: #047857;
  --c-surface: #ffffff;
  --c-surface-2: #f1f5f9;
  --c-line: rgba(148, 163, 184, .22);
  /* ── C1（2026-09-21 基准对账）：第一代暖色令牌在新壳里**没有被重映射** ⇒
     它们会继承 :root 的「纸墨砖红」值（--c-ink #171817 等）。实测资产中心里
     确有 6 个文字叶子渲染成了暖墨 rgb(23,24,23)（= --c-ink）。
     ⚠️ 暖色族在两个原型里都是 **0 命中**（ia-prototype-v1 与 asset-center-v2 都查过），
     所以新壳按原型值收口；这里只在 #directorGalleryView 作用域内重映射，
     不动 :root（旧壳 #screen-accounts 等仍在用那一套）。 */
  --c-ink: var(--studio-ink);          /* #111827 = 两个原型的 --ink */
  --c-bg: #eef1f6;                        /* asset-center-v2 的 --doc-bg（冷） */

  /* C1：第一代「纸墨砖红」品牌色在新壳里没有任何原型对应物 ——
     ia-prototype-v1 / asset-center-v2 / generation-workbench-v1 **三个原型对
     #b6533d / #9e4a2e / #df8b77 / #171817 全部 0 命中**，且三者的激活态一律用 --blue。
     故按原型收到蓝。实测消费点：工作台的「→」箭头与「生产顺序」、风格 DNA 的提示行。 */
  --c-brand: var(--studio-blue);
  --c-brand-deep: var(--studio-blue);
  --c-brand-wash: var(--studio-blue-soft);
  --c-brand-line: var(--studio-blue-line);
  --c-surface-3: var(--c-surface-2);      /* 原型无第三级面色 ⇒ 收到同层冷灰，不再用暖 #e2dccf */
  --c-line-soft: rgba(148, 163, 184, .14);/* asset-center-v2 的 --line-soft */

  /* ⚠️ 只把 --c-ink 映射成冷墨**修不了正文**：实测 h2「角色资产」的 color 是 rgb(23,24,23)，
     而它在 #directorGalleryView 内的 --c-ink 已经是 #111827。原因：color 从 body 继承的是
     **已计算的值**（body{color:var(--c-ink)} = #171817），在子树里重映射自定义属性不会回算
     父级已经继承下来的 color。⇒ 新壳必须自己声明一次 color，后代才拿得到冷墨。
     （三个原型的正文墨色都是 --ink #111827，新壳自声明与原型一致。） */
  color: var(--studio-ink);
  /* ⚠️ --c-brand / --c-brand-deep / --c-brand-wash / --c-brand-line 暂不动：
     两个原型里都**没有** brick 品牌色（新壳强调色是蓝），且实测这 4 个令牌在新壳内
     当前**未被渲染**（只有 --c-ink 渲染到）。映射成什么需要设计裁定，先留证据。 */
  --c-ink-soft: #5b6472;
  --c-ink-faint: #54606e;
  --c-warning: #a16207;
  --c-warning-wash: #fffbeb;
  --c-warning-line: rgba(217, 119, 6, .32);
  --c-success: #047857;

  /* 状态语义色（一态一色相，全部低饱和；色只作辅助，chip 同时带文字） */
  --st-run-bg: #eff6ff;  --st-run-fg: #1d4ed8;  --st-run-bd: rgba(37, 99, 235, .28);
  --st-wait-bg: #fffbeb; --st-wait-fg: #a16207; --st-wait-bd: rgba(217, 119, 6, .32);
  --st-ok-bg: #ecfdf5;   --st-ok-fg: #047857;   --st-ok-bd: rgba(5, 150, 105, .3);
  --st-arch-fg: #5454b8;
  /* A5（2026-09-21 表现扫描）：下面两个是**刻意的第二个值**，不是笔误 ——
     主绿 --st-ok-fg(#047857) 与主蓝 --st-run-fg(#1d4ed8) 在生命周期提示与归档行上实测 4.42:1 / 3.58:1，
     为达 AA 单独提深成了这两个值（原有注释已记录）。本轮只给它们**取名**，不合并成同一个值。
     （令牌定义在 :root，此处不重复定义，继承全局值即可） */
  --st-gray-bg: #f1f5f9; --st-gray-fg: #54606e; --st-gray-bd: rgba(100, 116, 139, .26);
  --st-err-bg: #fef3f2;  --st-err-fg: #b42318;  --st-err-bd: rgba(180, 35, 24, .3);
}

/* ── S4.2 字号下限与行高（审计 §9.4）──────────────────────────────────────
   实测：本屏 543 处文字里 <11px 有 121 处、<12px 有 147 处（9px 47 处、10px 74 处）。
   中文在 9-10px 下会变成「灰色纹理」而不是可扫描的信息 ⇒ 建立下限。
   行高同步放宽：字号小的时候再用紧行高补偿，会出现中文笔画粘连。 */
#directorGalleryView .director-sub { font-size: 13px; line-height: 1.45; }
#directorGalleryView .director-eyebrow { font-size: 11px; letter-spacing: .12em; }
#directorGalleryView .director-filter { font-size: 12px; }
#directorGalleryView .gallery-sel-btn,
#directorGalleryView .gallery-sel-count { font-size: 12px; }
#directorGalleryView .director-gallery-status { font-size: 12px; line-height: 1.25; }
#directorGalleryView .director-gallery-meta b { font-size: 13px; line-height: 1.4; }   /* A4：13.5→13（与同屏 13px 档对齐；实测本屏 21 个元素） */
#directorGalleryView .director-gallery-meta small { font-size: 11px; line-height: 1.5; }
#directorGalleryView .director-gallery-foot button { font-size: 12px; }
#directorGalleryView .director-gallery-archive { font-size: 11px; line-height: 1.3; }
#galleryReal > .gallery-batch-head b { font-size: 13px; }
#galleryReal > .gallery-batch-head small { font-size: 11px; }
#directorGalleryView .gallery-batch-facts,
#directorGalleryView .gallery-record-facts { font-size: 11px; }
#directorGalleryView .director-summary-chip span { font-size: 11px; }
#directorGalleryView .gallery-failure-notice,
#directorGalleryView .gallery-lifecycle-notice { font-size: 12px; line-height: 1.6; }
#directorGalleryView .director-qa-head p { font-size: 11px; line-height: 1.6; }
#directorGalleryView .director-qa-head h3 { font-size: 16px; }
#directorGalleryView .qa-block label { font-size: 11px; }
#directorGalleryView .qa-block strong { font-size: 12px; line-height: 1.5; }
#directorGalleryView .gallery-status-row .gsc { font-size: 11px; }

/* 对比度：这两处是实测 4.42:1 / 3.58:1，属于「差一点点」与「旧绿」两类，单独提深 */
#directorGalleryView .gallery-lifecycle-notice { color: var(--st-run-fg-strong); }
#directorGalleryView .director-gallery-archive { color: var(--st-ok-fg-strong); }
#directorGalleryView .gallery-sel-count { color: #5b6472; }
#directorGalleryView .overview-action-head .director-eyebrow { color: #b9c2cf; }

/* ── S4.3 卡片层级：状态移到图片下方（审计 §7.3.1 / §7.3.6）──────────────
   实测（1440）：卡片 188×425，图片只占 238px（56%），下方 178px 是文字与按钮；
   同时图片上有 3 个绝对定位覆盖层（状态 chip、放大镜、归档角标）遮挡主体。
   做法：卡片改 flex 列 + 用 order 重排 ⇐ **不动 DOM 顺序、不动 JS**，
   状态 chip 由「压在图上」变为「图片下方第一行」。 */
#directorGalleryView .director-gallery-card { display: flex; flex-direction: column; }
#directorGalleryView .director-gallery-image { order: 1; }
#directorGalleryView .director-gallery-status { order: 2; position: static; align-self: flex-start; margin: 10px 12px 0; }
#directorGalleryView .director-gallery-meta { order: 3; }
#directorGalleryView .director-gallery-foot { order: 4; }

/* 状态 chip 的语义色（按卡片实际状态类着色；类名由 JS 按既有 humanStatus/generationStatus 打） */
#directorGalleryView .director-gallery-status {
  background: var(--st-ok-bg); color: var(--st-ok-fg); border: 1px solid var(--st-ok-bd);
  border-radius: 8px; padding: 4px 9px; box-shadow: none; font-weight: 600;
}
#directorGalleryView .director-gallery-status.review { background: var(--st-wait-bg); color: var(--st-wait-fg); border-color: var(--st-wait-bd); }
#directorGalleryView .director-gallery-status.gallery-status-err { background: var(--st-err-bg); color: var(--st-err-fg); border-color: var(--st-err-bd); }
/* ── A 批（2026-09-21 表现扫描；纯 CSS，每条都带实测判据）──────────────────────── */
/* A1：选择条这一组四个按钮此前**没有任何作者 color / background** ⇒ 实测吃 UA 的
   fieldtext(rgb(0,0,0)) 与 buttonface(rgb(239,239,239))，禁用态是 UA 的 rgba(16,16,16,.3)；
   而同组的 .is-danger 反而有作者色 ⇒ 一组里只有危险按钮有样式，且 UA 外观会随浏览器/系统皮肤漂移。
   补齐为与同屏 .director-filter 同档。.is-danger 多一个类且在同层级更靠后 ⇒ 仍能覆盖本块。 */
#directorGalleryView .gallery-sel-btn {
  color: #4b5563;
  background: #fff;
  border: 1px solid var(--studio-line-2);
  font-weight: 600;
}
#directorGalleryView .gallery-sel-btn:disabled { color: #4b5563; background: #fff; }

/* A2：交付屏内嵌的待办卡头（.overview-action-head）里那句灰字是全屏唯一的**暖灰** var(--studio-muted)，
   与整屏冷灰体系不符（实测该 <p> 计算色 rgb(197,193,183)）。改用同族冷灰 var(--studio-muted)
   （即本文件 --studio-line 用的那个 slate-400），在深底 #111827 上约 6.3:1。
   只限定在交付 pane 内：不改变「今日生产」上同款组件的观感
   （那边由 .app-shell>.app .overview-action-head p 管，那个选择器对交付 pane 不生效 —— 已实测）。 */
#directorDeliveryPane .overview-action-head p { color: #94a3b8; }

/* A3：.role-card .conf 走的是**已退役**的 --c-brand-deep(#9e4a2e)，而同一张卡上的 .badge
   用的是现行暖色（本轮只做「脱离退役令牌」这一步，保留暖色语义；
   同卡 badge 写绿、conf 写暖这种「同句两色」属文案/语义问题，留给产品裁定，不在这里改）。
   必须带 #directorGalleryView 前缀：裸 .role-card .conf 在旧壳里还有别的用法。 */
#directorGalleryView .role-card .conf { color: var(--st-wait-fg); }

/* A6：DNA 面板的 .chip 由旧壳规则写死 transition:.15s（实测 3 处 0.15s/all），
   与本屏其余 60 余处 0.18s 不一致 ⇒ 只覆盖时长，保留原有的过渡属性列表。 */
#directorGalleryView .chip { transition-duration: .18s; }

/* B1（2026-09-21 扫描 D2）：照片上的白字浮层没有底衬。
   实测：.name-tag 是 #fff + 透明底，只有一层 text-shadow: 0 1px 6px rgba(0,0,0,.55)，
   而它的背景是 <img> 的照片**像素**（探针不可得：计算值不等于实际）。
   结构实测：.name-tag 是 .rc-img（relative + overflow:hidden）内与 <img> 同级的绝对定位元素。
   ⇒ 遮罩做成 .rc-img::after（自下而上的深色渐变），但 ::after 是最后一个子节点、会盖住白字，
     所以必须给浮层显式 z-index（两者当前都是 auto，同 z 下按 DOM 顺序 ⇒ 后插的 ::after 会赢）。
   pointer-events:none 保证不拦截拖拽/点击。验收走**像素采样**，不走计算值。 */
#directorGalleryView .rc-img::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 72px;
  background: linear-gradient(180deg, rgba(17, 24, 39, 0) 0%, rgba(17, 24, 39, .68) 100%);
  pointer-events: none;
  z-index: 0;
}
#directorGalleryView .rc-img .name-tag { z-index: 1; }


#directorGalleryView .director-gallery-status.gallery-status-muted { background: var(--st-gray-bg); color: var(--st-gray-fg); border-color: var(--st-gray-bd); }

/* 卡片名：固定两行截断（审计 §7.3.3），超长名称不再把同一行卡片撑高 */
#directorGalleryView .director-gallery-meta b {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; white-space: normal; text-overflow: clip;
}
/* 归档/交付角标从「压在图上」改为元信息行里的一个 chip（同一个元素、同一段文案） */
#directorGalleryView .director-gallery-meta .director-gallery-archive {
  position: static; align-self: flex-start; padding: 3px 8px; border-radius: 9px;
  background: rgba(148, 163, 184, .14); color: var(--st-ok-fg-strong); font-weight: 600; box-shadow: none;
}
#directorGalleryView .director-gallery-meta .director-gallery-archive.archive-failed { background: var(--st-err-bg); color: var(--st-err-fg); }
#directorGalleryView .director-gallery-meta .director-gallery-archive.archive-rejected { background: var(--st-gray-bg); color: var(--st-gray-fg); }

/* 选中态四通道：外框 + 勾选框 + 底色 + 环形内描边（汇总计数在工具栏，已有 aria-live） */
#directorGalleryView .director-gallery-card:has(.gallery-card-select:checked) {
  border-color: var(--studio-blue); background: #f8fbff;
  box-shadow: inset 0 0 0 1px var(--studio-blue);
}
/* 勾选框从底部动作行挪到图片左上角（绝对定位相对卡片，卡片本身已是 relative） */
#directorGalleryView .gallery-card-select {
  position: absolute; top: 10px; left: 10px; z-index: 4;
  width: 24px; height: 24px; margin: 0; accent-color: var(--studio-blue);
  border-radius:8px; background: #fff; box-shadow: 0 1px 4px rgba(15, 23, 42, .22); cursor: pointer;
}
/* 钩选框的点击区就是它自己的盒：`<input>` 是替换元素，`::after` 根本不渲染，
   所以只能把盒本身做到 24px（= WCAG 2.5.8 AA 的下限），不要指望伪元素扩区。 */

/* ── S4.4 卡片底部：查看 + 主操作 + ⋯（审计 §7.3.4）────────────────────── */
#directorGalleryView .director-gallery-foot { display: flex; flex-wrap: nowrap; gap: 6px; padding: 10px 12px 12px; }
#directorGalleryView .director-gallery-foot > button { flex: 1 1 auto; min-width: 0; min-height: 34px; padding: 0 8px; }
#directorGalleryView .gallery-card-action-view { background: #fff; border: 1px solid var(--studio-line-2); color: #3c4553; }
#directorGalleryView .gallery-card-action-view:hover { background: #f7f9fc; }
#directorGalleryView .director-gallery-foot .gallery-card-action-primary {
  flex: 1.2 1 auto; background: linear-gradient(135deg, #111827, #071022);
  color: #fff; border-color: transparent; font-weight: 650;
}
#directorGalleryView .gallery-card-more { position: relative; flex: 0 0 auto; display: inline-flex; }
#directorGalleryView .gallery-card-more-btn {
  width: 34px; min-height: 34px; border: 1px solid var(--studio-line); border-radius: var(--studio-r-control);
  background: rgba(241, 245, 249, .8); color: #334155; font-size: 16px; line-height: 1; cursor: pointer;
}
#directorGalleryView .gallery-card-more-btn:hover { background: #fff; box-shadow: var(--studio-sh-control); }
#directorGalleryView .gallery-card-pop {
  position: absolute; right: 0; bottom: calc(100% + 6px); z-index: 20; min-width: 152px; padding: 5px;
  border: 1px solid var(--studio-line); border-radius: var(--studio-r-control); background: #fff;
  box-shadow: 0 14px 34px rgba(15, 23, 42, .16);
}
#directorGalleryView .gallery-card-pop[hidden] { display: none; }
#directorGalleryView .gallery-card-pop-item {
  display: block; width: 100%; text-align: left; border: 0; background: none; border-radius: 8px;
  padding: 9px 10px; min-height: 36px; font: 600 12px/1.35 var(--studio-font); color: #3c4553; cursor: pointer;
}
#directorGalleryView .gallery-card-pop-item:hover { background: #f4f7fb; }

/* ── S4.5 状态筛选 chip：计数 + 语义色 + 选中态（审计 §4.2 / §6.2）──────── */
#directorGalleryView .gallery-status-row { gap: 6px; }
#directorGalleryView .gallery-status-row .director-filter {
  display: inline-flex; align-items: center; gap: 6px; border-radius:var(--studio-r-tab);
}
#directorGalleryView .gallery-status-row .gsc {
  font-variant-numeric: tabular-nums; color: var(--studio-muted); font-weight: 600;
  background: rgba(148, 163, 184, .16); border-radius: 999px; padding: 1px 6px;
}
#directorGalleryView .gallery-status-row .gsc:empty { display: none; }
#directorGalleryView .gallery-status-row .director-filter.active .gsc { background: rgba(59, 130, 246, .16); color: var(--studio-blue); }
/* 每个状态自己的色相（未选中时用「点」提示语义，选中时整片染色） */
#directorGalleryView .gallery-status-row .director-filter[data-status="pending"]::before,
#directorGalleryView .gallery-status-row .director-filter[data-status="archive_failed"]::before,
#directorGalleryView .gallery-status-row .director-filter[data-status="active"]::before,
#directorGalleryView .gallery-status-row .director-filter[data-status="accepted"]::before,
#directorGalleryView .gallery-status-row .director-filter[data-status="archive_pending"]::before,
#directorGalleryView .gallery-status-row .director-filter[data-status="archived"]::before {
  content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; opacity: .85; flex: none;
}
#directorGalleryView .gallery-status-row .director-filter[data-status="pending"] { color: var(--st-wait-fg); }
#directorGalleryView .gallery-status-row .director-filter[data-status="archive_failed"] { color: var(--st-err-fg); }
#directorGalleryView .gallery-status-row .director-filter[data-status="active"] { color: var(--st-run-fg); }
#directorGalleryView .gallery-status-row .director-filter[data-status="accepted"] { color: var(--st-ok-fg); }
#directorGalleryView .gallery-status-row .director-filter[data-status="archive_pending"] { color: var(--st-arch-fg); }
#directorGalleryView .gallery-status-row .director-filter[data-status="archived"] { color: var(--st-gray-fg); }
#directorGalleryView .gallery-status-row .director-filter[aria-pressed="true"] {
  background: var(--studio-blue-soft); border-color: var(--studio-blue-line); color: var(--studio-blue); font-weight: 650;
}
#directorGalleryView .gallery-status-row .director-filter[aria-pressed="true"] .gsc { background: rgba(59, 130, 246, .18); color: var(--studio-blue); }

/* ── S4.6 四区 tab：选中态三通道（审计 §4.2）──────────────────────────
   原「语义分组标签（基础资产 / 生产与交付）」已于 2026-09-18 按用户裁定 B 移除，理由三条：
     ① 基准原型（验收/ia-prototype-v1/index.html）里没有这两个标签，它只有一行 4 个平级 tab；
     ② 标签是 aria-hidden="true" 的纯装饰，对读屏零贡献（「语义分组」这个理由没兼现）；
     ③ 只挂在页头那一行 ⇒ 用户切到旧壳那三屏时同一组 tab 突然没有标签，两处结构感不一致。
   两行现在都是 4 个平级 tab，由 frontend-asset-tabs-parity 门禁锁住。 */
#directorGalleryView .director-asset-switch { display: flex; align-items: center; gap: 6px; }
#directorGalleryView .director-asset-switch .director-filter { border-radius: var(--studio-r-tab); }
/* 三通道：底色 + 字重/字色 + 下划线，不只靠颜色；aria-selected / aria-current 供辅助技术 */
#directorGalleryView .director-asset-switch .director-filter[aria-selected="true"] {
  background: var(--studio-blue-soft); border-color: var(--studio-blue-line);
  color: var(--studio-blue);
}

/* ── S4.7 右侧 QA 面板：降权 + 写清作用域（审计 §8.3.1 / §8.3.2）──────── */
#directorGalleryView .director-qa { box-shadow: none; background: rgba(255, 255, 255, .5); }
#directorGalleryView .director-qa-head { background: none; border-bottom: 1px solid var(--studio-line-soft); }
#directorGalleryView .director-qa-body { background: none; }
#directorGalleryView .btn.dark { height: 38px; font-size: 12px; }

/* ── S4.8 材质减法：同屏不要「边框 + 圆角 + 阴影 + 底色 + 渐变」全叠（审计 §13.3.3）*/
#directorGalleryView .director-summary-chip { box-shadow: none; }
#directorGalleryView .director-gallery-card { box-shadow: 0 1px 2px rgba(15, 23, 42, .04); }
#directorGalleryView .overview-action-head { background: #1b2430; }
#directorGalleryView .overview-action-head h3 { font-family: var(--font-display); font-size: 16px; font-weight: 650; }
#directorGalleryView .overview-batch-main strong { font-family: var(--studio-font); font-size: 16px; font-weight: 650; color: var(--studio-ink); }

/* ── S4.9 焦点态统一（审计 §14.2）───────────────────────────────────────
   实测：焦点态共 5 种样式并存，其中 33 步落到浏览器默认环、6 步用已退役的旧品牌红
   `#b6533d`；另有 9 个放大镜按钮与 2 个 select 焦点**完全不可见**（前者被
   `.gallery-zoom-control:focus-visible{outline:0}` 与 id 级规则共同清掉）。
   统一为一种：2px 实线 studio-blue + 2px offset（浅底可见，对比度足够）。 */
#directorGalleryView button:focus-visible,
#directorGalleryView a:focus-visible,
#directorGalleryView select:focus-visible,
#directorGalleryView input:focus-visible,
#directorGalleryView [role="button"]:focus-visible,
#directorGalleryView [tabindex]:focus-visible {
  outline: 2px solid var(--studio-blue) !important;
  outline-offset: 2px !important;
}
#directorGalleryView .director-gallery-image:focus-visible { outline-offset: -3px !important; }
#directorGalleryView .gallery-zoom-control:focus-visible {
  opacity: 1 !important; outline: 2px solid var(--studio-blue) !important; outline-offset: 2px !important;
  background: #fff !important; color: var(--studio-blue) !important;
}

/* ── S4.10 触控尺寸（审计 §14.3）────────────────────────────────────────
   实测：1440 下 132 个可交互元素里 85 个 <40px（最小 13×13 的选图框、19×19 的放大镜、
   17px 高的「继续 →」）。桌面鼠标也需要合理命中区 ⇒ 统一抬到 ≥32，移动端 ≥40。 */
#directorGalleryView .director-filter,
#directorGalleryView .gallery-sel-btn { min-height: 32px; }
#directorGalleryView .gallery-zoom-control { width: 26px; height: 26px; font-size: 13px; }
#directorGalleryView .planlist .pgo { min-height: 32px; padding: 0 10px; }
#directorGalleryView .gallery-card-more-btn { min-width: 34px; }
@media (max-width: 640px) {
  #directorGalleryView .director-filter,
  #directorGalleryView .gallery-sel-btn,
  #directorGalleryView .director-gallery-foot > button,
  #directorGalleryView .gallery-card-more-btn,
  #directorGalleryView .gallery-zoom-control { min-height: 40px; }
  #directorGalleryView .gallery-zoom-control { width: 40px; height: 40px; }
  #directorGalleryView .gallery-card-select { width: 24px; height: 24px; }
}

/* ── S4.11 空态 / 加载态 / 失败态（审计 §12）────────────────────────────
   实测：筛选无结果的空态只有一句「该筛选暂无成片」且**行动按钮 0 个**；
   骨架元素 0 个、spinner 0 个、aria-busy 0 个；
   且列表加载失败时弹的是**提交类文案**「…请先到画廊确认，不要重复提交」
   （常量定义在 studio-app.js 的 REQUEST_TIMEOUT，被列表加载的 catch 直接复用）。 */
#galleryReal[data-gallery-state="loading"] {
  display: block; min-height: 180px; border-radius: var(--studio-r-panel);
  background: linear-gradient(100deg, #eef2f7 30%, #f6f8fb 50%, #eef2f7 70%);
  background-size: 220% 100%; animation: gallery-sheen 1.4s ease-in-out infinite;
}
@keyframes gallery-sheen { 0% { background-position: 120% 0; } 100% { background-position: -40% 0; } }
@media (prefers-reduced-motion: reduce) { #galleryReal[data-gallery-state="loading"] { animation: none; } }
#directorGalleryView .empty-gallery {
  grid-column: 1 / -1; display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 34px 20px; border: 1px dashed var(--studio-line-2); border-radius: var(--studio-r-panel);
  background: rgba(255, 255, 255, .6); text-align: center;
}
#directorGalleryView .empty-gallery strong { font-size: 14px; font-weight: 650; color: var(--studio-ink); }
#directorGalleryView .empty-gallery span { font-size: 12px; line-height: 1.6; color: var(--studio-muted); }
#directorGalleryView .empty-gallery .empty-gallery-act {
  margin-top: 8px; min-height: 34px; padding: 0 14px; border: 1px solid var(--studio-line-2);
  border-radius: var(--studio-r-control); background: #fff; color: #3c4553; font: 600 12px/1 var(--studio-font); cursor: pointer;
}
#directorGalleryView .empty-gallery.is-error strong { color: var(--st-err-fg); }

/* ── S4.12 对比度收口（S4 首轮实测后剩下的 5 类，全部按计算值修）────────────
   首轮实测：164/543 处不达 AA → 11/547。剩余 5 类的原因分别是：
     ① 我自己新加的计数徽标用了 #8b95a3 = 2.7:1 ← 自造问题，必修
        （同批的另一个自造元素「分组标签」已按 2026-09-18 裁定 B 整个移除，见 S4.6）
     ② 选中态 tab 用 --studio-blue #3b82f6 落在浅蓝底上 = 3.38:1
     ③ .gallery-human-status 的 9px/#64748b：特异性是 (1,2,0)，压过了我写的 (1,1,0)
     ⚠ 2026-09-21：.gallery-human-status 的规则已全部删除（该元素自 2026-09-18 起不再创建），
       下面这段是当时排查过程的留档，选择器如今已不存在。
        ⇒ 必须用同级的 (1,2,0) 才能覆盖（这就是审计 P3 点名的那个坑，这次是踩在自己身上）
     ④ 批次进度条里「未完成」的步骤用 var(--studio-muted) = 2.28:1
   全部只改颜色/字号取值，不改任何结构。 */
#directorGalleryView .director-asset-switch .director-filter[aria-selected="true"] { color: #1d4ed8; }
#directorGalleryView .gallery-status-row .gsc { color: var(--studio-muted); }
#directorGalleryView .gallery-status-row .director-filter[aria-pressed="true"],
#directorGalleryView .gallery-status-row .director-filter[aria-pressed="true"] .gsc { color: #1d4ed8; }
/* 激活态的标签色对**所有** chip 统一为蓝（与 tab 选中态同一口径）。
   曾经这里给 6 个状态 chip 单独改回 --studio-ink，实测造成「全部激活=蓝、
   待验收/已采用激活=墨」的同态不同色 ⇒ 已按实测删除。 */
/* （2026-09-21 起这些规则已删；原 S4.12 这里修过 .director-gallery-meta .gallery-human-status 的 9px/#64748b 对比度；
   该元素已按还原度修正从源头去掉，规则随之删除。留下的教训值得记住：
   它的特异性是 (1,2,0)，压过了我第一版写的 (1,1,0)，所以当时必须用同级选择器才能覆盖。） */
#galleryReal > .gallery-batch-head .gallery-batch-stepper i,
#galleryReal .director-gallery-card .gallery-batch-stepper i { color: #5b6472; background: #eef2f7; }
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.doing,
#galleryReal .director-gallery-card .gallery-batch-stepper i.doing { background: var(--st-run-bg); color: var(--st-run-fg); }
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.done,
#galleryReal .director-gallery-card .gallery-batch-stepper i.done { background: var(--st-ok-bg); color: var(--st-ok-fg); }
/* S4.13 进度条字号补齐到 11.5px（S4 后实测仅剩这一处 <11px） */
#galleryReal > .gallery-batch-head .gallery-batch-stepper i,
#galleryReal .director-gallery-card .gallery-batch-stepper i { font-size: 11px; padding: 2px 7px; }

/* ── S4.14 移动端头部收窄（审计 §10.2）──────────────────────────────────
   S4.13 实测：390 下头部从 442 涨到 758 —— 当时是因为我在 tab 行加了「基础资产 / 生产与交付」
   分组标签（3 个元素）把 tab 行挤到溢出，且工具区仍是 8 行平铺。
   （2026-09-18 按用户裁定 B 把那 3 个元素整个删掉 ⇒ 溢出源头消失，下面那条“隐藏分组标签”
     也随之作废，不再存在“需要隐藏的装饰元素”。）
   审计 §10.2 的原话：「不要把所有筛选 chip、批次按钮和操作按钮都直接平铺在首屏」，
   推荐的移动端结构是「批次选择器 + 筛选进抽屉」。这里按该结论做：
     ① 选中操作整组收进工具栏内的**单行（可横向滚动）** —— 把 5 个控件从「多行平铺」压成一行
   只改呈现；`#gallerySelGroup` 只是壳，内部 id 与所有 handler 原样不变。
   注：下面的 tab 行横向滚动**保留**，它管的是 4 个 tab 在 390/320 的溢出，与分组标签无关。 */
@media (max-width: 640px) {
  #directorGalleryView .director-asset-switch {
    flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-top: 10px; padding-bottom: 2px;
  }
  #directorGalleryView .director-asset-switch::-webkit-scrollbar { height: 0; }
  #directorGalleryView .director-asset-switch .director-filter { flex: 0 0 auto; }

  /* 工具区：两列网格，选择器与用途各占整行（选中操作那一行由 S4.18 定义） */
  #directorGalleryView .director-gallery-actions {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; align-items: center;
  }
  #directorGalleryView .director-gallery-actions > #galleryBatchSel,
  #directorGalleryView .director-gallery-actions > #galleryIntentSel { grid-column: 1 / -1; width: 100%; }
  #directorGalleryView .director-gallery-actions > #galleryQuickDownload { width: 100%; }
}

/* S4.15 窄屏触控补齐：S4.14 后 390 下仍 <40px 的只剩 58 个「继续 →」（32px，在生产任务列表里）。
   桌面用鼠标 32px 是合理值，不为了凑数把工具栏吹胖；≤640 一律抬到 40。 */
@media (max-width: 640px) {
  #directorGalleryView .planlist .pgo { min-height: 40px; padding: 0 12px; }
}

/* S4.16 放大镜控件：一条规则两个后果
   `scale(.72)` 那条 .gallery-zoom-control 规则
   是「绝对定位到中心 + 缩小」的合体写法。它在 id 级覆盖（`3762` 已经把锚点改成
   `right:8px;top:8px`）之后仍然生效，于是造成两件事：
     ① 尺寸被缩到 26×0.72 ≈ 19px（低于 WCAG 2.5.8 AA 的 24px 下限）
     ② `translate(-50%,-50%)` 把控件从右上角拉回图片正中 —— 和「角标」的语义矛盾
   这里在 id 级清掉 transform，让 `right/top` 锚点与真实尺寸同时成立。 */
#directorGalleryView .gallery-zoom-control { transform: none; }
@media (max-width: 640px) {
  #directorGalleryView .gallery-zoom-control { transform: none; }
}

/* ── S4.17 危险操作（审计 §5.2；补做遗漏项）────────────────────────────
   审计 §5.2 要求「选择器 / 筛选 chip / 主操作 / **危险操作（低饱和红）** 外观各不相同」。
   S4 首轮只做了前三类，危险操作漏了。基准取自你已确认的原型
   `验收/asset-center-v2/index.html` 的 `.btn-danger{background:#fff;border-color:rgba(180,35,24,.32);color:#b42318}`，
   原型给它挂了 4 个按钮（打回 / 重试归档 / 确认打回 / 批量打回），生产对应有 3 个：
     ① 卡片「打回」（.is-danger；这里**同时摘掉了它原来的 .gallery-card-action-secondary**）
     ② 批量「打回选中」（#gallerySelReject）
     ③ 打回原因模态的「确定打回」（.gallery-reason-overlay 挂在 document.body 下，
        不在 #directorGalleryView 里，所以按 overlay 定位）
   「重试归档」在生产没有对应动作（这里是「重新生成」，非归档重试），故不挂。
   全部只改颜色，不动任何 handler 与禁用判定。

   两处实测教训（都已按实测改掉，不是照抄原型）：
   · ① 原先写成 `gallery-card-action-secondary is-danger` 时**根本不生效**：该 class 的两条基底规则（搜 gallery-card-action-secondary）用
     `!important` 给 .gallery-card-action-secondary 上了 bg/color，同级加类赢不了它。
     与其再叠一个 !important，不如让这个按钮**不再带**那个类（它的外观现在由
     .gallery-card-pop-item + .is-danger 决定），从根上不跟 !important 打架。
   · ③ 原型 .btn-danger 是「白底 + 红字」，但生产的模态盒子是深色（#151a22）：
     照抄后实测对比度只有 2.66:1，不达 AA。深色面上改用**实底红**（白字 6.57:1）达标。 */
#directorGalleryView .gallery-sel-btn.is-danger,
#directorGalleryView .gallery-card-pop-item.is-danger {
  background: #fff; border-color: rgba(180, 35, 24, .32); color: #b42318;
}
#directorGalleryView .gallery-sel-btn.is-danger:disabled { color: #b42318; opacity: .45; }
#directorGalleryView .gallery-sel-btn.is-danger:not(:disabled):hover,
#directorGalleryView .gallery-card-pop-item.is-danger:hover { background: #fef3f2; border-color: rgba(180, 35, 24, .5); }
/* 深色模态面上的危险主操作：实底红（白字 6.57:1） */
.gallery-reason-overlay .gallery-reason-ok { background: #b42318; border-color: #b42318; color: #fff; }
.gallery-reason-overlay .gallery-reason-ok:hover { background: #9a1e14; border-color: #9a1e14; }

/* ── S4.18 移动端 QA：摘要条 + bottom sheet（审计 §8.3；本轮补做）────────────
   形态基准（`验收/asset-center-v2/index.html`）：窄屏一条常驻 `.qa-bar`（标题摘要 + caret），
   点开从底部升起 sheet（遮罩 + 圆角 18px + 抓手 + max-height 82% + 上投影，role=dialog/aria-modal）。

   ★ 本轮花了最久的一条实测结论：这个子树里 position:fixed 与 position:sticky 都不可靠 ★
   1) fixed 不指向视口：实测 390 视口下摘要条被画在 y=14742（内容高 15166）。逐祖先实测根因在
      **共享 motion 系统**：`#directorGalleryView` 是 `.motion-page`（`will-change: opacity, transform`）
      且 `motion-page-enter` 以 fill:both 播完**残留 identity transform**；
      `.director-gallery-layout` 上还有父级 `>*` 派发的 `motion-item-enter` 同样残留。
      非 none 的 transform / will-change 都会成为 fixed 后代的 containing block。
      只覆盖 `animation-fill-mode` 也不够（父级 `>*` 派发的那条 `animation` 打不到），
      彻底修要动共享动效（而 leave 动画依赖 fill:both）⇒ 按「公共组件先不动」换路子。
   2) sticky 也不可靠：sticky 的可钉余量 = 滚动盒底 − 布局容器顶，实测随视口从 **19px**
      （320×568）到 671px（768×1024）大幅变化，没有任何单一 max-height 能同时守住所有视口与滚动位置。
   3) 最终采用：把面板宿主放在 `#directorGalleryView` **之外**（`.qa-host`，挂在 director-main 下，
      该层无 transform/will-change），≤980 时 JS 把面板搬进宿主，>980 搬回布局原处。
      实测：320×568 / 390×844 / 480×900 / 768×1024 四种视口、scrollTop 0 与 3000 两种位置，
      面板全部精确贴底（底边 = 视口高）✓。搬回是确定性的（面板本就是布局的最后一个子元素）。

   连带修复：S4.14 给选中操作做的底部动作条用的是 fixed，被同一根因画到了 y=214（已上线），
   现已改回「工具栏内一行、可横向滚动」，不再依赖 fixed。

   因为 now fixed 可用，遮罩与模态语义按原型恢复：role=dialog + aria-modal=true + 焦点陷阱。 */
.qa-host { display: contents; }
#galleryQaPanel .qa-close { display: none; }
#galleryQaHost .qa-bar, #galleryQaHost .qa-mask { display: none; }

@media (max-width: 980px) {
  /* 摘要条：贴视口底，回答「这批什么情况」，点开进 sheet */
  #galleryQaHost .qa-bar {
    display: flex; align-items: center; gap: 10px; text-align: left;
    position: fixed; left: 12px; right: 12px; bottom: 12px; z-index: 41;
    min-height: 56px; padding: 10px 12px; cursor: pointer;
    border: 1px solid var(--studio-line); border-radius: var(--studio-r-panel);
    background: rgba(255, 255, 255, .97); backdrop-filter: blur(16px);
    box-shadow: 0 -8px 26px rgba(15, 23, 42, .16);
  }
  #galleryQaHost .qa-bar .grow { flex: 1; min-width: 0; }
  #galleryQaHost .qa-bar b {
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
    font: 650 12px/1.4 var(--studio-font); color: var(--studio-ink);
  }
  #galleryQaHost .qa-bar small {
    display: block; margin-top: 3px; font-weight:400; font-size: 11px; color: var(--studio-muted);
  }
  #galleryQaHost .qa-bar .caret { color: var(--studio-muted); font-size: 13px; line-height: 1; }
  #galleryQaHost .qa-bar[aria-expanded="true"] .caret { transform: rotate(180deg); }

  /* 遮罩：z40 < 摘要条/动作条 z41 < sheet z42 */
  #galleryQaHost .qa-mask {
    display: block; position: fixed; inset: 0; z-index: 40;
    background: rgba(15, 23, 42, .44); backdrop-filter: blur(3px);
  }
  #galleryQaHost .qa-mask[hidden] { display: none; }

  /* 面板（搬进宿主后才匹配这个选择器，因此不会影响桌面）→ bottom sheet */
  #galleryQaHost #galleryQaPanel { display: none; }
  #galleryQaHost #galleryQaPanel[data-qa-open="1"] {
    display: block; position: fixed; left: 0; right: 0; bottom: 0; top: auto; z-index: 42;
    margin: 0; padding: 14px 16px 18px; max-height: 82vh; overflow-y: auto;
    border-radius: 18px 18px 0 0; background: #fff;
    box-shadow: 0 -14px 40px rgba(15, 23, 42, .24);
    animation: qa-sheet-in .2s ease;
  }
  /* 关闭出口：触屏上没有 Esc，模态 sheet 又盖住了摘要条 ⇒ 必须有显式关闭按钮
     （原型也是这么做的：它的遮罩处理器会在点「关闭」按钮时收口）。 */
  #galleryQaHost #galleryQaPanel[data-qa-open="1"] .qa-close {
    display: block; margin: 0 0 10px auto; min-height: 34px; padding: 0 12px;
    border: 1px solid var(--studio-line); border-radius: var(--studio-r-control);
    background: #fff; color: #3c4553; font: 600 12px/1 var(--studio-font); cursor: pointer;
  }
  #galleryQaHost #galleryQaPanel[data-qa-open="1"]::before {
    content: ""; display: block; width: 38px; height: 4px; border-radius: 2px;
    background: #d5dbe4; margin: 0 auto 12px;
  }
  #galleryQaHost #galleryQaPanel[data-qa-open="1"] .director-qa-head { display: block; }
  #galleryQaHost #galleryQaPanel[data-qa-open="1"] .director-qa-body { display: block; }
  /* keyframes 不用 fill:both，避免复现上面那条「残留 transform」的坑 */
  @keyframes qa-sheet-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

  /* 选中操作：窄屏改为工具栏内「一行 + 横向滚动」，不使用 fixed（见本段说明） */
  #directorGalleryView .director-gallery-actions > .gallery-sel-group {
    grid-column: 1 / -1; display: flex; flex-wrap: nowrap; gap: 8px;
    overflow-x: auto; padding-bottom: 2px; scrollbar-width: none;
  }
  #directorGalleryView .director-gallery-actions > .gallery-sel-group::-webkit-scrollbar { height: 0; }
  #directorGalleryView .director-gallery-actions > .gallery-sel-group .gallery-sel-btn,
  #directorGalleryView .director-gallery-actions > .gallery-sel-group .gallery-sel-count { flex: 0 0 auto; }

  @media (prefers-reduced-motion: reduce) { #galleryQaHost #galleryQaHost #galleryQaPanel[data-qa-open="1"] { animation: none; } }
}

/* ── S4.19 等宽数字（审计 §9）→ A1 修正（2026-09-21 用户裁定「甲 · 贴原型」）────
   条文：「批次号 / 时间 / 计数改等宽 + tabular-nums」。**改前**把 12 个（含混排与纯中文整句）
   选择器一起挂了等宽字族，并在注释里假设「中文会自然回落系统 CJK 字体，不换字形」。
   ⚠️ 实测否定该假设（2026-09-21 · 1440 宽 · 生产记录屏）：
     · 等宽里含中文的文本节点 **133/158（≈84%）**，其余三 pane 只有 1/4；
     · 目视：'记录 · 爆款复刻 · 验收' / '已存入你的飞书 · 可随时查看或下载' / '生成-验收-归档'
       比同一张卡上的正文与按钮**更宽、更松**，同一行里数字与中文两套字宽节奏（原型从不在这些处挂等宽）。
   ⇒ 按原型（只给 9 个**纯数字**选择器挂 --mono；原型是拆 `<span class="num">`，生产不改 DOM）
     收回为**纯数字/日期**白名单：实测这三个选择器的内容全部是纯数字 ——
       .director-summary-chip b → '21' / '14'；.gsc → '21' / '1'；.gallery-batch-head b → '09-14'。
     其余 9 个回正文无衬线，数字对齐改用 font-variant-numeric:tabular-nums
     （字体栈里数字来自 SF，支持 tnum）⇒ 保住对齐、去掉两套字形。
   ⚠️ 12 个选择器一个不删：不回列的话它们会从别处继承到等宽（静默回退 ✗）。 */
#directorGalleryView { --mono-num: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; }
#directorGalleryView .director-summary-chip b,
#directorGalleryView .gsc,
#directorGalleryView .gallery-batch-head b {
  font-family: var(--mono-num);
  font-variant-numeric: tabular-nums;
}
#directorGalleryView .gallery-sel-count,
#directorGalleryView .gallery-batch-head small,
#directorGalleryView .gallery-batch-stepper i,
#directorGalleryView .gallery-batch-context,
#directorGalleryView .gallery-batch-facts,
#directorGalleryView .gallery-record-facts,
#directorGalleryView .gallery-storage-status,
#directorGalleryView .qa-block strong,
#directorGalleryView .qa-bar b {
  font-family: var(--studio-font);
  font-variant-numeric: tabular-nums;
}

/* ── S4.20 QA 状态分解（还原度补齐 2026-09-18；审计 §8.3「未还原」项）─────────
   原型 `.qa-stats` 里 3 个可点状态块（待验收 / 已采用 / 异常）。本块**只负责外观**：
   计数与筛选语义都由既有 chip 那套承担（同一张 chipCounts 表、同一个 galleryStatusFilter、
   同一个 syncGalleryStatusRow 同步点），这里不引入任何第二份数据源 ✗。
   选中态用「底色 + 边框 + 字色」三通道，与 chip 的选中态口径一致（不只靠颜色）。 */
#galleryQaPanel .qa-stats {
  display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 12px;
}
#galleryQaPanel .qa-stat {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 32px; padding: 0 10px;
  border: 1px solid var(--studio-line); border-radius: 8px; background: #fff;
  font-size: 12px; line-height: 1; color: var(--studio-ink); cursor: pointer;
}
#galleryQaPanel .qa-stat .qa-dot {
  width: 7px; height: 7px; border-radius: 50%; flex: none; background: currentColor;
}
#galleryQaPanel .qa-stat .qa-k { font-size: 12px; }
#galleryQaPanel .qa-stat b {
  font-family: var(--mono-num); font-variant-numeric: tabular-nums;
  font-size: 12px; font-weight: 600; color: var(--studio-text);
}
#galleryQaPanel .qa-stat.is-wait { color: var(--st-wait-fg); }
#galleryQaPanel .qa-stat.is-ok   { color: var(--st-ok-fg); }
#galleryQaPanel .qa-stat.is-err  { color: var(--st-err-fg); }
#galleryQaPanel .qa-stat:hover { background: var(--studio-blue-soft); }
#galleryQaPanel .qa-stat.active {
  background: var(--studio-blue-soft); border-color: var(--studio-blue-line); color: var(--studio-blue);
}
#galleryQaPanel .qa-stat.active b { color: var(--studio-blue); }
#galleryQaPanel .qa-stat:focus-visible { outline: 2px solid var(--studio-blue); outline-offset: 2px; }
/* 窄屏触控：与 S4.10 的 40px 口径一致（移动端这 3 个块是筛选入口，不能比 chip 小）。 */
@media (max-width: 640px) {
  #galleryQaPanel .qa-stat { min-height: 40px; padding: 0 12px; }
}

/* ── S4.21 ⋯ 菜单分组线与失败详情（还原度补齐 2026-09-18）──────────────────
   ① 分组线：原型 `.pop` 在末项前有一条 <hr>，把「常态动作」与「异常详情」分开。
   ② 失败详情：QA 面板内的只读块（面板副标题指的就是它）。默认 hidden，无失败时不占位。
   色用既有语义令牌（--st-err-*），不新造颜色；字号守 12px 下限；窄屏关闭键守 40px 触控。 */
#directorGalleryView .gallery-card-pop .gallery-card-more-sep {
  margin: 5px 2px; border: 0; border-top: 1px solid var(--studio-line);
}
#galleryQaPanel .qa-detail {
  margin: 0 0 12px; padding: 10px 12px;
  border: 1px solid var(--st-err-bd); border-radius: 10px; background: var(--st-err-bg);
}
#galleryQaPanel .qa-detail[hidden] { display: none; }
#galleryQaPanel .qa-detail:focus-visible { outline: 2px solid var(--studio-blue); outline-offset: 2px; }
#galleryQaPanel .qa-detail-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 0 0 7px; }
#galleryQaPanel .qa-detail-head b { font-size: 12px; font-weight: 650; color: var(--st-err-fg); }
#galleryQaPanel .qa-detail-close {
  flex: none; min-height: 26px; padding: 0 9px; border: 1px solid var(--st-err-bd); border-radius: 7px;
  background: #fff; color: var(--st-err-fg); font-size: 12px; line-height: 1; cursor: pointer;
}
#galleryQaPanel .qa-detail-row { display: flex; gap: 8px; margin: 0 0 5px; font-size: 12px; line-height: 1.5; }
#galleryQaPanel .qa-detail-row:last-child { margin-bottom: 0; }
#galleryQaPanel .qa-detail-row b { flex: none; width: 78px; font-weight: 600; color: var(--st-err-fg); }
#galleryQaPanel .qa-detail-row span { min-width: 0; color: var(--studio-ink); word-break: break-word; }
@media (max-width: 640px) {
  #galleryQaPanel .qa-detail-close { min-height: 40px; padding: 0 12px; }
  #galleryQaPanel .qa-detail-row { display: block; }
  #galleryQaPanel .qa-detail-row b { display: block; width: auto; margin-bottom: 1px; }
}

/* ── S4.22 分区 tab 计数（2026-09-18 用户裁定口径）──────────────────────────
   原型 `.zone b` 是等宽弱化数字（11.5px）。取不到数据时写「暂无」而不是 0：
   0 会被读成「你没有」，而事实是「还没读到」。
   颜色用已验证过 AA 的辅文字色 #5b6472，**不用原型那个 #8b95a3**
   （#8b95a3 对白底实测约 3.0:1，低于 11.5px 文本的 AA 要求）。 */
.director-asset-switch .director-filter b {
  margin-left: 6px;
  font-family: var(--mono-num); font-variant-numeric: tabular-nums;
  font-size: 11px; font-weight: 600; color: #5b6472;
}
.director-asset-switch .director-filter.active b { color: #1d4ed8; }  /* 同 S4.12：--studio-blue 落在浅蓝底上只有 3.38:1，不达 AA */

/* ---------- 17. 灵感与配方 · 定稿原型还原（2026-09-18 用户裁定） ----------
   基准：验收/ia-prototype-v1/index.html（**唯一视觉基准**）。
   方案：specs/inspire-prototype-restoration-plan-v1.md（R1–R5）。
   口径：原型 :root 的令牌本就取自本工作台的 Studio 体系 ⇒ 本次只收口**结构/几何/密度**，
        不新造色板、不动数据链路（案例目录、预设 API、复刻上传链路一律保持原样）。
   用户裁决：① 配置确认看板（全部 14 个筛选维度改为顶部 chip 行）② 复刻区双栏 + 静态字段预览
            ③ 预设缩略图零后端派生占位 ④ 壳层（toolbar/rail）本次不做。
   ⚠ 全部规则以 #directorPlanningView 限定：不污染共享类（director-cta / director-eyebrow /
     director-filter / guide-chip / planning-copy-prompt 均跨视图共用）。 */

/* ① 内容区居中限宽（原型 #view-inspire 的 padding-inline:max(30px,calc((100% - 1240px)/2))）
   —— 超宽屏上原型不拉伸内容，app 原先满幅铺开，是「留白更大/更疏」观感差异的来源之一。 */
#directorPlanningView{padding:24px max(30px,calc((100% - 1240px)/2)) 34px}

/* ② 页头：左标题组、右分区 tab 容器（原型 .page-head + .actions） */
#directorPlanningView .planning-toolbar{align-items:flex-end;gap:14px;padding-bottom:0;margin-bottom:16px}
#directorPlanningView .planning-toolbar-lead{min-width:0}
/* ③ 案例区筛选：默认显示用途 / 商品，低频拍法 / 标签收进「更多筛选」。
   保留原型 chip 语言与四个动态容器，只收窄首屏决策范围。 */
#directorPlanningView .planning-filter-facets{display:flex;flex-direction:column;align-items:stretch;gap:7px}
#directorPlanningView .planning-tabs .planning-tab{height:28px;display:inline-flex;align-items:center;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.8);color:var(--studio-muted);padding:0 11px;font:600 11px/1.2 var(--studio-font);cursor:pointer;transition:.18s ease}
#directorPlanningView .planning-tabs .planning-tab:hover{background:#fff;color:var(--studio-text);box-shadow:var(--studio-sh-control)}
/* A3（2026-09-19）：选中底色 #172033 → #111827。同屏四组同功能 chip 里只剩这一组用 #172033
   （.planning-category.active / .planning-tag.active / 原型 .chip.active 均为 #111827＝var(--ink)）；
   .planning-category 的收口注释已记「原是 #172033，色号偏了」，漏改了本组。
   原地改写而非叠加覆盖 —— 叠加会留下被压死的死规则（本仓已有此类记忆条目）。 */
#directorPlanningView .planning-tabs .planning-tab.active{border-color:var(--studio-ink);background:var(--studio-ink);color:#fff;font-weight:600}
#directorPlanningView .planning-catalog-head{display:flex;justify-content:space-between;align-items:center;margin:0 0 10px}

/* 采集工具卡（2026-09-19 从「设置 › 能力拓展」搬来，依据原型 C5）：复用 .settings-card 语言，
   但解除它的 760 限宽（灵感区左栏在宽屏会 >760）并收紧上边距，与上方上传框拉开一层。
   内容仍单一事实源：#capabilityToolBox 由 loadCapabilityTool() 渲染，id 未变。 */
#directorPlanningView .inspire-capture-tool{max-width:none;margin:14px 0 0}
/* P0：采集工具默认只露出入口，完整下载与安装信息留在原生 details 内。
   不改 #capabilityToolBox / #capabilityInstallDetail 的数据与交互，只收窄首屏信息层级。 */
#directorPlanningView .inspire-capture-tool{padding:0;overflow:hidden}
#directorPlanningView .inspire-capture-summary{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 14px;cursor:pointer;list-style:none}
#directorPlanningView .inspire-capture-summary::-webkit-details-marker{display:none}
#directorPlanningView .inspire-capture-summary>span:first-child{display:flex;flex-direction:column;gap:3px;min-width:0}
#directorPlanningView .inspire-capture-summary strong{font:650 12px/1.3 var(--studio-font);color:var(--studio-ink)}
#directorPlanningView .inspire-capture-summary small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--studio-muted);font-size:10px;line-height:1.4}
#directorPlanningView .inspire-capture-summary-action{flex:0 0 auto;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);padding:6px 9px;color:var(--studio-muted);font:600 10px/1.2 var(--studio-font)}
#directorPlanningView .inspire-capture-summary-action{font-size:0}
#directorPlanningView .inspire-capture-summary-action::before{content:'展开';font-size:10px}
#directorPlanningView .inspire-capture-tool[open] .inspire-capture-summary-action::before{content:'收起'}
#directorPlanningView .inspire-capture-summary:hover .inspire-capture-summary-action{background:#fff;color:var(--studio-text);box-shadow:var(--studio-sh-control)}
#directorPlanningView .inspire-capture-summary:focus-visible{outline:2px solid var(--studio-blue)!important;outline-offset:-2px}
#directorPlanningView .inspire-capture-body{padding:0 14px 14px;border-top:1px solid var(--studio-line-soft)}
/* 安装说明默认收起（触发按钮在 studio-app.js 的 data-capability-guide 上）。
   显式写 [hidden] 是防“被更重的 display 规则顶掉”——本仓踩过 hidden 被覆盖的坑。 */
#directorPlanningView .inspire-capture-tool #capabilityInstallDetail[hidden]{display:none}
#directorPlanningView .inspire-capture-tool .settings-list{margin:10px 0 0}
/* ── 采集素材来源面板（IA v3；契约 v2）──────────────────────────────────────
   面板位于统一灵感主库内，不设一级 tab、不新增导航区。
   私有素材不进 public/、飞书附件凭据不下发前端（见 src/xhs-library.js 文件头）。
   边界：采集库走鉴权 /api/xhs-captures，与公开的 /api/cases 严格分离，不共享渲染函数。 */
#inspirationSourcePanel{margin-top:20px;border-top:1px solid var(--studio-line);padding-top:16px}
#inspirationSourcePanel .capture-head-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
#inspirationSourcePanel .capture-notice{margin-top:14px;padding:16px 18px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72);color:var(--studio-muted);font-size:12px;line-height:1.8}
#inspirationSourcePanel .capture-notice b{color:var(--studio-ink)}
#inspirationSourcePanel .capture-notice .btn{margin-top:10px}
#inspirationSourcePanel .capture-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(186px,1fr));gap:14px;margin-top:16px}
/* 卡片描边用当前设计基准的 --studio-line（与案例卡同口径，2026-09-19 已裁定），
   不用原实现的白色玻璃边 —— 保持同区卡片视觉统一。 */
#inspirationSourcePanel .capture-card{display:flex;flex-direction:column;border:1px solid var(--studio-line);border-radius:12px;background:rgba(255,255,255,.84);overflow:hidden;cursor:pointer;transition:.2s ease}
#inspirationSourcePanel .capture-card:hover{border-color:var(--studio-blue)}
#inspirationSourcePanel .capture-card.active{border-color:var(--studio-blue)}
#inspirationSourcePanel .capture-cover{position:relative;aspect-ratio:3/4;background:var(--studio-placeholder-bg) center/cover no-repeat;border-bottom:1px solid var(--studio-line-soft)}
#inspirationSourcePanel .capture-cover-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--studio-muted);font-size:10px}
#inspirationSourcePanel .capture-likes{position:absolute;right:8px;bottom:8px;padding:3px 8px;border-radius:var(--studio-r-control);background:rgba(15,23,42,.72);color:#fff;font:600 10px/1.2 var(--studio-font)}
#inspirationSourcePanel .capture-card-body{padding:10px 12px 12px;display:grid;gap:5px}
#inspirationSourcePanel .capture-card-body h3{margin:0;font:600 12px/1.5 var(--font-display);color:var(--studio-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#inspirationSourcePanel .capture-card-meta{display:flex;gap:8px;flex-wrap:wrap;color:var(--studio-muted);font-size:10px}
#inspirationSourcePanel .capture-detail{margin-top:18px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84);overflow:hidden}
#inspirationSourcePanel .capture-detail-head{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;padding:16px 18px;border-bottom:1px solid var(--studio-line)}
#inspirationSourcePanel .capture-detail-head h3{margin:0 0 6px;font:650 16px/1.4 var(--font-display);color:var(--studio-ink)}
#inspirationSourcePanel .capture-detail-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
#inspirationSourcePanel .capture-detail-tags i{font-style:normal;padding:2px 8px;border-radius:var(--studio-r-control);background:var(--studio-blue-soft);color:var(--studio-muted);font-size:10px}
#inspirationSourcePanel .capture-detail-side{display:grid;gap:8px;min-width:190px}
#inspirationSourcePanel .capture-shots{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:10px;padding:16px 18px;cursor:pointer}
#inspirationSourcePanel .capture-shot{position:relative;aspect-ratio:3/4;border:1px solid var(--studio-line);border-radius:10px;background:var(--studio-placeholder-bg) center/cover no-repeat;overflow:hidden}
#inspirationSourcePanel .capture-shot .capture-shot-index{position:absolute;left:6px;bottom:6px;padding:2px 6px;border-radius:8px;background:rgba(15,23,42,.6);color:#fff;font-size:9px}
#inspirationSourcePanel .capture-shot .capture-shot-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--studio-muted);font-size:9px;text-align:center;padding:4px}
#inspirationSourcePanel .capture-shot.is-picked{border-color:var(--studio-blue);box-shadow:0 0 0 2px var(--studio-blue-soft)}
#inspirationSourcePanel .capture-detail-foot{padding:0 18px 16px;color:var(--studio-muted);font-size:10px;line-height:1.7}
#inspirationSourcePanel .capture-detail-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
#inspirationSourcePanel .capture-hint{color:var(--studio-muted);font-size:10px;line-height:1.6}
/* Base 网址比对行（表不存在时用来和采集工具 config.json 的 baseToken 对）：长串必须可断行 */
#inspirationSourcePanel .capture-base{word-break:break-all;color:var(--studio-ink)}

/* ── S4.23 批量决策忙态（L1 修复 2026-09-18）──────────────────────────────────
   为什么必须补这一条：这四个 `.gallery-sel-btn` **不在** `.director-gallery-foot` 里
   （在 `.director-gallery-actions > .gallery-sel-group`），所以既有那条
   `.director-gallery-foot button:disabled{opacity:.45}` 根本管不到它们 ⇒ 只把
   disabled=true 而没有任何视觉变化，用户点了会以为“没反应”，反而更容易连点。
   实底红那一条（`.is-danger:disabled`）本来就有，此处补普通按钮与忙态。 */
#directorGalleryView .gallery-sel-btn:disabled { opacity: .45; cursor: not-allowed; }
#directorGalleryView .gallery-sel-btn.is-loading { cursor: wait; opacity: .75; }

/* ── S4.24 向原型靠拢（2026-09-19 用户授权 ①②③④）────────────────────────
   基准：验收/ia-prototype-v1/index.html 的资产中心。全部是**纯视觉**改动：
   流程/状态彩点、批次元信息补时间、商品封面斜纹占位；不动数据与交互路径。
   取色沿用本文件已验证过 AA 的既有令牌（#5b6472 辅文字 / #047857 成功 / #1d4ed8 强调）。 */
/* ①a 批次流程：药丸 → 彩点 + 文字（原型「●生成 → ●验收 → ○归档」）。
   必须连 .done/.doing 一起按同级选择器覆盖：文件前面已有一条 (1,3,1) 的 .doing 设了背景，
   只覆盖基类 i 是压不住它的（这是本仓反复踩的级联坑）。 */
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.done,
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.doing,
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.todo,
#galleryReal .director-gallery-card .gallery-batch-stepper i.done,
#galleryReal .director-gallery-card .gallery-batch-stepper i.doing,
#galleryReal .director-gallery-card .gallery-batch-stepper i.todo {
  background: transparent; color: #5b6472;
}
#galleryReal > .gallery-batch-head .gallery-batch-stepper i,
#galleryReal .director-gallery-card .gallery-batch-stepper i {
  background: transparent; padding: 0; display: inline-flex; align-items: center; gap: 5px; color: #5b6472;
}
#galleryReal > .gallery-batch-head .gallery-batch-stepper i::before,
#galleryReal .director-gallery-card .gallery-batch-stepper i::before {
  content: ""; width: 8px; height: 8px; border-radius: 50%; background: #cbd5e1; flex: 0 0 auto;
}
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.done::before,
#galleryReal .director-gallery-card .gallery-batch-stepper i.done::before { background: #047857; }
#galleryReal > .gallery-batch-head .gallery-batch-stepper i.doing::before,
#galleryReal .director-gallery-card .gallery-batch-stepper i.doing::before { background: #1d4ed8; box-shadow: 0 0 0 3px rgba(29,78,216,.15); }

/* ①b 角色卡身份门禁：彩点（原型「●身份已通过 / ●待补充参考图」）。
   用 id 级选择器限定在资产中心这一屏，避免影响工作台等别的 .cap-state 使用处。

   ⚠️ 2026-09-19：宿主徽标已整项摘除（用户裁定「先摘掉」）—— .cap-state 在 public/ 与 src/ 里
   已**零产出点**（唯一产出者 renderDirectorCharacterAssets 的 idBadge 已删；工作台 04 步的同源
   文案一并摘除）。原因见 studio-app.js 该处的注释：identity_ok ← face_refs 无写入点 ⇒ 恒 false。
   下面四条规则**刻意保留**（原型对齐结论 + 装回时零成本），但它们当前没有任何宿主；
   重新引入徽标前不要以为「样式还在 ⇒ 功能还在」。 */
#directorGalleryView .cap-state::before {
  content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 5px; background: #b45309; vertical-align: 1px;
}
#directorGalleryView .cap-state.on::before { background: #047857; }

/* ② 批次元信息行原色 #8b98a9 对白底约 2.9:1，11.5px 文字不达 AA ⇒ 收到已验证达标的辅文字色。 */
#directorGalleryView .gallery-batch-facts,
#directorGalleryView .gallery-record-facts { color: #5b6472; }

/* ③ 商品封面未取回时的斜纹占位（原型同款）。有真实封面时 JS 用 CSSOM 写 inline
   background-image ⇒ inline 优先、自动覆盖，无需任何 JS 改动。 */
#directorProductAssetsGrid .director-product-asset-cover {
  background-image: repeating-linear-gradient(135deg, rgba(148,163,184,.20) 0 6px, rgba(255,255,255,0) 6px 12px);
}
/* ④b 商品库不可用时的出口按钮 */
#directorProductAssetsGrid .director-product-retry { margin-top: 10px; }
/* ①b 配套：app 基线的 .cap-state 是药丸（底 + 圆角），原型是「彩点 + 纯文字」⇒ 在资产中心这一屏拉平；
   同时把 .on 的 --studio-blue(#3b82f6) 3.38:1 收到已达标的 #1d4ed8（同 S4.12 的先例）。 */
#directorGalleryView .cap-state { background: transparent; padding: 0; border-radius: 0; font-weight: 600; color: #5b6472; }
#directorGalleryView .cap-state.on { background: transparent; color: #1d4ed8; }

/* ── S4.25 资产中心 ⑥⑦（2026-09-19 用户裁定 A）────────────────────────────────
   ① 批次段首的行内动作（对齐原型 .batch 行最右的单个按钮）
   ② 角色资产「新建角色卡」虚线卡（对齐原型网格末尾的虚线卡）
   纪律：全部 id 级作用域，不改共享类（.director-filter / .role-card / .btn 都被别处复用）。
   取色沿用本文件已验证过 AA 的令牌：主按钮 #1d4ed8 + 白字（6.3:1，同 S4.12 先例）。 */
#galleryReal > .gallery-batch-head .gallery-batch-act{
  margin-left:6px; align-self:center; padding:3px 10px; font-size:11px; font-weight:600;
  border:1px solid var(--studio-line); border-radius:var(--studio-r-control); background:#fff; color:var(--studio-ink);
  cursor:pointer; white-space:nowrap; transition:background .15s ease,border-color .15s ease,color .15s ease;
}
#galleryReal > .gallery-batch-head .gallery-batch-act:hover{border-color:var(--studio-blue);color:var(--studio-blue)}
#galleryReal > .gallery-batch-head .gallery-batch-act.is-primary{border-color:#1d4ed8;background:#1d4ed8;color:#fff}
#galleryReal > .gallery-batch-head .gallery-batch-act.is-primary:hover{border-color:#1e40af;background:#1e40af;color:#fff}
#galleryReal > .gallery-batch-head .gallery-batch-act:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px}

/* ② 虚线卡：用 .role-card 做底（继承边框 / 圆角 / 悬停阴影），只把边框改虚线、内容居中 ⇒
   与同类卡片同尺寸、同视觉语言。min-height 取原型同一个值（280px），防止它单独占一行时被压扁。 */
#directorCharacterAssetsGrid .role-card-new{
  border-style:dashed; background:rgba(255,255,255,.5); min-height:280px; padding:20px;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:5px;
  text-align:center; cursor:pointer; color:var(--studio-muted);
  /* 刻意不用 font 简写写 inherit：简写里的 inherit 会让整条声明失效（本仓实测坑）；逐个属性显式写。 */
  font-family:var(--studio-font); font-size:11px; font-weight:400;
}
#directorCharacterAssetsGrid .role-card-new:hover{border-color:var(--studio-blue);background:rgba(239,246,255,.55)}
#directorCharacterAssetsGrid .role-card-new:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px}
#directorCharacterAssetsGrid .role-card-new .rcn-plus{font-size:22px;line-height:1;color:var(--studio-muted)}
#directorCharacterAssetsGrid .role-card-new b{font-family:var(--studio-font);font-size:13px;font-weight:650;color:var(--studio-ink)}
#directorCharacterAssetsGrid .role-card-new .rcn-tip{font-size:11px;line-height:1.6;color:var(--studio-muted)}
#directorCharacterAssets .director-char-new:disabled{opacity:.55;cursor:progress}

/* ══════════════════════════════════════════════════════════════════════════
   B · 三个 pane 并入 #directorGalleryView 的组件双挂（2026-09-19）
   ──────────────────────────────────────────────────────────────────────────
   背景：资产中心四个平区原住在**两个 DOM 壳**里 —— 「批次与交付」在
   #directorGalleryView（新壳），「角色 / 商品 / 风格 DNA」在 #screen-accounts（旧壳）。
   两壳的样式是**互补补丁**：旧壳有 .btn/.chip/.role-card 等组件规则，新壳侧一条都没有。
   pane 搬进新壳后那些组件会掉回 index.css 的全局默认（第一代品牌红 #b6533d + 圆角 0）。

   本块 = B 步骤 2 的**双挂**：为白名单组件的旧壳规则各追加一份 #directorGalleryView 版。

   三条落点纪律（都是实测换来的，不是推测）：
     ① **不就地改写、只末尾追加**：就地改写要在逗号分段间重建选择器文本，实测会丢逗号、
        把多个选择器粘成一个（`'.a .b.a .c'`），写坏整份 CSS。
     ② **排除新壳已有等价规则的分段**：`L2501` 那条跨壳合并规则已含 `.director-main .director-cta`
        一族，盲目镜像会产生重复定义。实测已跳过 0 条（无重复），但保留该判定作护栏。
     ③ **声明 display 的规则要单独判断**：末尾追加会把特异性抬到 (1,1,0)=110，
        压过工具类 `.u-d-none.u-d-none.u-d-none` 的 30 —— 由
        frontend-utility-specificity.test.js 抓出。处理方式：
          · 与 .btn 相关的 display 冲突 → **就地补**在 L2501（该规则本就跨壳，扩展它最自然）；
          · 其余 4 条 display 规则（网格/卡片/封面）→ 已核实其类**不与 u-d-none 共现**
            （coClasses 清单实测），故可安全追加。

   白名单（方案 §5.1 的 26 条组件子集）。
   ══════════════════════════════════════════════════════════════════════════ */
  #directorGalleryView .sec-label{color:var(--studio-muted)}
  #directorGalleryView .role-card{border-radius:0;background:var(--studio-white);border-color:var(--studio-line);box-shadow:none}
  #directorGalleryView .btn{border-radius:0;background:var(--studio-blue);border-color:var(--studio-blue)}
  #directorGalleryView .btn.ghost{background:var(--studio-white);color:var(--studio-blue);border-color:var(--studio-line)}
  #directorGalleryView .btn,
  #directorGalleryView .planning-filter{min-height:38px}
  #directorGalleryView .role-card{padding:var(--site-card-pad)}
  #directorGalleryView .btn,
  #directorGalleryView .planning-filter{min-height:38px}
  #directorGalleryView .role-card{padding:0}
  #directorGalleryView .btn,
  #directorGalleryView .planning-filter{min-height:var(--ui-control-h);line-height:1.25}
  #directorGalleryView .director-product-asset-cover{aspect-ratio:1/1;border-radius:var(--studio-r-control);background:var(--studio-placeholder-bg) center/cover no-repeat}
  #directorGalleryView .sec-label{color:var(--studio-muted);font-size:10px;font-weight:650;letter-spacing:.1em}
  #directorGalleryView .btn:not(.ghost):hover{transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}
#directorGalleryView .btn.ghost{border:1px solid var(--studio-line);background:rgba(255,255,255,.72);color:#4b5563;font-weight:600}   /* A3（2026-09-21）：基础 .btn 写的是 500 ⇒ 幽灵按钮落在 500，而同屏同级控件（.director-filter）是 600 ⇒ 补 600 与家族对齐。⚠️ 必须在**新壳这条**上加：.app-shell>.app .btn.ghost 不匹配本壳元素（实测 matches_rule:false），那上加了也不会生效（我先试错过一次）。 */
#directorGalleryView .btn.ghost:hover{background:#fff;box-shadow:var(--studio-sh-control)}

/* ══ 资产中心 · 图片破相兜底（2026-10-03 视觉根治 R1/R2/R3）══════════════════════
   三条独立的破相根因，各自带一条兜底；**都只画占位，不改数据流、不重试**。
   ① R2 商品封面：.role-card 那条 `background:var(--c-surface)` 简写把 repeating-linear-gradient 条纹 background-image
      重置为 none ⇒ 封面失败时是**纯白空盒**（看不出是没图还是坏了）。
      这里用 .is-cover-failed（JS 在 fetch 失败 / blob 预检失败时加）画显式占位。 */
#directorGalleryView .director-product-asset-cover.is-cover-failed{
  /* 用实色令牌而非 var(--studio-placeholder-bg)：失败态要盖住斜纹底（::before），
     语义是「这里没有图」而非「等图加载」，与加载中的透明态区分开。
     历史补记：R2 写下本注释时，该变量还是自引用失效状态（:root 段，2026-10-03 由
     23046f14 修为 #F1F5F9）；本绕行此后不再是「变量坏了」，而是「失败态需与加载态可区分」。 */
  background:var(--studio-paper) center/cover no-repeat;
  position:relative;
}
#directorGalleryView .director-product-asset-cover.is-cover-failed::before{
  content:'';position:absolute;inset:0;
  background:repeating-linear-gradient(135deg,rgba(148,163,184,.16) 0 6px,rgba(255,255,255,0) 6px 12px);
}
/* 首字大字：attr() 取 JS 写入的 data-fb-char。
   ⚠️ 不用 `:not([data-fb-char])` 兜底 —— 那条选择器比上面的 ::after 更特异，会把
   content 覆盖成 none，连有首字的正常卡也一起抹掉（实测踩到：content 变成 "none"）。
   attr() 在属性缺失时本就解析为空串 ⇒ 空占位什么都不显示，正是想要的效果。 */
#directorGalleryView .director-product-asset-cover.is-cover-failed::after{
  content:attr(data-fb-char);position:absolute;inset:0;
  display:grid;place-items:center;
  font:650 32px/1 var(--studio-font);color:var(--studio-muted);opacity:.55;   /* 32 = 原型档位上限（frontend-typography-gates F3 白名单），勿改 34 */
}
/* ② R1 角色卡私有图：水化等待窗内 <img> 无 src ⇒ 浏览器直接渲染 alt 文字
   （"鹿梨 角色设定卡" 压在渐变上 = 截图里的裸奔现象）。
   有 src 且加载失败时由 studio-app.js 里 window 级 error 监听（搜 window.addEventListener）藏 img、显 pending-frame；
   水化成功时 JS 的 img.style.display='' 会恢复显示。 */
#directorGalleryView img[data-card-account]:not([src]){visibility:hidden}
/* ③ R3 DNA 卡三个角度：私有分支已有 is-missing 钩子但无样式，公开 URL 失败
   由 JS 统一标同一 class ⇒ 两条路径共用这一条视觉。 */
#directorGalleryView .director-face-angle.is-missing{
  background:var(--studio-paper) center/cover no-repeat;   /* 同上：绕开自引用的 placeholder 令牌 */
  position:relative;
}
#directorGalleryView .director-face-angle.is-missing::after{
  content:'▨';position:absolute;inset:0;display:grid;place-items:center;
  font:400 13px/1 var(--studio-font);color:var(--studio-muted);opacity:.5;
}
/* ④ R4 商品卡：机器 ID 从标题降到卡底 —— 等宽 + 弱化 + 可选中复制。
   标题位让给「商品名 / 商品 #NN」（见 studio-app.js 的 titleText），
   ID 保留在卡底是因为它仍是唯一标识与点选依据，删掉会丢失可追溯性。 */
#directorGalleryView .director-asset-record-id{
  display:block;margin:-2px 0 2px;
  font-family:var(--font-mono);font-size:10px;line-height:1.4;
  color:var(--studio-muted);opacity:.7;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:all;
}
/* ⑤ R6-A 回归修复：删掉卡体 .conf 后，.foot 只剩 .acts 一个子元素，而 .foot 是
   `display:flex; justify-content:space-between`（.role-card .foot 那条）⇒ 唯一子元素被推到**左边**，
   按钮组从原来的右对齐变成贴左（真机实测：距左边距 0 / 距右 79px）。
   补 margin-left:auto 把 .acts 顶回右侧，恢复删除前的视觉；
   不改 .foot 本身的 flex 定义，避免波及其他复用 .foot 的卡。 */
#directorGalleryView .role-card .foot .acts{margin-left:auto}
  #directorGalleryView .chip:hover{background:#fff;color:var(--studio-text)}
  #directorGalleryView .chip.active,
  #directorGalleryView .src-tab.active{border-color:var(--studio-blue-line);background:var(--studio-blue-soft);color:var(--studio-blue)}
  #directorGalleryView .rc-img{border-radius:10px}
  #directorGalleryView .drop{border:1px dashed var(--studio-line-2);background:rgba(255,255,255,.7);color:var(--studio-muted)}
  #directorGalleryView .drop:hover{border-color:var(--studio-blue-line);background:#fff}
  #directorGalleryView .rc-img{border-color:var(--studio-line)}
  #directorGalleryView .director-character-assets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;margin-bottom:20px}
  #directorGalleryView .director-product-asset-card{display:flex;flex-direction:column;gap:6px;padding:10px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.84)}
  #directorGalleryView .director-product-assets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:20px}

/* ══════════════════════════════════════════════════════════════════════════
   B · 三个 pane 容器 + 商品搜索/筛选行（2026-09-19）
   ──────────────────────────────────────────────────────────────────────────
   实测（补丁前，全仓 CSSOM 枚举）：三个容器**都没有自己的 display 规则** ——
     #directorCharacterAssets  → 0 条（靠 HTML 默认 section→block 渲染）
     #directorProductAssets    → 0 条（同上）
     #directorRoleAssetsPane   → 0 条（它的 .archive-layout{display:grid} 是 **class** 规则）
   今天能显示是因为住在旧壳里、由 UA 默认样式撑着。搬进 #directorGalleryView 后，
   会被祖先的隐藏语义连坐 ⇒ **整块消失**（组件样式修得再好也等于零）。

   商品搜索行与类别筛选（#directorProductAssetsSearch / ...Filters）同样必须搬 ——
   它们是原 #screen-accounts 的**屏根直接子元素**（方案初稿漏列）。搬后它们是
   #directorProductAssets 的**兄弟而非后代**，所以也在本块显式声明；
   否则访客锁甲案下（锁落在 pane 上）会露出裸搜索框。
   ══════════════════════════════════════════════════════════════════════════ */
#directorGalleryView #directorCharacterAssets,
#directorGalleryView #directorProductAssets,
#directorGalleryView #directorRoleAssetsPane,
#directorGalleryView #directorProductAssetsSearch,
#directorGalleryView #directorProductAssetsFilters{display:block}
#directorGalleryView #directorCharacterAssets[hidden],
#directorGalleryView #directorProductAssets[hidden],
#directorGalleryView #directorRoleAssetsPane[hidden],
#directorGalleryView #directorProductAssetsSearch[hidden],
#directorGalleryView #directorProductAssetsFilters[hidden]{display:none}

/* D · 交付 pane 容器（2026-09-20）——与上面那族同因同法，两条都不可省：
   ① `display:block`：`#directorGalleryView` 自身只有 padding/height/overflow（搜 #directorGalleryView{ 开头那条），
      **没有 display**；它的显隐靠 `.director-view{display:none}` / `.active{display:block}`
      （.director-view{display:none} / .director-view.active{display:block}）。新容器若不给 display，在块格式化上下文里会**塌成 0 高**。
   ② `[hidden]{display:none}`：①那条是作者样式，会盖过 UA 的 `[hidden]{display:none}`
      ⇒ 不补这条，切到别的 tab 时交付区**仍然显示**（＝本方案要修的那个 bug 原地复活）。
   刻意**不设 overflow**：滚动容器必须保持 `#directorGalleryView`（height:100%;overflow-y:auto），
   否则 `#directorGalleryView .director-qa{position:sticky;top:0}`（搜 #directorGalleryView .director-qa{position:sticky）的滚动上下文会变、sticky 失效。 */
#directorGalleryView .director-delivery-pane{display:block}
#directorGalleryView .director-delivery-pane[hidden]{display:none}

/* B · u-d-none 的 id 级护栏（2026-09-19，由 frontend-utility-specificity.test.js 抓出）
   ──────────────────────────────────────────────────────────────────────────
   冲突属实，不是误报：模板里存在**同时带 u-d-none 与 .btn/.ghost** 的元素
   （coClasses 清单：btn / ghost / dna-result 三者共现）。B 的双挂给 `.btn` 一族
   加上了 #directorGalleryView 前缀 ⇒ 特异性 (1,1,0)=110，压过
   `.u-d-none.u-d-none.u-d-none` 的 (0,3,0)=30 ⇒ 加 u-d-none 也藏不住。

   修法照本仓既有先例（上方 #directorWorkbenchView .studio-advanced-field.u-d-none，
   同因同法）：**补 id 级护栏**，值同为 none。特异性 (1,2,0)=120 > 110 ⇒ 胜出。
   禁止 !important（本仓明文纪律：会让运行时 el.style.display= 写入失效）。 */
#directorGalleryView .btn.u-d-none,
#directorGalleryView .btn.ghost.u-d-none,
#directorGalleryView .dna-result.u-d-none{display:none}

/* ══ 高级编辑步骤组（2026-10-02 UX 根治 P0-1：移除 details 折叠语义）══════════════
   原折叠条 summary/arrow/is-always-open 已删除，容器直接为 .studio-advanced-fold-body，恒展开。
   三种布局（guided / free / replication）共用去卡片化 + border-top 分隔线样式。 */
.studio-advanced-fold-body{display:flex;flex-direction:column;gap:8px;padding:0}

/* B 轮视觉统一（2026-10-06）：下面这两条（去卡片化 + 首个子项去上边框）是四模式卡面分裂的真正根源 ——
   它们给 guided/free/repl 的高级步骤统一去掉卡面（border:0 + 透明底 + r:0 + padding:10px 0），
   而 angle/tryon 的高级步骤是完整步骤卡 ⇒ 同一个左栏里两套卡语言（也是 free 02/03 与 repl 02 的来源）。
   卡面现已收口到《工作台步骤卡面 —— 四模式唯一事实源》，因此整块删除。 */
/* 提示词智能展开：默认40px，focus时80px（guided + free 两模式） */
#directorWorkbenchView #promptTxt,
#directorWorkbenchView #freePromptTxt{height:40px;min-height:40px;resize:vertical;transition:height .15s ease}
#directorWorkbenchView #promptTxt:focus,
#directorWorkbenchView #freePromptTxt:focus{height:80px;min-height:80px}
/* 04画面职责紧凑化：拍法与套图2列并排 */
.studio-scene-suite-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:start}
.studio-scene-suite-grid .studio-scene-template,
.studio-scene-suite-grid .studio-suite-row{min-width:0}
/* 商品类别按钮缩小 */
.studio-category-grid button{padding:4px 6px;font-size:10px}
/* 镜头清单紧凑 */
#directorWorkbenchView .director-shot-row{padding:4px 8px;margin-bottom:3px}

/* ══ 2026-10-01 深度压缩（档位A：目标滚动比例≤75%）═══════════════════════
   仅改CSS尺寸，不改HTML结构和JS逻辑。03 DNA缩小+3列，06 模型/比例/倍数3列，
   01上传区缩小，全局间距压缩。 */
/* Phase 1：03 风格DNA — 缩略图74px→48px，2列→3列 */
#directorWorkbenchView .studio-dna-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
#directorWorkbenchView .director-dna-thumb{height:48px;margin-bottom:5px}
#directorWorkbenchView .director-dna-card{padding:5px}
/* Phase 2：05 输出设置 — 模型/比例/倍数。原为等分三列 + 间距压缩（2026-10）。
   2026-10-21 修（模型名被截断）：等分三列时模型下拉实测只有 111px（内容区 95px，
   扣掉原生箭头 16px 只剩 79px 文本位），而「Nano Banana 2.1」文本实测 87.1px
   ⇒ 选中 2.1 被裁成「Nano Banana 2」，与已退役的 2 撞名（用户以为选了 2.1，界面显示 2）。
   为什么不能只把模型列加宽：同排的「生成倍数」是 flex（× / number / 倍），两侧装饰实测
   固定吃掉 66px（25 + 29 + 12 gap），列宽降到 82px 时中间输入框只剩 18px（数值看不见）——
   实测过 1.45fr/1fr/.8fr 那版就是这个后果。三列在 329px 可用宽里同时满足
   「模型 ≥137px」+「倍数 ≥106px」不可能。
   ⇒ 改两列：模型独占整行（下拉 345px，文本位 313px，全部档位都不裁），比例与倍数并排（各 169.5px）。
   代价：该步骤卡高 307 → 371px（+64px，侧栏本身可滚）。
   ⚠ 不改 .studio-field select 那条基线（被 test/frontend-workbench-visual-unify 逐字校验），
   只调网格列宽；模型列靠 .studio-field--model 标记（index.html 输出设置第一格）。 */
#directorWorkbenchView .studio-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
#directorWorkbenchView .studio-settings-grid>.studio-field--model{grid-column:1/-1}
#directorWorkbenchView .studio-frequency{gap:6px;margin-top:8px}
#directorWorkbenchView .studio-field{gap:3px}
#directorWorkbenchView .studio-advanced-field{gap:4px}
/* Phase 4：01 商品 — 上传区域120px→80px */
#directorWorkbenchView .studio-product-panel{padding:8px}
#directorWorkbenchView .studio-product-stack{gap:8px}
#directorWorkbenchView .studio-product-drop{min-height:80px}
/* Phase 5：当前方案紧凑化 */
#studioQuickPlan{padding:8px}
/* Phase 6：全局间距 — quick-zone gap 14px→10px */
#guidedCreationLayout > .studio-quick-zone{gap:10px}

/* ══ Phase 2 · 生产记录首屏减负（2026-09-21）══════════════════════════════
   只收窄默认信息密度，不改变筛选语义、状态令牌或批量动作链路。 */
#directorGalleryView .gallery-filter-panel{position:relative;flex:0 0 auto;min-width:0}
#directorGalleryView .gallery-filter-trigger{display:inline-flex;align-items:center;gap:7px;min-height:32px;padding:0 11px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:#4b5563;font:600 12px/1.2 var(--studio-font);cursor:pointer;box-shadow:inset 0 1px 0 rgba(255,255,255,.9);list-style:none;white-space:nowrap}
#directorGalleryView .gallery-filter-trigger::-webkit-details-marker{display:none}
#directorGalleryView .gallery-filter-trigger:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorGalleryView .gallery-filter-panel[open] .gallery-filter-trigger{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:#1d4ed8}
#directorGalleryView .gallery-filter-trigger b{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;color:var(--studio-muted)}
#directorGalleryView .gallery-filter-panel[open] .gallery-filter-trigger b{color:#1d4ed8}
#directorGalleryView .gallery-filter-caret{font-size:13px;line-height:1;color:var(--studio-muted);transform:translateY(-1px)}
#directorGalleryView .gallery-filter-panel[open] .gallery-filter-caret{transform:rotate(180deg) translateY(1px)}
#directorGalleryView .gallery-filter-body{position:absolute;z-index:12;top:calc(100% + 8px);right:0;width:min(430px,calc(100vw - 32px));padding:12px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.98);box-shadow:0 14px 32px rgba(15,23,42,.14)}
#directorGalleryView .gallery-filter-section{display:flex;flex-direction:column;gap:6px;min-width:0}
#directorGalleryView .gallery-filter-section+.gallery-filter-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--studio-line-soft)}
#directorGalleryView .gallery-filter-label{font-size:11px;font-weight:650;line-height:1.3;color:var(--studio-muted)}
#directorGalleryView .gallery-filter-body select{box-sizing:border-box;width:100%;min-height:32px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:#fff;color:var(--studio-text);padding:0 9px;font:600 12px/1.2 var(--studio-font)}
#directorGalleryView .gallery-filter-body .gallery-timerange-row{margin:0}
#directorGalleryView .gallery-filter-body .gallery-status-row{margin:0}
#directorGalleryView .gallery-failure-shortcut{border-color:rgba(180,35,24,.3);background:var(--st-err-bg);color:var(--st-err-fg)}
#directorGalleryView .gallery-failure-shortcut:hover{background:#fff;border-color:rgba(180,35,24,.5);box-shadow:var(--studio-sh-control)}
#directorGalleryView .gallery-failure-shortcut[hidden]{display:none}

/* 批量动作：未进入模式时，工具组和卡片勾选框都不进入视觉与键盘路径。 */
#directorDeliveryPane:not(.is-batch-mode) .gallery-sel-group,
#directorDeliveryPane:not(.is-batch-mode) #galleryReal .gallery-card-select{display:none}
#directorDeliveryPane.is-batch-mode .gallery-sel-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
#directorDeliveryPane.is-batch-mode #galleryReal .gallery-card-select{display:block}
#directorGalleryView #galleryBatchModeToggle[aria-pressed="true"]{background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:#1d4ed8}

/* QA 桌面默认只留摘要头；移动端仍由既有摘要条 + bottom sheet 接管。 */
#directorGalleryView .director-qa[data-qa-collapsed="true"] .director-qa-body{display:none}
#directorGalleryView .director-qa-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
#directorGalleryView .qa-head-copy{min-width:0}
#directorGalleryView .qa-toggle{flex:none;min-height:32px;padding:0 10px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:#4b5563;font:600 12px/1.2 var(--studio-font);cursor:pointer;white-space:nowrap}
#directorGalleryView .qa-toggle:hover{background:#fff;box-shadow:var(--studio-sh-control)}
#directorGalleryView .qa-toggle:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px}
@media (max-width:980px){
  #directorGalleryView .qa-toggle{display:none}
  #directorGalleryView .gallery-filter-body{position:static;width:auto;margin-top:8px;box-shadow:none}
}

/* ══ Phase 3 · 三个资产 pane 的任务结构统一（2026-09-21）══════════════════
   只统一区头、状态容器和卡片动作层级；不改旧壳全局令牌、不改变业务动作。 */
#directorGalleryView .director-section-actions{display:flex;align-items:center;gap:8px;margin-left:auto;min-width:0;flex:none}
#directorGalleryView .director-dna-section-label{align-items:center}
#directorGalleryView .director-dna-section-label .filter{display:flex;align-items:center;gap:6px;min-width:0}
#directorGalleryView .director-dna-section-label .filter .chip{white-space:nowrap}

#directorGalleryView .director-asset-state{grid-column:1/-1;display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-height:92px;padding:22px 20px;border:1px dashed var(--studio-line-2);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.6);color:var(--studio-muted);font-size:12px;line-height:1.6}
#directorGalleryView .director-asset-state strong{color:var(--studio-ink);font-size:13px;font-weight:650}
#directorGalleryView .director-asset-state span{max-width:62ch}
#directorGalleryView .director-asset-state.is-loading{align-items:center;justify-content:center;color:var(--studio-muted);background:rgba(241,245,249,.5)}
#directorGalleryView .director-asset-state.is-error{border-style:solid;border-color:var(--st-err-bd);background:var(--st-err-bg);color:var(--st-err-fg)}
#directorGalleryView .director-asset-state.is-error strong{color:var(--st-err-fg)}
/* P2-9（2026-10-02）：空态设计统一 —— is-empty 居中对齐 */
#directorGalleryView .director-asset-state.is-empty{align-items:center;text-align:center;padding:48px 24px}
#directorGalleryView .director-asset-state-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:3px}
#directorGalleryView .director-asset-empty{justify-content:center}
#directorGalleryView .director-asset-empty .director-char-new{margin-top:3px}
#directorGalleryView .director-asset-refresh-status{display:flex;align-items:center;gap:8px;box-sizing:border-box;min-height:32px;margin:0 0 var(--ui-space-3);padding:7px 10px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.72);color:var(--studio-muted);font-size:11px;line-height:1.4}
#directorGalleryView .director-asset-refresh-status[hidden]{display:none!important}
#directorGalleryView .director-asset-refresh-status.is-loading{background:rgba(241,245,249,.5)}
#directorGalleryView .director-asset-refresh-status.is-error{border-color:var(--st-err-bd);background:var(--st-err-bg);color:var(--st-err-fg)}
#directorGalleryView .director-asset-refresh-status>button{margin-left:auto;flex:none}

#directorGalleryView .director-asset-card-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:auto}
#directorGalleryView .director-product-asset-card .director-asset-card-actions{width:100%}
#directorGalleryView .director-product-asset-card .director-asset-card-actions>button{flex:1 1 0;min-width:0}
#directorGalleryView .director-asset-card-primary{border-color:transparent;background:linear-gradient(135deg,#111827,#071022);color:#fff;font-weight:650;border-radius:var(--studio-r-control);height:auto;min-height:auto;padding:7px 11px;font-size:11px;line-height:1.2;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
#directorGalleryView .director-asset-card-primary:hover:not(:disabled){background:linear-gradient(135deg,#1d2740,#0b1424);color:#fff;box-shadow:0 8px 18px rgba(15,23,42,.16)}
#directorGalleryView .director-asset-card-secondary{border:1px solid var(--studio-line);background:rgba(241,245,249,.72);color:#4b5563;font-weight:600;border-radius:var(--studio-r-control);min-height:auto;padding:7px 11px;font-size:11px;line-height:1.2;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
#directorGalleryView .director-asset-card-secondary:hover:not(:disabled){background:#fff;color:var(--studio-text);box-shadow:var(--studio-sh-control)}
#directorGalleryView .director-asset-card-primary:disabled,
#directorGalleryView .director-asset-card-secondary:disabled{opacity:.55;cursor:not-allowed;box-shadow:none;transform:none}
#directorGalleryView .director-asset-relation{color:var(--studio-muted)}

@media (max-width:640px){
  #directorGalleryView .director-section-actions{width:100%;margin-left:0;justify-content:flex-start}
  #directorGalleryView .director-dna-section-label{align-items:flex-start;flex-wrap:wrap}
  #directorGalleryView .director-asset-state{min-height:110px;padding:20px 16px}
}

/* ══ Phase 4 · DNA 创建抽屉（2026-09-21）═══════════════════════════════════
   创建表单从资产 pane 的常驻右栏移到独立抽屉；字段、上传入口与提交链路保持原样。 */
/* ⚠️ 2026-09-22 修复：抽屉原先用 --ui-overlay-pool，而 `.mask` 弹层是 60 ⇒ 抽屉**盖住**
   两个必经弹层，整条创建链路断掉：①「开始创建 DNA」弹出的免责声明 discMask 点不到
   （实测 elementFromPoint 命中 dnaCreateDrawer、discConfirmClickable=false）；
   ② 确认后的进度浮层 dnaMask 同样被压住，用户看不到采集进度。
   两者都是 body 直接子元素、抽屉在 #appShell>main 内，且祖先无 transform/opacity 等
   ⇒ 同在根层叠上下文，直接比数值。故抽屉必须低于 `.mask`(60)，取 55。
   ⚠️ 不动 `.mask` 的 60：那是 6 个旧壳弹层共用的层，属跨模块，不在本次修复范围。 */
#dnaCreateDrawer{position:fixed;inset:0;z-index:55;display:flex;justify-content:flex-end}
#dnaCreateDrawer[hidden]{display:none}
#dnaCreateDrawer .dna-create-drawer-backdrop{position:absolute;inset:0;background:rgba(15,23,42,.42);backdrop-filter:blur(3px)}
#dnaCreateDrawer .dna-create-drawer-panel{position:relative;z-index:1;width:min(480px,100vw);height:100%;max-height:100vh;overflow-y:auto;display:flex;flex-direction:column;margin:0;padding:0;border:0;border-left:1px solid var(--studio-line);border-radius:0;background:rgba(255,255,255,.98);box-shadow:-18px 0 48px rgba(15,23,42,.18)}
#dnaCreateDrawer .dna-create-drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 22px 16px;border-bottom:1px solid var(--studio-line-soft);background:rgba(248,250,252,.82)}
#dnaCreateDrawer .dna-create-drawer-head h2{margin:0;color:var(--studio-ink);font:650 20px/1.3 var(--font-display)}
#dnaCreateDrawer .dna-create-drawer-head p{margin:5px 0 0;color:var(--studio-muted);font-size:12px;line-height:1.55}
#dnaCreateDrawer .dna-create-drawer-close{flex:none;width:32px;height:32px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:#fff;color:#4b5563;font:600 18px/1 var(--studio-font);cursor:pointer}
#dnaCreateDrawer .dna-create-drawer-close:hover{background:var(--studio-blue-soft);color:var(--studio-blue);box-shadow:var(--studio-sh-control)}
#dnaCreateDrawer .dna-create-drawer-close:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px}
#dnaCreateDrawer .dna-create-drawer-body{padding:18px 22px 28px}
#dnaCreateDrawer .dna-create-drawer-body .hint{margin:0 0 14px;border-radius:var(--studio-r-control);background:var(--studio-blue-soft);color:#1d4ed8;padding:10px 12px;font-size:12px;line-height:1.55}
#dnaCreateDrawer .dna-create-drawer-body .drop{border-color:var(--studio-line-2);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);padding:22px 14px}
#dnaCreateDrawer .dna-create-drawer-body .drop:hover,#dnaCreateDrawer .dna-create-drawer-body .drop:focus-within{border-color:var(--studio-blue-line);background:#fff;color:var(--studio-blue)}
#dnaCreateDrawer .dna-create-drawer-body .jobs{margin:0 0 12px}
/* P1-3（2026-10-02）：抽屉内免责声明区块（从独立 modal 前置到抽屉内） */
#dnaCreateDrawer .dna-create-disc{margin:16px 0 0;padding:12px 14px;border:1px solid var(--studio-line-2);border-radius:var(--studio-r-control);background:rgba(248,250,252,.6)}
#dnaCreateDrawer .dna-create-disc-title{font-size:12px;font-weight:600;color:var(--studio-ink);margin-bottom:8px}
#dnaCreateDrawer .dna-create-disc-list{margin:0 0 10px;padding-left:18px;font-size:11px;line-height:1.6;color:var(--studio-muted)}
#dnaCreateDrawer .dna-create-disc-list li{margin-bottom:4px}
#dnaCreateDrawer .dna-create-disc-agree{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--studio-ink);cursor:pointer}
#dnaCreateDrawer .dna-create-disc-agree input{cursor:pointer}
/* P1-3：草稿态脉冲动画 —— gen0 待推进的 DNA 任务需要用户行动，脉冲提示关注度 */
@keyframes dna-draft-pulse{0%,100%{opacity:1}50%{opacity:.55}}
.group-head:has(+ .task-row[data-stage="gen0"]),.task-row[data-stage="gen0"] .task-title{animation:dna-draft-pulse 2.2s ease-in-out infinite}
@media (max-width:640px){
  #dnaCreateDrawer .dna-create-drawer-panel{width:100%}
  #dnaCreateDrawer .dna-create-drawer-head{padding:16px 16px 14px}
  #dnaCreateDrawer .dna-create-drawer-body{padding:16px 16px 24px}
}

/* ══ 宽屏档（2026-09-23，用户裁定）════════════════════════════════════════════
   用户原话：「资产中心验收环节、参考图画廊的部分，也都做成自适应宽度，更好适配 1920 和 2560」。

   ⚠️ 本轮**不是还原原型，是有意偏离原型** —— 先说清前提，免得后人拿原型来「纠正」回去：
     验收/ia-prototype-v1 只有一条内容列公式 `max(30px,calc((100% - 1240px)/2))`，
     全文件**没有任何大屏断点**；本仓在此之前也没有任何 min-width:1600px 级别的档。
     原型定稿在 1440 视口下，宽屏是新提出的一条产品要求。

   —— 病因与上一轮（工作台结果网格 auto-fill→auto-fit）**不同** ——
   那次的空是网格自己预留空轨道；这次的空在**外层容器**：资产中心/灵感两屏的内容列被
   `max(30px,calc((100% - 1240px)/2))` 写死成 1240px，视口再宽它也不动，两侧留白全部浪费。
   实测（真机 8787，CDP 直读）：

     视口   内容列   两侧各留白   合计浪费
     1440    1240      100          200
     1920    1240      340          680
     2560    1240      660         1320

   ⇒ **要放宽的是容器，不是网格**。目标网格（成片墙 196 / 案例灵感 236 / 采集素材画廊 186 /
     角色资产 280 / 商品资产 180）全都是 auto-fill —— 它们本就自适应，只是被容器饿着。
     容器一放宽，列数与卡片尺寸自动跟上，**无需逐个改网格**（改了反而会撞门禁的 196/236 锁定值）。

   —— 为什么四屏一起放，而不是只放资产中心与灵感 ——
   四屏共用同一条内容列，只放其中两个 ⇒ 宽屏下切区域时正文边缘相差约 260px，
   正是 2026-09-22 那条 1240 门禁当初要防的「同一产品三种正文宽」。
   ⚠️ 旧壳（今日生产/设置）必须**同时放开外层盒子** `max-width`：那条公式的 100% 是
   **包含块**的宽度，外层盒子卡在 1440 时公式会退化成 padding 30（本仓实测踩过：
   内容二次收窄到 1180，且把工作台一起缩小）。

   ⚠️ 取值只写 padding-left/right **长写**，不用 padding 简写 —— 简写会把各屏自己的
   上下内边距（20/26、24/34）一并覆盖成默认值。
   ⚠️ 不动 `.director-main>.director-view`（门禁要求它恒为 max-width:100%，且它同时匹配
   工作台，动它会连带缩小满幅画布）；不给 #directorWorkbenchView 加这条公式（唯一满幅屏）。

   影响面：本块整体在 @media(min-width:1600px) 内 ⇒ **≤1599px 一行都不生效**，
   1440 及以下与改前逐像素一致（媒体查询不匹配，非实测巧合）。 */
@media(min-width:1600px){
  /* 1560 = 1240 + 320：在 1440 之上给 1600–2199 这一段收一档，
     避免刚过断点就跳太宽。实测各网格随之得到的列数（真机 CDP 复核）：
       成片墙 4→6 列 · 案例灵感 5→6 列 · 采集素材画廊 6→7 列
       角色资产 3→5 列 · 商品资产 5→8 列 */
  /* ⚠️ 旧壳（今日生产/设置）三处必须成对，动一处都会坏 —— 本仓已连撞两次：
       ① 只改公式不改盒子 ⇒ 100% 仍按 1440 盒子解析 ⇒ 公式退化、内容更窄；
       ② 只改盒子不改公式 ⇒ 内容重新居中、宽度**纹丝不动**仍是 1240（实测 1920 padding 220×2）；
       ③ **盒子给一个"放宽后"的 px 上限，同样坏**（本次实测）：padding 的百分比解析基准是
          **包含块（父元素）**，不是元素自身宽度 ⇒ 盒子被封在 1680 而 pad 按父 1838 算，
          内容列反而缩到 1402（2560 更糟：封 1920 / pad 按 2478 算 ⇒ 缩成 1242）。
       ⇒ 正解是**取消上限**（max-width:none），让 padding 公式独自决定内容列：
          1920 → 父 1838、pad 139 → 内容列 1560 ✓；2560 → 父 2478、pad 339 → 1800 ✓。
       同特异性 + 本块靠后 ⇒ 覆盖得住既有 max-width:1440px 那条。 */
  .app-shell>.app .content{max-width:none;padding-left:max(30px,calc((100% - 1560px)/2));padding-right:max(30px,calc((100% - 1560px)/2))}
  #directorGalleryView{padding-left:max(30px,calc((100% - 1560px)/2));padding-right:max(30px,calc((100% - 1560px)/2))}
  #directorPlanningView{padding-left:max(30px,calc((100% - 1560px)/2));padding-right:max(30px,calc((100% - 1560px)/2))}
  /* 验收灯箱：这是「验收体验」的真正瓶颈 —— 3:4 竖图（本产品默认画幅）在灯箱里是
     **高度受限**的，所以放宽高度上限才真正放大成片，只放宽宽度收益有限。
     实测（3:4 竖图在灯箱图片区的实际渲染尺寸）：
       1440×900  面板 1354×828  成片 620×826  → 改后**完全相同**（min() 仍取 vw/vh 那一侧）
       1920×1080 面板 1440×900  成片 674×898  → 1760×994  成片 744×992（+10%）
       2560×1440 面板 1440×900  成片 674×898  → 1760×1200 成片 898×1198（+33%）
     ⚠️ 只改 width/height 两个值，**不碰 grid-template-columns**（右栏 330px 保持；
     换列定义会撞 frontend-visual-tokens / gallery-review-flow 的 first-match 正则）。 */
  .director-review-panel{width:min(1760px,94vw);height:min(1200px,92vh)}
}
@media(min-width:2200px){
  /* 2.5K/4K 再放一档：1800 = 原型 1240 + 560。列数：成片墙 7 · 案例灵感 7 · 采集素材画廊 9 */
  .app-shell>.app .content{max-width:none;padding-left:max(30px,calc((100% - 1800px)/2));padding-right:max(30px,calc((100% - 1800px)/2))}
  #directorGalleryView{padding-left:max(30px,calc((100% - 1800px)/2));padding-right:max(30px,calc((100% - 1800px)/2))}
  #directorPlanningView{padding-left:max(30px,calc((100% - 1800px)/2));padding-right:max(30px,calc((100% - 1800px)/2))}
}
/* ── UX 审计补丁（2026-09-29，验收/ux-audit-20260929/ux-audit-report-20260929.html）────────
   P1-2：#directorGalleryView .director-qa{position:sticky;top:0}（搜 #directorGalleryView .director-qa{position:sticky）下，layout 与工具条
   无间距规则（现有间距规则仅在 ≤700 与 ≤640 两处断点生效，其余断点缺失）⇒ QA 卡与「选一组后可下载」0 间距贴脸。
   16px 对齐既有节奏。P1-3：id 级 flex-end [1,1,0] 压死媒体 flex-start
   [0,1,0] ⇒ ≤1100 折行锯齿；照本文件既有先例（同特异性 + 顺序靠后取胜）恢复左对齐，
   不改该 id 级共享规则自身。两处只改呈现，不动 DOM / JS。 */
#directorGalleryView .director-gallery-layout{margin-top:16px}
@media(max-width:1100px){
  #directorGalleryView .director-gallery-actions{justify-content:flex-start}
}

/* ══ 2026-10-01 生图工作台左侧面板深度压缩（第二轮）═══════════════════════════
   目标：guided模式（电商主图/UGC/时尚大片）滚动比例从119%降到≤70%。
   只改CSS，不改HTML/JS。用户已确认：镜头清单2列、说明文字hover显示、
   提示词保持全宽不做2列、DNA缩略图40px（非36px）。 */

/* ── Phase 1：04画面职责压缩（449px→256px，省193px）────────────────────── */
/* 1.1 套图模板去大标题（select里已显示相同信息，纯重复） */
#directorWorkbenchView .studio-suite-row .summary-value{display:none}
/* 1.2 拍法说明文字默认收起，select hover/focus时显示 */
#directorWorkbenchView .studio-scene-template-note{display:none}
#directorWorkbenchView .studio-scene-template:hover .studio-scene-template-note,
#directorWorkbenchView .studio-scene-template select:focus ~ .studio-scene-template-note{display:block}
/* 1.3 套图说明文字默认收起，hover时显示 */
#directorWorkbenchView .studio-suite-row .summary-meta{display:none}
#directorWorkbenchView .studio-suite-row:hover .summary-meta{display:block}
/* 1.4 套图模板padding压缩 */
#directorWorkbenchView .studio-suite-row{padding:8px}
/* 1.5 镜头清单2列Grid（4个镜头分2行×2列） */
#directorWorkbenchView #directorShotPanel{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:6px}
#directorWorkbenchView #directorShotPanel .director-shot-row{margin-bottom:0}
/* 1.6 商品类别按钮小幅压缩 */
#directorWorkbenchView .studio-category-grid button{padding:2px 4px;font-size:9px}

/* ── Phase 2：05输出设置压缩（298px→250px，省48px）────────────────────── */
/* 2.1 组头margin压缩 */
#directorWorkbenchView .studio-output-step .studio-group-head{margin-bottom:6px}
/* 2.2 设置区gap压缩 */
#directorWorkbenchView .studio-output-step .studio-settings-grid{gap:6px}
#directorWorkbenchView .studio-output-step .studio-frequency{gap:4px;margin-top:6px}
/* 2.3 提示词区margin压缩 */
#directorWorkbenchView #directorPromptField{margin-top:8px}
#directorWorkbenchView #directorPromptField label{font-size:10px}
/* 2.4 整体padding压缩 */
#directorWorkbenchView .studio-output-step .studio-panel{padding:8px 0}

/* ── Phase 3：03风格DNA压缩（225px→170px，省55px）─────────────────────── */
/* 3.1 DNA缩略图74px→50px（修改已有 !important 规则） */
/* 3.2 DNA卡片padding压缩 */
#directorWorkbenchView .director-dna-card{padding:4px}
/* 3.4 DNA grid gap压缩 */
#directorWorkbenchView .studio-dna-grid{gap:5px}
/* 3.5 组头margin压缩 */
#directorWorkbenchView #studioAdvancedFold .studio-group:nth-child(2) .studio-group-head{margin-bottom:6px}

/* ── Phase 4：04角色卡压缩（134px→100px，省34px）──────────────────────── */
/* 4.1 角色卡缩略图60px→44px */
#directorWorkbenchView .studio-card-thumb{height:44px;width:36px}
/* 4.2 note文字压缩 */
#directorWorkbenchView .studio-card-note{margin-top:4px;font-size:11px}
/* 4.3 组头margin压缩 */
#directorWorkbenchView #studioCardStep .studio-group-head{margin-bottom:6px}

/* ============================================================
   设计语言统一 Phase 1：新 .btn 规范（.app-shell 作用域内）
   收敛按钮为 1 基础类 + 变体系统，统一圆角/高度/字体/状态。
   旧按钮类（.director-cta / .plib-retry / galleryReviewButton 内部类）
   在后续 Phase 逐步迁移，本块先建立新规范作为目标态。
   ============================================================ */
.app-shell .btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:36px;padding:0 18px;
  border-radius:var(--studio-r-control);
  border:1px solid var(--studio-blue);
  background:var(--studio-blue);color:#fff;
  font-family:var(--studio-font);font-size:13px;font-weight:600;line-height:1;
  cursor:pointer;white-space:nowrap;
  transition:background-color .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease,transform .1s ease;
}
.app-shell .btn:hover:not(:disabled){background:var(--studio-blue);border-color:var(--studio-blue);box-shadow:var(--studio-sh-control)}
.app-shell .btn:active:not(:disabled){transform:translateY(1px) scale(.985)}
.app-shell .btn:focus-visible{outline:2px solid var(--studio-blue);outline-offset:2px}
.app-shell .btn:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}
/* 变体：次按钮 */
.app-shell .btn.ghost{background:#fff;color:var(--studio-blue);border-color:var(--studio-line)}
.app-shell .btn.ghost:hover:not(:disabled){background:var(--studio-blue-soft);border-color:var(--studio-blue-line);color:var(--studio-blue);box-shadow:var(--studio-sh-control)}
/* 变体：文字按钮 */
.app-shell .btn.text{background:transparent;border-color:transparent;color:var(--studio-blue);padding:0 8px}
.app-shell .btn.text:hover:not(:disabled){background:var(--studio-blue-soft);box-shadow:none}
/* 变体：尺寸 */
.app-shell .btn.sm{min-height:30px;padding:0 12px;font-size:12px}
.app-shell .btn.lg{min-height:42px;padding:0 24px;font-size:14px}
/* 变体：宽度 */
.app-shell .btn.block{width:100%}
/* 变体：状态色 */
.app-shell .btn.danger{background:var(--c-danger);border-color:var(--c-danger)}
.app-shell .btn.danger:hover:not(:disabled){background:var(--c-danger);border-color:var(--c-danger);box-shadow:0 4px 14px rgba(185,28,28,.18)}
.app-shell .btn.success{background:var(--c-success);border-color:var(--c-success)}
.app-shell .btn.success:hover:not(:disabled){background:var(--c-success);border-color:var(--c-success);box-shadow:0 4px 14px rgba(4,120,87,.18)}
/* 变体：深色渐变（跨屏共享主按钮语言，资产中心/工作台/详情侧栏同款） */
.app-shell .btn.dark{background:linear-gradient(135deg,#111827,#071022);border-color:transparent;color:#fff}
.app-shell .btn.dark:hover:not(:disabled){box-shadow:0 4px 14px rgba(15,23,42,.28)}
/* 兼容：旧 .btn.small → .sm */
.app-shell .btn.small{min-height:30px;padding:0 12px;font-size:12px}
/* 加载态（复用 .is-loading 机制） */
.app-shell .btn.is-loading,.app-shell .btn.loading{cursor:wait;pointer-events:none;position:relative}
.app-shell .btn.is-loading::before,.app-shell .btn.loading::before{content:"";display:inline-block;width:12px;height:12px;margin-right:7px;vertical-align:-2px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:motion-spin .7s linear infinite}
/* 特定作用域：.studio-config-footer 主按钮（Phase 4 迁移后补回原 .director-cta 样式） */
.app-shell .studio-config-footer .btn.dark{height:40px;box-shadow:0 8px 18px rgba(15,23,42,.16)}
.app-shell .studio-config-footer .btn.dark:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}
.app-shell .studio-config-footer .btn.dark:disabled{background:#cbd5e1;color:#64748b;box-shadow:none;transform:none}
/* 特定作用域：planning 详情侧栏主按钮（Phase 4 迁移后补回原 .director-cta 样式） */
.app-shell #directorPlanningView .planning-detail-side .btn.dark{height:38px;margin-top:12px;box-shadow:0 8px 18px rgba(15,23,42,.16)}
.app-shell #directorPlanningView .planning-detail-side .btn.dark:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 12px 22px rgba(15,23,42,.2)}

/* ── 工作台视觉契约：八个功能入口共享一套操作面板语法 ─────────────────────────
   只统一可复用的几何、字段和状态语言；布局顺序、业务类、字段 id 与公共 CTA 保持原样。
   五个运行时布局根覆盖八个入口：guided 承载四个商拍功能，另四个由独立入口挂载。 */
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout){display:flex;flex-direction:column;gap:10px;min-width:0}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)[hidden]{display:none!important}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) .studio-group-head{min-height:16px;margin-bottom:8px}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(select,input[type=text],input[type=number],input[type=email],input[type=search]){min-height:var(--ui-control-h);box-sizing:border-box;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(select,input[type=text],input[type=number],input[type=email],input[type=search]):focus{background:#fff;outline:2px solid var(--studio-blue);outline-offset:1px}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.free-choice,.reference-extension-choice,.tryon-chip,.angle-chip){display:inline-flex;align-items:center;justify-content:center;min-height:31px;padding:0 12px;border-radius:var(--studio-r-control);font:400 11px/1.2 var(--studio-font)}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.angle-drop,.tryon-drop,.free-product-upload,.reference-extension-upload){border:1px dashed var(--studio-line-2);border-radius:var(--studio-r-control);background:rgba(255,255,255,.56)}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.director-sub,.angle-sub,.tryon-action-note,.tryon-count-note,.free-reference-status,.reference-extension-status,.studio-entry-adv-hint){font-size:10px;line-height:1.5;color:var(--studio-muted)}

/* ── 工作台内容原语收口（第二阶段） ─────────────────────────────────────────
   外层卡面已经统一；本段统一卡内的内容节奏与辅助信息重量。
   只映射现有业务类，不改字段 id、步骤顺序或提交出口。
   例外保留：angle 的 30px 计数步进按钮、free 的长 Prompt 输入框，
   它们分别由控件语义与内容长度决定，不属于普通字段基线。 */
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.studio-quick-zone,.studio-advanced-fold-body)> .studio-group,
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)> .studio-group{gap:10px}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.angle-actions,.tryon-field-row,.tryon-chips,.tryon-more-body,.free-reference-row,.reference-extension-row){gap:8px}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.free-reference-grid,.reference-extension-grid,.free-settings-grid,.reference-extension-settings-grid){gap:10px}
#directorWorkbenchView :is(.studio-guided-groups,.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout) :is(.director-sub,.angle-sub,.tryon-action-note,.tryon-count-note,.free-reference-status,.reference-extension-status,.studio-entry-adv-hint){margin:0}
#directorWorkbenchView #angleCreationLayout .angle-group{gap:10px}
#directorWorkbenchView .reference-extension-inline-note{padding:8px 10px;border:0;border-left:2px solid var(--studio-blue-line);border-radius:var(--studio-r-control);background:rgba(239,246,255,.72);color:var(--studio-blue)}
#directorWorkbenchView :is(.tryon-action-note,.tryon-count-note){padding:7px 9px;border-left:2px solid var(--studio-line-2);border-radius:var(--studio-r-control);background:rgba(241,245,249,.56)}

/* ── 网络采集工作台（Phase 0/1） ───────────────────────────────────────────
   与「我的采集」素材库分开：本区只承载环境准备、采集配置和任务状态，
   不渲染采集素材卡片；本机桥接在 Phase 2 接入后再解锁主按钮。 */
#directorPlanningView .capture-workspace{display:block;margin-top:14px;padding:18px;border:1px solid var(--studio-line);border-radius:var(--studio-r-panel);background:rgba(255,255,255,.72)}
#directorPlanningView .capture-workspace[hidden]{display:none!important}
#directorPlanningView .capture-workspace-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-bottom:16px;border-bottom:1px solid var(--studio-line-soft)}
#directorPlanningView .capture-workspace-head h2{margin:0;font:650 18px/1.3 var(--studio-font);color:var(--studio-ink)}
#directorPlanningView .capture-workspace-head p{margin:5px 0 0;font-size:11px;line-height:1.5;color:var(--studio-muted)}
#directorPlanningView .capture-workspace-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;margin-top:14px}
#directorPlanningView .capture-workspace-panel{min-width:0;padding:14px;border:1px solid var(--studio-line-soft);border-radius:var(--studio-r-control);background:rgba(255,255,255,.66)}
#directorPlanningView .capture-run-panel{grid-column:1/-1}
#directorPlanningView .capture-workspace-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
#directorPlanningView .capture-workspace-panel-head h3{margin:0;font:650 12px/1.35 var(--studio-font);color:var(--studio-ink)}
#directorPlanningView .capture-workspace-muted,.capture-workspace-note{margin:8px 0 0;font-size:10px;line-height:1.5;color:var(--studio-muted)}
#directorPlanningView .capture-workspace-state,.capture-workspace-badge{display:inline-flex;align-items:center;min-height:24px;padding:0 9px;border-radius:var(--studio-r-control);background:var(--studio-paper);color:var(--studio-muted);font:600 10px/1.2 var(--studio-font);white-space:nowrap}
#directorPlanningView .capture-workspace-state.is-pending{background:var(--studio-blue-soft);color:var(--studio-blue)}
#directorPlanningView .capture-environment-list{display:grid;gap:8px;margin-top:12px}
#directorPlanningView .capture-environment-item{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--studio-line-soft)}
#directorPlanningView .capture-environment-item:last-child{border-bottom:0}
#directorPlanningView .capture-environment-dot{width:7px;height:7px;border-radius:50%;background:var(--studio-line-2)}
#directorPlanningView .capture-environment-item strong{display:block;font-size:11px;color:var(--studio-ink)}
#directorPlanningView .capture-environment-item small{display:block;margin-top:2px;font-size:9px;line-height:1.4;color:var(--studio-muted)}
#directorPlanningView .capture-environment-value{font-size:10px;color:var(--studio-muted)}
#directorPlanningView .capture-workspace-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
#directorPlanningView .capture-workspace-actions .btn{min-height:31px;padding:0 11px;font-size:10px}
#directorPlanningView .capture-workspace-field{display:grid;gap:5px;margin-top:12px}
#directorPlanningView .capture-workspace-field>span{font-size:10px;font-weight:600;color:var(--studio-ink)}
#directorPlanningView .capture-workspace-field>small{font-size:9px;line-height:1.4;color:var(--studio-muted)}
#directorPlanningView .capture-workspace-field textarea,#directorPlanningView .capture-workspace-field input{width:100%;box-sizing:border-box;min-height:40px;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(241,245,249,.72);color:var(--studio-text);padding:8px;font:11px/1.4 var(--studio-font);resize:vertical}
#directorPlanningView .capture-workspace-field textarea:focus,#directorPlanningView .capture-workspace-field input:focus{background:#fff;outline:2px solid var(--studio-blue);outline-offset:1px}
#directorPlanningView .capture-workspace-fields-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
#directorPlanningView .capture-workspace-check{display:flex;align-items:flex-start;gap:8px;margin-top:12px;font-size:10px;color:var(--studio-ink)}
#directorPlanningView .capture-workspace-check input{margin-top:2px;accent-color:var(--studio-blue)}
#directorPlanningView .capture-workspace-check strong,#directorPlanningView .capture-workspace-check small{display:block}
#directorPlanningView .capture-workspace-check small{margin-top:3px;font-size:9px;color:var(--studio-muted)}
#directorPlanningView .capture-workspace .btn.ghost{color:var(--studio-ink);text-decoration:none}
#directorPlanningView #captureReconnectButton[hidden],#directorPlanningView #captureToolDownload[hidden]{display:none!important}
#directorPlanningView #captureTargetBaseLink[hidden]{display:none!important}
#directorPlanningView .capture-install-guide{margin-top:12px;padding-top:12px;border-top:1px solid var(--studio-line-soft);font-size:11px;line-height:1.7;color:var(--studio-muted)}
#directorPlanningView .capture-install-guide[hidden]{display:none!important}
#directorPlanningView .capture-install-guide ol{margin:0;padding-left:18px}
#directorPlanningView .capture-install-guide li+li{margin-top:8px}
#directorPlanningView .capture-install-guide strong{color:var(--studio-text)}
#directorPlanningView .capture-install-guide code{overflow-wrap:anywhere}
#directorPlanningView #captureStartButton{margin-top:14px;min-height:40px}
#directorPlanningView #captureStopButton{margin-top:10px;min-height:34px}
#directorPlanningView #captureStopButton[hidden]{display:none!important}
#directorPlanningView .capture-run-empty{margin-top:12px;padding:14px;border:1px dashed var(--studio-line-2);border-radius:var(--studio-r-control);font-size:10px;line-height:1.5;color:var(--studio-muted);background:rgba(241,245,249,.4)}
#directorPlanningView .capture-doctor-summary{margin-top:12px;padding-top:12px;border-top:1px solid var(--studio-line-soft);font-size:11px;line-height:1.6;color:var(--studio-muted)}
#directorPlanningView .capture-doctor-summary strong{color:var(--studio-text)}
#directorPlanningView .capture-doctor-summary ul{margin:7px 0 0;padding-left:16px}
#directorPlanningView .capture-doctor-summary li+li{margin-top:4px}
#directorPlanningView .capture-run-progress{margin-top:12px}
#directorPlanningView .capture-run-progress[hidden]{display:none!important}
#directorPlanningView .capture-run-progress-head{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:var(--studio-muted)}
#directorPlanningView .capture-run-progress-head b{color:var(--studio-text);font-variant-numeric:tabular-nums}
#directorPlanningView .capture-run-progress-track{height:6px;margin-top:6px;overflow:hidden;border-radius:999px;background:var(--studio-paper)}
#directorPlanningView .capture-run-progress-track i{display:block;width:0;height:100%;border-radius:var(--studio-r-control);background:var(--studio-blue);transition:width .2s ease}
#directorPlanningView .capture-run-summary{margin-top:12px;min-height:48px}
#directorPlanningView .capture-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:10px}
#directorPlanningView .capture-summary-item{display:flex;justify-content:space-between;gap:8px;padding:7px 9px;border-radius:var(--studio-r-control);background:rgba(241,245,249,.66);font-size:10px;color:var(--studio-muted)}
#directorPlanningView .capture-summary-item b{color:var(--studio-text);font-variant-numeric:tabular-nums}
@media(max-width:800px){#directorPlanningView .capture-workspace-grid{grid-template-columns:minmax(0,1fr)}#directorPlanningView .capture-run-panel{grid-column:auto}}

/* 极简上传入口：提升主输入的辨识度，沿用现有 input、状态和处理函数。 */
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload){min-height:82px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;box-sizing:border-box}
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload)>span{font-weight:600;color:var(--studio-text)}
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload)>small{font-size:10px;line-height:1.4;color:var(--studio-muted)}
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload):hover,
#directorWorkbenchView :is(.free-product-upload,.reference-extension-upload):focus-within{border-color:var(--studio-blue-line);background:#fff;box-shadow:var(--studio-sh-control)}
#directorWorkbenchView .free-product-preview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:9px}
#directorWorkbenchView .free-product-preview[hidden]{display:none!important}
#directorWorkbenchView .free-product-thumb{position:relative;aspect-ratio:1;min-width:0;overflow:hidden;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:var(--studio-paper)}
#directorWorkbenchView .free-product-thumb img{display:block;width:100%;height:100%;object-fit:cover}
#directorWorkbenchView .free-product-thumb-empty{display:flex;width:100%;height:100%;align-items:center;justify-content:center;font-size:10px;color:var(--studio-muted)}
#directorWorkbenchView .free-product-thumb-remove{position:absolute;top:5px;right:5px;width:22px;height:22px;padding:0;border:0;border-radius:50%;background:rgba(15,23,42,.78);color:#fff;font:14px/22px var(--studio-font);cursor:pointer}
#directorWorkbenchView .free-product-thumb-remove:hover{background:var(--studio-blue)}
#directorWorkbenchView .free-product-thumb-meta{position:absolute;right:0;bottom:0;left:0;padding:4px 6px;background:rgba(15,23,42,.68);color:#fff;font-size:11px;line-height:1.2;text-align:center}
#directorWorkbenchView .reference-extension-preview{display:flex;align-items:flex-start;gap:8px;margin-top:9px}
#directorWorkbenchView .reference-extension-preview[hidden]{display:none!important}
#directorWorkbenchView .reference-extension-preview img{flex:0 1 auto;max-width:100%;border-radius:var(--studio-r-control);object-fit:contain;background:var(--studio-paper)}
#directorWorkbenchView .reference-extension-preview #replicationClearBtn{flex:0 0 auto;white-space:nowrap}

#directorPlanningView .capture-run-progress-track[hidden]{display:none!important}

#directorPlanningView #inspirationFilters[hidden]{display:none!important}

#directorPlanningView #captureResultActions[hidden]{display:none!important}

/* Generation remains clickable for guarded busy feedback; other loading controls retain their policy. */
#directorWorkbenchView :is(#genBtn,#freeGenerateBtn,#replicationGenerateBtn,#angleGenerateBtn,#tryonGenerateBtn).is-loading:not(:disabled){pointer-events:auto;opacity:1;cursor:wait}

/* ══ 统一上传模块 · 四模式（2026-10-17）══════════════════════════════════════
   作用域：只到四个布局根（.free-creation-layout / .reference-extension-layout /
   .angle-layout / .tryon-layout）——**不写 #directorWorkbenchView 宽作用域**，第一行不受影响。
   形态：框（主行 + 纯约束行）→ guide chip → meta 行（左一句 pill｜右 chip）→ 状态行 → 缩略图。
   既有 7078 行的「四布局上传框统一 border/radius/bg」保留不动，本块只补几何与文字级。 */
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  :is(.angle-drop,.tryon-drop-base,.free-product-upload,.reference-extension-upload){
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  min-height:96px;padding:14px 12px;border:1px dashed var(--studio-line-2);
  border-radius:var(--studio-r-control);background:rgba(255,255,255,.56);
  text-align:center;cursor:pointer;font-size:12px;color:var(--studio-muted)}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  :is(.angle-drop,.tryon-drop,.free-product-upload,.reference-extension-upload)
  :is(b,strong){font:600 12px/1.5 var(--studio-font);color:var(--studio-text)}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  :is(.tryon-drop,.free-product-upload,.reference-extension-upload)>span{font:600 12px/1.5 var(--studio-font);color:var(--studio-text)}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  :is(.angle-drop,.tryon-drop,.free-product-upload,.reference-extension-upload)
  small{display:block;font-size:10px;color:var(--studio-muted)}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-meta-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-pill{font-size:10px;color:var(--studio-muted);background:rgba(241,245,249,.8);border-radius:999px;padding:3px 9px}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-chip{font:600 11px/1 var(--studio-font);color:var(--studio-text);background:#fff;border:1px solid var(--studio-line);border-radius:var(--studio-r-control);padding:7px 11px;cursor:pointer}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-chip:hover:not([disabled]){border-color:var(--studio-blue-line);color:var(--studio-blue)}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-chip[disabled]{color:#b6bfcc;cursor:default}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-status{font-size:10px;color:var(--studio-muted);margin-top:8px}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-note{font-size:10px;color:var(--studio-muted);margin-top:6px}
:is(.free-creation-layout,.reference-extension-layout,.angle-layout,.tryon-layout)
  .uni-status-stack{display:block}

/* ── 复刻面板校正（2026-10-17 · 原型还原批次）────────────────────────────── */
/* ① 镜像按钮真隐藏：.btn 的 display 覆盖 UA [hidden]（重构前 repl 实测泄漏 347×42）。
      镜像机制只读它的文本/禁用态当数据源，display 不影响数据流。
      free 侧无需再兜底：5269 行的 #freeCreationLayout #freeGenerateBtn[hidden] 已足够。 */
#replicationGenerateBtn[hidden]{display:none!important}
/* ② 复刻 01 卡视觉顺序：字段标题 → 流程说明 → 上传框 → guide chip → meta 行 → 状态行。
      guide chip 由 capability-guides 挂在 #replicationUploadStatus 的**父节点之后**，
      父节点是 .uni-status-stack ⇒ chip 落在**卡片层**（不在堆栈内），故用卡片级 order 归位。
      （卡片本身已是 grid：:is(.free-reference-card,.reference-extension-card){display:grid}，
       这里显式声明只为让 order 的容器契约不依赖别处的规则。） */
.reference-extension-layout #replStepSource .reference-extension-card{display:grid}
.reference-extension-layout #replStepSource .reference-extension-card>h3{order:0}
.reference-extension-layout #replStepSource .reference-extension-upload{order:1}
.reference-extension-layout #replStepSource .uni-status-stack{order:3;display:flex;flex-direction:column}
.reference-extension-layout #replStepSource .uni-status-stack>.uni-meta-row{order:2}
.reference-extension-layout #replStepSource .uni-status-stack>.uni-status{order:3}
#replicationPreviewWrap{order:4}
/* ③ 换装「添加另一件服装」已并入服装槽的辅助动作行 —— 见下方 .tryon-garment-actions，
      不再需要网格级定位（原先它作为 .tryon-garments 的直接子节点，会被当成网格单元）。 */
/* 复刻 01 卡：guide chip 实际由能力指引挂在**卡片层**（排在状态栈之后）——用卡片级 order 归位：
   视觉顺序 = 上传框(1) → chip(2) → meta/状态栈(3) → 预览(4)。 */
.reference-extension-layout #replStepSource .reference-extension-card>.guide-chip{order:2}

/* ── 换装面板形态校正（2026-10-17 · 原型还原批次 2）────────────────────────
   症状（真机实测）：#tryonBaseBox 是 3 列网格、#tryonGarmentBox 是 2 列网格，
   而统一语法新加的 meta 行 / 状态行 / 添加按钮都是**普通子节点** ⇒ 被当成网格单元：
   底图 meta 行只剩 1/3 宽（「48 小时内有效」竖排、「从商品库选择」折 4 行）、
   添加按钮跑到第二列与服装图并排。原型里这三者都是**整行**的。
   修法：容器加形态类（单槽/单件），辅助行一律整行跨列。 */
#tryonCreationLayout #tryonBaseBox.is-single{grid-template-columns:minmax(0,1fr)}
#tryonCreationLayout #tryonBaseBox.is-single .tryon-drop-base{
  aspect-ratio:auto;min-height:96px;padding:14px 12px;font-size:12px;line-height:1.5}
#tryonCreationLayout #tryonBaseBox>.uni-meta-row,
#tryonCreationLayout #tryonBaseBox>.uni-status{grid-column:1/-1;align-self:start}
#tryonCreationLayout #tryonGarmentBox.is-single{grid-template-columns:minmax(0,1fr)}
#tryonCreationLayout #tryonGarmentBox.is-single .tryon-garment .tryon-drop:not(:has(img)){min-height:96px}
/* 服装槽辅助动作（2026-10-18 基准 1:1）：品类标签 + 「下拉 / 添加另一件服装」同一行。
   基准确认的是「品类（必选）→ [选择品类][添加另一件服装]」一行形态；
   选品/移除仍留在同一行内（既有能力，不删）。 */
#tryonCreationLayout .tryon-tag-label{margin-top:8px;font-size:10px;color:var(--studio-muted);line-height:15px}
#tryonCreationLayout .tryon-tag-row{display:flex;align-items:center;gap:6px;margin-top:2px}
#tryonCreationLayout .tryon-tag-row .tryon-tag{flex:1;min-width:0}
#tryonCreationLayout .tryon-tag-row>.tryon-mini{flex:none;width:auto;min-height:0;white-space:nowrap}

/* ── 复刻 01 卡：能力指引 chip 还原成「内容自适应胶囊」（2026-10-17 原型还原批次 2）
   症状：实机是整行卡片（321px 宽）+ 圆形缩略图，且文案被 index.css:3552 的
   max-width:230px + nowrap 截断成「…（服装与场景由参考图…」，读不到结论。
   原型是 inline 胶囊 + 整句可见 ⇒ 覆盖三处：宽度、圆角、截断。
   注意 index.css:3941 用 `#directorWorkbenchView #replicationCreationLayout …` 两个 ID
   强制 width:100%，故本组选择器必须保持同级 ID 数量才能覆盖。 */
#directorWorkbenchView #replicationCreationLayout #replStepSource .reference-extension-card>.guide-chip{
  width:auto;max-width:100%;justify-self:start;align-self:start;
  border-radius:999px;padding:4px 12px 4px 4px;font-size:10px;line-height:1.4}
#directorWorkbenchView #replicationCreationLayout #replStepSource .reference-extension-card>.guide-chip img{
  width:24px;height:24px;flex:0 0 24px}
#directorWorkbenchView #replicationCreationLayout #replStepSource .reference-extension-card>.guide-chip span{
  max-width:none;white-space:normal;overflow:visible;text-overflow:clip}

/* ── 「更多设置」折叠区（2026-10-18 基准 1:1）────────────────────────────────
   验收基准（proto-panel-*.png）只画到 02/03 卡；而产品真实存在的输出设置 / 高级字段
   必须保留能力。统一收进这一步卡之后的折叠区（默认收起）⇒ 首屏与基准逐元素一致。
   形态是一条 10px 细行，不是新卡；展开后承载原字段（id/class 一字未改）。 */
.uni-more{border:1px solid var(--studio-line);border-radius:var(--studio-r-control);background:rgba(255,255,255,.56);margin-top:10px}
.uni-more>summary{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;font-size:10px;color:var(--studio-muted);cursor:pointer;list-style:none}
.uni-more>summary::-webkit-details-marker{display:none}
.uni-more>summary::after{content:'⌄';font-size:11px;line-height:1;transition:transform .15s ease}
.uni-more[open]>summary::after{transform:rotate(180deg)}
.uni-more[open]>summary{border-bottom:1px solid var(--studio-line)}
.uni-more>.angle-adv-body,.uni-more>.tryon-more-body,.uni-more>.reference-extension-settings-grid,.uni-more>.free-settings-grid{padding:10px}

/* 换装 02 服装槽（2026-10-18 基准 1:1）：上传框内主行/约束行必须上下两行；
   选品入口做成上传框下的小字入口（不占基准的「下拉 + 添加」那一行）。 */
#tryonCreationLayout .tryon-garment .tryon-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px}
#tryonCreationLayout .tryon-garment .tryon-drop small{font-size:10px;line-height:15px;color:var(--studio-muted)}
#tryonCreationLayout .tryon-pick-link{align-self:flex-start;border:0;background:none;padding:2px 0;color:var(--studio-blue);font:600 10px/1.4 var(--studio-font);cursor:pointer}
/* 换装 03 字段行：标签不得折行（基准是「画面比例 / 输出张数」单行） */
#tryonCreationLayout .tryon-count label{white-space:nowrap}
.uni-more>summary .uni-more-sum{display:inline-flex;align-items:center;gap:6px}
.uni-more>summary .uni-more-sum>span:empty{display:none}
.uni-more>summary .uni-more-sum>span+span::before{content:'· ';color:var(--studio-muted)}

/* ── 基准密度对齐（2026-10-18 批 B）──────────────────────────────────────
   同宽（347）对比发现：实机控件 40px、文本域 71px、复刻 02 卡内边距 12px，
   而验收基准（proto-panel-*.png，396 宽设计）等比折算约 34px / 64px / 10px。
   实机因此比基准「松」15~40%。本块只压四个面板的密度，不动第一行四模式。
   2026-10-18 修正两处方向错误（实测 probe-batch-b 证据）：
   ① 只写 height 无效——基础规则是 min-height:var(--ui-control-h)=40px，
      必须同时压 min-height，否则 height:34px 被 min-height 抬回 40px；
   ② 不再改 font-size：这四个面板的控件字号是全站 token 11px，
      批 B 首版误写成 11.5px，既违反 F3 字号档位、又比原来更大（方向反了）。 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(select,input[type="text"],input[type="number"]){
  min-height:34px;height:34px;padding:6px 8px}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) textarea{
  min-height:64px;padding:6px 8px}
/* 卡片内边距：复刻 02 卡原本 12px（来自 5208 行 `:is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group`）。
   必须用同形选择器才压得住——只写 `.studio-group`（少一个类）实测无效，直挂卡 10px、折叠体内仍 12px。 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout)>.studio-group{padding:10px}
/* 字段节奏：卡片本身是 flex + gap:10，字段再带 margin（label 默认 14/6、上传框 14/6）会双计 ⇒ 清零，
   间距只由 gap 出。基准（396 宽设计）折算后字段间距约 8px，与卡内 gap 10 基本一致。 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(label,label.f,.angle-drop,.tryon-drop,.reference-extension-upload){margin-top:0;margin-bottom:0}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(.reference-extension-settings-grid,.free-settings-grid){gap:8px}
/* 描述类字段（画面微调）与上方字段间留一行呼吸：基准 8 / 0，实机 10 / 6 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) .studio-desc-field{margin-top:8px;margin-bottom:0}
/* 换装 03 的比例/张数：标签与下拉在同一行，标签不留上下 margin（否则行高 44 > 控件 34） */
#directorWorkbenchView #tryonCreationLayout .tryon-count{margin-top:6px;gap:6px}
#directorWorkbenchView #tryonCreationLayout .tryon-count>label{margin:0}
/* 上传框：基准虚线框实测 66px（396 宽设计折算），实机 96px —— 收到 72（仍 ≥ 常规触控目标）。
   覆盖范围含「换背景/身份图」折叠区里的次上传框（原 56px）：规格 v5 决定全站上传目标同一高度，
   避免同一面板出现 56/72/96 三种虚线框；服装槽 `.tryon-garment .tryon-drop` 保持 min-height:0 不在此列） */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout) :is(.angle-drop,.tryon-drop-base,.reference-extension-upload,.free-product-upload){min-height:72px;padding:10px}
/* 卡间距：基准 9.5px（卡与卡），实机复刻/角度/自由为 14px —— 收到 10，与换装一致 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout,#tryonCreationLayout){gap:10px}

/* ── 对齐基准（2026-10-19 批 C · 只动角度与换装）────────────────────────────
   批 B 后逐卡复测：角度 751/590、换装 876/672，剩余差集中在三处可量化的行高，
   都不是「能力取舍」问题，本块直接对齐基准：
   ① 卡头：基准 21（标题 18 + 3）、实机 29（标题 21 + margin 8）⇒ 取消 margin，间距交给卡内 gap；
   ② 卡内行距：基准 8、实机 10；
   ③ 角度计数器：基准行高 38~40（步进按钮 28 + padding 10 + 边框）、实机 46（30 + 14 + 2）。
   换装的「从商品库选」并入品类行（不新增高度），见 tryon-entry.js 同批改动。 */
#directorWorkbenchView :is(#angleCreationLayout,#tryonCreationLayout) .studio-group-head{margin-bottom:0}
#directorWorkbenchView :is(#angleCreationLayout,#tryonCreationLayout)>.studio-group,
#directorWorkbenchView :is(#angleCreationLayout,#tryonCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group{gap:8px}
#directorWorkbenchView #angleCreationLayout .angle-counters{gap:6px}
#directorWorkbenchView #angleCreationLayout .angle-counter{padding:5px 8px;gap:6px}
#directorWorkbenchView #angleCreationLayout .angle-step{width:28px;height:28px;border-radius:7px}
/* 服装品类行：选品入口与下拉/添加同一行（右对齐），避免基准没有的独立一行 */
#directorWorkbenchView #tryonCreationLayout .tryon-tag-row{flex-wrap:wrap;row-gap:6px}
#directorWorkbenchView #tryonCreationLayout .tryon-tag-row .tryon-pick-link{align-self:center;flex:0 0 auto}
/* 服装槽上传框：7253 行把单槽形态钉在 96px（`#tryonCreationLayout #tryonGarmentBox.is-single ...`），
   基准折算 66 ⇒ 收到 72，与底图/参考图一致；必须补足特异性才压得住 */
#directorWorkbenchView #tryonCreationLayout #tryonGarmentBox.is-single .tryon-garment .tryon-drop:not(:has(img)){min-height:72px}
/* 品类标签/下拉行的上下留白：`.tryon-garment` 已有 gap:6，标签再带 8/2 margin 会双计 */
#directorWorkbenchView #tryonCreationLayout .tryon-tag-label,
#directorWorkbenchView #tryonCreationLayout .tryon-tag-row{margin-top:0;margin-bottom:0}

/* ── 审核修复（2026-10-19 批 C 审核）──────────────────────────────────────
   角度卡间距：4965 行 `#directorWorkbenchView #angleCreationLayout.angle-layout{gap:14px}`
   是「2 个 ID + 1 个类」，而批 B 写的 `:is(#…){gap:10px}` 只有 2 个 ID ⇒ 一直被压过，
   角度实际仍是 14px（实测 root gap=14、卡到折叠行 24px）。这里用同形选择器补回 10。
   多槽（TRYON_MULTI_BASE_ENABLED=1 才有两列、每列约 158px）下品类行会自然折成两行
   （34 → 67px，服装卡 157 → 166），本轮不改结构：试过让选品入口 `flex:0 0 100%`
   独占一行，反而把下拉挤成独占一行 ⇒ 91px，比折行更差，已回退。生产默认单槽不受影响。 */
#directorWorkbenchView #angleCreationLayout.angle-layout{gap:10px}
/* 折叠行与上一张卡的间距：根 gap 10 + `.uni-more{margin-top:10px}` = 20，比卡间距大一倍。
   规格 v5 定为「与卡间距一致」⇒ margin 归零，间距只由 gap 出（实测 20 → 10）。 */
#directorWorkbenchView :is(#angleCreationLayout,#tryonCreationLayout) .uni-more{margin-top:0}
/* 参考图行（.tryon-ref-row 是两列网格）：只有一张时占满整行。
   2026-10-19 批 E 起「更多设置」默认展开，身份图变成首屏可见——留在半列里标签会折成两行。 */
.tryon-ref-row>div:only-child{grid-column:1/-1}
/* 2026-10-19 09:5x「换装与基准差异收口」：更多设置从独立盒子折进 03 卡后，四组设置压成紧凑行
   （模型 + 还原强度同行 / 穿搭单行 / 身份图矮行）。只动换装，不改角度/复刻。 */
#directorWorkbenchView #tryonCreationLayout .tryon-adv-row{display:flex;align-items:center;gap:6px}
#directorWorkbenchView #tryonCreationLayout .tryon-adv-row .studio-entry-adv-body{flex:0 1 140px;min-width:0}
#directorWorkbenchView #tryonCreationLayout .tryon-adv-row .studio-entry-adv-field{display:flex;align-items:center;gap:5px;margin:0;font-size:10px;white-space:nowrap}
#directorWorkbenchView #tryonCreationLayout .tryon-adv-row .studio-entry-adv-field select{flex:1;min-width:0}
#directorWorkbenchView #tryonCreationLayout .tryon-adv-row #tryonStrengthBox{gap:4px;flex-wrap:nowrap}
#directorWorkbenchView #tryonCreationLayout .tryon-adv-row #tryonStrengthBox .tryon-chip{min-height:26px;padding:0 6px;font-size:10px}
#directorWorkbenchView #tryonCreationLayout #tryonDressingBox{gap:3px}
#directorWorkbenchView #tryonCreationLayout #tryonDressingBox .tryon-chip{min-height:26px;padding:0 7px;font-size:10px}
/* 身份图是次上传：用 40px 矮行，与主上传框 72 区分（同 .tryon-drop-base 的不同宿主） */
#directorWorkbenchView #tryonCreationLayout .tryon-bg-ref .tryon-drop-base{min-height:40px;padding:8px 10px;flex-direction:row;gap:6px;font-size:10px}
/* 进度与日志：空闲时整卡收起（2026-10-19 用户反馈「看不到价值」——0% / 等待参考图没有信息量）。
   3949 行给这两张卡写了 display:flex，会盖掉 UA 的 [hidden] ⇒ 这里用 2 个 ID 显式收口。 */
#directorWorkbenchView #replicationProgressCard[hidden]{display:none!important}

/* ── 一屏收敛（2026-10-19 批 H · 角度 / 复刻 / 自由）────────────────────────
   用户诉求：三个面板要「一屏看完、不用上下滚」；只允许高度自适应 / 宽度 / 按钮位置，
   不许擅自砍功能，**结构必须与冻结基准一致**。因此这里只动布局与密度，一个字段都没删：
   ① 配列宽度 376 → 396：冻结基准 proto-panel-*.png 的 #panel 就是 396（此前 376 是把
      整张图缩到 347 才对比的根因）；加宽后文字少折行，卡也更矮。
   ② 角度计数器**保持原型的三行纵向排列**（正面/侧面/背面），只把行高 40 → 30、
      步进按钮 28 → 24 —— 2026-10-19 15:0x 用户否决了「三列并排」的写法：
      那属于改结构，不是按钮位置调整。
   ③ 「更多设置」保持默认展开（2026-10-19 09:4x 拍板），标题与两个字段同一行、标签内联：
      不再有「标题行 + 字段块」两层高度，仍可点标题收起。
   ④ 自由创作 Prompt 120 → 88：冻结基准 proto-panel-free.png 折算就是 88，120 是偏离值。
   ⑤ 断点按**视口高度**分档（一屏可用高度 = 视口高 − 外壳）：
      ≥900 基准档；860–899 矮屏一档；≤859 矮屏二档；≤819 矮屏三档。
      实测（登录态）1440×{932,900,884,860,845} 三面板均 overflow=0；
      820 / 800 / 780 下角度仍溢 20 / 22 / 30px —— 这是三行结构的地板。
      要再压只能隐藏模式提示句或继续缩小控件，属取舍，待拍板，本轮未擅自处理。
   ⚠️ 模式提示句在任何档位都**不隐藏**：`.studio-mode-hint` 的生效规则是 5323 行的
      `#directorWorkbenchView .studio-mode-hint`（1 ID + 1 类），裸类选择器压不过它。
   ⚠️ 只作用于第二行四模式（角度/复刻/自由），第一行四模式与换装不动。 */

/* [hidden] 语义兜底：作者样式的 display 会盖过 UA 的 [hidden]{display:none}
   （本仓老坑）。角度「重跑这一批」按钮在空闲态 hidden 却仍是 display:flex ⇒ 白占 31px。 */
#directorWorkbenchView :is(#angleCreationLayout,#replicationCreationLayout,#freeCreationLayout,#tryonCreationLayout) [hidden]{display:none!important}

/* ① 配列宽度与冻结基准一致 */
@media(min-width:1200px){ #appShell.app-shell{--studio-config-w:396px} }

/* ② 外壳：标签区 / 滚动区 / 页脚各收一档（内容一字未改） */
.studio-mode-tabs-wrap{padding:6px 12px 0}
.studio-mode-tab{padding:4px 4px}
.studio-mode-hint{margin-top:6px}
#directorWorkbenchView #studioConfigScroll{padding:10px 12px 10px}
.app-shell .studio-config-footer{padding:8px 12px 8px}
.app-shell .studio-config-footer .studio-config-note{margin-top:4px}

/* ③ 卡内密度：padding/gap 10 → 7，卡头 21 → 18，控件 34 → 32，上传框 72 → 64 */
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout)>.studio-group{padding:7px}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout){gap:6px}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) .studio-group-head{min-height:17px}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) .studio-group-head h2{font-size:12px;line-height:17px}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(select,input[type="text"],input[type="number"]){min-height:32px;height:32px;padding:4px 8px}
#directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.angle-drop,.reference-extension-upload,.free-product-upload){min-height:60px;padding:8px}
#directorWorkbenchView #angleCreationLayout #angleDesc{height:46px;min-height:46px}
#directorWorkbenchView #angleCreationLayout .angle-drop{min-height:56px}
#directorWorkbenchView #freeCreationLayout #freeStepPrompt .studio-desc-field>textarea{height:88px;min-height:88px}
/* 自由创作 02/03 卡内部间距与复刻/角度统一为 8（原 10） */
#directorWorkbenchView #freeCreationLayout .free-reference-grid,
#directorWorkbenchView #freeCreationLayout .free-reference-card,
#directorWorkbenchView #freeCreationLayout .free-settings-card{gap:8px}
#directorWorkbenchView #freeCreationLayout .free-choice{min-height:28px}

/* ④ 角度计数器：恢复原型的三行纵向排列，行高 40 → 34（仍保留 −/数字/+/张） */
#directorWorkbenchView #angleCreationLayout .angle-counter{padding:2px 8px;gap:6px}
#directorWorkbenchView #angleCreationLayout .angle-step{width:24px;height:24px}

/* ⑤ 更多设置：标题 + 两个字段同一行（仍可点标题收起；副标题与字段重复，行内不再显示） */
#directorWorkbenchView #angleCreationLayout .uni-more{margin-top:0}
#directorWorkbenchView #angleCreationLayout .uni-more[open]{display:flex;align-items:flex-end;gap:8px;padding:3px 8px}
#directorWorkbenchView #angleCreationLayout .uni-more>summary{flex:0 0 auto;padding:0;border:0;font-size:10px;white-space:nowrap;gap:4px}
#directorWorkbenchView #angleCreationLayout .uni-more>summary #angleAdvancedSum{display:none}
#directorWorkbenchView #angleCreationLayout #angleAdvancedBody.angle-adv-body{flex:1 1 auto;display:grid;grid-template-columns:1.18fr .82fr;gap:6px;padding:0}
#directorWorkbenchView #angleCreationLayout #angleAdvancedBody .angle-adv-field{display:flex;flex-direction:row;align-items:center;gap:6px;font-size:10px;white-space:nowrap;min-width:0}
#directorWorkbenchView #angleCreationLayout #angleAdvancedBody .angle-adv-field select{flex:1;min-width:0;min-height:28px;height:28px}

/* ⑥ 矮屏一档（视口高 ≤899）：一屏可用高度约 638–625，内容压到 552–592 */
@media(max-height:899px){
  .studio-mode-tabs-wrap{padding:4px 12px 0}
  #directorWorkbenchView #studioConfigScroll{padding:8px 12px 8px}
  .app-shell .studio-config-footer{padding:4px 12px 6px}
  .app-shell .studio-config-footer .studio-config-note{margin-top:4px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout){gap:6px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout)>.studio-group{padding:6px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) .studio-group-head{min-height:16px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) .studio-group-head h2{font-size:12px;line-height:16px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(select,input[type="text"],input[type="number"]){min-height:30px;height:30px;padding:3px 8px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.angle-drop,.reference-extension-upload,.free-product-upload){min-height:52px;padding:5px}
  #directorWorkbenchView #freeCreationLayout #freeStepPrompt .studio-desc-field>textarea{height:76px;min-height:76px}
  #directorWorkbenchView #angleCreationLayout .angle-counter{padding:1px 8px}
  #directorWorkbenchView #angleCreationLayout .angle-step{width:22px;height:22px}
  /* 矮屏把步进按钮压到 22（≤859 再压到 20），视觉尺寸低于 WCAG 2.5.8 的 24×24。
     用透明伪元素把**可点击区域**补到 24 以上：不改视觉、不改布局；
     计数器行距与列间距都是 6px，外扩 2px 不会互相覆盖。 */
  #directorWorkbenchView #angleCreationLayout .angle-step{position:relative}
  #directorWorkbenchView #angleCreationLayout .angle-step::after{content:'';position:absolute;inset:-2px}
  #directorWorkbenchView #angleCreationLayout #angleDesc{height:42px;min-height:42px}
  #directorWorkbenchView #angleCreationLayout .uni-more[open]{padding:4px 6px}
}

/* ⑦ 矮屏二档（视口高 ≤859）：可用高度 598 起，内容压到 530–532 */
@media(max-height:859px){
  #directorWorkbenchView #studioConfigScroll{padding:6px 12px 6px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout){gap:5px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout)>.studio-group{padding:5px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(select,input[type="text"],input[type="number"]){min-height:28px;height:28px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.angle-drop,.reference-extension-upload,.free-product-upload){min-height:46px}
  #directorWorkbenchView #freeCreationLayout #freeStepPrompt .studio-desc-field>textarea{height:56px;min-height:56px}
  #directorWorkbenchView #angleCreationLayout .angle-step{width:20px;height:20px;font-size:12px}
  #directorWorkbenchView #angleCreationLayout .angle-counter{padding:1px 5px}
  #directorWorkbenchView #freeCreationLayout .free-reference-grid,
  #directorWorkbenchView #freeCreationLayout .free-reference-card,
  #directorWorkbenchView #freeCreationLayout .free-settings-card{gap:7px}
}

/* ⑧ 矮屏三档（视口高 ≤819，覆盖 1280×800 一类小屏）：可用高度 558 起 */
@media(max-height:819px){
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(select,input[type="text"],input[type="number"]){min-height:24px;height:24px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.angle-drop,.reference-extension-upload,.free-product-upload){min-height:38px}
  #directorWorkbenchView #angleCreationLayout #angleDesc{height:34px;min-height:34px}
  #directorWorkbenchView #freeCreationLayout #freeStepPrompt .studio-desc-field>textarea{height:52px;min-height:52px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout){gap:4px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout)>.studio-group{padding:4px}
  #directorWorkbenchView #freeCreationLayout .free-reference-grid,
  #directorWorkbenchView #freeCreationLayout .free-reference-card,
  #directorWorkbenchView #freeCreationLayout .free-settings-card{gap:6px}
}

/* ⑨ 兜底档（视口高 ≤789）：卡距/内边距再各让 1–2px，保证 780 一屏 */
@media(max-height:789px){
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout){gap:2px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) :is(.studio-quick-zone,.studio-advanced-fold-body)>.studio-group,
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout)>.studio-group{padding:2px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) .studio-group-head{min-height:12px}
  #directorWorkbenchView :is(#freeCreationLayout,#replicationCreationLayout,#angleCreationLayout) .studio-group-head h2{line-height:12px}
  #directorWorkbenchView #freeCreationLayout #freeStepPrompt .studio-desc-field>textarea{height:48px;min-height:48px}
}


/* ⑪ 空白收敛（2026-10-19 15:3x · 用户指「复刻中间大片空白」）
   根因：.studio-config 被 .studio-workbench 的 grid 行（822px）拉伸，而内容区 flex:1 1 auto
   又把余量全吃在自己的底部 ⇒ 卡片与页脚之间堆了 113px 空白。
   实测冻结基准就是内容自适应高度：repl 716 / free 796 / angle 848，
   改为 align-self:start + height:auto 后 repl 实机 719（差 3px），与基准同形态。
   ⚠️ 只有第二行三模式（角度 / 复刻 / 自由）；换装内容超长，仍保持撑满 + 滚动；
      第一行四模式完全不动。
   ⚠️ max-height:100% 保住「窗口再矮也能滚」：内容超出时 scroll 会被 flex 收缩并出滚动条。 */
#directorWorkbenchView[data-workbench-mode="angle"] .studio-config,
#directorWorkbenchView[data-workbench-mode="repl"] .studio-config,
#directorWorkbenchView[data-workbench-mode="free"] .studio-config{align-self:start;height:auto;max-height:100%}
#directorWorkbenchView[data-workbench-mode="angle"] .studio-config-scroll,
#directorWorkbenchView[data-workbench-mode="repl"] .studio-config-scroll,
#directorWorkbenchView[data-workbench-mode="free"] .studio-config-scroll{flex:0 1 auto}
