@cyberskill/design 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/DESIGN.md +25 -3
  2. package/README.md +3 -3
  3. package/SKILL.md +3 -3
  4. package/VERSION +1 -1
  5. package/_ds_bundle.js +819 -416
  6. package/_ds_manifest.json +1 -1
  7. package/_esm/cs.mjs +18 -4
  8. package/_esm/react.d.ts +2 -0
  9. package/_esm/react.mjs +1 -0
  10. package/base/a11y.css +18 -0
  11. package/base/ai.css +2 -2
  12. package/base/collections.css +8 -3
  13. package/base/components.css +11 -2
  14. package/base/controls.css +61 -48
  15. package/base/data.css +3 -3
  16. package/base/feedback.css +5 -0
  17. package/base/forms.css +9 -3
  18. package/base/glass.css +6 -0
  19. package/base/navigation.css +8 -2
  20. package/base/reset.css +1 -1
  21. package/base/responsive.css +25 -0
  22. package/base/shell.css +7 -1
  23. package/components/_i18n/i18n.js +13 -1
  24. package/components/_i18n/strings.js +52 -3
  25. package/components/ai/ConfidenceMeter.jsx +8 -6
  26. package/components/data/Watermark.jsx +11 -3
  27. package/components/datatable/DataGrid.jsx +10 -1
  28. package/components/dialog/Dialog.jsx +13 -45
  29. package/components/feedback/ProgressBar.jsx +4 -2
  30. package/components/forms/Cascader.jsx +69 -6
  31. package/components/forms/Editor.jsx +37 -2
  32. package/components/forms/FileUpload.jsx +22 -8
  33. package/components/forms/Switch.jsx +16 -2
  34. package/components/forms/TimePicker.jsx +3 -1
  35. package/components/icon/Icon.jsx +1 -0
  36. package/components/navigation/CommandPalette.jsx +22 -7
  37. package/components/navigation/Toolbar.jsx +2 -1
  38. package/components/overlays/AlertDialog.jsx +19 -49
  39. package/components/overlays/Drawer.jsx +24 -20
  40. package/components/overlays/OverlayManager.d.ts +40 -0
  41. package/components/overlays/OverlayManager.jsx +214 -0
  42. package/components/overlays/OverlayManager.prompt.md +12 -0
  43. package/components/overlays/Tour.jsx +14 -7
  44. package/dist/styles.min.css +2004 -0
  45. package/docs/benchmark-rubric.md +1 -1
  46. package/docs/ci-cd.md +3 -1
  47. package/docs/consuming.md +6 -6
  48. package/docs/conventions.md +4 -4
  49. package/docs/decisions/container-query-migration.md +18 -0
  50. package/docs/decisions/overlay-manager-design.md +101 -0
  51. package/docs/decisions.md +5 -5
  52. package/docs/design-styles.md +1 -1
  53. package/docs/plans/cyberskill-design-system-audit-and-12-month-evolution-plan.md +1490 -0
  54. package/docs/quality-gates.md +20 -8
  55. package/docs/release-notes.md +2 -2
  56. package/docs/status/data/status-feed.json +1 -1
  57. package/docs/status/index.html +9 -5
  58. package/docs/status/status-legacy.html +12 -7
  59. package/docs/sync.md +1 -1
  60. package/docs/tasks/_state/commit-links.yaml +14 -0
  61. package/docs/vi/benchmark-rubric.md +1 -1
  62. package/docs/vi/ci-cd.md +3 -1
  63. package/docs/vi/consuming.md +6 -6
  64. package/docs/vi/conventions.md +2 -2
  65. package/docs/vi/decisions.md +4 -4
  66. package/docs/vi/quality-gates.md +21 -9
  67. package/docs/vi/release-notes.md +2 -2
  68. package/docs/vi/sync.md +1 -1
  69. package/guidelines/atomic-view.html +11 -7
  70. package/llms.txt +2 -2
  71. package/package.json +14 -6
  72. package/templates/_ds-base.canonical.js +55 -0
  73. package/templates/ai-cluster-demo.html +2 -2
  74. package/templates/app-shell/AppShell.dc.html +5 -3
  75. package/templates/app-shell/ds-base.js +33 -1
  76. package/templates/app-shell/support.js +13 -20
  77. package/templates/article/Article.dc.html +5 -1
  78. package/templates/article/ds-base.js +33 -1
  79. package/templates/article/support.js +13 -20
  80. package/templates/auth/Auth.dc.html +10 -5
  81. package/templates/auth/content-schema.json +12 -0
  82. package/templates/auth/ds-base.js +33 -1
  83. package/templates/auth/support.js +13 -20
  84. package/templates/bod-deck/BodDeck.dc.html +11 -10
  85. package/templates/bod-deck/ds-base.js +33 -1
  86. package/templates/bod-deck/support.js +13 -20
  87. package/templates/bod-investor-update/BodInvestorUpdate.dc.html +4 -3
  88. package/templates/bod-investor-update/ds-base.js +33 -1
  89. package/templates/bod-investor-update/support.js +13 -20
  90. package/templates/bod-memo/BodMemo.dc.html +6 -5
  91. package/templates/bod-memo/ds-base.js +33 -1
  92. package/templates/bod-memo/support.js +13 -20
  93. package/templates/bod-minutes/BodMinutes.dc.html +2 -1
  94. package/templates/bod-minutes/ds-base.js +33 -1
  95. package/templates/bod-minutes/support.js +13 -20
  96. package/templates/bod-report/BodReport.dc.html +3 -2
  97. package/templates/bod-report/ds-base.js +33 -1
  98. package/templates/bod-report/support.js +13 -20
  99. package/templates/bod-resolution/BodResolution.dc.html +5 -4
  100. package/templates/bod-resolution/ds-base.js +33 -1
  101. package/templates/bod-resolution/support.js +13 -20
  102. package/templates/culture-event-invite/CultureEventInvite.dc.html +3 -2
  103. package/templates/culture-event-invite/ds-base.js +33 -1
  104. package/templates/culture-event-invite/support.js +13 -20
  105. package/templates/dashboard/Dashboard.dc.html +7 -3
  106. package/templates/dashboard/ds-base.js +33 -1
  107. package/templates/dashboard/support.js +13 -20
  108. package/templates/delivery-change-note/DeliveryChangeNote.dc.html +2 -1
  109. package/templates/delivery-change-note/ds-base.js +33 -1
  110. package/templates/delivery-change-note/support.js +13 -20
  111. package/templates/delivery-kickoff/DeliveryKickoff.dc.html +3 -2
  112. package/templates/delivery-kickoff/ds-base.js +33 -1
  113. package/templates/delivery-kickoff/support.js +13 -20
  114. package/templates/delivery-qbr-deck/DeliveryQbrDeck.dc.html +6 -5
  115. package/templates/delivery-qbr-deck/ds-base.js +33 -1
  116. package/templates/delivery-qbr-deck/support.js +13 -20
  117. package/templates/delivery-runbook/DeliveryRunbook.dc.html +3 -2
  118. package/templates/delivery-runbook/ds-base.js +33 -1
  119. package/templates/delivery-runbook/support.js +13 -20
  120. package/templates/delivery-status-email/DeliveryStatusEmail.dc.html +3 -2
  121. package/templates/delivery-status-email/ds-base.js +33 -1
  122. package/templates/delivery-status-email/support.js +13 -20
  123. package/templates/doc-style-guide/DocStyleGuide.dc.html +67 -64
  124. package/templates/doc-style-guide/ds-base.js +33 -1
  125. package/templates/doc-style-guide/support.js +13 -20
  126. package/templates/doc-suite-index/DocSuiteIndex.dc.html +46 -45
  127. package/templates/doc-suite-index/ds-base.js +33 -1
  128. package/templates/doc-suite-index/support.js +13 -20
  129. package/templates/doc-templates/DocTemplates.dc.html +42 -41
  130. package/templates/doc-templates/ds-base.js +33 -1
  131. package/templates/doc-templates/support.js +13 -20
  132. package/templates/email/Email.dc.html +3 -2
  133. package/templates/email/ds-base.js +33 -1
  134. package/templates/email/support.js +13 -20
  135. package/templates/finance-dunning-email/FinanceDunningEmail.dc.html +4 -3
  136. package/templates/finance-dunning-email/ds-base.js +33 -1
  137. package/templates/finance-dunning-email/support.js +13 -20
  138. package/templates/finance-expense-report/FinanceExpenseReport.dc.html +4 -3
  139. package/templates/finance-expense-report/ds-base.js +33 -1
  140. package/templates/finance-expense-report/support.js +13 -20
  141. package/templates/finance-invoice/FinanceInvoice.dc.html +4 -3
  142. package/templates/finance-invoice/ds-base.js +33 -1
  143. package/templates/finance-invoice/support.js +13 -20
  144. package/templates/finance-quote/FinanceQuote.dc.html +4 -3
  145. package/templates/finance-quote/ds-base.js +33 -1
  146. package/templates/finance-quote/support.js +13 -20
  147. package/templates/hr-announcement/HrAnnouncement.dc.html +5 -4
  148. package/templates/hr-announcement/ds-base.js +33 -1
  149. package/templates/hr-announcement/support.js +13 -20
  150. package/templates/hr-interview-kit/HrInterviewKit.dc.html +4 -3
  151. package/templates/hr-interview-kit/ds-base.js +33 -1
  152. package/templates/hr-interview-kit/support.js +13 -20
  153. package/templates/hr-offboarding/HrOffboarding.dc.html +2 -1
  154. package/templates/hr-offboarding/ds-base.js +33 -1
  155. package/templates/hr-offboarding/support.js +13 -20
  156. package/templates/hr-performance-review/HrPerformanceReview.dc.html +2 -1
  157. package/templates/hr-performance-review/ds-base.js +33 -1
  158. package/templates/hr-performance-review/support.js +13 -20
  159. package/templates/hr-pip/HrPip.dc.html +2 -1
  160. package/templates/hr-pip/ds-base.js +33 -1
  161. package/templates/hr-pip/support.js +13 -20
  162. package/templates/kitchen-sink.html +9 -4
  163. package/templates/legal-msa/LegalMsa.dc.html +2 -1
  164. package/templates/legal-msa/ds-base.js +33 -1
  165. package/templates/legal-msa/support.js +13 -20
  166. package/templates/legal-sow/LegalSow.dc.html +2 -1
  167. package/templates/legal-sow/ds-base.js +33 -1
  168. package/templates/legal-sow/support.js +13 -20
  169. package/templates/marketing-campaign-brief/MarketingCampaignBrief.dc.html +3 -2
  170. package/templates/marketing-campaign-brief/ds-base.js +33 -1
  171. package/templates/marketing-campaign-brief/support.js +13 -20
  172. package/templates/marketing-case-study/MarketingCaseStudy.dc.html +5 -4
  173. package/templates/marketing-case-study/ds-base.js +33 -1
  174. package/templates/marketing-case-study/support.js +13 -20
  175. package/templates/marketing-launch/MarketingLaunch.dc.html +6 -5
  176. package/templates/marketing-launch/ds-base.js +33 -1
  177. package/templates/marketing-launch/support.js +13 -20
  178. package/templates/marketing-newsletter/MarketingNewsletter.dc.html +13 -12
  179. package/templates/marketing-newsletter/ds-base.js +33 -1
  180. package/templates/marketing-newsletter/support.js +13 -20
  181. package/templates/marketing-page/MarketingPage.dc.html +17 -12
  182. package/templates/marketing-page/ds-base.js +33 -1
  183. package/templates/marketing-page/support.js +13 -20
  184. package/templates/marketing-press-release/MarketingPressRelease.dc.html +2 -1
  185. package/templates/marketing-press-release/ds-base.js +33 -1
  186. package/templates/marketing-press-release/support.js +13 -20
  187. package/templates/marketing-social-kit/MarketingSocialKit.dc.html +5 -4
  188. package/templates/marketing-social-kit/ds-base.js +33 -1
  189. package/templates/marketing-social-kit/support.js +13 -20
  190. package/templates/sales-one-pager/SalesOnePager.dc.html +5 -4
  191. package/templates/sales-one-pager/ds-base.js +33 -1
  192. package/templates/sales-one-pager/support.js +13 -20
  193. package/templates/sales-proposal-deck/SalesProposalDeck.dc.html +7 -6
  194. package/templates/sales-proposal-deck/ds-base.js +33 -1
  195. package/templates/sales-proposal-deck/support.js +13 -20
  196. package/templates/settings/Settings.dc.html +5 -1
  197. package/templates/settings/ds-base.js +33 -1
  198. package/templates/settings/support.js +13 -20
  199. package/templates/slide-deck/SlideDeck.dc.html +5 -4
  200. package/templates/slide-deck/ds-base.js +33 -1
  201. package/templates/slide-deck/support.js +13 -20
  202. package/templates/team-meeting-agenda/TeamMeetingAgenda.dc.html +2 -1
  203. package/templates/team-meeting-agenda/ds-base.js +33 -1
  204. package/templates/team-meeting-agenda/support.js +13 -20
  205. package/templates/tech-incident-report/TechIncidentReport.dc.html +3 -2
  206. package/templates/tech-incident-report/ds-base.js +33 -1
  207. package/templates/tech-incident-report/support.js +13 -20
  208. package/templates/tech-release-notes/TechReleaseNotes.dc.html +6 -5
  209. package/templates/tech-release-notes/ds-base.js +33 -1
  210. package/templates/tech-release-notes/support.js +13 -20
  211. package/templates/tech-retro/TechRetro.dc.html +4 -3
  212. package/templates/tech-retro/ds-base.js +33 -1
  213. package/templates/tech-retro/support.js +13 -20
  214. package/templates/tech-rfc/TechRfc.dc.html +3 -2
  215. package/templates/tech-rfc/ds-base.js +33 -1
  216. package/templates/tech-rfc/support.js +13 -20
  217. package/templates/vn-appointment-transfer/VnAppointmentTransfer.dc.html +36 -35
  218. package/templates/vn-appointment-transfer/ds-base.js +33 -1
  219. package/templates/vn-appointment-transfer/support.js +13 -20
  220. package/templates/vn-certificate-of-employment/VnCertificateOfEmployment.dc.html +27 -26
  221. package/templates/vn-certificate-of-employment/ds-base.js +33 -1
  222. package/templates/vn-certificate-of-employment/support.js +13 -20
  223. package/templates/vn-code-of-conduct/VnCodeOfConduct.dc.html +44 -43
  224. package/templates/vn-code-of-conduct/ds-base.js +33 -1
  225. package/templates/vn-code-of-conduct/support.js +13 -20
  226. package/templates/vn-compensation-regulation/VnCompensationRegulation.dc.html +53 -52
  227. package/templates/vn-compensation-regulation/ds-base.js +33 -1
  228. package/templates/vn-compensation-regulation/support.js +13 -20
  229. package/templates/vn-contract-amendment/VnContractAmendment.dc.html +41 -40
  230. package/templates/vn-contract-amendment/ds-base.js +33 -1
  231. package/templates/vn-contract-amendment/support.js +13 -20
  232. package/templates/vn-contractor-agreement/VnContractorAgreement.dc.html +50 -49
  233. package/templates/vn-contractor-agreement/ds-base.js +33 -1
  234. package/templates/vn-contractor-agreement/support.js +13 -20
  235. package/templates/vn-data-protection-policy/VnDataProtectionPolicy.dc.html +54 -53
  236. package/templates/vn-data-protection-policy/ds-base.js +33 -1
  237. package/templates/vn-data-protection-policy/support.js +13 -20
  238. package/templates/vn-disciplinary-case-file/VnDisciplinaryCaseFile.dc.html +72 -71
  239. package/templates/vn-disciplinary-case-file/ds-base.js +33 -1
  240. package/templates/vn-disciplinary-case-file/support.js +13 -20
  241. package/templates/vn-disciplinary-schedule/VnDisciplinarySchedule.dc.html +21 -20
  242. package/templates/vn-disciplinary-schedule/ds-base.js +33 -1
  243. package/templates/vn-disciplinary-schedule/support.js +13 -20
  244. package/templates/vn-employee-request/VnEmployeeRequest.dc.html +54 -53
  245. package/templates/vn-employee-request/ds-base.js +33 -1
  246. package/templates/vn-employee-request/support.js +13 -20
  247. package/templates/vn-exit-handover/VnExitHandover.dc.html +122 -121
  248. package/templates/vn-exit-handover/ds-base.js +33 -1
  249. package/templates/vn-exit-handover/support.js +13 -20
  250. package/templates/vn-foreign-employee-pack/VnForeignEmployeePack.dc.html +31 -30
  251. package/templates/vn-foreign-employee-pack/ds-base.js +33 -1
  252. package/templates/vn-foreign-employee-pack/support.js +13 -20
  253. package/templates/vn-grassroots-democracy/VnGrassrootsDemocracy.dc.html +54 -53
  254. package/templates/vn-grassroots-democracy/ds-base.js +33 -1
  255. package/templates/vn-grassroots-democracy/support.js +13 -20
  256. package/templates/vn-infosec-policy/VnInfosecPolicy.dc.html +50 -49
  257. package/templates/vn-infosec-policy/ds-base.js +33 -1
  258. package/templates/vn-infosec-policy/support.js +13 -20
  259. package/templates/vn-internal-labor-regulations/VnInternalLaborRegulations.dc.html +84 -83
  260. package/templates/vn-internal-labor-regulations/ds-base.js +33 -1
  261. package/templates/vn-internal-labor-regulations/support.js +13 -20
  262. package/templates/vn-internship-agreement/VnInternshipAgreement.dc.html +44 -43
  263. package/templates/vn-internship-agreement/ds-base.js +33 -1
  264. package/templates/vn-internship-agreement/support.js +13 -20
  265. package/templates/vn-job-description/VnJobDescription.dc.html +28 -27
  266. package/templates/vn-job-description/ds-base.js +33 -1
  267. package/templates/vn-job-description/support.js +13 -20
  268. package/templates/vn-labor-contract/VnLaborContract.dc.html +109 -108
  269. package/templates/vn-labor-contract/ds-base.js +33 -1
  270. package/templates/vn-labor-contract/support.js +13 -20
  271. package/templates/vn-labour-management-book/VnLabourManagementBook.dc.html +32 -31
  272. package/templates/vn-labour-management-book/ds-base.js +33 -1
  273. package/templates/vn-labour-management-book/support.js +13 -20
  274. package/templates/vn-mutual-nda/VnMutualNda.dc.html +45 -44
  275. package/templates/vn-mutual-nda/ds-base.js +33 -1
  276. package/templates/vn-mutual-nda/support.js +13 -20
  277. package/templates/vn-ndnca-ip/VnNdncaIp.dc.html +73 -72
  278. package/templates/vn-ndnca-ip/ds-base.js +33 -1
  279. package/templates/vn-ndnca-ip/support.js +13 -20
  280. package/templates/vn-offer-letter/VnOfferLetter.dc.html +32 -31
  281. package/templates/vn-offer-letter/ds-base.js +33 -1
  282. package/templates/vn-offer-letter/support.js +13 -20
  283. package/templates/vn-onboarding-checklist/VnOnboardingChecklist.dc.html +16 -15
  284. package/templates/vn-onboarding-checklist/ds-base.js +33 -1
  285. package/templates/vn-onboarding-checklist/support.js +13 -20
  286. package/templates/vn-pdpl-consent/VnPdplConsent.dc.html +43 -42
  287. package/templates/vn-pdpl-consent/ds-base.js +33 -1
  288. package/templates/vn-pdpl-consent/support.js +13 -20
  289. package/templates/vn-performance-evaluation-regulation/VnPerformanceEvaluationRegulation.dc.html +65 -64
  290. package/templates/vn-performance-evaluation-regulation/ds-base.js +33 -1
  291. package/templates/vn-performance-evaluation-regulation/support.js +13 -20
  292. package/templates/vn-performance-review-form/VnPerformanceReviewForm.dc.html +49 -48
  293. package/templates/vn-performance-review-form/ds-base.js +33 -1
  294. package/templates/vn-performance-review-form/support.js +13 -20
  295. package/templates/vn-phantom-stock/VnPhantomStock.dc.html +41 -40
  296. package/templates/vn-phantom-stock/ds-base.js +33 -1
  297. package/templates/vn-phantom-stock/support.js +13 -20
  298. package/templates/vn-probation-contract/VnProbationContract.dc.html +56 -55
  299. package/templates/vn-probation-contract/ds-base.js +33 -1
  300. package/templates/vn-probation-contract/support.js +13 -20
  301. package/templates/vn-receipt-acknowledgement/VnReceiptAcknowledgement.dc.html +28 -27
  302. package/templates/vn-receipt-acknowledgement/ds-base.js +33 -1
  303. package/templates/vn-receipt-acknowledgement/support.js +13 -20
  304. package/templates/vn-remote-work-policy/VnRemoteWorkPolicy.dc.html +44 -43
  305. package/templates/vn-remote-work-policy/ds-base.js +33 -1
  306. package/templates/vn-remote-work-policy/support.js +13 -20
  307. package/templates/vn-resignation-letter/VnResignationLetter.dc.html +20 -19
  308. package/templates/vn-resignation-letter/ds-base.js +33 -1
  309. package/templates/vn-resignation-letter/support.js +13 -20
  310. package/templates/vn-salary-scale/VnSalaryScale.dc.html +39 -38
  311. package/templates/vn-salary-scale/ds-base.js +33 -1
  312. package/templates/vn-salary-scale/support.js +13 -20
  313. package/templates/vn-sow-appendix/VnSowAppendix.dc.html +21 -20
  314. package/templates/vn-sow-appendix/ds-base.js +33 -1
  315. package/templates/vn-sow-appendix/support.js +13 -20
  316. package/templates/vn-termination-decision/VnTerminationDecision.dc.html +25 -24
  317. package/templates/vn-termination-decision/ds-base.js +33 -1
  318. package/templates/vn-termination-decision/support.js +13 -20
  319. package/templates/vn-total-rewards-appendix/VnTotalRewardsAppendix.dc.html +63 -62
  320. package/templates/vn-total-rewards-appendix/ds-base.js +33 -1
  321. package/templates/vn-total-rewards-appendix/support.js +13 -20
  322. package/templates/vn-training-commitment/VnTrainingCommitment.dc.html +39 -38
  323. package/templates/vn-training-commitment/ds-base.js +33 -1
  324. package/templates/vn-training-commitment/support.js +13 -20
  325. package/templates/vn-travel-expense-policy/VnTravelExpensePolicy.dc.html +50 -49
  326. package/templates/vn-travel-expense-policy/ds-base.js +33 -1
  327. package/templates/vn-travel-expense-policy/support.js +13 -20
  328. package/tokens/colors.css +19 -1
  329. package/tokens/component-tokens.css +1 -0
  330. package/tokens/elements.css +35 -2
  331. package/tokens/elevation.css +8 -2
  332. package/tokens/native/CSTokens.kt +35 -1
  333. package/tokens/native/CSTokens.swift +35 -1
  334. package/tokens/native/cs_tokens.dart +35 -1
  335. package/tokens/provenance.json +12 -12
  336. package/tokens/spacing.css +2 -0
  337. package/tokens/tokens.dtcg.json +111 -3
  338. package/tokens/tokens.js +46 -6
  339. package/tokens/tokens.json +45 -5
  340. package/tokens/typography.css +2 -0
  341. package/ui_kits/deck/index.html +4 -0
  342. package/ui_kits/status-hub/StatusHub.jsx +30 -4
  343. package/ui_kits/status-hub/index.html +3 -3
  344. package/ui_kits/status-hub/login.html +4 -0
  345. package/ui_kits/status-hub/project.html +4 -0
  346. package/ui_kits/status-hub/settings.html +35 -13
  347. package/ui_kits/status-hub/status.css +5 -1
  348. package/ui_kits/website/Website.jsx +25 -3
  349. package/ui_kits/website/careers.html +4 -0
  350. package/ui_kits/website/chat.html +5 -3
  351. package/ui_kits/website/index.html +3 -3
  352. package/ui_kits/website/site.css +2 -2
  353. package/ui_kits/website/work.html +4 -0
