@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
@@ -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 · Thỏa thuận thực tập — Internship Agreement · 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,87 +14,87 @@
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>· Thỏa thuận thực tậ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/HĐTT-CYBERSKILL</span>
21
+ <b style="color:var(--cs-color-brand-umber)">CyberSkill</b><span>· Thỏa thuận thực tậ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/HĐTT-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>
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 style="font-size:10.5px;margin-top:4px">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></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>
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 style="font-size:10.5px;margin-top:4px">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></div></div>
25
26
  </div>
26
27
  <div class="cs-avoid" style="text-align:center;margin-bottom:14px">
27
28
  <h1 style="font-size:24px;font-weight:800;color:var(--cs-color-brand-umber);letter-spacing:-0.01em;margin:0 0 3px;line-height:1.25">THỎA THUẬN THỰC TẬP</h1>
28
- <div style="font-size:14px;color:#3F4C55;font-style:italic">Internship Agreement</div>
29
- <div style="font-size:12px;margin-top:8px">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">Internship Agreement</div>
30
+ <div style="font-size:12px;margin-top:8px">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>
30
31
  <div style="color:var(--cs-accent);font-size:13px;letter-spacing:0.5em;margin-top:10px">◆ ◆ ◆</div>
31
32
  </div>
32
33
  <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Căn cứ Bộ luật Dân sự số 91/2015/QH13; căn cứ nhu cầu đào tạo và thực tập của hai Bên,</p>
33
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 6px">Pursuant to the Civil Code No. 91/2015/QH13 and the training and internship needs of the Parties,</p>
34
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Hôm nay, 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>, tại Thành phố Hồ Chí Minh, hai Bên gồm:</p>
35
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 12px">Today, <span style="background:#FDE68A;padding:0 3px">....</span> / <span style="background:#FDE68A;padding:0 3px">....</span> / <span style="background:#FDE68A;padding:0 3px">....</span>, in Ho Chi Minh City, the two Parties are:</p>
34
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 6px">Pursuant to the Civil Code No. 91/2015/QH13 and the training and internship needs of the Parties,</p>
35
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Hôm nay, 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>, tại Thành phố Hồ Chí Minh, hai Bên gồm:</p>
36
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 12px">Today, <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>, in Ho Chi Minh City, the two Parties are:</p>
36
37
 
37
38
  <div class="cs-avoid" style="margin-bottom:12px">
38
- <div style="font-weight:800;font-size:12.5px;color:var(--cs-color-brand-umber);margin-bottom:4px">BÊN A · ĐƠN VỊ TIẾP NHẬN THỰC TẬP <span style="font-weight:400;color:#3F4C55;font-style:italic">Party A · The Host Company</span></div>
39
+ <div style="font-weight:800;font-size:12.5px;color:var(--cs-color-brand-umber);margin-bottom:4px">BÊN A · ĐƠN VỊ TIẾP NHẬN THỰC TẬP <span style="font-weight:400;color:var(--cs-doc-slate);font-style:italic">Party A · The Host Company</span></div>
39
40
  <table style="width:100%;border-collapse:collapse;font-size:12.5px">
40
41
  <tbody>
