@cyberskill/design 1.1.0 → 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.
- package/DESIGN.md +25 -3
- package/README.md +7 -7
- package/SKILL.md +4 -4
- package/VERSION +1 -1
- package/_ds_bundle.js +819 -416
- package/_ds_manifest.json +1 -1
- package/_esm/cs.mjs +18 -4
- package/_esm/react.d.ts +2 -0
- package/_esm/react.mjs +1 -0
- package/base/a11y.css +18 -0
- package/base/ai.css +2 -2
- package/base/collections.css +8 -3
- package/base/components.css +11 -2
- package/base/controls.css +61 -48
- package/base/data.css +3 -3
- package/base/feedback.css +5 -0
- package/base/forms.css +9 -3
- package/base/glass.css +6 -0
- package/base/navigation.css +8 -2
- package/base/reset.css +1 -1
- package/base/responsive.css +25 -0
- package/base/shell.css +7 -1
- package/components/_i18n/i18n.js +13 -1
- package/components/_i18n/strings.js +52 -3
- package/components/ai/ConfidenceMeter.jsx +8 -6
- package/components/data/Watermark.jsx +11 -3
- package/components/datatable/DataGrid.jsx +10 -1
- package/components/dialog/Dialog.jsx +13 -45
- package/components/feedback/ProgressBar.jsx +4 -2
- package/components/forms/Cascader.jsx +69 -6
- package/components/forms/Editor.jsx +37 -2
- package/components/forms/FileUpload.jsx +22 -8
- package/components/forms/Switch.jsx +16 -2
- package/components/forms/TimePicker.jsx +3 -1
- package/components/icon/Icon.jsx +1 -0
- package/components/navigation/CommandPalette.jsx +22 -7
- package/components/navigation/Toolbar.jsx +2 -1
- package/components/overlays/AlertDialog.jsx +19 -49
- package/components/overlays/Drawer.jsx +24 -20
- package/components/overlays/OverlayManager.d.ts +40 -0
- package/components/overlays/OverlayManager.jsx +214 -0
- package/components/overlays/OverlayManager.prompt.md +12 -0
- package/components/overlays/Tour.jsx +14 -7
- package/dist/styles.min.css +2004 -0
- package/docs/benchmark-rubric.md +1 -1
- package/docs/ci-cd.md +3 -1
- package/docs/consuming.md +6 -6
- package/docs/contrast-report.md +1 -1
- package/docs/conventions.md +4 -4
- package/docs/decisions/container-query-migration.md +18 -0
- package/docs/decisions/overlay-manager-design.md +101 -0
- package/docs/decisions.md +5 -5
- package/docs/design-styles.md +1 -1
- package/docs/plans/cyberskill-design-system-audit-and-12-month-evolution-plan.md +1490 -0
- package/docs/quality-gates.md +21 -9
- package/docs/release-notes.md +10 -2
- package/docs/status/data/status-feed.json +1 -1
- package/docs/status/data/task/TASK-REL-002.js +1 -0
- package/docs/status/index.html +7 -6
- package/docs/status/status-legacy.html +13 -12
- package/docs/sync.md +1 -1
- package/docs/tasks/BACKLOG.md +1 -0
- package/docs/tasks/_state/commit-links.yaml +14 -0
- package/docs/tasks/release/TASK-REL-002-republish-1-1-1/spec.md +54 -0
- package/docs/vi/benchmark-rubric.md +1 -1
- package/docs/vi/ci-cd.md +3 -1
- package/docs/vi/consuming.md +6 -6
- package/docs/vi/contrast-report.md +1 -1
- package/docs/vi/conventions.md +2 -2
- package/docs/vi/decisions.md +5 -5
- package/docs/vi/quality-gates.md +21 -9
- package/docs/vi/release-notes.md +10 -2
- package/docs/vi/sync.md +1 -1
- package/guidelines/atomic-view.html +11 -7
- package/llms.txt +5 -5
- package/package.json +14 -6
- package/templates/_ds-base.canonical.js +55 -0
- package/templates/ai-cluster-demo.html +2 -2
- package/templates/app-shell/AppShell.dc.html +5 -3
- package/templates/app-shell/ds-base.js +33 -1
- package/templates/app-shell/support.js +13 -20
- package/templates/article/Article.dc.html +5 -1
- package/templates/article/ds-base.js +33 -1
- package/templates/article/support.js +13 -20
- package/templates/auth/Auth.dc.html +10 -5
- package/templates/auth/content-schema.json +12 -0
- package/templates/auth/ds-base.js +33 -1
- package/templates/auth/support.js +13 -20
- package/templates/bod-deck/BodDeck.dc.html +11 -10
- package/templates/bod-deck/ds-base.js +33 -1
- package/templates/bod-deck/support.js +13 -20
- package/templates/bod-investor-update/BodInvestorUpdate.dc.html +4 -3
- package/templates/bod-investor-update/ds-base.js +33 -1
- package/templates/bod-investor-update/support.js +13 -20
- package/templates/bod-memo/BodMemo.dc.html +6 -5
- package/templates/bod-memo/ds-base.js +33 -1
- package/templates/bod-memo/support.js +13 -20
- package/templates/bod-minutes/BodMinutes.dc.html +2 -1
- package/templates/bod-minutes/ds-base.js +33 -1
- package/templates/bod-minutes/support.js +13 -20
- package/templates/bod-report/BodReport.dc.html +3 -2
- package/templates/bod-report/ds-base.js +33 -1
- package/templates/bod-report/support.js +13 -20
- package/templates/bod-resolution/BodResolution.dc.html +5 -4
- package/templates/bod-resolution/ds-base.js +33 -1
- package/templates/bod-resolution/support.js +13 -20
- package/templates/culture-event-invite/CultureEventInvite.dc.html +3 -2
- package/templates/culture-event-invite/ds-base.js +33 -1
- package/templates/culture-event-invite/support.js +13 -20
- package/templates/dashboard/Dashboard.dc.html +7 -3
- package/templates/dashboard/ds-base.js +33 -1
- package/templates/dashboard/support.js +13 -20
- package/templates/delivery-change-note/DeliveryChangeNote.dc.html +2 -1
- package/templates/delivery-change-note/ds-base.js +33 -1
- package/templates/delivery-change-note/support.js +13 -20
- package/templates/delivery-kickoff/DeliveryKickoff.dc.html +3 -2
- package/templates/delivery-kickoff/ds-base.js +33 -1
- package/templates/delivery-kickoff/support.js +13 -20
- package/templates/delivery-qbr-deck/DeliveryQbrDeck.dc.html +6 -5
- package/templates/delivery-qbr-deck/ds-base.js +33 -1
- package/templates/delivery-qbr-deck/support.js +13 -20
- package/templates/delivery-runbook/DeliveryRunbook.dc.html +3 -2
- package/templates/delivery-runbook/ds-base.js +33 -1
- package/templates/delivery-runbook/support.js +13 -20
- package/templates/delivery-status-email/DeliveryStatusEmail.dc.html +3 -2
- package/templates/delivery-status-email/ds-base.js +33 -1
- package/templates/delivery-status-email/support.js +13 -20
- package/templates/doc-style-guide/DocStyleGuide.dc.html +67 -64
- package/templates/doc-style-guide/ds-base.js +33 -1
- package/templates/doc-style-guide/support.js +13 -20
- package/templates/doc-suite-index/DocSuiteIndex.dc.html +46 -45
- package/templates/doc-suite-index/ds-base.js +33 -1
- package/templates/doc-suite-index/support.js +13 -20
- package/templates/doc-templates/DocTemplates.dc.html +42 -41
- package/templates/doc-templates/ds-base.js +33 -1
- package/templates/doc-templates/support.js +13 -20
- package/templates/email/Email.dc.html +3 -2
- package/templates/email/ds-base.js +33 -1
- package/templates/email/support.js +13 -20
- package/templates/finance-dunning-email/FinanceDunningEmail.dc.html +4 -3
- package/templates/finance-dunning-email/ds-base.js +33 -1
- package/templates/finance-dunning-email/support.js +13 -20
- package/templates/finance-expense-report/FinanceExpenseReport.dc.html +4 -3
- package/templates/finance-expense-report/ds-base.js +33 -1
- package/templates/finance-expense-report/support.js +13 -20
- package/templates/finance-invoice/FinanceInvoice.dc.html +4 -3
- package/templates/finance-invoice/ds-base.js +33 -1
- package/templates/finance-invoice/support.js +13 -20
- package/templates/finance-quote/FinanceQuote.dc.html +4 -3
- package/templates/finance-quote/ds-base.js +33 -1
- package/templates/finance-quote/support.js +13 -20
- package/templates/hr-announcement/HrAnnouncement.dc.html +5 -4
- package/templates/hr-announcement/ds-base.js +33 -1
- package/templates/hr-announcement/support.js +13 -20
- package/templates/hr-interview-kit/HrInterviewKit.dc.html +4 -3
- package/templates/hr-interview-kit/ds-base.js +33 -1
- package/templates/hr-interview-kit/support.js +13 -20
- package/templates/hr-offboarding/HrOffboarding.dc.html +2 -1
- package/templates/hr-offboarding/ds-base.js +33 -1
- package/templates/hr-offboarding/support.js +13 -20
- package/templates/hr-performance-review/HrPerformanceReview.dc.html +2 -1
- package/templates/hr-performance-review/ds-base.js +33 -1
- package/templates/hr-performance-review/support.js +13 -20
- package/templates/hr-pip/HrPip.dc.html +2 -1
- package/templates/hr-pip/ds-base.js +33 -1
- package/templates/hr-pip/support.js +13 -20
- package/templates/kitchen-sink.html +9 -4
- package/templates/legal-msa/LegalMsa.dc.html +2 -1
- package/templates/legal-msa/ds-base.js +33 -1
- package/templates/legal-msa/support.js +13 -20
- package/templates/legal-sow/LegalSow.dc.html +2 -1
- package/templates/legal-sow/ds-base.js +33 -1
- package/templates/legal-sow/support.js +13 -20
- package/templates/marketing-campaign-brief/MarketingCampaignBrief.dc.html +3 -2
- package/templates/marketing-campaign-brief/ds-base.js +33 -1
- package/templates/marketing-campaign-brief/support.js +13 -20
- package/templates/marketing-case-study/MarketingCaseStudy.dc.html +5 -4
- package/templates/marketing-case-study/ds-base.js +33 -1
- package/templates/marketing-case-study/support.js +13 -20
- package/templates/marketing-launch/MarketingLaunch.dc.html +6 -5
- package/templates/marketing-launch/ds-base.js +33 -1
- package/templates/marketing-launch/support.js +13 -20
- package/templates/marketing-newsletter/MarketingNewsletter.dc.html +13 -12
- package/templates/marketing-newsletter/ds-base.js +33 -1
- package/templates/marketing-newsletter/support.js +13 -20
- package/templates/marketing-page/MarketingPage.dc.html +17 -12
- package/templates/marketing-page/ds-base.js +33 -1
- package/templates/marketing-page/support.js +13 -20
- package/templates/marketing-press-release/MarketingPressRelease.dc.html +2 -1
- package/templates/marketing-press-release/ds-base.js +33 -1
- package/templates/marketing-press-release/support.js +13 -20
- package/templates/marketing-social-kit/MarketingSocialKit.dc.html +5 -4
- package/templates/marketing-social-kit/ds-base.js +33 -1
- package/templates/marketing-social-kit/support.js +13 -20
- package/templates/sales-one-pager/SalesOnePager.dc.html +5 -4
- package/templates/sales-one-pager/ds-base.js +33 -1
- package/templates/sales-one-pager/support.js +13 -20
- package/templates/sales-proposal-deck/SalesProposalDeck.dc.html +7 -6
- package/templates/sales-proposal-deck/ds-base.js +33 -1
- package/templates/sales-proposal-deck/support.js +13 -20
- package/templates/settings/Settings.dc.html +5 -1
- package/templates/settings/ds-base.js +33 -1
- package/templates/settings/support.js +13 -20
- package/templates/slide-deck/SlideDeck.dc.html +5 -4
- package/templates/slide-deck/ds-base.js +33 -1
- package/templates/slide-deck/support.js +13 -20
- package/templates/team-meeting-agenda/TeamMeetingAgenda.dc.html +2 -1
- package/templates/team-meeting-agenda/ds-base.js +33 -1
- package/templates/team-meeting-agenda/support.js +13 -20
- package/templates/tech-incident-report/TechIncidentReport.dc.html +3 -2
- package/templates/tech-incident-report/ds-base.js +33 -1
- package/templates/tech-incident-report/support.js +13 -20
- package/templates/tech-release-notes/TechReleaseNotes.dc.html +6 -5
- package/templates/tech-release-notes/ds-base.js +33 -1
- package/templates/tech-release-notes/support.js +13 -20
- package/templates/tech-retro/TechRetro.dc.html +4 -3
- package/templates/tech-retro/ds-base.js +33 -1
- package/templates/tech-retro/support.js +13 -20
- package/templates/tech-rfc/TechRfc.dc.html +3 -2
- package/templates/tech-rfc/ds-base.js +33 -1
- package/templates/tech-rfc/support.js +13 -20
- package/templates/vn-appointment-transfer/VnAppointmentTransfer.dc.html +36 -35
- package/templates/vn-appointment-transfer/ds-base.js +33 -1
- package/templates/vn-appointment-transfer/support.js +13 -20
- package/templates/vn-certificate-of-employment/VnCertificateOfEmployment.dc.html +27 -26
- package/templates/vn-certificate-of-employment/ds-base.js +33 -1
- package/templates/vn-certificate-of-employment/support.js +13 -20
- package/templates/vn-code-of-conduct/VnCodeOfConduct.dc.html +44 -43
- package/templates/vn-code-of-conduct/ds-base.js +33 -1
- package/templates/vn-code-of-conduct/support.js +13 -20
- package/templates/vn-compensation-regulation/VnCompensationRegulation.dc.html +53 -52
- package/templates/vn-compensation-regulation/ds-base.js +33 -1
- package/templates/vn-compensation-regulation/support.js +13 -20
- package/templates/vn-contract-amendment/VnContractAmendment.dc.html +41 -40
- package/templates/vn-contract-amendment/ds-base.js +33 -1
- package/templates/vn-contract-amendment/support.js +13 -20
- package/templates/vn-contractor-agreement/VnContractorAgreement.dc.html +50 -49
- package/templates/vn-contractor-agreement/ds-base.js +33 -1
- package/templates/vn-contractor-agreement/support.js +13 -20
- package/templates/vn-data-protection-policy/VnDataProtectionPolicy.dc.html +54 -53
- package/templates/vn-data-protection-policy/ds-base.js +33 -1
- package/templates/vn-data-protection-policy/support.js +13 -20
- package/templates/vn-disciplinary-case-file/VnDisciplinaryCaseFile.dc.html +72 -71
- package/templates/vn-disciplinary-case-file/ds-base.js +33 -1
- package/templates/vn-disciplinary-case-file/support.js +13 -20
- package/templates/vn-disciplinary-schedule/VnDisciplinarySchedule.dc.html +21 -20
- package/templates/vn-disciplinary-schedule/ds-base.js +33 -1
- package/templates/vn-disciplinary-schedule/support.js +13 -20
- package/templates/vn-employee-request/VnEmployeeRequest.dc.html +54 -53
- package/templates/vn-employee-request/ds-base.js +33 -1
- package/templates/vn-employee-request/support.js +13 -20
- package/templates/vn-exit-handover/VnExitHandover.dc.html +122 -121
- package/templates/vn-exit-handover/ds-base.js +33 -1
- package/templates/vn-exit-handover/support.js +13 -20
- package/templates/vn-foreign-employee-pack/VnForeignEmployeePack.dc.html +31 -30
- package/templates/vn-foreign-employee-pack/ds-base.js +33 -1
- package/templates/vn-foreign-employee-pack/support.js +13 -20
- package/templates/vn-grassroots-democracy/VnGrassrootsDemocracy.dc.html +54 -53
- package/templates/vn-grassroots-democracy/ds-base.js +33 -1
- package/templates/vn-grassroots-democracy/support.js +13 -20
- package/templates/vn-infosec-policy/VnInfosecPolicy.dc.html +50 -49
- package/templates/vn-infosec-policy/ds-base.js +33 -1
- package/templates/vn-infosec-policy/support.js +13 -20
- package/templates/vn-internal-labor-regulations/VnInternalLaborRegulations.dc.html +84 -83
- package/templates/vn-internal-labor-regulations/ds-base.js +33 -1
- package/templates/vn-internal-labor-regulations/support.js +13 -20
- package/templates/vn-internship-agreement/VnInternshipAgreement.dc.html +44 -43
- package/templates/vn-internship-agreement/ds-base.js +33 -1
- package/templates/vn-internship-agreement/support.js +13 -20
- package/templates/vn-job-description/VnJobDescription.dc.html +28 -27
- package/templates/vn-job-description/ds-base.js +33 -1
- package/templates/vn-job-description/support.js +13 -20
- package/templates/vn-labor-contract/VnLaborContract.dc.html +109 -108
- package/templates/vn-labor-contract/ds-base.js +33 -1
- package/templates/vn-labor-contract/support.js +13 -20
- package/templates/vn-labour-management-book/VnLabourManagementBook.dc.html +32 -31
- package/templates/vn-labour-management-book/ds-base.js +33 -1
- package/templates/vn-labour-management-book/support.js +13 -20
- package/templates/vn-mutual-nda/VnMutualNda.dc.html +45 -44
- package/templates/vn-mutual-nda/ds-base.js +33 -1
- package/templates/vn-mutual-nda/support.js +13 -20
- package/templates/vn-ndnca-ip/VnNdncaIp.dc.html +73 -72
- package/templates/vn-ndnca-ip/ds-base.js +33 -1
- package/templates/vn-ndnca-ip/support.js +13 -20
- package/templates/vn-offer-letter/VnOfferLetter.dc.html +32 -31
- package/templates/vn-offer-letter/ds-base.js +33 -1
- package/templates/vn-offer-letter/support.js +13 -20
- package/templates/vn-onboarding-checklist/VnOnboardingChecklist.dc.html +16 -15
- package/templates/vn-onboarding-checklist/ds-base.js +33 -1
- package/templates/vn-onboarding-checklist/support.js +13 -20
- package/templates/vn-pdpl-consent/VnPdplConsent.dc.html +43 -42
- package/templates/vn-pdpl-consent/ds-base.js +33 -1
- package/templates/vn-pdpl-consent/support.js +13 -20
- package/templates/vn-performance-evaluation-regulation/VnPerformanceEvaluationRegulation.dc.html +65 -64
- package/templates/vn-performance-evaluation-regulation/ds-base.js +33 -1
- package/templates/vn-performance-evaluation-regulation/support.js +13 -20
- package/templates/vn-performance-review-form/VnPerformanceReviewForm.dc.html +49 -48
- package/templates/vn-performance-review-form/ds-base.js +33 -1
- package/templates/vn-performance-review-form/support.js +13 -20
- package/templates/vn-phantom-stock/VnPhantomStock.dc.html +41 -40
- package/templates/vn-phantom-stock/ds-base.js +33 -1
- package/templates/vn-phantom-stock/support.js +13 -20
- package/templates/vn-probation-contract/VnProbationContract.dc.html +56 -55
- package/templates/vn-probation-contract/ds-base.js +33 -1
- package/templates/vn-probation-contract/support.js +13 -20
- package/templates/vn-receipt-acknowledgement/VnReceiptAcknowledgement.dc.html +28 -27
- package/templates/vn-receipt-acknowledgement/ds-base.js +33 -1
- package/templates/vn-receipt-acknowledgement/support.js +13 -20
- package/templates/vn-remote-work-policy/VnRemoteWorkPolicy.dc.html +44 -43
- package/templates/vn-remote-work-policy/ds-base.js +33 -1
- package/templates/vn-remote-work-policy/support.js +13 -20
- package/templates/vn-resignation-letter/VnResignationLetter.dc.html +20 -19
- package/templates/vn-resignation-letter/ds-base.js +33 -1
- package/templates/vn-resignation-letter/support.js +13 -20
- package/templates/vn-salary-scale/VnSalaryScale.dc.html +39 -38
- package/templates/vn-salary-scale/ds-base.js +33 -1
- package/templates/vn-salary-scale/support.js +13 -20
- package/templates/vn-sow-appendix/VnSowAppendix.dc.html +21 -20
- package/templates/vn-sow-appendix/ds-base.js +33 -1
- package/templates/vn-sow-appendix/support.js +13 -20
- package/templates/vn-termination-decision/VnTerminationDecision.dc.html +25 -24
- package/templates/vn-termination-decision/ds-base.js +33 -1
- package/templates/vn-termination-decision/support.js +13 -20
- package/templates/vn-total-rewards-appendix/VnTotalRewardsAppendix.dc.html +63 -62
- package/templates/vn-total-rewards-appendix/ds-base.js +33 -1
- package/templates/vn-total-rewards-appendix/support.js +13 -20
- package/templates/vn-training-commitment/VnTrainingCommitment.dc.html +39 -38
- package/templates/vn-training-commitment/ds-base.js +33 -1
- package/templates/vn-training-commitment/support.js +13 -20
- package/templates/vn-travel-expense-policy/VnTravelExpensePolicy.dc.html +50 -49
- package/templates/vn-travel-expense-policy/ds-base.js +33 -1
- package/templates/vn-travel-expense-policy/support.js +13 -20
- package/tokens/colors.css +19 -1
- package/tokens/component-tokens.css +1 -0
- package/tokens/elements.css +35 -2
- package/tokens/elevation.css +8 -2
- package/tokens/native/CSTokens.kt +35 -1
- package/tokens/native/CSTokens.swift +35 -1
- package/tokens/native/cs_tokens.dart +35 -1
- package/tokens/provenance.json +12 -12
- package/tokens/spacing.css +2 -0
- package/tokens/tokens.dtcg.json +111 -3
- package/tokens/tokens.js +46 -6
- package/tokens/tokens.json +45 -5
- package/tokens/typography.css +2 -0
- package/ui_kits/deck/index.html +4 -0
- package/ui_kits/status-hub/StatusHub.jsx +30 -4
- package/ui_kits/status-hub/index.html +3 -3
- package/ui_kits/status-hub/login.html +4 -0
- package/ui_kits/status-hub/project.html +4 -0
- package/ui_kits/status-hub/settings.html +35 -13
- package/ui_kits/status-hub/status.css +5 -1
- package/ui_kits/website/Website.jsx +25 -3
- package/ui_kits/website/careers.html +4 -0
- package/ui_kits/website/chat.html +5 -3
- package/ui_kits/website/index.html +3 -3
- package/ui_kits/website/site.css +2 -2
- package/ui_kits/website/work.html +4 -0
package/_esm/cs.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v1.
|
|
1
|
+
// CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v1.2.0).
|
|
2
2
|
// No build step: import this module directly in a browser. It ensures React 19.2.8 via umd-react
|
|
3
3
|
// (official React 19 dropped UMD; pinned + SRI; skipped when window.React already exists), side-loads
|
|
4
4
|
// ../_ds_bundle.js once, resolves the compiler-assigned namespace BY PREFIX (never a hardcoded suffix),
|
|
@@ -12,14 +12,27 @@ async function ensureScript(src, integrity){
|
|
|
12
12
|
if (integrity) { s.integrity = integrity; s.crossOrigin = "anonymous"; }
|
|
13
13
|
s.onload = res; s.onerror = () => rej(new Error("cs.js: failed to load " + href)); document.head.appendChild(s); });
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
async function ensureReact() {
|
|
16
|
+
const localReact = new URL("../_vendor/react/react.production.min.js", import.meta.url).href;
|
|
17
|
+
const localDom = new URL("../_vendor/react/react-dom.production.min.js", import.meta.url).href;
|
|
18
|
+
const cdnReact = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
19
|
+
const cdnDom = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
20
|
+
const sriReact = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
21
|
+
const sriDom = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
22
|
+
if (!g.React) {
|
|
23
|
+
try { await ensureScript(localReact); } catch { await ensureScript(cdnReact, sriReact); }
|
|
24
|
+
}
|
|
25
|
+
if (!g.ReactDOM) {
|
|
26
|
+
try { await ensureScript(localDom); } catch { await ensureScript(cdnDom, sriDom); }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
await ensureReact();
|
|
17
30
|
const found = () => Object.keys(g).find(k => /^CyberSkillDesignSystem_/.test(k));
|
|
18
31
|
if (!found()) await ensureScript("../_ds_bundle.js");
|
|
19
32
|
export const CS = g[found()];
|
|
20
33
|
if (!CS) throw new Error("cs.js: bundle loaded but no CyberSkillDesignSystem_* namespace found");
|
|
21
34
|
export default CS;
|
|
22
|
-
export const VERSION = "1.
|
|
35
|
+
export const VERSION = "1.2.0";
|
|
23
36
|
export const AIDisclosureBadge = CS.AIDisclosureBadge;
|
|
24
37
|
export const Accordion = CS.Accordion;
|
|
25
38
|
export const Alert = CS.Alert;
|
|
@@ -95,6 +108,7 @@ export const NativeSelect = CS.NativeSelect;
|
|
|
95
108
|
export const NavItem = CS.NavItem;
|
|
96
109
|
export const NavigationMenu = CS.NavigationMenu;
|
|
97
110
|
export const NumberField = CS.NumberField;
|
|
111
|
+
export const OverlayProvider = CS.OverlayProvider;
|
|
98
112
|
export const Pagination = CS.Pagination;
|
|
99
113
|
export const Popconfirm = CS.Popconfirm;
|
|
100
114
|
export const Popover = CS.Popover;
|
package/_esm/react.d.ts
CHANGED
|
@@ -206,6 +206,8 @@ export { Drawer } from "../components/overlays/Drawer";
|
|
|
206
206
|
export type * from "../components/overlays/Drawer";
|
|
207
207
|
export { HoverCard } from "../components/overlays/HoverCard";
|
|
208
208
|
export type * from "../components/overlays/HoverCard";
|
|
209
|
+
export { OverlayProvider } from "../components/overlays/OverlayManager";
|
|
210
|
+
export type * from "../components/overlays/OverlayManager";
|
|
209
211
|
export { Popconfirm } from "../components/overlays/Popconfirm";
|
|
210
212
|
export type * from "../components/overlays/Popconfirm";
|
|
211
213
|
export { Popover } from "../components/overlays/Popover";
|
package/_esm/react.mjs
CHANGED
|
@@ -108,6 +108,7 @@ export { AlertDialog } from "../components/overlays/AlertDialog.jsx";
|
|
|
108
108
|
export { ContextMenu } from "../components/overlays/ContextMenu.jsx";
|
|
109
109
|
export { Drawer } from "../components/overlays/Drawer.jsx";
|
|
110
110
|
export { HoverCard } from "../components/overlays/HoverCard.jsx";
|
|
111
|
+
export { OverlayProvider } from "../components/overlays/OverlayManager.jsx";
|
|
111
112
|
export { Popconfirm } from "../components/overlays/Popconfirm.jsx";
|
|
112
113
|
export { Popover } from "../components/overlays/Popover.jsx";
|
|
113
114
|
export { Tour } from "../components/overlays/Tour.jsx";
|
package/base/a11y.css
CHANGED
|
@@ -9,6 +9,19 @@
|
|
|
9
9
|
* Focus rings are NOT here — they are already systematic (global :focus-visible in
|
|
10
10
|
* reset.css + per-component 3px ochre rings in components/forms/navigation/controls). */
|
|
11
11
|
|
|
12
|
+
/* Visually hidden but available to AT / file inputs (FileUpload keyboard path). */
|
|
13
|
+
.cs-sr-only {
|
|
14
|
+
position: absolute !important;
|
|
15
|
+
inline-size: 1px !important;
|
|
16
|
+
block-size: 1px !important;
|
|
17
|
+
padding: 0 !important;
|
|
18
|
+
margin: -1px !important;
|
|
19
|
+
overflow: hidden !important;
|
|
20
|
+
clip: rect(0, 0, 0, 0) !important;
|
|
21
|
+
white-space: nowrap !important;
|
|
22
|
+
border: 0 !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
12
25
|
/* ---- 1. Touch targets: 44px minimum on coarse pointers ---- */
|
|
13
26
|
@media (pointer: coarse) {
|
|
14
27
|
/* Primary navigation & action targets → full 44px */
|
|
@@ -55,3 +68,8 @@
|
|
|
55
68
|
:root { --cs-color-border-default: #9a8060; --cs-color-text-muted: #5a4638; }
|
|
56
69
|
[data-theme="dark"] { --cs-color-border-default: #7a6450; --cs-color-text-muted: #d8c9b6; }
|
|
57
70
|
}
|
|
71
|
+
|
|
72
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
73
|
+
@media (prefers-color-scheme: dark) {
|
|
74
|
+
[data-theme="system"] { --cs-color-border-default: #7a6450; --cs-color-text-muted: #d8c9b6; }
|
|
75
|
+
}
|
package/base/ai.css
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
.cs-chat-msg--user { flex-direction: row-reverse; }
|
|
18
18
|
.cs-chat-msg__avatar { flex: none; inline-size: 32px; block-size: 32px; border-radius: 50%; display: grid; place-items: center; overflow: hidden; }
|
|
19
19
|
.cs-chat-msg--lumi .cs-chat-msg__avatar { background: var(--cs-color-brand-ochre); color: var(--cs-color-brand-umber); }
|
|
20
|
-
.cs-chat-msg--user .cs-chat-msg__avatar { background: var(--cs-color-brand-umber); color: #fff; font-weight: 700; font-size:
|
|
20
|
+
.cs-chat-msg--user .cs-chat-msg__avatar { background: var(--cs-color-brand-umber); color: #fff; font-weight: 700; font-size: var(--cs-font-size-sm); font-family: var(--cs-font-family-ui); }
|
|
21
21
|
.cs-chat-msg__avatar img { inline-size: 100%; block-size: 100%; object-fit: cover; }
|
|
22
22
|
.cs-chat-msg__col { display: grid; gap: 3px; max-inline-size: 80%; }
|
|
23
23
|
.cs-chat-msg--user .cs-chat-msg__col { justify-items: end; }
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
.cs-citations__label { font-size: var(--cs-font-size-xs); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-muted); }
|
|
55
55
|
.cs-citation { display: flex; align-items: flex-start; gap: 9px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); text-decoration: none; }
|
|
56
56
|
a.cs-citation:hover .cs-citation__text { color: var(--cs-color-text-accent); }
|
|
57
|
-
.cs-citation__num { flex: none; inline-size: 20px; block-size: 20px; border-radius: 6px; background: color-mix(in oklab, var(--cs-color-semantic-info) 14%, var(--cs-color-surface-panel)); color: var(--cs-color-semantic-info); font-family: var(--cs-font-family-mono); font-size:
|
|
57
|
+
.cs-citation__num { flex: none; inline-size: 20px; block-size: 20px; border-radius: 6px; background: color-mix(in oklab, var(--cs-color-semantic-info) 14%, var(--cs-color-surface-panel)); color: var(--cs-color-semantic-info); font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-2xs); font-weight: 700; display: grid; place-items: center; }
|
|
58
58
|
.cs-citation__text { line-height: 1.4; }
|
|
59
59
|
.cs-citation__src { color: var(--cs-color-text-muted); font-size: var(--cs-font-size-xs); }
|
|
60
60
|
|
package/base/collections.css
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
.cs-item--interactive { cursor: pointer; font: inherit; inline-size: 100%; }
|
|
23
23
|
button.cs-item--interactive { border: 1px solid transparent; background: var(--cs-color-surface-panel); }
|
|
24
24
|
.cs-item--interactive:hover { background: var(--cs-color-surface-raised); border-color: var(--cs-color-border-default); }
|
|
25
|
-
.cs-item--interactive:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; }
|
|
25
|
+
.cs-item--interactive:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 2px; }
|
|
26
26
|
.cs-item.is-selected { border-color: var(--cs-color-brand-ochre); background: var(--cs-accent-tint, var(--cs-color-surface-raised)); }
|
|
27
27
|
.cs-item.is-disabled, .cs-item[aria-disabled="true"] { opacity: 0.55; cursor: not-allowed; pointer-events: none; }
|
|
28
28
|
.cs-item__leading { flex: none; display: grid; place-items: center; color: var(--cs-color-text-accent); }
|
|
@@ -40,7 +40,7 @@ button.cs-item--interactive { border: 1px solid transparent; background: var(--c
|
|
|
40
40
|
.cs-timeline { display: grid; }
|
|
41
41
|
.cs-timeline__item { display: grid; grid-template-columns: 26px 1fr; gap: 14px; padding-block-end: 20px; position: relative; }
|
|
42
42
|
.cs-timeline__item:not(:last-child)::before { content: ""; position: absolute; inset-block: 26px 0; inset-inline-start: 12px; inline-size: 2px; background: var(--cs-color-border-default); }
|
|
43
|
-
.cs-timeline__marker { inline-size: 26px; block-size: 26px; border-radius: 50%; display: grid; place-items: center; background: var(--cs-color-semantic-success); color: #fff; font-size:
|
|
43
|
+
.cs-timeline__marker { inline-size: 26px; block-size: 26px; border-radius: 50%; display: grid; place-items: center; background: var(--cs-color-semantic-success); color: var(--cs-color-semantic-success-fg, #fff); font-size: var(--cs-font-size-xs); font-weight: 700; z-index: 1; }
|
|
44
44
|
.cs-timeline__item--now .cs-timeline__marker { background: var(--cs-color-brand-ochre); color: var(--cs-color-brand-umber); }
|
|
45
45
|
.cs-timeline__item--todo .cs-timeline__marker { background: var(--cs-color-surface-raised); color: var(--cs-color-text-muted); border: 1px solid var(--cs-color-border-default); }
|
|
46
46
|
.cs-timeline__title { font-weight: 700; margin: 2px 0 2px; }
|
|
@@ -72,7 +72,7 @@ button.cs-item--interactive { border: 1px solid transparent; background: var(--c
|
|
|
72
72
|
.cs-code__bar { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; border-block-end: 1px solid #4a3a2c; font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-xs); color: #c9b7a3; }
|
|
73
73
|
.cs-code__copy { border: 0; background: transparent; color: #c9b7a3; cursor: pointer; font: inherit; font-family: var(--cs-font-family-ui); font-weight: 600; }
|
|
74
74
|
.cs-code__copy:hover { color: var(--cs-color-brand-ochre); }
|
|
75
|
-
.cs-code pre { margin: 0; padding: 14px 16px; overflow: auto; font-family: var(--cs-font-family-mono); font-size:
|
|
75
|
+
.cs-code pre { margin: 0; padding: 14px 16px; overflow: auto; font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-sm); line-height: 1.6; }
|
|
76
76
|
.cs-code code { font-family: inherit; }
|
|
77
77
|
|
|
78
78
|
/* EmptyState */
|
|
@@ -82,3 +82,8 @@ button.cs-item--interactive { border: 1px solid transparent; background: var(--c
|
|
|
82
82
|
.cs-empty__title { font-size: var(--cs-text-h4); font-weight: 700; }
|
|
83
83
|
.cs-empty__body { color: var(--cs-color-text-muted); max-inline-size: 380px; }
|
|
84
84
|
.cs-empty__actions { margin-block-start: 12px; display: flex; gap: 10px; }
|
|
85
|
+
|
|
86
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
87
|
+
@media (prefers-color-scheme: dark) {
|
|
88
|
+
[data-theme="system"] .cs-empty__icon { color: var(--cs-color-brand-ochre); }
|
|
89
|
+
}
|
package/base/components.css
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
.cs-button:focus-visible,
|
|
32
32
|
.cs-field__control:focus-visible,
|
|
33
33
|
.cs-ai-disclosure__badge:focus-visible {
|
|
34
|
-
outline: 3px solid var(--cs-color-accent-ochre, #f4ba17);
|
|
34
|
+
outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre, #f4ba17);
|
|
35
35
|
outline-offset: 2px;
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
.cs-field__error { color: var(--cs-color-semantic-danger, #b42318); font-size: 0.875rem; }
|
|
131
131
|
|
|
132
132
|
/* ---- Dialog ---- */
|
|
133
|
-
.cs-dialog-layer { inset: 0; position: fixed; z-index:
|
|
133
|
+
.cs-dialog-layer { inset: 0; position: fixed; z-index: var(--cs-depth-modal); }
|
|
134
134
|
.cs-dialog__overlay { background: rgba(31, 19, 11, 0.42); inset: 0; position: absolute; }
|
|
135
135
|
.cs-dialog {
|
|
136
136
|
background: var(--cs-color-surface-panel, #ffffff);
|
|
@@ -213,3 +213,12 @@
|
|
|
213
213
|
.cs-ai-disclosure, .cs-review-gate, .cs-logo {
|
|
214
214
|
font-family: var(--cs-font-family-ui, ui-sans-serif, system-ui);
|
|
215
215
|
}
|
|
216
|
+
|
|
217
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
218
|
+
@media (prefers-color-scheme: dark) {
|
|
219
|
+
/* Dark theme: umber text/border on the low-emphasis buttons is invisible on dark surfaces —
|
|
220
|
+
remap so secondary reads as an ochre outline and tertiary/ghost use the light body colour. */
|
|
221
|
+
[data-theme="system"] .cs-button--secondary { color: var(--cs-color-brand-ochre); border-color: var(--cs-color-brand-ochre); }
|
|
222
|
+
[data-theme="system"] .cs-button--tertiary { color: var(--cs-color-text-primary); }
|
|
223
|
+
[data-theme="system"] .cs-button--ghost { color: var(--cs-color-text-primary); }
|
|
224
|
+
}
|
package/base/controls.css
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
/* NumberField / stepper */
|
|
13
13
|
.cs-stepper { display: inline-flex; align-items: stretch; border: 1px solid var(--cs-component-textfield-border-default); border-radius: var(--cs-radius-md); overflow: hidden; background: var(--cs-color-surface-panel); }
|
|
14
14
|
.cs-stepper:focus-within { border-color: var(--cs-color-brand-ochre); }
|
|
15
|
-
.cs-stepper button { border: 0; background: var(--cs-color-surface-raised); color: var(--cs-color-text-primary); inline-size: 40px; cursor: pointer; font-size:
|
|
15
|
+
.cs-stepper button { border: 0; background: var(--cs-color-surface-raised); color: var(--cs-color-text-primary); inline-size: 40px; cursor: pointer; font-size: var(--cs-font-size-md); font-weight: 700; display: grid; place-items: center; }
|
|
16
16
|
.cs-stepper button:hover:not(:disabled) { color: var(--cs-color-text-accent); }
|
|
17
17
|
.cs-stepper button:disabled { opacity: 0.45; cursor: not-allowed; }
|
|
18
18
|
.cs-stepper input { inline-size: 56px; text-align: center; border: 0; border-inline: 1px solid var(--cs-color-border-default); background: transparent; font: inherit; font-family: var(--cs-font-family-mono); color: var(--cs-color-text-primary); outline: 0; min-height: 42px; -moz-appearance: textfield; }
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
/* Slider (native range) */
|
|
22
22
|
.cs-slider { inline-size: 100%; accent-color: var(--cs-color-brand-umber); block-size: 22px; cursor: pointer; }
|
|
23
23
|
[data-theme="dark"] .cs-slider { accent-color: var(--cs-color-brand-ochre); }
|
|
24
|
-
.cs-slider:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 4px; border-radius: var(--cs-radius-full); }
|
|
24
|
+
.cs-slider:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 4px; border-radius: var(--cs-radius-full); }
|
|
25
25
|
|
|
26
26
|
/* FileUpload / dropzone */
|
|
27
27
|
.cs-dropzone { display: grid; gap: 6px; justify-items: center; text-align: center; border: 2px dashed var(--cs-color-border-default); border-radius: var(--cs-radius-lg); padding: 28px 24px; background: var(--cs-color-surface-raised); cursor: pointer; color: var(--cs-color-text-primary); transition: border-color var(--cs-duration-fast) var(--cs-ease-standard), background var(--cs-duration-fast) var(--cs-ease-standard); }
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
.cs-rating button { background: none; border: 0; padding: 2px; cursor: pointer; color: var(--cs-color-border-default); display: grid; place-items: center; }
|
|
61
61
|
.cs-rating button.on { color: var(--cs-color-brand-ochre); }
|
|
62
62
|
.cs-rating[data-readonly="true"] button { cursor: default; }
|
|
63
|
-
.cs-rating button:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; border-radius: 4px; }
|
|
63
|
+
.cs-rating button:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 2px; border-radius: 4px; }
|
|
64
64
|
.cs-otp { display: inline-flex; gap: 8px; }
|
|
65
65
|
.cs-otp input { inline-size: 44px; block-size: 52px; text-align: center; font: 700 22px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); }
|
|
66
|
-
.cs-otp input:focus { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; border-color: var(--cs-accent); }
|
|
66
|
+
.cs-otp input:focus { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; border-color: var(--cs-accent); }
|
|
67
67
|
.cs-otp input:disabled { opacity: .5; }
|
|
68
68
|
.cs-btngroup { display: inline-flex; }
|
|
69
69
|
.cs-btngroup .cs-button { border-radius: 0; }
|
|
@@ -74,30 +74,30 @@
|
|
|
74
74
|
/* ---- v3 Batch 2 part 2 (Jul 2026): Combobox · InputGroup · TagInput ---- */
|
|
75
75
|
.cs-combobox { position: relative; display: inline-block; min-inline-size: 260px; }
|
|
76
76
|
.cs-combobox input { inline-size: 100%; box-sizing: border-box; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 10px 34px 10px 12px; min-block-size: 44px; }
|
|
77
|
-
.cs-combobox input:focus { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
77
|
+
.cs-combobox input:focus { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
78
78
|
.cs-combobox__caret { position: absolute; inset-inline-end: 10px; inset-block-start: 50%; translate: 0 -50%; pointer-events: none; color: var(--cs-color-text-muted); }
|
|
79
|
-
.cs-combobox__list { position: absolute; z-index: var(--cs-depth-dropdown,
|
|
80
|
-
.cs-combobox__opt { padding: 8px 10px; border-radius: var(--cs-radius-sm); cursor: pointer; font-size:
|
|
79
|
+
.cs-combobox__list { position: absolute; z-index: var(--cs-depth-dropdown, 60); inset-inline: 0; inset-block-start: calc(100% + 6px); max-block-size: 240px; overflow: auto; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 6px; margin: 0; list-style: none; }
|
|
80
|
+
.cs-combobox__opt { padding: 8px 10px; border-radius: var(--cs-radius-sm); cursor: pointer; font-size: var(--cs-font-size-sm); }
|
|
81
81
|
.cs-combobox__opt[aria-selected="true"], .cs-combobox__opt.hl { background: var(--cs-accent-tint); color: var(--cs-accent-strong); }
|
|
82
82
|
[data-theme="dark"] .cs-combobox__opt[aria-selected="true"], [data-theme="dark"] .cs-combobox__opt.hl { background: color-mix(in oklab, var(--cs-accent) 22%, var(--cs-color-surface-panel)); color: var(--cs-accent-bright); }
|
|
83
|
-
.cs-combobox__empty { padding: 10px; color: var(--cs-color-text-muted); font-size:
|
|
83
|
+
.cs-combobox__empty { padding: 10px; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); }
|
|
84
84
|
.cs-igroup { display: inline-flex; align-items: stretch; min-inline-size: 260px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); overflow: hidden; }
|
|
85
|
-
.cs-igroup:focus-within { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
85
|
+
.cs-igroup:focus-within { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
86
86
|
.cs-igroup > input { flex: 1; min-inline-size: 0; border: 0; background: transparent; color: var(--cs-color-text-primary); font: 500 14px var(--cs-font-family-ui); padding: 10px 12px; min-block-size: 44px; box-sizing: border-box; }
|
|
87
87
|
.cs-igroup > input:focus { outline: none; }
|
|
88
|
-
.cs-igroup__fix { display: flex; align-items: center; padding: 0 10px; color: var(--cs-color-text-muted); background: var(--cs-color-surface-raised); border-inline-end: 1px solid var(--cs-color-border-default); font-size:
|
|
88
|
+
.cs-igroup__fix { display: flex; align-items: center; padding: 0 10px; color: var(--cs-color-text-muted); background: var(--cs-color-surface-raised); border-inline-end: 1px solid var(--cs-color-border-default); font-size: var(--cs-font-size-sm); }
|
|
89
89
|
.cs-igroup__fix--suffix { border-inline-end: 0; border-inline-start: 1px solid var(--cs-color-border-default); }
|
|
90
90
|
.cs-igroup__btn { border: 0; background: none; color: var(--cs-color-text-muted); cursor: pointer; display: grid; place-items: center; padding: 0 10px; }
|
|
91
91
|
.cs-igroup__btn:hover { color: var(--cs-color-text-primary); }
|
|
92
92
|
.cs-taginput { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-inline-size: 280px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 6px 8px; min-block-size: 44px; box-sizing: border-box; }
|
|
93
|
-
.cs-taginput:focus-within { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
93
|
+
.cs-taginput:focus-within { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
94
94
|
.cs-taginput > input { flex: 1; min-inline-size: 120px; border: 0; background: transparent; color: var(--cs-color-text-primary); font: 500 14px var(--cs-font-family-ui); padding: 6px 4px; }
|
|
95
95
|
.cs-taginput > input:focus { outline: none; }
|
|
96
96
|
|
|
97
97
|
/* ---- v3 Batch 3 (Jul 2026): Calendar · DatePicker · TimePicker ---- */
|
|
98
98
|
.cs-cal { display: inline-block; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); padding: 12px; min-inline-size: 272px; box-shadow: var(--cs-shadow-sm); }
|
|
99
99
|
.cs-cal__head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; font: 700 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); }
|
|
100
|
-
.cs-cal__head button { border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); border-radius: var(--cs-radius-sm); inline-size: 30px; block-size: 30px; cursor: pointer; font-size:
|
|
100
|
+
.cs-cal__head button { border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); border-radius: var(--cs-radius-sm); inline-size: 30px; block-size: 30px; cursor: pointer; font-size: var(--cs-font-size-base); }
|
|
101
101
|
.cs-cal__head button:hover { background: var(--cs-color-surface-raised); }
|
|
102
102
|
.cs-cal__wd, .cs-cal__grid { display: grid; grid-template-columns: repeat(7, 34px); gap: 2px; }
|
|
103
103
|
.cs-cal__wd span { text-align: center; font: 700 10.5px/2 var(--cs-font-family-ui); text-transform: uppercase; letter-spacing: .04em; color: var(--cs-color-text-muted); }
|
|
@@ -105,20 +105,20 @@
|
|
|
105
105
|
.cs-cal__grid button:hover { background: var(--cs-color-surface-raised); }
|
|
106
106
|
.cs-cal__grid button.today { box-shadow: inset 0 0 0 1px var(--cs-accent); }
|
|
107
107
|
.cs-cal__grid button.sel { background: var(--cs-accent); color: var(--cs-accent-on); font-weight: 700; }
|
|
108
|
-
.cs-cal__grid button:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
108
|
+
.cs-cal__grid button:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
109
109
|
.cs-datepicker { position: relative; display: inline-block; }
|
|
110
110
|
.cs-datepicker__field { display: inline-flex; align-items: center; gap: 8px; min-inline-size: 220px; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; }
|
|
111
|
-
.cs-datepicker__field:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
111
|
+
.cs-datepicker__field:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
112
112
|
.cs-datepicker__field .ph { color: var(--cs-color-text-muted); }
|
|
113
113
|
.cs-datepicker__pop { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-block-start: calc(100% + 6px); inset-inline-start: 0; }
|
|
114
114
|
.cs-timepicker { display: inline-flex; align-items: center; gap: 8px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 0 10px; min-block-size: 44px; color: var(--cs-color-text-muted); }
|
|
115
|
-
.cs-timepicker:focus-within { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
115
|
+
.cs-timepicker:focus-within { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
116
116
|
.cs-timepicker select { border: 0; background: transparent; color: var(--cs-color-text-primary); font: 600 14px var(--cs-font-family-mono); padding: 8px 2px; cursor: pointer; }
|
|
117
117
|
.cs-timepicker select:focus { outline: none; }
|
|
118
118
|
|
|
119
119
|
/* ---- v3 Batch 4 (Jul 2026): HoverCard · Popconfirm · ContextMenu · FAB · Result · InlineEdit ---- */
|
|
120
120
|
.cs-hovercard { position: relative; display: inline-block; }
|
|
121
|
-
.cs-hovercard__panel { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-block-start: calc(100% + 8px); inset-inline-start: 0; min-inline-size: 240px; display: block; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 14px 16px; font-size:
|
|
121
|
+
.cs-hovercard__panel { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-block-start: calc(100% + 8px); inset-inline-start: 0; min-inline-size: 240px; display: block; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 14px 16px; font-size: var(--cs-font-size-sm); line-height: 1.5; color: var(--cs-color-text-primary); }
|
|
122
122
|
.cs-popconfirm { position: relative; display: inline-block; }
|
|
123
123
|
.cs-popconfirm__panel { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-block-start: calc(100% + 8px); inset-inline-start: 0; min-inline-size: 240px; display: block; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 12px 14px; }
|
|
124
124
|
.cs-popconfirm__title { display: block; font: 600 13.5px/1.45 var(--cs-font-family-ui); color: var(--cs-color-text-primary); margin-bottom: 10px; }
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
.cs-fab--static { position: static; align-items: flex-start; }
|
|
129
129
|
.cs-fab__main { inline-size: 56px; block-size: 56px; border-radius: 999px; border: 0; background: var(--cs-accent); color: var(--cs-accent-on); display: grid; place-items: center; cursor: pointer; box-shadow: var(--cs-shadow-lg); }
|
|
130
130
|
.cs-fab__main:hover { filter: brightness(1.05); }
|
|
131
|
-
.cs-fab__main:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; }
|
|
131
|
+
.cs-fab__main:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 2px; }
|
|
132
132
|
.cs-fab__dial { display: flex; flex-direction: column; gap: 8px; align-items: center; }
|
|
133
133
|
.cs-fab--static .cs-fab__dial { flex-direction: row; }
|
|
134
134
|
.cs-fab__mini { inline-size: 42px; block-size: 42px; border-radius: 999px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); display: grid; place-items: center; cursor: pointer; box-shadow: var(--cs-shadow-sm); }
|
|
@@ -138,14 +138,14 @@
|
|
|
138
138
|
.cs-result--error .cs-result__icon { background: color-mix(in oklab, var(--cs-color-semantic-danger) 12%, var(--cs-color-surface-panel)); color: var(--cs-color-semantic-danger); }
|
|
139
139
|
.cs-result--warning .cs-result__icon { background: color-mix(in oklab, var(--cs-color-semantic-warning) 14%, var(--cs-color-surface-panel)); color: var(--cs-color-semantic-warning); }
|
|
140
140
|
.cs-result__title { margin: 0; font: 800 22px/1.3 var(--cs-heading-family, var(--cs-font-family-ui)); letter-spacing: var(--cs-heading-tracking, -0.01em); color: var(--cs-color-text-primary); }
|
|
141
|
-
.cs-result__body { margin: 0; max-inline-size: 46ch; color: var(--cs-color-text-muted); font-size:
|
|
141
|
+
.cs-result__body { margin: 0; max-inline-size: 46ch; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); line-height: 1.55; }
|
|
142
142
|
.cs-result__actions { display: flex; gap: 10px; margin-top: 6px; }
|
|
143
143
|
.cs-inline-edit__view { display: inline-flex; align-items: center; gap: 7px; border: 1px dashed transparent; background: none; font: inherit; color: var(--cs-color-text-primary); padding: 4px 8px; border-radius: var(--cs-radius-sm); cursor: pointer; }
|
|
144
144
|
.cs-inline-edit__view:hover { border-color: var(--cs-color-border-default); background: var(--cs-color-surface-raised); }
|
|
145
145
|
.cs-inline-edit__view svg { color: var(--cs-color-text-muted); }
|
|
146
146
|
.cs-inline-edit__view .ph { color: var(--cs-color-text-muted); }
|
|
147
147
|
.cs-inline-edit input { font: inherit; color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-accent); border-radius: var(--cs-radius-sm); padding: 4px 8px; }
|
|
148
|
-
.cs-inline-edit input:focus { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
148
|
+
.cs-inline-edit input:focus { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
149
149
|
|
|
150
150
|
/* ---- v3 Batch 5 part 1 (Jul 2026): Link · Anchor · Image · Toolbar ---- */
|
|
151
151
|
.cs-link { color: var(--cs-color-link); text-underline-offset: .15em; }
|
|
@@ -155,7 +155,7 @@
|
|
|
155
155
|
.cs-link--standalone:hover { text-decoration: underline; }
|
|
156
156
|
.cs-anchor { display: grid; gap: 2px; min-inline-size: 180px; border-inline-start: 2px solid var(--cs-color-border-default); }
|
|
157
157
|
.cs-anchor__title { font: 700 10.5px/1.4 var(--cs-font-family-ui); text-transform: uppercase; letter-spacing: .1em; color: var(--cs-color-text-muted); padding: 2px 12px 6px; }
|
|
158
|
-
.cs-anchor__item { display: block; padding: 5px 12px; font-size:
|
|
158
|
+
.cs-anchor__item { display: block; padding: 5px 12px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-muted); text-decoration: none; border-inline-start: 2px solid transparent; margin-inline-start: -2px; }
|
|
159
159
|
.cs-anchor__item:hover { color: var(--cs-color-text-primary); }
|
|
160
160
|
.cs-anchor__item.is-active { color: var(--cs-accent-strong); border-inline-start-color: var(--cs-accent); font-weight: 600; }
|
|
161
161
|
[data-theme="dark"] .cs-anchor__item.is-active { color: var(--cs-accent-bright); }
|
|
@@ -165,13 +165,13 @@
|
|
|
165
165
|
@keyframes cs-img-shimmer { from { opacity: .55; } to { opacity: .9; } }
|
|
166
166
|
.cs-image.is-zoomable { cursor: zoom-in; }
|
|
167
167
|
.cs-image__fallback { display: grid; place-items: center; min-block-size: 80px; block-size: 100%; color: var(--cs-color-text-muted); }
|
|
168
|
-
.cs-image__zoom { position: fixed; inset: 0; z-index: var(--cs-depth-modal,
|
|
168
|
+
.cs-image__zoom { position: fixed; inset: 0; z-index: var(--cs-depth-modal, 100); background: rgba(26, 17, 8, .82); display: grid; place-items: center; cursor: zoom-out; }
|
|
169
169
|
.cs-image__zoom img { max-inline-size: 88vw; max-block-size: 86vh; border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-xl); }
|
|
170
|
-
.cs-image__zoom button { position: absolute; inset-block-start: 18px; inset-inline-end: 18px; inline-size: 40px; block-size: 40px; border-radius: 999px; border: 0; background: rgba(255, 255, 255, .12); color: #fff; font-size:
|
|
170
|
+
.cs-image__zoom button { position: absolute; inset-block-start: 18px; inset-inline-end: 18px; inline-size: 40px; block-size: 40px; border-radius: 999px; border: 0; background: rgba(255, 255, 255, .12); color: #fff; font-size: var(--cs-font-size-base); cursor: pointer; }
|
|
171
171
|
.cs-toolbar { display: inline-flex; align-items: center; gap: 4px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 4px; }
|
|
172
172
|
.cs-toolbar__btn { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none; color: var(--cs-color-text-primary); font: 600 13px var(--cs-font-family-ui); padding: 7px 10px; border-radius: var(--cs-radius-sm); cursor: pointer; min-block-size: 32px; }
|
|
173
173
|
.cs-toolbar__btn:hover { background: var(--cs-color-surface-raised); }
|
|
174
|
-
.cs-toolbar__btn:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
174
|
+
.cs-toolbar__btn:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
175
175
|
.cs-toolbar__sep { inline-size: 1px; block-size: 20px; background: var(--cs-color-border-default); margin: 0 4px; }
|
|
176
176
|
.cs-toolbar__more { position: relative; }
|
|
177
177
|
.cs-toolbar__more .cs-menu__list { position: absolute; inset-inline-end: 0; inset-block-start: calc(100% + 6px); }
|
|
@@ -189,40 +189,41 @@
|
|
|
189
189
|
.cs-navmenu__panel { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-inline-start: 0; inset-block-start: calc(100% + 8px); display: grid; grid-template-columns: repeat(2, 220px); gap: 6px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-md); padding: 10px; }
|
|
190
190
|
.cs-navmenu__card { display: grid; gap: 3px; padding: 10px 12px; border-radius: var(--cs-radius-md); text-decoration: none; color: var(--cs-color-text-primary); }
|
|
191
191
|
.cs-navmenu__card:hover { background: var(--cs-accent-tint); }
|
|
192
|
-
.cs-navmenu__card b { font-size:
|
|
193
|
-
.cs-navmenu__card small { color: var(--cs-color-text-muted); font-size:
|
|
192
|
+
.cs-navmenu__card b { font-size: var(--cs-font-size-sm); }
|
|
193
|
+
.cs-navmenu__card small { color: var(--cs-color-text-muted); font-size: var(--cs-font-size-xs); line-height: 1.45; }
|
|
194
194
|
.cs-carousel { display: grid; gap: 10px; }
|
|
195
195
|
.cs-carousel__view { position: relative; overflow: hidden; border-radius: var(--cs-radius-lg); border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); }
|
|
196
196
|
.cs-carousel__track { display: flex; transition: transform var(--cs-duration-base, 240ms) cubic-bezier(0.2, 0, 0, 1); }
|
|
197
197
|
.cs-carousel__slide { flex: 0 0 100%; min-inline-size: 100%; }
|
|
198
|
-
.cs-carousel__nav { position: absolute; inset-block-start: 50%; translate: 0 -50%; inline-size: 36px; block-size: 36px; border-radius: 999px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); cursor: pointer; font-size:
|
|
198
|
+
.cs-carousel__nav { position: absolute; inset-block-start: 50%; translate: 0 -50%; inline-size: 36px; block-size: 36px; border-radius: 999px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); cursor: pointer; font-size: var(--cs-font-size-md); box-shadow: var(--cs-shadow-sm); }
|
|
199
199
|
.cs-carousel__nav.prev { inset-inline-start: 10px; }
|
|
200
200
|
.cs-carousel__nav.next { inset-inline-end: 10px; }
|
|
201
201
|
.cs-carousel__dots { display: flex; gap: 6px; justify-content: center; }
|
|
202
|
-
.cs-carousel__dots button { inline-size: 9px; block-size: 9px; border-radius: 999px; border: 0; background: var(--cs-color-border-default); cursor: pointer; padding: 0; }
|
|
202
|
+
.cs-carousel__dots button { inline-size: 9px; block-size: 9px; border-radius: 999px; border: 0; background: var(--cs-color-border-default); cursor: pointer; padding: 0; position: relative; }
|
|
203
|
+
.cs-carousel__dots button::before { content: ""; position: absolute; inset: -7.5px; /* expand hit area to ≥24×24 (WCAG 2.5.8) */ }
|
|
203
204
|
.cs-carousel__dots button[aria-current="true"] { background: var(--cs-accent); }
|
|
204
205
|
@media (prefers-reduced-motion: reduce) { .cs-carousel__track { transition: none; } }
|
|
205
206
|
.cs-comment { display: flex; gap: 10px; }
|
|
206
207
|
.cs-comment__main { flex: 1; min-inline-size: 0; }
|
|
207
|
-
.cs-comment__head { display: flex; align-items: baseline; gap: 8px; font-size:
|
|
208
|
-
.cs-comment__meta { color: var(--cs-color-text-muted); font-size:
|
|
209
|
-
.cs-comment__body { font-size:
|
|
208
|
+
.cs-comment__head { display: flex; align-items: baseline; gap: 8px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
|
|
209
|
+
.cs-comment__meta { color: var(--cs-color-text-muted); font-size: var(--cs-font-size-xs); }
|
|
210
|
+
.cs-comment__body { font-size: var(--cs-font-size-sm); line-height: 1.55; color: var(--cs-color-text-primary); margin: 3px 0 6px; }
|
|
210
211
|
.cs-comment__actions { display: flex; gap: 12px; }
|
|
211
212
|
.cs-comment__actions button { border: 0; background: none; padding: 0; font: 600 12.5px var(--cs-font-family-ui); color: var(--cs-color-text-accent); cursor: pointer; }
|
|
212
213
|
.cs-comment__replies { margin-top: 12px; padding-inline-start: 14px; border-inline-start: 2px solid var(--cs-color-border-default); display: grid; gap: 12px; }
|
|
213
214
|
|
|
214
215
|
/* ---- v3 Batch 6a (Jul 2026): Form · Tree · BackTop · Watermark ---- */
|
|
215
216
|
.cs-form { display: grid; gap: 16px; }
|
|
216
|
-
.cs-form__summary { border: 1px solid var(--cs-color-semantic-danger); border-radius: var(--cs-radius-md); background: color-mix(in oklab, var(--cs-color-semantic-danger) 8%, var(--cs-color-surface-panel)); color: var(--cs-color-text-primary); padding: 12px 14px; font-size:
|
|
217
|
+
.cs-form__summary { border: 1px solid var(--cs-color-semantic-danger); border-radius: var(--cs-radius-md); background: color-mix(in oklab, var(--cs-color-semantic-danger) 8%, var(--cs-color-surface-panel)); color: var(--cs-color-text-primary); padding: 12px 14px; font-size: var(--cs-font-size-sm); }
|
|
217
218
|
.cs-form__summary b { color: var(--cs-color-semantic-danger); }
|
|
218
219
|
.cs-form__summary ul { margin: 6px 0 0; padding-inline-start: 18px; }
|
|
219
220
|
.cs-formfield { display: grid; gap: 6px; }
|
|
220
221
|
.cs-formfield__label { font: 600 13px var(--cs-font-family-ui); color: var(--cs-color-text-primary); }
|
|
221
222
|
.cs-formfield__label em { color: var(--cs-color-semantic-danger); font-style: normal; }
|
|
222
|
-
.cs-formfield__hint { font-size:
|
|
223
|
-
.cs-formfield__error { font-size:
|
|
223
|
+
.cs-formfield__hint { font-size: var(--cs-font-size-xs); color: var(--cs-color-text-muted); }
|
|
224
|
+
.cs-formfield__error { font-size: var(--cs-font-size-xs); color: var(--cs-color-semantic-danger); font-weight: 600; }
|
|
224
225
|
.cs-formfield.has-error input, .cs-formfield.has-error textarea, .cs-formfield.has-error select { border-color: var(--cs-color-semantic-danger); }
|
|
225
|
-
.cs-tree { list-style: none; margin: 0; padding: 0; font-size:
|
|
226
|
+
.cs-tree { list-style: none; margin: 0; padding: 0; font-size: var(--cs-font-size-sm); }
|
|
226
227
|
.cs-tree ul { list-style: none; margin: 0; padding: 0; }
|
|
227
228
|
.cs-tree__row { display: flex; align-items: center; gap: 2px; border-radius: var(--cs-radius-sm); }
|
|
228
229
|
.cs-tree__row:hover { background: var(--cs-color-surface-raised); }
|
|
@@ -237,7 +238,7 @@
|
|
|
237
238
|
/* ---- v3 Batch 6b (Jul 2026): TreeSelect · Cascader · Transfer · Mentions ---- */
|
|
238
239
|
.cs-treeselect, .cs-cascader { position: relative; display: inline-block; min-inline-size: 240px; }
|
|
239
240
|
.cs-treeselect__field { display: inline-flex; align-items: center; justify-content: space-between; gap: 10px; inline-size: 100%; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; box-sizing: border-box; }
|
|
240
|
-
.cs-treeselect__field:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
241
|
+
.cs-treeselect__field:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
241
242
|
.cs-treeselect__field .ph { color: var(--cs-color-text-muted); }
|
|
242
243
|
.cs-treeselect__pop, .cs-cascader__pop { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-block-start: calc(100% + 6px); inset-inline-start: 0; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 8px; min-inline-size: 100%; }
|
|
243
244
|
.cs-cascader__pop { display: flex; padding: 0; overflow: hidden; }
|
|
@@ -251,7 +252,7 @@
|
|
|
251
252
|
.cs-transfer__list { border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); background: var(--cs-color-surface-panel); min-inline-size: 180px; }
|
|
252
253
|
.cs-transfer__title { font: 700 12px var(--cs-font-family-ui); padding: 9px 12px; border-block-end: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-raised); border-radius: var(--cs-radius-md) var(--cs-radius-md) 0 0; }
|
|
253
254
|
.cs-transfer__list ul { list-style: none; margin: 0; padding: 8px 10px; display: grid; gap: 6px; max-block-size: 200px; overflow: auto; }
|
|
254
|
-
.cs-transfer__list label { display: flex; align-items: center; gap: 8px; font-size:
|
|
255
|
+
.cs-transfer__list label { display: flex; align-items: center; gap: 8px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); cursor: pointer; }
|
|
255
256
|
.cs-transfer__ops { display: grid; gap: 6px; align-content: center; }
|
|
256
257
|
.cs-mentions { position: relative; display: block; max-inline-size: 420px; }
|
|
257
258
|
.cs-mentions__pop { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-inline-start: 10px; inset-block-start: calc(100% - 6px); display: grid; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 4px; }
|
|
@@ -262,17 +263,17 @@
|
|
|
262
263
|
.cs-colorpicker { position: relative; display: inline-block; }
|
|
263
264
|
.cs-colorpicker__field { display: inline-flex; align-items: center; gap: 9px; min-block-size: 44px; font: 600 13px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; }
|
|
264
265
|
.cs-colorpicker__field i { inline-size: 20px; block-size: 20px; border-radius: 6px; border: 1px solid var(--cs-color-border-default); }
|
|
265
|
-
.cs-colorpicker__field:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
266
|
+
.cs-colorpicker__field:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
266
267
|
.cs-colorpicker__pop { position: absolute; z-index: var(--cs-depth-dropdown, 50); inset-block-start: calc(100% + 6px); inset-inline-start: 0; display: grid; gap: 10px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 12px; }
|
|
267
268
|
.cs-colorpicker__grid { display: grid; grid-template-columns: repeat(5, 26px); gap: 8px; }
|
|
268
269
|
.cs-colorpicker__grid button { inline-size: 26px; block-size: 26px; border-radius: 7px; border: 1px solid var(--cs-color-border-default); cursor: pointer; }
|
|
269
|
-
.cs-colorpicker__grid button.on { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
270
|
+
.cs-colorpicker__grid button.on { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
|
|
270
271
|
.cs-colorpicker__hex input { inline-size: 110px; font: 600 13px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-sm); padding: 6px 8px; }
|
|
271
|
-
.cs-tour__scrim { position: fixed; inset: 0; z-index: var(--cs-depth-modal,
|
|
272
|
-
.cs-tour__hole { position: fixed; z-index: calc(var(--cs-depth-modal, 90) + 1); border-radius: var(--cs-radius-md); box-shadow: 0 0 0 4000px rgba(26, 17, 8, .45); outline: 3px solid var(--cs-color-brand-ochre); pointer-events: none; background: transparent; }
|
|
272
|
+
.cs-tour__scrim { position: fixed; inset: 0; z-index: var(--cs-depth-modal, 100); background: rgba(26, 17, 8, .45); }
|
|
273
|
+
.cs-tour__hole { position: fixed; z-index: calc(var(--cs-depth-modal, 90) + 1); border-radius: var(--cs-radius-md); box-shadow: 0 0 0 4000px rgba(26, 17, 8, .45); outline: var(--cs-focus-ring, 3px) solid var(--cs-color-brand-ochre); pointer-events: none; background: transparent; }
|
|
273
274
|
.cs-tour__pop { position: fixed; z-index: calc(var(--cs-depth-modal, 90) + 2); inline-size: 280px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-xl); padding: 14px 16px; }
|
|
274
|
-
.cs-tour__pop b { font-size:
|
|
275
|
-
.cs-tour__pop p { margin: 6px 0 12px; font-size:
|
|
275
|
+
.cs-tour__pop b { font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
|
|
276
|
+
.cs-tour__pop p { margin: 6px 0 12px; font-size: var(--cs-font-size-sm); line-height: 1.5; color: var(--cs-color-text-muted); }
|
|
276
277
|
.cs-tour__bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
|
|
277
278
|
.cs-tour__count { font: 600 11px var(--cs-font-family-mono); color: var(--cs-color-text-muted); }
|
|
278
279
|
.cs-tour__btns { display: flex; gap: 6px; }
|
|
@@ -284,12 +285,12 @@
|
|
|
284
285
|
.cs-splitter__pane { overflow: auto; padding: 14px; min-inline-size: 0; }
|
|
285
286
|
.cs-splitter__bar { inline-size: 8px; cursor: col-resize; background: var(--cs-color-surface-raised); border-inline: 1px solid var(--cs-color-border-default); touch-action: none; }
|
|
286
287
|
.cs-splitter__bar:hover { background: var(--cs-accent-tint); }
|
|
287
|
-
.cs-splitter__bar:focus-visible { background: var(--cs-accent-tint); outline:
|
|
288
|
-
.cs-hotkeys__sheet { position: fixed; inset: 0; z-index: var(--cs-depth-modal,
|
|
288
|
+
.cs-splitter__bar:focus-visible { background: var(--cs-accent-tint); outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: -2px; }
|
|
289
|
+
.cs-hotkeys__sheet { position: fixed; inset: 0; z-index: var(--cs-depth-modal, 100); background: rgba(26, 17, 8, .45); display: grid; place-items: center; }
|
|
289
290
|
.cs-hotkeys__card { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-xl); padding: 18px 20px; min-inline-size: 300px; }
|
|
290
|
-
.cs-hotkeys__card b { font-size:
|
|
291
|
+
.cs-hotkeys__card b { font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
|
|
291
292
|
.cs-hotkeys__card ul { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 8px; }
|
|
292
|
-
.cs-hotkeys__card li { display: flex; justify-content: space-between; gap: 20px; font-size:
|
|
293
|
+
.cs-hotkeys__card li { display: flex; justify-content: space-between; gap: 20px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
|
|
293
294
|
.cs-dock { display: inline-flex; align-items: flex-end; gap: 8px; background: color-mix(in oklab, var(--cs-color-surface-panel) 82%, transparent); border: 1px solid var(--cs-color-border-default); border-radius: 18px; padding: 8px 12px; backdrop-filter: blur(10px); }
|
|
294
295
|
.cs-dock__item { inline-size: 44px; block-size: 44px; border-radius: 12px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); display: grid; place-items: center; cursor: pointer; transition: transform var(--cs-duration-fast, 120ms); position: relative; }
|
|
295
296
|
.cs-dock__item.is-active::after { content: ""; position: absolute; inset-block-end: -6px; inline-size: 4px; block-size: 4px; border-radius: 999px; background: var(--cs-accent); }
|
|
@@ -305,14 +306,14 @@
|
|
|
305
306
|
[data-theme="dark"] .cs-datagrid tr.is-selected td { background: color-mix(in oklab, var(--cs-accent) 18%, var(--cs-color-surface-panel)); }
|
|
306
307
|
.cs-treetable .cs-treetable__cell { display: inline-flex; align-items: center; gap: 2px; }
|
|
307
308
|
.cs-sortable { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; max-inline-size: 380px; }
|
|
308
|
-
.cs-sortable__item { display: flex; align-items: center; gap: 10px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 10px 12px; font-size:
|
|
309
|
+
.cs-sortable__item { display: flex; align-items: center; gap: 10px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 10px 12px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); cursor: grab; }
|
|
309
310
|
.cs-sortable__item.is-dragging { opacity: .5; }
|
|
310
311
|
.cs-sortable__item.is-over { border-color: var(--cs-accent); box-shadow: inset 0 0 0 1px var(--cs-accent); }
|
|
311
312
|
.cs-sortable__grip { color: var(--cs-color-text-muted); }
|
|
312
313
|
|
|
313
314
|
/* ---- v3 Batch 7c (Jul 2026): Chart · Editor · Terminal ---- */
|
|
314
315
|
.cs-chart { margin: 0; display: grid; gap: 8px; max-inline-size: 420px; }
|
|
315
|
-
.cs-chart__legend { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size:
|
|
316
|
+
.cs-chart__legend { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: var(--cs-font-size-xs); color: var(--cs-color-text-muted); }
|
|
316
317
|
.cs-chart__legend b { color: var(--cs-color-text-primary); }
|
|
317
318
|
.cs-editor { border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); background: var(--cs-color-surface-panel); max-inline-size: 460px; }
|
|
318
319
|
.cs-editor__bar { display: flex; gap: 2px; padding: 6px; border-block-end: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-raised); border-radius: var(--cs-radius-md) var(--cs-radius-md) 0 0; }
|
|
@@ -327,3 +328,15 @@
|
|
|
327
328
|
.cs-terminal__line .p { color: var(--cs-color-brand-ochre); }
|
|
328
329
|
.cs-terminal__line input { flex: 1; border: 0; background: transparent; color: inherit; font: inherit; outline: none; }
|
|
329
330
|
.cs-terminal__out { color: #c9b7a3; white-space: pre-wrap; }
|
|
331
|
+
|
|
332
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
333
|
+
@media (prefers-color-scheme: dark) {
|
|
334
|
+
[data-theme="system"] .cs-segmented button[aria-pressed="true"], [data-theme="system"] .cs-segmented button[aria-selected="true"] { background: var(--cs-color-brand-ochre); color: var(--cs-color-brand-umber); }
|
|
335
|
+
[data-theme="system"] .cs-combobox__opt[aria-selected="true"], [data-theme="system"] .cs-combobox__opt.hl { background: color-mix(in oklab, var(--cs-accent) 22%, var(--cs-color-surface-panel)); color: var(--cs-accent-bright); }
|
|
336
|
+
[data-theme="system"] .cs-slider { accent-color: var(--cs-color-brand-ochre); }
|
|
337
|
+
[data-theme="system"] .cs-toggle[aria-pressed="true"] { background: color-mix(in oklab, var(--cs-accent) 22%, var(--cs-color-surface-panel)); color: var(--cs-accent-bright); }
|
|
338
|
+
[data-theme="system"] .cs-anchor__item.is-active { color: var(--cs-accent-bright); }
|
|
339
|
+
[data-theme="system"] .cs-tree__row.is-selected .cs-tree__label { color: var(--cs-accent-bright); }
|
|
340
|
+
[data-theme="system"] .cs-cascader__opt.on { background: color-mix(in oklab, var(--cs-accent) 22%, var(--cs-color-surface-panel)); color: var(--cs-accent-bright); }
|
|
341
|
+
[data-theme="system"] .cs-datagrid tr.is-selected td { background: color-mix(in oklab, var(--cs-accent) 18%, var(--cs-color-surface-panel)); }
|
|
342
|
+
}
|
package/base/data.css
CHANGED
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
/* Avatar */
|
|
28
28
|
.cs-avatar { display: inline-grid; place-items: center; overflow: hidden; border-radius: 50%; background: var(--cs-color-brand-umber); color: var(--cs-color-brand-ochre); font-family: var(--cs-font-family-ui); font-weight: 700; flex: none; user-select: none; }
|
|
29
29
|
.cs-avatar img { inline-size: 100%; block-size: 100%; object-fit: cover; display: block; }
|
|
30
|
-
.cs-avatar--sm { inline-size: 28px; block-size: 28px; font-size:
|
|
31
|
-
.cs-avatar--md { inline-size: 40px; block-size: 40px; font-size:
|
|
32
|
-
.cs-avatar--lg { inline-size: 56px; block-size: 56px; font-size:
|
|
30
|
+
.cs-avatar--sm { inline-size: 28px; block-size: 28px; font-size: var(--cs-font-size-xs); }
|
|
31
|
+
.cs-avatar--md { inline-size: 40px; block-size: 40px; font-size: var(--cs-font-size-sm); }
|
|
32
|
+
.cs-avatar--lg { inline-size: 56px; block-size: 56px; font-size: var(--cs-font-size-lg); }
|
|
33
33
|
.cs-avatar--square { border-radius: var(--cs-radius-md); }
|
|
34
34
|
.cs-avatar-group { display: inline-flex; }
|
|
35
35
|
.cs-avatar-group > .cs-avatar { box-shadow: 0 0 0 2px var(--cs-color-surface-panel); }
|
package/base/feedback.css
CHANGED
|
@@ -58,3 +58,8 @@
|
|
|
58
58
|
.cs-skeleton--circle { border-radius: 50%; }
|
|
59
59
|
@keyframes cs-shimmer { from { background-position: 100% 0; } to { background-position: 0 0; } }
|
|
60
60
|
@media (prefers-reduced-motion: reduce) { .cs-skeleton { animation: none; } }
|
|
61
|
+
|
|
62
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
63
|
+
@media (prefers-color-scheme: dark) {
|
|
64
|
+
[data-theme="system"] .cs-spinner { border-color: color-mix(in oklab, var(--cs-color-brand-ochre) 26%, transparent); border-top-color: var(--cs-color-brand-ochre); }
|
|
65
|
+
}
|
package/base/forms.css
CHANGED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
.cs-select { position: relative; display: block; }
|
|
6
6
|
.cs-select select.cs-field__control { appearance: none; -webkit-appearance: none; width: 100%; padding-inline-end: 38px; cursor: pointer; background: var(--cs-color-surface-panel); }
|
|
7
7
|
.cs-select__chevron { position: absolute; inset-inline-end: 12px; inset-block-start: 50%; transform: translateY(-50%); pointer-events: none; color: var(--cs-color-text-muted); display: grid; place-items: center; }
|
|
8
|
-
.cs-select select.cs-field__control:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; border-color: var(--cs-color-brand-ochre); }
|
|
8
|
+
.cs-select select.cs-field__control:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 2px; border-color: var(--cs-color-brand-ochre); }
|
|
9
9
|
|
|
10
10
|
/* NativeSelect — lean progressive-enhancement companion beside Select */
|
|
11
11
|
.cs-native-select { position: relative; display: block; }
|
|
12
12
|
.cs-native-select select.cs-field__control { appearance: none; -webkit-appearance: none; width: 100%; padding-inline-end: 38px; cursor: pointer; background: var(--cs-color-surface-panel); }
|
|
13
13
|
.cs-native-select__chevron { position: absolute; inset-inline-end: 12px; inset-block-start: 50%; transform: translateY(-50%); pointer-events: none; color: var(--cs-color-text-muted); display: grid; place-items: center; }
|
|
14
|
-
.cs-native-select select.cs-field__control:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; border-color: var(--cs-color-brand-ochre); }
|
|
14
|
+
.cs-native-select select.cs-field__control:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 2px; border-color: var(--cs-color-brand-ochre); }
|
|
15
15
|
.cs-native-select--sm select.cs-field__control { min-block-size: 36px; padding-block: 6px; font-size: var(--cs-font-size-sm); }
|
|
16
16
|
.cs-native-select--md select.cs-field__control { min-block-size: 44px; }
|
|
17
17
|
|
|
@@ -33,8 +33,14 @@
|
|
|
33
33
|
.cs-switch input:checked + .cs-switch__track { background: var(--cs-color-brand-umber); }
|
|
34
34
|
[data-theme="dark"] .cs-switch input:checked + .cs-switch__track { background: var(--cs-color-brand-ochre); }
|
|
35
35
|
.cs-switch input:checked + .cs-switch__track::after { transform: translateX(18px); }
|
|
36
|
-
.cs-switch input:focus-visible + .cs-switch__track { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: 2px; }
|
|
36
|
+
.cs-switch input:focus-visible + .cs-switch__track { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 2px; }
|
|
37
37
|
.cs-switch.is-disabled { opacity: 0.55; cursor: not-allowed; }
|
|
38
38
|
|
|
39
39
|
/* Textarea reuses .cs-field; give it sane sizing */
|
|
40
40
|
textarea.cs-field__control { min-height: 96px; resize: vertical; line-height: var(--cs-font-lineHeight-body); }
|
|
41
|
+
|
|
42
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
43
|
+
@media (prefers-color-scheme: dark) {
|
|
44
|
+
[data-theme="system"] .cs-check input, [data-theme="system"] .cs-radio input { accent-color: var(--cs-color-brand-ochre); }
|
|
45
|
+
[data-theme="system"] .cs-switch input:checked + .cs-switch__track { background: var(--cs-color-brand-ochre); }
|
|
46
|
+
}
|
package/base/glass.css
CHANGED
|
@@ -117,3 +117,9 @@
|
|
|
117
117
|
color: #fff;
|
|
118
118
|
}
|
|
119
119
|
.cs-aurora--photo { background-size: cover; background-position: center; }
|
|
120
|
+
|
|
121
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
122
|
+
@media (prefers-color-scheme: dark) {
|
|
123
|
+
/* ---- 5. Dark-mode border tuning ---- */
|
|
124
|
+
[data-theme="system"] { --cs-color-border-default: #4a3a2c; }
|
|
125
|
+
}
|
package/base/navigation.css
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
.cs-tab:hover { color: var(--cs-color-text-primary); }
|
|
7
7
|
.cs-tab[aria-selected="true"] { color: var(--cs-color-brand-umber); border-block-end-color: var(--cs-color-brand-ochre); }
|
|
8
8
|
[data-theme="dark"] .cs-tab[aria-selected="true"] { color: var(--cs-color-brand-ochre); }
|
|
9
|
-
.cs-tab:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: -3px; border-radius: var(--cs-radius-sm); }
|
|
9
|
+
.cs-tab:focus-visible { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: -3px; border-radius: var(--cs-radius-sm); }
|
|
10
10
|
.cs-tab__count { font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-xs); background: var(--cs-color-surface-raised); border-radius: var(--cs-radius-full); padding: 1px 7px; }
|
|
11
11
|
|
|
12
12
|
/* Breadcrumb */
|
|
@@ -32,8 +32,14 @@
|
|
|
32
32
|
.cs-menu__list--end { inset-inline-start: auto; inset-inline-end: 0; }
|
|
33
33
|
.cs-menu__item { display: flex; align-items: center; gap: 10px; inline-size: 100%; text-align: start; border: 0; background: transparent; font: inherit; font-family: var(--cs-font-family-ui); font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); padding: 8px 10px; border-radius: var(--cs-radius-sm); cursor: pointer; }
|
|
34
34
|
.cs-menu__item:hover { background: var(--cs-color-surface-raised); }
|
|
35
|
-
.cs-menu__item:focus-visible { background: var(--cs-color-surface-raised); outline: 3px solid var(--cs-color-accent-ochre); outline-offset: -3px; }
|
|
35
|
+
.cs-menu__item:focus-visible { background: var(--cs-color-surface-raised); outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: -3px; }
|
|
36
36
|
.cs-menu__item--danger { color: var(--cs-color-semantic-danger); }
|
|
37
37
|
.cs-menu__item--danger:hover { background: color-mix(in oklab, var(--cs-color-semantic-danger) 10%, transparent); }
|
|
38
38
|
.cs-menu__sep { block-size: 1px; background: var(--cs-color-border-default); margin: 4px 2px; }
|
|
39
39
|
.cs-menu__label { font-size: var(--cs-font-size-xs); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-muted); padding: 6px 10px 2px; }
|
|
40
|
+
|
|
41
|
+
/* ---- system-theme dark parity (UX-010 / CDS-THEME-001) ---- */
|
|
42
|
+
@media (prefers-color-scheme: dark) {
|
|
43
|
+
[data-theme="system"] .cs-tab[aria-selected="true"] { color: var(--cs-color-brand-ochre); }
|
|
44
|
+
[data-theme="system"] .cs-pagination button[aria-current="page"] { background: var(--cs-color-brand-ochre); color: var(--cs-color-brand-umber); }
|
|
45
|
+
}
|
package/base/reset.css
CHANGED
|
@@ -14,4 +14,4 @@ body {
|
|
|
14
14
|
:where(h1, h2, h3, h4, h5, h6) { line-height: var(--cs-font-lineHeight-heading, 1.35); text-wrap: balance; }
|
|
15
15
|
:where(p) { text-wrap: pretty; }
|
|
16
16
|
:where(code, pre, kbd, samp) { font-family: var(--cs-font-family-mono, ui-monospace, monospace); }
|
|
17
|
-
:where(:focus-visible) { outline:
|
|
17
|
+
:where(:focus-visible) { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre, #f4ba17); outline-offset: 2px; }
|