@@ -1,6 +1,7 @@
1
1
  <!DOCTYPE html>
2
- <html>
2
+ <html lang="en">
3
3
  <head>
4
+ <title>HR Suite · Phiếu xác nhận đã nhận tài liệu — Acknowledgement of Receipt · CyberSkill</title>
4
5
  <meta charset="utf-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
7
  <meta name="omelette-owns-print" content="1">
@@ -13,67 +14,67 @@
13
14
  <script src="./ds-base.js"></script>
14
15
  <style>@page{size:A4;margin:23mm 20mm 20mm 20mm}@media print{html,body{background:#fff!important}.cs-desk{background:#fff!important;padding:0!important;min-height:0!important}.cs-sheet{box-shadow:none!important;border:none!important;max-width:none!important;border-radius:0!important;padding:0!important}.cs-avoid{break-inside:avoid}}</style>
15
16
  </helmet>
16
- <div lang="vi" data-cs-element="{{ elAttr }}" data-cs-variant="{{ vaAttr }}" class="cs-desk" style="background:#efe6d8;min-height:100vh;padding:40px 16px;font-family:var(--cs-font-family-ui);color:#1A1614">
17
+ <div lang="vi" data-cs-element="{{ elAttr }}" data-cs-variant="{{ vaAttr }}" class="cs-desk" style="background:#efe6d8;min-height:100vh;padding:40px 16px;font-family:var(--cs-font-family-ui);color:var(--cs-doc-ink)">
17
18
  <div class="cs-sheet" style="max-width:794px;margin:0 auto;background:#fff;border:1px solid var(--cs-color-border-default);border-radius:12px;box-shadow:var(--cs-shadow-md);padding:56px 60px;text-align:left">
18
19
  <div style="display:flex;align-items:center;gap:8px;font-size:10.5px;color:var(--cs-color-text-muted);padding-bottom:6px;border-bottom:1px solid var(--cs-color-border-default);margin-bottom:14px">
19
20
  <x-import component-from-global-scope="CyberSkillDS.Logo" size="18" hint-size="18px,18px"></x-import>
20
- <b style="color:var(--cs-color-brand-umber)">CyberSkill</b><span>· Phiếu xác nhận đã nhận tài liệu</span><span style="margin-left:auto;font-family:var(--cs-font-family-mono)">Số/No. <span style="background:#FDE68A;padding:0 3px">.....</span>/2026/PXN-CYBERSKILL</span>
21
+ <b style="color:var(--cs-color-brand-umber)">CyberSkill</b><span>· Phiếu xác nhận đã nhận tài liệu</span><span style="margin-left:auto;font-family:var(--cs-font-family-mono)">Số/No. <span style="background:var(--cs-doc-fill);padding:0 3px">.....</span>/2026/PXN-CYBERSKILL</span>
21
22
  </div>
22
23
  <div class="cs-avoid" style="display:grid;grid-template-columns:1.15fr 1fr;gap:20px;margin-bottom:18px">
23
- <div><div style="font-weight:800;font-size:11.5px;line-height:1.45">CÔNG TY CỔ PHẦN TƯ VẤN VÀ PHÁT TRIỂN GIẢI PHÁP PHẦN MỀM CYBERSKILL</div><div style="font-size:10px;color:#3F4C55;font-style:italic;line-height:1.45;margin-top:2px">CYBERSKILL SOFTWARE SOLUTIONS CONSULTANCY AND DEVELOPMENT JOINT STOCK COMPANY</div><div style="font-size:10.5px;margin-top:4px">Hiện Thực Hoá Ý Chí · <span style="color:#3F4C55;font-style:italic">Turn Your Will Into Real</span></div></div>
24
- <div style="text-align:center"><div style="font-weight:800;font-size:11.5px;line-height:1.5">CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM</div><div style="font-weight:700;font-size:11px">Độc lập – Tự do – Hạnh phúc</div><div style="letter-spacing:0.1em;font-size:10px;margin:1px 0">———————————</div><div style="font-size:9.5px;color:#3F4C55;font-style:italic;line-height:1.4">The Socialist Republic of Vietnam · Independence – Freedom – Happiness</div></div>
24
+ <div><div style="font-weight:800;font-size:11.5px;line-height:1.45">CÔNG TY CỔ PHẦN TƯ VẤN VÀ PHÁT TRIỂN GIẢI PHÁP PHẦN MỀM CYBERSKILL</div><div style="font-size:10px;color:var(--cs-doc-slate);font-style:italic;line-height:1.45;margin-top:2px">CYBERSKILL SOFTWARE SOLUTIONS CONSULTANCY AND DEVELOPMENT JOINT STOCK COMPANY</div><div style="font-size:10.5px;margin-top:4px">Hiện Thực Hoá Ý Chí · <span style="color:var(--cs-doc-slate);font-style:italic">Turn Your Will Into Real</span></div></div>
25
+ <div style="text-align:center"><div style="font-weight:800;font-size:11.5px;line-height:1.5">CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM</div><div style="font-weight:700;font-size:11px">Độc lập – Tự do – Hạnh phúc</div><div style="letter-spacing:0.1em;font-size:10px;margin:1px 0">———————————</div><div style="font-size:9.5px;color:var(--cs-doc-slate);font-style:italic;line-height:1.4">The Socialist Republic of Vietnam · Independence – Freedom – Happiness</div></div>
25
26
  </div>
26
27
  <div class="cs-avoid" style="text-align:center;margin-bottom:14px">
27
28
  <h1 style="font-size:23px;font-weight:800;color:var(--cs-color-brand-umber);letter-spacing:-0.01em;margin:0 0 3px;line-height:1.25">PHIẾU XÁC NHẬN ĐÃ NHẬN VÀ ĐỌC TÀI LIỆU</h1>
28
- <div style="font-size:14px;color:#3F4C55;font-style:italic">Acknowledgement of Receipt and Understanding</div>
29
- <div style="font-size:12.5px;margin-top:8px">Số / No.: <span style="background:#FDE68A;padding:0 3px">......</span>/2026/PXN-CYBERSKILL</div>
30
- <div style="font-size:12px;margin-top:2px">Phiên bản / Version 1.0 · Hiệu lực từ / Effective from: <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span></div>
29
+ <div style="font-size:14px;color:var(--cs-doc-slate);font-style:italic">Acknowledgement of Receipt and Understanding</div>
30
+ <div style="font-size:12.5px;margin-top:8px">Số / No.: <span style="background:var(--cs-doc-fill);padding:0 3px">......</span>/2026/PXN-CYBERSKILL</div>
31
+ <div style="font-size:12px;margin-top:2px">Phiên bản / Version 1.0 · Hiệu lực từ / Effective from: <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span></div>
31
32
  <div style="color:var(--cs-accent);font-size:13px;letter-spacing:0.5em;margin-top:10px">◆ ◆ ◆</div>
32
33
  </div>
33
34
  <div class="cs-avoid" style="background:#FBF4E9;border:1px solid var(--cs-color-border-default);border-radius:8px;padding:10px 14px;margin-bottom:16px">
34
35
  <p style="font-size:12.5px;line-height:1.5;margin:0 0 2px"><b>Ghi chú soạn thảo:</b> Phiếu này là bằng chứng để Công ty có thể áp dụng Nội quy lao động và các chính sách. Không có phiếu này, người lao động có thể phản bác rằng chưa từng được nhận quy định, và việc xử lý kỷ luật có thể bị tuyên trái luật. Ký một lần khi nhận việc, và ký lại mỗi khi có phiên bản mới.</p>
35
- <p style="font-size:11px;line-height:1.45;color:#3F4C55;font-style:italic;margin:0"><b>Drafting note:</b> This form is the evidence that lets the Company apply its Internal Labor Regulations and policies. Without it, an employee can answer a disciplinary charge by saying they were never given the rules, and the discipline may be held unlawful. Signed once on joining, and again on every new version.</p>
36
+ <p style="font-size:11px;line-height:1.45;color:var(--cs-doc-slate);font-style:italic;margin:0"><b>Drafting note:</b> This form is the evidence that lets the Company apply its Internal Labor Regulations and policies. Without it, an employee can answer a disciplinary charge by saying they were never given the rules, and the discipline may be held unlawful. Signed once on joining, and again on every new version.</p>
36
37
  </div>
37
38
 
38
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">PHẦN 1 · NGƯỜI LAO ĐỘNG <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Part 1 · The employee</span></h2>
39
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">PHẦN 1 · NGƯỜI LAO ĐỘNG <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Part 1 · The employee</span></h2>
39
40
  <table class="cs-avoid" style="width:100%;border-collapse:collapse;font-size:12.5px;margin:0 0 16px">
40
41
  <tbody>
41
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;width:220px;vertical-align:top">Họ và tên<div style="color:#3F4C55;font-style:italic;font-size:11px">Full name</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
42
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Chức danh / Bộ phận<div style="color:#3F4C55;font-style:italic;font-size:11px">Position / Department</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
43
- <tr><td style="padding:5px 10px;vertical-align:top">Ngày bắt đầu làm việc<div style="color:#3F4C55;font-style:italic;font-size:11px">Start date</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">...... / ...... / ......</span></td></tr>
42
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;width:220px;vertical-align:top">Họ và tên<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Full name</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
43
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Chức danh / Bộ phận<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Position / Department</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
44
+ <tr><td style="padding:5px 10px;vertical-align:top">Ngày bắt đầu làm việc<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Start date</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">...... / ...... / ......</span></td></tr>
44
45
  </tbody>
45
46
  </table>
46
47
 
47
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 4px">PHẦN 2 · TÀI LIỆU ĐÃ NHẬN <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Part 2 · Documents received</span></h2>
48
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 4px">PHẦN 2 · TÀI LIỆU ĐÃ NHẬN <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Part 2 · Documents received</span></h2>
48
49
  <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Tôi xác nhận đã nhận, đã đọc và đã hiểu các tài liệu sau, ở phiên bản ghi dưới đây. Tôi đã được tạo cơ hội đặt câu hỏi và đã được giải đáp.</p>
49
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 8px">I confirm that I have received, read and understood the following documents, at the versions recorded below. I was given the opportunity to ask questions and they were answered.</p>
50
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 8px">I confirm that I have received, read and understood the following documents, at the versions recorded below. I was given the opportunity to ask questions and they were answered.</p>
50
51
  <table class="cs-avoid" style="width:100%;border-collapse:collapse;font-size:11.5px;margin:0 0 16px">
51
- <thead><tr style="background:var(--cs-color-brand-umber);color:#fff"><th style="text-align:left;padding:5px 8px;font-size:10px">Tài liệu <i style="font-weight:400">Document</i></th><th style="text-align:left;padding:5px 8px;font-size:10px;width:64px">Phiên bản <i style="font-weight:400">Version</i></th><th style="text-align:left;padding:5px 8px;font-size:10px;width:100px">Ngày nhận <i style="font-weight:400">Received</i></th><th style="text-align:center;padding:5px 8px;font-size:10px;width:48px">Đã đọc <i style="font-weight:400">Read</i></th></tr></thead>
52
+ <thead><tr style="background:var(--cs-color-brand-umber);color:var(--cs-color-text-inverse,#fff)"><th style="text-align:left;padding:5px 8px;font-size:10px">Tài liệu <i style="font-weight:400">Document</i></th><th style="text-align:left;padding:5px 8px;font-size:10px;width:64px">Phiên bản <i style="font-weight:400">Version</i></th><th style="text-align:left;padding:5px 8px;font-size:10px;width:100px">Ngày nhận <i style="font-weight:400">Received</i></th><th style="text-align:center;padding:5px 8px;font-size:10px;width:48px">Đã đọc <i style="font-weight:400">Read</i></th></tr></thead>
52
53
  <tbody>
53
54
  <sc-for list="{{ docs }}" as="d" hint-placeholder-count="12">
54
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 8px"><span>{{ d.vi }}</span><div style="color:#3F4C55;font-style:italic;font-size:10px">{{ d.en }}</div></td><td style="padding:5px 8px"><span style="background:#FDE68A;padding:0 3px">......</span></td><td style="padding:5px 8px"><span style="background:#FDE68A;padding:0 3px">.../.../...</span></td><td style="padding:5px 8px;text-align:center">☐</td></tr>
55
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 8px"><span>{{ d.vi }}</span><div style="color:var(--cs-doc-slate);font-style:italic;font-size:10px">{{ d.en }}</div></td><td style="padding:5px 8px"><span style="background:var(--cs-doc-fill);padding:0 3px">......</span></td><td style="padding:5px 8px"><span style="background:var(--cs-doc-fill);padding:0 3px">.../.../...</span></td><td style="padding:5px 8px;text-align:center">☐</td></tr>
55
56
  </sc-for>
56
57
  </tbody>
57
58
  </table>
58
59
 
59
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">PHẦN 3 · CAM KẾT <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Part 3 · Undertaking</span></h2>
60
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">PHẦN 3 · CAM KẾT <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Part 3 · Undertaking</span></h2>
60
61
  <div style="display:grid;gap:6px;margin-bottom:16px">
61
- <div><p style="font-size:13px;line-height:1.5;margin:0">a) Tôi hiểu rằng các tài liệu trên là một phần của điều kiện làm việc và tôi có nghĩa vụ tuân thủ.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:1px 0 0">a) I understand that these documents form part of my terms of work and that I am required to comply with them.</p></div>
62
- <div><p style="font-size:13px;line-height:1.5;margin:0">b) Tôi hiểu rằng vi phạm Nội quy lao động có thể dẫn đến xử lý kỷ luật lao động theo Điều 124 Bộ luật Lao động, bao gồm cả sa thải trong các trường hợp tại Điều 125.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:1px 0 0">b) I understand that breaching the Internal Labor Regulations may lead to labor discipline under Article 124 of the Labor Code, including dismissal in the cases listed in Article 125.</p></div>
63
- <div><p style="font-size:13px;line-height:1.5;margin:0">c) Tôi hiểu rằng các tài liệu này có thể được sửa đổi và tôi sẽ được thông báo, được tham khảo ý kiến, và được yêu cầu ký xác nhận lại đối với phiên bản mới.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:1px 0 0">c) I understand that these documents may be amended, that I will be notified and consulted, and that I will be asked to acknowledge the new version.</p></div>
64
- <div><p style="font-size:13px;line-height:1.5;margin:0">d) Tôi biết nơi truy cập bản mới nhất của các tài liệu này: niêm yết tại nơi làm việc và tại <span style="background:#FDE68A;padding:0 3px">..............................</span></p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:1px 0 0">d) I know where to find the current version of these documents: posted at the workplace and at <span style="background:#FDE68A;padding:0 3px">..............................</span></p></div>
62
+ <div><p style="font-size:13px;line-height:1.5;margin:0">a) Tôi hiểu rằng các tài liệu trên là một phần của điều kiện làm việc và tôi có nghĩa vụ tuân thủ.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:1px 0 0">a) I understand that these documents form part of my terms of work and that I am required to comply with them.</p></div>
63
+ <div><p style="font-size:13px;line-height:1.5;margin:0">b) Tôi hiểu rằng vi phạm Nội quy lao động có thể dẫn đến xử lý kỷ luật lao động theo Điều 124 Bộ luật Lao động, bao gồm cả sa thải trong các trường hợp tại Điều 125.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:1px 0 0">b) I understand that breaching the Internal Labor Regulations may lead to labor discipline under Article 124 of the Labor Code, including dismissal in the cases listed in Article 125.</p></div>
64
+ <div><p style="font-size:13px;line-height:1.5;margin:0">c) Tôi hiểu rằng các tài liệu này có thể được sửa đổi và tôi sẽ được thông báo, được tham khảo ý kiến, và được yêu cầu ký xác nhận lại đối với phiên bản mới.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:1px 0 0">c) I understand that these documents may be amended, that I will be notified and consulted, and that I will be asked to acknowledge the new version.</p></div>
65
+ <div><p style="font-size:13px;line-height:1.5;margin:0">d) Tôi biết nơi truy cập bản mới nhất của các tài liệu này: niêm yết tại nơi làm việc và tại <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:1px 0 0">d) I know where to find the current version of these documents: posted at the workplace and at <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p></div>
65
66
  </div>