41
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;width:190px;vertical-align:top">Công ty<div style="color:#3F4C55;font-style:italic;font-size:11px">Company</div></td><td style="padding:5px 10px">Công Ty Cổ Phần Tư Vấn Và Phát Triển Giải Pháp Phần Mềm CyberSkill</td></tr>
42
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Mã số thuế / DUNS<div style="color:#3F4C55;font-style:italic;font-size:11px">Tax code / DUNS</div></td><td style="padding:5px 10px">0316475200 / 673219568</td></tr>
43
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Địa chỉ<div style="color:#3F4C55;font-style:italic;font-size:11px">Address</div></td><td style="padding:5px 10px">Tầng 1, 207A Nguyễn Văn Thủ, Phường Tân Định, Thành phố Hồ Chí Minh</td></tr>
44
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Đại diện<div style="color:#3F4C55;font-style:italic;font-size:11px">Represented by</div></td><td style="padding:5px 10px">Ông Trịnh Thái Anh (Mr. Stephen) · Tổng Giám đốc / <span style="color:#3F4C55;font-style:italic">CEO</span></td></tr>
45
- <tr><td style="padding:5px 10px;vertical-align:top">Điện thoại · Email<div style="color:#3F4C55;font-style:italic;font-size:11px">Tel · Email</div></td><td style="padding:5px 10px">(+84) 906 878 091 · info@cyberskill.world</td></tr>
42
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;width:190px;vertical-align:top">Công ty<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Company</div></td><td style="padding:5px 10px">Công Ty Cổ Phần Tư Vấn Và Phát Triển Giải Pháp Phần Mềm CyberSkill</td></tr>
43
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Mã số thuế / DUNS<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Tax code / DUNS</div></td><td style="padding:5px 10px">0316475200 / 673219568</td></tr>
44
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Địa chỉ<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Address</div></td><td style="padding:5px 10px">Tầng 1, 207A Nguyễn Văn Thủ, Phường Tân Định, Thành phố Hồ Chí Minh</td></tr>
45
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Đại diện<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Represented by</div></td><td style="padding:5px 10px">Ông Trịnh Thái Anh (Mr. Stephen) · Tổng Giám đốc / <span style="color:var(--cs-doc-slate);font-style:italic">CEO</span></td></tr>
46
+ <tr><td style="padding:5px 10px;vertical-align:top">Điện thoại · Email<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Tel · Email</div></td><td style="padding:5px 10px">(+84) 906 878 091 · info@cyberskill.world</td></tr>
46
47
  </tbody>
47
48
  </table>
48
49
  </div>
49
50
  <div class="cs-avoid" style="margin-bottom:12px">
50
- <div style="font-weight:800;font-size:12.5px;color:var(--cs-color-brand-umber);margin-bottom:4px">BÊN B · THỰC TẬP SINH <span style="font-weight:400;color:#3F4C55;font-style:italic">Party B · The Intern</span></div>
51
+ <div style="font-weight:800;font-size:12.5px;color:var(--cs-color-brand-umber);margin-bottom:4px">BÊN B · THỰC TẬP SINH <span style="font-weight:400;color:var(--cs-doc-slate);font-style:italic">Party B · The Intern</span></div>
51
52
  <table style="width:100%;border-collapse:collapse;font-size:12.5px">
52
53
  <tbody>
53
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;width:190px;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>
54
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Ngày sinh<div style="color:#3F4C55;font-style:italic;font-size:11px">Date of birth</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">...... / ...... / ......</span></td></tr>
55
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Số CCCD · Ngày cấp / Nơi cấp<div style="color:#3F4C55;font-style:italic;font-size:11px">Citizen ID · Issued on/by</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">.................. · ...../...../..... - ..................</span></td></tr>
56
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Nơi cư trú<div style="color:#3F4C55;font-style:italic;font-size:11px">Place of residence</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">............................................................</span></td></tr>
57
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Điện thoại · Email<div style="color:#3F4C55;font-style:italic;font-size:11px">Tel · Email</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">.................. · ..................</span></td></tr>
58
- <tr><td style="padding:5px 10px;vertical-align:top">Trường / Chuyên ngành<div style="color:#3F4C55;font-style:italic;font-size:11px">School / Major</div></td><td style="padding:5px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
54
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;width:190px;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>
55
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Ngày sinh<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Date of birth</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">...... / ...... / ......</span></td></tr>
56
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Số CCCD · Ngày cấp / Nơi cấp<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Citizen ID · Issued on/by</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">.................. · ...../...../..... - ..................</span></td></tr>
57
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Nơi cư trú<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Place of residence</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">............................................................</span></td></tr>
58
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:5px 10px;vertical-align:top">Điện thoại · Email<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Tel · Email</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">.................. · ..................</span></td></tr>
59
+ <tr><td style="padding:5px 10px;vertical-align:top">Trường / Chuyên ngành<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">School / Major</div></td><td style="padding:5px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
59
60
  </tbody>
60
61
  </table>
61
62
  </div>
62
63
  <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Hai Bên thỏa thuận về việc thực tập với các điều khoản sau. <b>Thỏa thuận này không phải là hợp đồng lao động.</b></p>