66
67
 
67
68
  <div class="cs-avoid">
68
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thành phố Hồ Chí Minh, ngày <span style="background:#FDE68A;padding:0 3px">......</span> tháng <span style="background:#FDE68A;padding:0 3px">......</span> năm <span style="background:#FDE68A;padding:0 3px">......</span></p>
69
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 14px">Ho Chi Minh City, <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span></p>
69
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thành phố Hồ Chí Minh, ngày <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> tháng <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> năm <span style="background:var(--cs-doc-fill);padding:0 3px">......</span></p>
70
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 14px">Ho Chi Minh City, <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span></p>
70
71
  <div style="display:grid;grid-template-columns:1fr 1fr;gap:44px">
71
- <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">NGƯỜI LAO ĐỘNG</div><div style="font-size:11px;color:#3F4C55;font-style:italic">The Employee</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:#3F4C55">Sign and state full name</i>)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:70%;margin:0 auto"></div></div>
72
- <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">ĐẠI DIỆN CÔNG TY</div><div style="font-size:11px;color:#3F4C55;font-style:italic">For the Company</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:#3F4C55">Sign and state full name</i>)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:70%;margin:0 auto"></div></div>
72
+ <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">NGƯỜI LAO ĐỘNG</div><div style="font-size:11px;color:var(--cs-doc-slate);font-style:italic">The Employee</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:var(--cs-doc-slate)">Sign and state full name</i>)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:70%;margin:0 auto"></div></div>
73
+ <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">ĐẠI DIỆN CÔNG TY</div><div style="font-size:11px;color:var(--cs-doc-slate);font-style:italic">For the Company</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:var(--cs-doc-slate)">Sign and state full name</i>)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:70%;margin:0 auto"></div></div>
73
74
  </div>