63
- <p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 12px">The Parties agree on the internship on the following terms. <b>This is not a labor contract.</b></p>
64
+ <p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 12px">The Parties agree on the internship on the following terms. <b>This is not a labor contract.</b></p>
64
65
 
65
66
  <div style="display:grid;gap:12px">
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 1 · MỤC TIÊU VÀ NỘI DUNG THỰC TẬP <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 1 · Objectives and content</span></h2>
67
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thực tập sinh tham gia học hỏi và thực hiện công việc tại bộ phận <span style="background:#FDE68A;padding:0 3px">..................</span> dưới sự hướng dẫn của người phụ trách <span style="background:#FDE68A;padding:0 3px">..................</span> theo kế hoạch thực tập.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">The Intern learns and performs work in the <span style="background:#FDE68A;padding:0 3px">..................</span> unit under the guidance of mentor <span style="background:#FDE68A;padding:0 3px">..................</span> per the internship plan.</p></div>
67
+ <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 1 · MỤC TIÊU VÀ NỘI DUNG THỰC TẬP <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 1 · Objectives and content</span></h2>
68
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thực tập sinh tham gia học hỏi và thực hiện công việc tại bộ phận <span style="background:var(--cs-doc-fill);padding:0 3px">..................</span> dưới sự hướng dẫn của người phụ trách <span style="background:var(--cs-doc-fill);padding:0 3px">..................</span> theo kế hoạch thực tập.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">The Intern learns and performs work in the <span style="background:var(--cs-doc-fill);padding:0 3px">..................</span> unit under the guidance of mentor <span style="background:var(--cs-doc-fill);padding:0 3px">..................</span> per the internship plan.</p></div>
68
69
 
69
- <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 · THỜI GIAN THỰC TẬP <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 2 · Duration</span></h2>
70
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Từ ngày <span style="background:#FDE68A;padding:0 3px">...../...../......</span> đến ngày <span style="background:#FDE68A;padding:0 3px">...../...../......</span>; số buổi/giờ mỗi tuần: <span style="background:#FDE68A;padding:0 3px">..............</span>. Thời gian được sắp xếp linh hoạt phù hợp với việc học.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">From <span style="background:#FDE68A;padding:0 3px">...../...../......</span> to <span style="background:#FDE68A;padding:0 3px">...../...../......</span>; sessions/hours per week: <span style="background:#FDE68A;padding:0 3px">..............</span>. Arranged flexibly to fit the study.</p></div>
70
+ <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 · THỜI GIAN THỰC TẬP <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 2 · Duration</span></h2>
71
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Từ ngày <span style="background:var(--cs-doc-fill);padding:0 3px">...../...../......</span> đến ngày <span style="background:var(--cs-doc-fill);padding:0 3px">...../...../......</span>; số buổi/giờ mỗi tuần: <span style="background:var(--cs-doc-fill);padding:0 3px">..............</span>. Thời gian được sắp xếp linh hoạt phù hợp với việc học.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">From <span style="background:var(--cs-doc-fill);padding:0 3px">...../...../......</span> to <span style="background:var(--cs-doc-fill);padding:0 3px">...../...../......</span>; sessions/hours per week: <span style="background:var(--cs-doc-fill);padding:0 3px">..............</span>. Arranged flexibly to fit the study.</p></div>
71
72
 
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 3 · HỖ TRỢ THỰC TẬP <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 3 · Internship support</span></h2>
73
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Công ty hỗ trợ: <span style="background:#FDE68A;padding:0 3px">..................</span> VNĐ/tháng (nếu có) và các hỗ trợ khác. Khoản hỗ trợ này không phải tiền lương theo pháp luật lao động.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">The Company provides: VND <span style="background:#FDE68A;padding:0 3px">..................</span>/month (if any) and other support. This is not a wage under labor law.</p></div>
73
+ <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 · HỖ TRỢ THỰC TẬP <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 3 · Internship support</span></h2>
74
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Công ty hỗ trợ: <span style="background:var(--cs-doc-fill);padding:0 3px">..................</span> VNĐ/tháng (nếu có) và các hỗ trợ khác. Khoản hỗ trợ này không phải tiền lương theo pháp luật lao động.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">The Company provides: VND <span style="background:var(--cs-doc-fill);padding:0 3px">..................</span>/month (if any) and other support. This is not a wage under labor law.</p></div>
74
75
 
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 4 · QUYỀN VÀ NGHĨA VỤ CỦA THỰC TẬP SINH <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 4 · Rights and obligations of the Intern</span></h2>
76
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Hoàn thành nhiệm vụ được giao; tuân thủ Nội quy lao động và hướng dẫn an toàn; giữ bí mật thông tin; được hướng dẫn, đánh giá và được cấp giấy xác nhận thực tập.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">Complete assigned tasks; comply with the Internal Labor Regulations and safety guidance; keep information confidential; and receive mentoring, evaluation, and an internship certificate.</p></div>
76
+ <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 · QUYỀN VÀ NGHĨA VỤ CỦA THỰC TẬP SINH <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 4 · Rights and obligations of the Intern</span></h2>
77
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Hoàn thành nhiệm vụ được giao; tuân thủ Nội quy lao động và hướng dẫn an toàn; giữ bí mật thông tin; được hướng dẫn, đánh giá và được cấp giấy xác nhận thực tập.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">Complete assigned tasks; comply with the Internal Labor Regulations and safety guidance; keep information confidential; and receive mentoring, evaluation, and an internship certificate.</p></div>
77
78
 