74
75
  </div>
75
76
 
76
- <div style="border-top:1px solid var(--cs-color-border-default);padding-top:8px;margin-top:20px;display:flex;gap:10px;font-size:10.5px;color:var(--cs-color-text-muted);flex-wrap:wrap">Hiện Thực Hoá Ý Chí · <i style="color:#3F4C55">Turn Your Will Into Real</i><span>·</span>MST: 0316475200<span>·</span>info@cyberskill.world<span>·</span>(+84) 906 878 091<span style="margin-left:auto">Trang / Page 1</span></div>
77
+ <div style="border-top:1px solid var(--cs-color-border-default);padding-top:8px;margin-top:20px;display:flex;gap:10px;font-size:10.5px;color:var(--cs-color-text-muted);flex-wrap:wrap">Hiện Thực Hoá Ý Chí · <i style="color:var(--cs-doc-slate)">Turn Your Will Into Real</i><span>·</span>MST: 0316475200<span>·</span>info@cyberskill.world<span>·</span>(+84) 906 878 091<span style="margin-left:auto">Trang / Page 1</span></div>
77
78
  </div>
78
79
  </div>
79
80
  </x-dc>
@@ -1,9 +1,10 @@
1
1
  // Loads this design system into the template. In a consuming project, point
2
2
  // base at the bound DS folder relative to this file (e.g. '_ds/<folder>' at