78
- <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 · QUYỀN VÀ NGHĨA VỤ CỦA CÔNG TY <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 5 · Rights and obligations of the Company</span></h2>
79
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Bố trí người hướng dẫn và nội dung phù hợp; tạo điều kiện làm việc an toàn; đánh giá kết quả và cấp giấy xác nhận khi hoàn thành.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">Assign a mentor and suitable content; provide safe conditions; evaluate results and issue a certificate upon completion.</p></div>
79
+ <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 · QUYỀN VÀ NGHĨA VỤ CỦA CÔNG TY <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 5 · Rights and obligations of the Company</span></h2>
80
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Bố trí người hướng dẫn và nội dung phù hợp; tạo điều kiện làm việc an toàn; đánh giá kết quả và cấp giấy xác nhận khi hoàn thành.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">Assign a mentor and suitable content; provide safe conditions; evaluate results and issue a certificate upon completion.</p></div>
80
81
 
81
- <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 · BẢO MẬT, SỞ HỮU TRÍ TUỆ VÀ DỮ LIỆU CÁ NHÂN <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 6 · Confidentiality, IP and personal data</span></h2>
82
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thực tập sinh giữ bí mật thông tin của Công ty; kết quả công việc tạo ra trong quá trình thực tập thuộc về Công ty; tuân thủ quy định bảo vệ dữ liệu cá nhân.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">The Intern keeps the Company's information confidential; work product created during the internship belongs to the Company; and complies with personal data protection rules.</p></div>
82
+ <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 · BẢO MẬT, SỞ HỮU TRÍ TUỆ VÀ DỮ LIỆU CÁ NHÂN <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 6 · Confidentiality, IP and personal data</span></h2>
83
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thực tập sinh giữ bí mật thông tin của Công ty; kết quả công việc tạo ra trong quá trình thực tập thuộc về Công ty; tuân thủ quy định bảo vệ dữ liệu cá nhân.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">The Intern keeps the Company's information confidential; work product created during the internship belongs to the Company; and complies with personal data protection rules.</p></div>
83
84
 
84
- <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 · CHẤM DỨT VÀ ĐÁNH GIÁ <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 7 · Termination and evaluation</span></h2>
85
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Mỗi Bên có thể chấm dứt bằng thông báo trước <span style="background:#FDE68A;padding:0 3px">......</span> ngày. Khi hoàn thành, công ty đánh giá và cấp giấy xác nhận thực tập.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">Either Party may terminate on <span style="background:#FDE68A;padding:0 3px">......</span> days' notice. On completion, the Company evaluates and issues an internship certificate.</p></div>
85
+ <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 · CHẤM DỨT VÀ ĐÁNH GIÁ <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 7 · Termination and evaluation</span></h2>
86
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Mỗi Bên có thể chấm dứt bằng thông báo trước <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> ngày. Khi hoàn thành, công ty đánh giá và cấp giấy xác nhận thực tập.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">Either Party may terminate on <span style="background:var(--cs-doc-fill);padding:0 3px">......</span> days' notice. On completion, the Company evaluates and issues an internship certificate.</p></div>
86
87
 