3
3
  // the project root, '../_ds/<folder>' one level down) — one line to edit.
4
+ // Artifact head standard (UX-002 / B1): ensure <html lang> + <title> from @template.
4
5
  (() => {
5
6
  const base = '../..';
6
- for (const p of ['styles.css']) {
7
+ for (const p of ['dist/styles.min.css']) {
7
8
  const l = document.createElement('link');
8
9
  l.rel = 'stylesheet'; l.href = base + '/' + p;
9
10
  document.head.appendChild(l);
@@ -20,4 +21,35 @@
20
21
  };
21
22
  s.onerror = () => console.error('ds-base.js: failed to load ' + s.src + ' — if this is a consuming project, point the base line in ds-base.js at the bound _ds/<folder> tree relative to this page (e.g. _ds/<folder> at the project root, ../_ds/<folder> one level down); in a fresh design system this can just mean the bundle is not compiled yet');
22
23
  document.head.appendChild(s);
24
+
25
+ const syncLang = () => {
26
+ try {
27
+ const a = document.querySelector('[lang]');
28
+ const v = a && a.getAttribute('lang');
29
+ // Ignore unresolved DC holes like {{ langAttr }}
30
+ if (v && v.indexOf('{{') === -1) document.documentElement.setAttribute('lang', v);
31
+ else if (!document.documentElement.getAttribute('lang')) document.documentElement.setAttribute('lang', 'en');
32
+ } catch (e) { /* authoring host may sandbox */ }
33
+ };
34
+ const ensureHead = () => {
35
+ try {
36
+ if (!document.title || !document.title.trim()) {
37
+ const src = document.documentElement.innerHTML;
38
+ const m = src.match(/@template\s+name="([^"]+)"/);
39
+ if (m) document.title = m[1] + ' · CyberSkill';
40
+ }
41
+ syncLang();
42
+ const obs = new MutationObserver(syncLang);
43
+ obs.observe(document.body || document.documentElement, {
44
+ attributes: true,
45
+ attributeFilter: ['lang'],
46
+ subtree: true,
47
+ });
48
+ } catch (e) { /* authoring host may sandbox */ }
49
+ };
50
+ if (document.readyState === 'loading') {
51
+ document.addEventListener('DOMContentLoaded', ensureHead);
52
+ } else {
53
+ ensureHead();
54
+ }
23
55
  })();