87
- <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 8 · ĐIỀU KHOẢN CHUNG <span style="font-weight:400;font-size:11px;color:#3F4C55;font-style:italic">Article 8 · General provisions</span></h2>
88
- <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thỏa thuận được lập thành 02 bản có giá trị như nhau, mỗi Bên giữ 01 bản. Luật áp dụng: pháp luật Việt Nam.</p><p style="font-size:12px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">This Agreement is made in 02 copies of equal validity, one held by each Party. Governing law: the laws of Vietnam.</p></div>
88
+ <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 8 · ĐIỀU KHOẢN CHUNG <span style="font-weight:400;font-size:11px;color:var(--cs-doc-slate);font-style:italic">Article 8 · General provisions</span></h2>
89
+ <p style="font-size:13px;line-height:1.5;margin:0 0 1px">Thỏa thuận được lập thành 02 bản có giá trị như nhau, mỗi Bên giữ 01 bản. Luật áp dụng: pháp luật Việt Nam.</p><p style="font-size:12px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">This Agreement is made in 02 copies of equal validity, one held by each Party. Governing law: the laws of Vietnam.</p></div>
89
90
  </div>
90
91
 
91
92
  <div class="cs-avoid" style="display:grid;grid-template-columns:1fr 1fr;gap:44px;margin-top:20px">
92
- <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">THỰC TẬP SINH</div><div style="font-size:11px;color:#3F4C55;font-style:italic">The Intern</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:#3F4C55">Sign, full name</i>)</div><div style="height:64px"></div><div style="border-top:1px solid #1A1614;width:70%;margin:0 auto"></div></div>
93
- <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">ĐƠN VỊ TIẾP NHẬN</div><div style="font-size:11px;color:#3F4C55;font-style:italic">The Host Company</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:#3F4C55">Sign, full name</i>)</div><div style="height:64px"></div><div style="border-top:1px solid #1A1614;width:70%;margin:0 auto"></div></div>
93
+ <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">THỰC TẬP SINH</div><div style="font-size:11px;color:var(--cs-doc-slate);font-style:italic">The Intern</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên / <i style="color:var(--cs-doc-slate)">Sign, full name</i>)</div><div style="height:64px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:70%;margin:0 auto"></div></div>
94
+ <div style="text-align:center"><div style="font-weight:700;font-size:12.5px">ĐƠN VỊ TIẾP NHẬN</div><div style="font-size:11px;color:var(--cs-doc-slate);font-style:italic">The Host 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, full name</i>)</div><div style="height:64px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:70%;margin:0 auto"></div></div>
94
95
  </div>
95
96
 
96
- <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>
97
+ <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>
97
98
  </div>
98
99
  </div>
99
100
  </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 · Bản mô tả công việc — Job Description · 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,60 +14,60 @@
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>· Bản mô tả công việc</span><span style="margin-left:auto;font-family:var(--cs-font-family-mono)">Số/No. <span style="background:#FDE68A;padding:0 3px">.....</span>/2026/BMCV-CYBERSKILL</span>
21
+ <b style="color:var(--cs-color-brand-umber)">CyberSkill</b><span>· Bản mô tả công việc</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/BMCV-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>
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 style="font-size:10.5px;margin-top:4px">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></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>
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 style="font-size:10.5px;margin-top:4px">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></div></div>
25
26
  </div>
26
27
  <div class="cs-avoid" style="text-align:center;margin-bottom:18px">
27
28
  <h1 style="font-size:26px;font-weight:800;color:var(--cs-color-brand-umber);letter-spacing:-0.01em;margin:0 0 3px;line-height:1.25">BẢN MÔ TẢ CÔNG VIỆC</h1>
28
- <div style="font-size:14.5px;color:#3F4C55;font-style:italic">Job Description</div>
29
- <div style="font-size:12px;margin-top:8px">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:14.5px;color:var(--cs-doc-slate);font-style:italic">Job Description</div>
30
+ <div style="font-size:12px;margin-top:8px">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>
30
31
  <div style="color:var(--cs-accent);font-size:13px;letter-spacing:0.5em;margin-top:10px">◆ ◆ ◆</div>