@@ -1070,16 +1070,15 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
- var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
- var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
- var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
- var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
- function cdnScriptFor(url, sri) {
1073
+ var REACT_LOCAL = "../../_vendor/react/react.production.min.js";
1074
+ var REACT_DOM_LOCAL = "../../_vendor/react/react-dom.production.min.js";
1075
+ var BABEL_LOCAL = "../../_vendor/babel/babel.min.js";
1076
+ // Product surfaces are offline-first (UX-026 / D4): no third-party script origins.
1077
+ // Host editors may still remap via window.__resources[localPath].
1078
+ function localScriptFor(path) {
1080
1079
  const res = window.__resources;
1081
- const v = res ? res[url] : void 0;
1082
- return typeof v === "string" && v ? { src: v } : { src: url, integrity: sri };
1080
+ const v = res ? res[path] : void 0;
1081
+ return typeof v === "string" && v ? v : path;
1083
1082
  }
1084
1083
 
1085
1084
  // src/external.ts
@@ -1106,16 +1105,12 @@
1106
1105
  function ensureBabel() {
1107
1106
  if (window.Babel) return Promise.resolve();
1108
1107
  if (babelLoading) return babelLoading;
1109
- const babel = cdnScriptFor(BABEL_URL, BABEL_SRI);
1108
+ const src = localScriptFor(BABEL_LOCAL);
1110
1109
  babelLoading = new Promise((res, rej) => {
1111
1110
  const s = document.createElement("script");
1112
- s.src = babel.src;
1113
- if (babel.integrity) {
1114
- s.integrity = babel.integrity;
1115
- s.crossOrigin = "anonymous";
1116
- }
1111
+ s.src = src;
1117
1112
  s.onload = () => res();
1118
- s.onerror = rej;
1113
+ s.onerror = () => rej(new Error("failed to load local Babel: " + src));
1119
1114
  document.head.appendChild(s);
1120
1115
  });
1121
1116
  return babelLoading;
@@ -1768,11 +1763,9 @@
1768
1763
  function loadReactUmd() {
1769
1764
  const w = window;
1770
1765
  if (w.React && w.ReactDOM) return Promise.resolve();
1771
- const react = cdnScriptFor(REACT_URL, REACT_SRI);
1772
- const reactDom = cdnScriptFor(REACT_DOM_URL, REACT_DOM_SRI);
1773
1766
  return Promise.all([
1774
- loadScript(react.src, react.integrity),
1775
- loadScript(reactDom.src, reactDom.integrity)
1767
+ loadScript(localScriptFor(REACT_LOCAL)),
1768
+ loadScript(localScriptFor(REACT_DOM_LOCAL))
1776
1769
  ]).then(() => void 0);
1777
1770
  }
1778
1771
  function init() {
@@ -1,6 +1,7 @@
1
1
  <!DOCTYPE html>
2
- <html>
2
+ <html lang="en">
3
3
  <head>
4
+ <title>HR Suite · Chính sách Làm việc Từ xa & Kết hợp — Remote & Hybrid Work Policy · CyberSkill</title>
4
5
  <meta charset="utf-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
7
  <meta name="omelette-owns-print" content="1">
@@ -13,78 +14,78 @@
13
14
  <script src="./ds-base.js"></script>
14
15
  <style>@page{size:A4;margin:23mm 20mm 20mm 20mm}@media print{html,body{background:#fff!important}.cs-desk{background:#fff!important;padding:0!important;min-height:0!important}.cs-sheet{box-shadow:none!important;border:none!important;max-width:none!important;border-radius:0!important;padding:0!important}.cs-avoid{break-inside:avoid}}</style>
15
16
  </helmet>
16
- <div lang="vi" data-cs-element="{{ elAttr }}" data-cs-variant="{{ vaAttr }}" class="cs-desk" style="background:#efe6d8;min-height:100vh;padding:40px 16px;font-family:var(--cs-font-family-ui);color:#1A1614">
17
+ <div lang="vi" data-cs-element="{{ elAttr }}" data-cs-variant="{{ vaAttr }}" class="cs-desk" style="background:#efe6d8;min-height:100vh;padding:40px 16px;font-family:var(--cs-font-family-ui);color:var(--cs-doc-ink)">
17
18
  <div class="cs-sheet" style="max-width:794px;margin:0 auto;background:#fff;border:1px solid var(--cs-color-border-default);border-radius:12px;box-shadow:var(--cs-shadow-md);padding:56px 60px;text-align:left">
18
19
  <div style="display:flex;align-items:center;gap:8px;font-size:10.5px;color:var(--cs-color-text-muted);padding-bottom:6px;border-bottom:1px solid var(--cs-color-border-default);margin-bottom:14px">
19
20
  <x-import component-from-global-scope="CyberSkillDS.Logo" size="18" hint-size="18px,18px"></x-import>
20
- <b style="color:var(--cs-color-brand-umber)">CyberSkill</b><span>· Chính sách Làm việc Từ xa &amp; Kết hợp</span><span style="margin-left:auto;font-family:var(--cs-font-family-mono)">Số/No. <span style="background:#FDE68A;padding:0 3px">.....</span>/2026/CSTX-CYBERSKILL</span>
21
+ <b style="color:var(--cs-color-brand-umber)">CyberSkill</b><span>· Chính sách Làm việc Từ xa &amp; Kết hợp</span><span style="margin-left:auto;font-family:var(--cs-font-family-mono)">Số/No. <span style="background:var(--cs-doc-fill);padding:0 3px">.....</span>/2026/CSTX-CYBERSKILL</span>
21
22
  </div>
22
23
  <div class="cs-avoid" style="display:grid;grid-template-columns:1.15fr 1fr;gap:20px;margin-bottom:18px">
23
- <div><div style="font-weight:800;font-size:11.5px;line-height:1.45">CÔNG TY CỔ PHẦN TƯ VẤN VÀ PHÁT TRIỂN GIẢI PHÁP PHẦN MỀM CYBERSKILL</div><div style="font-size:10px;color:#3F4C55;font-style:italic;line-height:1.45;margin-top:2px">CYBERSKILL SOFTWARE SOLUTIONS CONSULTANCY AND DEVELOPMENT JOINT STOCK COMPANY</div><div style="font-size:10.5px;margin-top:4px">Hiện Thực Hoá Ý Chí · <span style="color:#3F4C55;font-style:italic">Turn Your Will Into Real</span></div></div>
24
- <div style="text-align:center"><div style="font-weight:800;font-size:11.5px;line-height:1.5">CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM</div><div style="font-weight:700;font-size:11px">Độc lập – Tự do – Hạnh phúc</div><div style="letter-spacing:0.1em;font-size:10px;margin:1px 0">———————————</div><div style="font-size:9.5px;color:#3F4C55;font-style:italic;line-height:1.4">The Socialist Republic of Vietnam · Independence – Freedom – Happiness</div></div>
24
+ <div><div style="font-weight:800;font-size:11.5px;line-height:1.45">CÔNG TY CỔ PHẦN TƯ VẤN VÀ PHÁT TRIỂN GIẢI PHÁP PHẦN MỀM CYBERSKILL</div><div style="font-size:10px;color:var(--cs-doc-slate);font-style:italic;line-height:1.45;margin-top:2px">CYBERSKILL SOFTWARE SOLUTIONS CONSULTANCY AND DEVELOPMENT JOINT STOCK COMPANY</div><div style="font-size:10.5px;margin-top:4px">Hiện Thực Hoá Ý Chí · <span style="color:var(--cs-doc-slate);font-style:italic">Turn Your Will Into Real</span></div></div>
25
+ <div style="text-align:center"><div style="font-weight:800;font-size:11.5px;line-height:1.5">CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM</div><div style="font-weight:700;font-size:11px">Độc lập – Tự do – Hạnh phúc</div><div style="letter-spacing:0.1em;font-size:10px;margin:1px 0">———————————</div><div style="font-size:9.5px;color:var(--cs-doc-slate);font-style:italic;line-height:1.4">The Socialist Republic of Vietnam · Independence – Freedom – Happiness</div></div>
25
26
  </div>
26
27
  <div class="cs-avoid" style="text-align:center;margin-bottom:14px">
27
28
  <h1 style="font-size:23px;font-weight:800;color:var(--cs-color-brand-umber);letter-spacing:-0.01em;margin:0 0 3px;line-height:1.25">CHÍNH SÁCH LÀM VIỆC TỪ XA VÀ KẾT HỢP</h1>
28
- <div style="font-size:14px;color:#3F4C55;font-style:italic">Remote and Hybrid Work Policy</div>
29
- <div style="font-size:12.5px;margin-top:8px">Số / No.: <span style="background:#FDE68A;padding:0 3px">......</span>/2026/CSTX-CYBERSKILL</div>
30
- <div style="font-size:12px;margin-top:2px">Phiên bản / Version 1.0 · Hiệu lực từ / Effective from: <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span></div>
29
+ <div style="font-size:14px;color:var(--cs-doc-slate);font-style:italic">Remote and Hybrid Work Policy</div>
30
+ <div style="font-size:12.5px;margin-top:8px">Số / No.: <span style="background:var(--cs-doc-fill);padding:0 3px">......</span>/2026/CSTX-CYBERSKILL</div>
31
+ <div style="font-size:12px;margin-top:2px">Phiên bản / Version 1.0 · Hiệu lực từ / Effective from: <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span></div>
31
32
  <div style="color:var(--cs-accent);font-size:13px;letter-spacing:0.5em;margin-top:10px">◆ ◆ ◆</div>
32
33
  </div>
33
34
  <p style="font-size:13.5px;line-height:1.5;margin:0 0 1px">Chính sách này quy định cách thức làm việc từ xa và kết hợp tại CyberSkill. Địa điểm làm việc chính thức ghi trong hợp đồng lao động vẫn là trụ sở Công ty; làm việc từ xa là thỏa thuận linh hoạt theo Chính sách này, không làm thay đổi hợp đồng lao động.</p>
34
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 14px">This Policy governs remote and hybrid working at CyberSkill. The formal place of work in the labor contract remains the Company's office; remote working is a flexible arrangement under this Policy and does not amend the labor contract.</p>
35
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 14px">This Policy governs remote and hybrid working at CyberSkill. The formal place of work in the labor contract remains the Company's office; remote working is a flexible arrangement under this Policy and does not amend the labor contract.</p>
35
36
 
36
37
  <div style="display:grid;gap:13px">
37
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">ĐIỀU 1 · MÔ HÌNH LÀM VIỆC <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 1 · The working model</span></h2>
38
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">ĐIỀU 1 · MÔ HÌNH LÀM VIỆC <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 1 · The working model</span></h2>
38
39
  <table style="width:100%;border-collapse:collapse;font-size:12px">
39
- <thead><tr style="background:var(--cs-color-brand-umber);color:#fff"><th style="text-align:left;padding:5px 9px;font-size:10px;width:150px">Nội dung <i style="font-weight:400">Item</i></th><th style="text-align:left;padding:5px 9px;font-size:10px">Quy định <i style="font-weight:400">Rule</i></th></tr></thead>
40
+ <thead><tr style="background:var(--cs-color-brand-umber);color:var(--cs-color-text-inverse,#fff)"><th style="text-align:left;padding:5px 9px;font-size:10px;width:150px">Nội dung <i style="font-weight:400">Item</i></th><th style="text-align:left;padding:5px 9px;font-size:10px">Quy định <i style="font-weight:400">Rule</i></th></tr></thead>
40
41
  <tbody>
41
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 9px;font-weight:600">Số ngày tại văn phòng<div style="color:#3F4C55;font-style:italic;font-size:10.5px">Days in the office</div></td><td style="padding:6px 9px">02 ngày mỗi tuần. Quản lý mỗi nhóm chọn cố định là ngày nào và công bố cho cả nhóm.<div style="color:#3F4C55;font-style:italic;font-size:10.5px">02 days a week. Each team's manager fixes which days and publishes them to the team.</div></td></tr>
42
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 9px;font-weight:600">Giờ lõi<div style="color:#3F4C55;font-style:italic;font-size:10.5px">Core hours</div></td><td style="padding:6px 9px">10:00 - 16:00. Trong khung này, người lao động phải sẵn sàng liên lạc dù làm việc ở đâu.<div style="color:#3F4C55;font-style:italic;font-size:10.5px">10:00 to 16:00. Within this window an employee must be contactable wherever they work.</div></td></tr>
43
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 9px;font-weight:600">Ngoài giờ lõi<div style="color:#3F4C55;font-style:italic;font-size:10.5px">Outside core hours</div></td><td style="padding:6px 9px">Linh hoạt, miễn là hoàn thành đủ 40 giờ/tuần và đạt mục tiêu công việc.<div style="color:#3F4C55;font-style:italic;font-size:10.5px">Flexible, provided 40 hours a week are worked and objectives are met.</div></td></tr>
44
- <tr><td style="padding:6px 9px;font-weight:600">Thời gian thử việc<div style="color:#3F4C55;font-style:italic;font-size:10.5px">During probation</div></td><td style="padding:6px 9px">Làm việc tại văn phòng toàn thời gian trong 02 tháng đầu.<div style="color:#3F4C55;font-style:italic;font-size:10.5px">Full-time in the office for the first 02 months.</div></td></tr>
42
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 9px;font-weight:600">Số ngày tại văn phòng<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">Days in the office</div></td><td style="padding:6px 9px">02 ngày mỗi tuần. Quản lý mỗi nhóm chọn cố định là ngày nào và công bố cho cả nhóm.<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">02 days a week. Each team's manager fixes which days and publishes them to the team.</div></td></tr>
43
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 9px;font-weight:600">Giờ lõi<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">Core hours</div></td><td style="padding:6px 9px">10:00 - 16:00. Trong khung này, người lao động phải sẵn sàng liên lạc dù làm việc ở đâu.<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">10:00 to 16:00. Within this window an employee must be contactable wherever they work.</div></td></tr>
44
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 9px;font-weight:600">Ngoài giờ lõi<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">Outside core hours</div></td><td style="padding:6px 9px">Linh hoạt, miễn là hoàn thành đủ 40 giờ/tuần và đạt mục tiêu công việc.<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">Flexible, provided 40 hours a week are worked and objectives are met.</div></td></tr>
45
+ <tr><td style="padding:6px 9px;font-weight:600">Thời gian thử việc<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">During probation</div></td><td style="padding:6px 9px">Làm việc tại văn phòng toàn thời gian trong 02 tháng đầu.<div style="color:var(--cs-doc-slate);font-style:italic;font-size:10.5px">Full-time in the office for the first 02 months.</div></td></tr>
45
46
  </tbody>
46
47
  </table>
47
- <div style="background:#FBF4E9;border:1px solid var(--cs-color-border-default);border-radius:6px;padding:7px 11px;margin-top:6px"><p style="font-size:12px;line-height:1.45;margin:0 0 1px"><b>Ghi chú soạn thảo:</b> Tỷ lệ 2 ngày văn phòng / 3 ngày từ xa và giờ lõi 10:00-16:00 là đề xuất mặc định.</p><p style="font-size:11px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0"><b>Drafting note:</b> The 2-office / 3-remote split and 10:00-16:00 core hours are the suggested defaults.</p></div></div>
48
+ <div style="background:#FBF4E9;border:1px solid var(--cs-color-border-default);border-radius:6px;padding:7px 11px;margin-top:6px"><p style="font-size:12px;line-height:1.45;margin:0 0 1px"><b>Ghi chú soạn thảo:</b> Tỷ lệ 2 ngày văn phòng / 3 ngày từ xa và giờ lõi 10:00-16:00 là đề xuất mặc định.</p><p style="font-size:11px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0"><b>Drafting note:</b> The 2-office / 3-remote split and 10:00-16:00 core hours are the suggested defaults.</p></div></div>
48
49
 
49
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 2 · ĐIỀU KIỆN ÁP DỤNG <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 2 · Eligibility</span></h2>
50
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Áp dụng cho mọi vị trí, trừ khi công việc bắt buộc phải có mặt tại văn phòng hoặc tại địa điểm của khách hàng.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">a) Open to every role, unless the work requires physical presence at the office or at a client site.</p>
51
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Quản lý trực tiếp có quyền yêu cầu người lao động có mặt tại văn phòng khi có nhu cầu công việc, báo trước ít nhất 24 giờ.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">b) A line manager may require attendance at the office where the work needs it, on at least 24 hours' notice.</p>
52
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">c) Công ty có thể tạm dừng quyền làm việc từ xa của một cá nhân khi kết quả công việc bị đánh giá mức 1 hoặc mức 2 theo Quy chế đánh giá.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">c) The Company may suspend an individual's remote working where their performance is rated 1 or 2 under the Performance Evaluation Regulation.</p></div>
50
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 2 · ĐIỀU KIỆN ÁP DỤNG <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 2 · Eligibility</span></h2>
51
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Áp dụng cho mọi vị trí, trừ khi công việc bắt buộc phải có mặt tại văn phòng hoặc tại địa điểm của khách hàng.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">a) Open to every role, unless the work requires physical presence at the office or at a client site.</p>
52
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Quản lý trực tiếp có quyền yêu cầu người lao động có mặt tại văn phòng khi có nhu cầu công việc, báo trước ít nhất 24 giờ.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">b) A line manager may require attendance at the office where the work needs it, on at least 24 hours' notice.</p>
53
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">c) Công ty có thể tạm dừng quyền làm việc từ xa của một cá nhân khi kết quả công việc bị đánh giá mức 1 hoặc mức 2 theo Quy chế đánh giá.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">c) The Company may suspend an individual's remote working where their performance is rated 1 or 2 under the Performance Evaluation Regulation.</p></div>
53
54
 
54
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 3 · LÀM VIỆC NGOÀI ĐỊA BÀN <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 3 · Working away from Ho Chi Minh City</span></h2>
55
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Trong lãnh thổ Việt Nam: được phép, chỉ cần thông báo cho quản lý trực tiếp trước ít nhất 02 ngày làm việc.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">a) Within Vietnam: permitted, on at least 02 working days' notice to the line manager.</p>
56
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Ngoài lãnh thổ Việt Nam: phải được Tổng Giám đốc chấp thuận bằng văn bản trước, và không quá 30 ngày cộng dồn trong một năm.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">b) Outside Vietnam: requires the CEO's prior written approval, and is limited to 30 cumulative days in a year.</p>
57
- <div style="background:#FBF4E9;border:1px solid var(--cs-color-border-default);border-radius:6px;padding:7px 11px"><p style="font-size:12px;line-height:1.45;margin:0 0 1px"><b>Ghi chú soạn thảo:</b> Giới hạn 30 ngày không phải là quy định hành chính tùy tiện: làm việc dài ngày ở nước ngoài có thể phát sinh nghĩa vụ thuế và nghĩa vụ đăng ký cho Công ty tại nước sở tại.</p><p style="font-size:11px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0"><b>Drafting note:</b> The 30-day limit is not arbitrary administration: extended work abroad can create tax and registration obligations for the Company in that country.</p></div></div>
55
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 3 · LÀM VIỆC NGOÀI ĐỊA BÀN <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 3 · Working away from Ho Chi Minh City</span></h2>
56
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Trong lãnh thổ Việt Nam: được phép, chỉ cần thông báo cho quản lý trực tiếp trước ít nhất 02 ngày làm việc.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">a) Within Vietnam: permitted, on at least 02 working days' notice to the line manager.</p>
57
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Ngoài lãnh thổ Việt Nam: phải được Tổng Giám đốc chấp thuận bằng văn bản trước, và không quá 30 ngày cộng dồn trong một năm.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">b) Outside Vietnam: requires the CEO's prior written approval, and is limited to 30 cumulative days in a year.</p>
58
+ <div style="background:#FBF4E9;border:1px solid var(--cs-color-border-default);border-radius:6px;padding:7px 11px"><p style="font-size:12px;line-height:1.45;margin:0 0 1px"><b>Ghi chú soạn thảo:</b> Giới hạn 30 ngày không phải là quy định hành chính tùy tiện: làm việc dài ngày ở nước ngoài có thể phát sinh nghĩa vụ thuế và nghĩa vụ đăng ký cho Công ty tại nước sở tại.</p><p style="font-size:11px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0"><b>Drafting note:</b> The 30-day limit is not arbitrary administration: extended work abroad can create tax and registration obligations for the Company in that country.</p></div></div>
58
59
 
59
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 4 · THIẾT BỊ VÀ TRỢ CẤP <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 4 · Equipment and allowance</span></h2>
60
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Công ty cấp máy tính xách tay cho mọi vị trí kỹ thuật và mọi vị trí tiếp xúc với dữ liệu khách hàng.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">a) The Company issues a laptop to every engineering role and to every role that touches client data.</p>
61
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Trợ cấp thiết lập chỗ làm việc tại nhà: 3.000.000 VNĐ, chi một lần sau khi hoàn thành thử việc.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">b) Home-office setup allowance: VND 3,000,000, paid once, after probation is passed.</p>
62
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">c) Chi phí internet và điện tại nhà do người lao động tự chi trả và đã được tính trong cơ cấu lương.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">c) Home internet and electricity are the employee's own cost and are accounted for in the pay structure.</p>
63
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">d) Thiết bị của Công ty là tài sản của Công ty, phải hoàn trả khi chấm dứt hợp đồng theo Thỏa thuận Chấm dứt &amp; Bàn giao.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">d) Company equipment remains Company property and is returned on termination under the Exit-Handover Agreement.</p></div>
60
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 4 · THIẾT BỊ VÀ TRỢ CẤP <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 4 · Equipment and allowance</span></h2>
61
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Công ty cấp máy tính xách tay cho mọi vị trí kỹ thuật và mọi vị trí tiếp xúc với dữ liệu khách hàng.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">a) The Company issues a laptop to every engineering role and to every role that touches client data.</p>
62
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Trợ cấp thiết lập chỗ làm việc tại nhà: 3.000.000 VNĐ, chi một lần sau khi hoàn thành thử việc.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">b) Home-office setup allowance: VND 3,000,000, paid once, after probation is passed.</p>
63
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">c) Chi phí internet và điện tại nhà do người lao động tự chi trả và đã được tính trong cơ cấu lương.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">c) Home internet and electricity are the employee's own cost and are accounted for in the pay structure.</p>
64
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">d) Thiết bị của Công ty là tài sản của Công ty, phải hoàn trả khi chấm dứt hợp đồng theo Thỏa thuận Chấm dứt &amp; Bàn giao.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">d) Company equipment remains Company property and is returned on termination under the Exit-Handover Agreement.</p></div>
64
65
 
65
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 5 · AN TOÀN THÔNG TIN KHI LÀM VIỆC TỪ XA <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 5 · Security when working remotely</span></h2>
66
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Không sử dụng Wi-Fi công cộng không có mật khẩu để truy cập hệ thống hoặc dữ liệu của Công ty và của khách hàng.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">a) Do not use open public Wi-Fi to reach Company or client systems or data.</p>
67
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Khóa màn hình khi rời khỏi máy. Không để người khác, kể cả người thân, sử dụng máy tính của Công ty.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">b) Lock the screen when leaving the machine. No one else, including family, uses a Company computer.</p>
68
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">c) Không họp về nội dung bảo mật ở nơi công cộng nếu người xung quanh có thể nghe được.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 3px">c) Do not hold confidential calls in public where others can overhear.</p>
69
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">d) Toàn bộ Chính sách An toàn Thông tin áp dụng như nhau khi làm việc từ xa.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">d) The whole Information Security Policy applies equally when working remotely.</p></div>
66
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 5 · AN TOÀN THÔNG TIN KHI LÀM VIỆC TỪ XA <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 5 · Security when working remotely</span></h2>
67
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">a) Không sử dụng Wi-Fi công cộng không có mật khẩu để truy cập hệ thống hoặc dữ liệu của Công ty và của khách hàng.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">a) Do not use open public Wi-Fi to reach Company or client systems or data.</p>
68
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">b) Khóa màn hình khi rời khỏi máy. Không để người khác, kể cả người thân, sử dụng máy tính của Công ty.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">b) Lock the screen when leaving the machine. No one else, including family, uses a Company computer.</p>
69
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">c) Không họp về nội dung bảo mật ở nơi công cộng nếu người xung quanh có thể nghe được.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 3px">c) Do not hold confidential calls in public where others can overhear.</p>
70
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">d) Toàn bộ Chính sách An toàn Thông tin áp dụng như nhau khi làm việc từ xa.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">d) The whole Information Security Policy applies equally when working remotely.</p></div>
70
71
 