31
32
  </div>
32
33
 
33
34
  <table class="cs-avoid" style="width:100%;border-collapse:collapse;font-size:12.5px;margin:0 0 18px">
34
35
  <tbody>
35
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;width:200px;vertical-align:top">Chức danh<div style="color:#3F4C55;font-style:italic;font-size:11px">Position</div></td><td style="padding:6px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
36
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Bộ phận<div style="color:#3F4C55;font-style:italic;font-size:11px">Department</div></td><td style="padding:6px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
37
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Cấp báo cáo<div style="color:#3F4C55;font-style:italic;font-size:11px">Reports to</div></td><td style="padding:6px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
38
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Cấp bậc<div style="color:#3F4C55;font-style:italic;font-size:11px">Level / Grade</div></td><td style="padding:6px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
39
- <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Địa điểm làm việc<div style="color:#3F4C55;font-style:italic;font-size:11px">Location</div></td><td style="padding:6px 10px"><span style="background:#FDE68A;padding:0 3px">..............................</span></td></tr>
40
- <tr><td style="padding:6px 10px;vertical-align:top">Loại hình làm việc<div style="color:#3F4C55;font-style:italic;font-size:11px">Employment type</div></td><td style="padding:6px 10px">☐ Toàn thời gian ☐ Bán thời gian ☐ Thực tập<div style="color:#3F4C55;font-style:italic;font-size:11px">☐ Full-time ☐ Part-time ☐ Intern</div></td></tr>
36
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;width:200px;vertical-align:top">Chức danh<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Position</div></td><td style="padding:6px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
37
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Bộ phận<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Department</div></td><td style="padding:6px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
38
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Cấp báo cáo<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Reports to</div></td><td style="padding:6px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
39
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Cấp bậc<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Level / Grade</div></td><td style="padding:6px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
40
+ <tr style="border-bottom:1px solid var(--cs-color-border-default)"><td style="padding:6px 10px;vertical-align:top">Địa điểm làm việc<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Location</div></td><td style="padding:6px 10px"><span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></td></tr>
41
+ <tr><td style="padding:6px 10px;vertical-align:top">Loại hình làm việc<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">Employment type</div></td><td style="padding:6px 10px">☐ Toàn thời gian ☐ Bán thời gian ☐ Thực tập<div style="color:var(--cs-doc-slate);font-style:italic;font-size:11px">☐ Full-time ☐ Part-time ☐ Intern</div></td></tr>
41
42
  </tbody>
42
43
  </table>
43
44
 
44
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">MỤC ĐÍCH CÔNG VIỆC <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Job purpose</span></h2>
45
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">MỤC ĐÍCH CÔNG VIỆC <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Job purpose</span></h2>
45
46
  <p style="font-size:14px;line-height:1.7;margin:0 0 16px;color:#6B5E52">..............................................................................................................<br>..............................................................................................................</p>
46
47
 
47
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">TRÁCH NHIỆM CHÍNH <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Key responsibilities</span></h2>
48
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">TRÁCH NHIỆM CHÍNH <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Key responsibilities</span></h2>
48
49
  <p style="font-size:14px;line-height:1.9;margin:0 0 16px;color:#6B5E52">a) ..............................................................................................................<br>b) ..............................................................................................................<br>c) ..............................................................................................................<br>d) ..............................................................................................................<br>e) ..............................................................................................................</p>
49
50
 
50
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">YÊU CẦU <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Requirements</span></h2>
51
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">YÊU CẦU <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Requirements</span></h2>
51
52
  <div style="margin:0 0 16px">
52
- <p style="font-size:14px;line-height:1.5;margin:0 0 1px">Học vấn: <span style="background:#FDE68A;padding:0 3px">..............................</span></p>
53
- <p style="font-size:12.5px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 6px">Education: <span style="background:#FDE68A;padding:0 3px">..............................</span></p>
54
- <p style="font-size:14px;line-height:1.5;margin:0 0 1px">Kinh nghiệm: <span style="background:#FDE68A;padding:0 3px">..............................</span></p>
55
- <p style="font-size:12.5px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0 0 6px">Experience: <span style="background:#FDE68A;padding:0 3px">..............................</span></p>
56
- <p style="font-size:14px;line-height:1.5;margin:0 0 1px">Kỹ năng: <span style="background:#FDE68A;padding:0 3px">..............................</span></p>
57
- <p style="font-size:12.5px;line-height:1.4;color:#3F4C55;font-style:italic;margin:0">Skills: <span style="background:#FDE68A;padding:0 3px">..............................</span></p>
53
+ <p style="font-size:14px;line-height:1.5;margin:0 0 1px">Học vấn: <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p>
54
+ <p style="font-size:12.5px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 6px">Education: <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p>
55
+ <p style="font-size:14px;line-height:1.5;margin:0 0 1px">Kinh nghiệm: <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p>
56
+ <p style="font-size:12.5px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0 0 6px">Experience: <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p>
57
+ <p style="font-size:14px;line-height:1.5;margin:0 0 1px">Kỹ năng: <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p>
58
+ <p style="font-size:12.5px;line-height:1.4;color:var(--cs-doc-slate);font-style:italic;margin:0">Skills: <span style="background:var(--cs-doc-fill);padding:0 3px">..............................</span></p>
58
59
  </div>
59
60
 
60
- <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">CHỈ SỐ ĐÁNH GIÁ (KPI) <span style="font-weight:400;font-size:11.5px;color:#3F4C55;font-style:italic">Performance indicators</span></h2>
61
+ <h2 class="cs-avoid" style="font-size:13px;font-weight:800;color:var(--cs-color-brand-umber);margin:0 0 6px">CHỈ SỐ ĐÁNH GIÁ (KPI) <span style="font-weight:400;font-size:11.5px;color:var(--cs-doc-slate);font-style:italic">Performance indicators</span></h2>
61
62
  <p style="font-size:14px;line-height:1.7;margin:0 0 18px;color:#6B5E52">..............................................................................................................<br>..............................................................................................................</p>
62
63
 
63
64
  <div class="cs-avoid" style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:24px;margin-top:6px">
64
- <div style="text-align:center"><div style="font-weight:700;font-size:12px">NGƯỜI LAO ĐỘNG</div><div style="font-size:10.5px;color:#3F4C55;font-style:italic">Employee</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:80%;margin:0 auto"></div></div>
65
- <div style="text-align:center"><div style="font-weight:700;font-size:12px">QUẢN LÝ TRỰC TIẾP</div><div style="font-size:10.5px;color:#3F4C55;font-style:italic">Line manager</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:80%;margin:0 auto"></div></div>
66
- <div style="text-align:center"><div style="font-weight:700;font-size:12px">PHÊ DUYỆT</div><div style="font-size:10.5px;color:#3F4C55;font-style:italic">Approved by</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên)</div><div style="height:60px"></div><div style="border-top:1px solid #1A1614;width:80%;margin:0 auto"></div></div>
65
+ <div style="text-align:center"><div style="font-weight:700;font-size:12px">NGƯỜI LAO ĐỘNG</div><div style="font-size:10.5px;color:var(--cs-doc-slate);font-style:italic">Employee</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:80%;margin:0 auto"></div></div>
66
+ <div style="text-align:center"><div style="font-weight:700;font-size:12px">QUẢN LÝ TRỰC TIẾP</div><div style="font-size:10.5px;color:var(--cs-doc-slate);font-style:italic">Line manager</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:80%;margin:0 auto"></div></div>
67
+ <div style="text-align:center"><div style="font-weight:700;font-size:12px">PHÊ DUYỆT</div><div style="font-size:10.5px;color:var(--cs-doc-slate);font-style:italic">Approved by</div><div style="font-size:10.5px;margin-top:1px">(Ký, ghi rõ họ tên)</div><div style="height:60px"></div><div style="border-top:1px solid var(--cs-doc-ink);width:80%;margin:0 auto"></div></div>
67
68
  </div>
68
69
 
69
- <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>
70
+ <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>
70
71
  </div>
71
72
  </div>
72
73
  </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
  })();