71
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 6 · AN TOÀN, VỆ SINH LAO ĐỘNG <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 6 · Health and safety</span></h2>
72
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Người lao động tự bảo đảm chỗ làm việc tại nhà an toàn và phù hợp. Tai nạn xảy ra trong giờ làm việc và trong quá trình thực hiện công việc được giao, kể cả khi làm việc từ xa, vẫn có thể được xem là tai nạn lao động theo Luật An toàn, vệ sinh lao động, và phải được báo cáo ngay cho quản lý trực tiếp.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">Employees are responsible for a safe and suitable home workspace. An accident occurring during working hours and in the course of assigned work, including while working remotely, may still be an occupational accident under the Law on Occupational Safety and Health, and must be reported immediately to the line manager.</p></div>
72
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 6 · AN TOÀN, VỆ SINH LAO ĐỘNG <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 6 · Health and safety</span></h2>
73
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Người lao động tự bảo đảm chỗ làm việc tại nhà an toàn và phù hợp. Tai nạn xảy ra trong giờ làm việc và trong quá trình thực hiện công việc được giao, kể cả khi làm việc từ xa, vẫn có thể được xem là tai nạn lao động theo Luật An toàn, vệ sinh lao động, và phải được báo cáo ngay cho quản lý trực tiếp.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">Employees are responsible for a safe and suitable home workspace. An accident occurring during working hours and in the course of assigned work, including while working remotely, may still be an occupational accident under the Law on Occupational Safety and Health, and must be reported immediately to the line manager.</p></div>
73
74
 
74
- <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 7 · HIỆU LỰC <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 7 · Effect</span></h2>
75
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Chính sách có hiệu lực kể từ ngày ký và được xem xét lại hằng năm.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">This Policy takes effect on signature and is reviewed annually.</p></div>
75
+ <div class="cs-avoid"><h2 style="font-size:12.5px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 5px">ĐIỀU 7 · HIỆU LỰC <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 7 · Effect</span></h2>
76
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Chính sách có hiệu lực kể từ ngày ký và được xem xét lại hằng năm.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">This Policy takes effect on signature and is reviewed annually.</p></div>
76
77
  </div>
77
78
 
78
79
  <div class="cs-avoid" style="margin-top:18px">
79
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thành phố Hồ Chí Minh, ngày <span style="background:#FDE68A;padding:0 3px">......</span> tháng <span style="background:#FDE68A;padding:0 3px">......</span> năm <span style="background:#FDE68A;padding:0 3px">......</span></p>
80
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 14px">Ho Chi Minh City, <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span> / <span style="background:#FDE68A;padding:0 3px">......</span></p>
80
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thành phố Hồ Chí Minh, ngày <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> tháng <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> năm <span style="background:var(--cs-doc-fill);padding:0 3px">......</span></p>
81
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 14px">Ho Chi Minh City, <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> / <span style="background:var(--cs-doc-fill);padding:0 3px">......</span></p>
81
82
  <div style="display:grid;grid-template-columns:1fr 1fr;gap:44px">
82
- <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">ĐẠI DIỆN TẬP THỂ NGƯỜI LAO ĐỘNG</div><div style="font-size:11px;color:#3F4C55;font-style:italic">Employee Representative</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:#3F4C55">Sign and state full name</i>)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:70%;margin:0 auto"></div></div>
83
- <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">NGƯỜI SỬ DỤNG LAO ĐỘNG</div><div style="font-size:11px;color:#3F4C55;font-style:italic">The Employer</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên và đóng dấu / <i style="color:#3F4C55">Sign, state full name, and affix seal</i>)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:70%;margin:0 auto"></div></div>
83
+ <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">ĐẠI DIỆN TẬP THỂ NGƯỜI LAO ĐỘNG</div><div style="font-size:11px;color:var(--cs-doc-slate);font-style:italic">Employee Representative</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:var(--cs-doc-slate)">Sign and state full name</i>)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:70%;margin:0 auto"></div></div>
84
+ <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">NGƯỜI SỬ DỤNG LAO ĐỘNG</div><div style="font-size:11px;color:var(--cs-doc-slate);font-style:italic">The Employer</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên và đóng dấu / <i style="color:var(--cs-doc-slate)">Sign, state full name, and affix seal</i>)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:70%;margin:0 auto"></div></div>
84
85
  </div>
85
86
  </div>
86
87
 
87
- <div style="border-top:1px solid var(--cs-color-border-default);padding-top:8px;margin-top:20px;display:flex;gap:10px;font-size:10.5px;color:var(--cs-color-text-muted);flex-wrap:wrap">Hiện Thực Hoá Ý Chí · <i style="color:#3F4C55">Turn Your Will Into Real</i><span>·</span>MST: 0316475200<span>·</span>info@cyberskill.world<span>·</span>(+84) 906 878 091<span style="margin-left:auto">Trang / Page 1</span></div>
88
+ <div style="border-top:1px solid var(--cs-color-border-default);padding-top:8px;margin-top:20px;display:flex;gap:10px;font-size:10.5px;color:var(--cs-color-text-muted);flex-wrap:wrap">Hiện Thực Hoá Ý Chí · <i style="color:var(--cs-doc-slate)">Turn Your Will Into Real</i><span>·</span>MST: 0316475200<span>·</span>info@cyberskill.world<span>·</span>(+84) 906 878 091<span style="margin-left:auto">Trang / Page 1</span></div>
88
89
  </div>
89
90
  </div>
90
91
  </x-dc>
@@ -1,9 +1,10 @@
1
1
  // Loads this design system into the template. In a consuming project, point
2
2
  // base at the bound DS folder relative to this file (e.g. '_ds/<folder>' at
3
3
  // the project root, '../_ds/<folder>' one level down) — one line to edit.
4
+ // Artifact head standard (UX-002 / B1): ensure <html lang> + <title> from @template.
4
5
  (() => {
5
6
  const base = '../..';
6
- for (const p of ['styles.css']) {
7
+ for (const p of ['dist/styles.min.css']) {
7
8
  const l = document.createElement('link');
8
9
  l.rel = 'stylesheet'; l.href = base + '/' + p;
9
10
  document.head.appendChild(l);
@@ -20,4 +21,35 @@
20
21
  };
21
22
  s.onerror = () => console.error('ds-base.js: failed to load ' + s.src + ' — if this is a consuming project, point the base line in ds-base.js at the bound _ds/<folder> tree relative to this page (e.g. _ds/<folder> at the project root, ../_ds/<folder> one level down); in a fresh design system this can just mean the bundle is not compiled yet');
22
23
  document.head.appendChild(s);
24
+
25
+ const syncLang = () => {
26
+ try {
27
+ const a = document.querySelector('[lang]');
28
+ const v = a && a.getAttribute('lang');
29
+ // Ignore unresolved DC holes like {{ langAttr }}
30
+ if (v && v.indexOf('{{') === -1) document.documentElement.setAttribute('lang', v);
31
+ else if (!document.documentElement.getAttribute('lang')) document.documentElement.setAttribute('lang', 'en');
32
+ } catch (e) { /* authoring host may sandbox */ }
33
+ };
34
+ const ensureHead = () => {
35
+ try {
36
+ if (!document.title || !document.title.trim()) {
37
+ const src = document.documentElement.innerHTML;
38
+ const m = src.match(/@template\s+name="([^"]+)"/);
39
+ if (m) document.title = m[1] + ' · CyberSkill';
40
+ }
41
+ syncLang();
42
+ const obs = new MutationObserver(syncLang);
43
+ obs.observe(document.body || document.documentElement, {
44
+ attributes: true,
45
+ attributeFilter: ['lang'],
46
+ subtree: true,
47
+ });
48
+ } catch (e) { /* authoring host may sandbox */ }
49
+ };
50
+ if (document.readyState === 'loading') {
51
+ document.addEventListener('DOMContentLoaded', ensureHead);
52
+ } else {
53
+ ensureHead();
54
+ }
23
55
  })();
@@ -1070,16 +1070,15 @@
1070
1070
  }
1071
1071
 
1072
1072
  // src/cdn.ts
1073
- var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
1074
- var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
1075
- var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
1076
- var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
1077
- var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
1078
- var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
1079
- function cdnScriptFor(url, sri) {
1073
+ var REACT_LOCAL = "../../_vendor/react/react.production.min.js";
1074
+ var REACT_DOM_LOCAL = "../../_vendor/react/react-dom.production.min.js";
1075
+ var BABEL_LOCAL = "../../_vendor/babel/babel.min.js";
1076
+ // Product surfaces are offline-first (UX-026 / D4): no third-party script origins.
1077
+ // Host editors may still remap via window.__resources[localPath].
1078
+ function localScriptFor(path) {
1080
1079
  const res = window.__resources;
1081
- const v = res ? res[url] : void 0;
1082
- return typeof v === "string" && v ? { src: v } : { src: url, integrity: sri };
1080
+ const v = res ? res[path] : void 0;
1081
+ return typeof v === "string" && v ? v : path;
1083
1082
  }
1084
1083
 
1085
1084
  // src/external.ts
@@ -1106,16 +1105,12 @@
1106
1105
  function ensureBabel() {
1107
1106
  if (window.Babel) return Promise.resolve();
1108
1107
  if (babelLoading) return babelLoading;
1109
- const babel = cdnScriptFor(BABEL_URL, BABEL_SRI);
1108
+ const src = localScriptFor(BABEL_LOCAL);
1110
1109
  babelLoading = new Promise((res, rej) => {
1111
1110
  const s = document.createElement("script");
1112
- s.src = babel.src;
1113
- if (babel.integrity) {
1114
- s.integrity = babel.integrity;
1115
- s.crossOrigin = "anonymous";
1116
- }
1111
+ s.src = src;
1117
1112
  s.onload = () => res();
1118
- s.onerror = rej;
1113
+ s.onerror = () => rej(new Error("failed to load local Babel: " + src));
1119
1114
  document.head.appendChild(s);
1120
1115
  });
1121
1116
  return babelLoading;
@@ -1768,11 +1763,9 @@
1768
1763
  function loadReactUmd() {
1769
1764
  const w = window;
1770
1765
  if (w.React && w.ReactDOM) return Promise.resolve();
1771
- const react = cdnScriptFor(REACT_URL, REACT_SRI);
1772
- const reactDom = cdnScriptFor(REACT_DOM_URL, REACT_DOM_SRI);
1773
1766
  return Promise.all([
1774
- loadScript(react.src, react.integrity),
1775
- loadScript(reactDom.src, reactDom.integrity)
1767
+ loadScript(localScriptFor(REACT_LOCAL)),
1768
+ loadScript(localScriptFor(REACT_DOM_LOCAL))
1776
1769
  ]).then(() => void 0);
1777
1770
  }
1778
1771
  function init() {