@cyberskill/design 1.2.0 → 1.3.8

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 (215) hide show
  1. package/DESIGN.md +4 -3
  2. package/README.md +20 -19
  3. package/SKILL.md +5 -5
  4. package/THIRD-PARTY-NOTICES.md +35 -0
  5. package/VERSION +1 -1
  6. package/_ds_bundle.js +701 -1342
  7. package/_esm/cs.mjs +2 -2
  8. package/_esm/react.mjs +6 -1
  9. package/_vendor/NOTICE.md +16 -0
  10. package/_vendor/babel/README.md +7 -0
  11. package/_vendor/babel/babel.min.js +4 -0
  12. package/_vendor/react/README.md +3 -0
  13. package/_vendor/react/react-dom.production.min.js +1 -0
  14. package/_vendor/react/react.production.min.js +1 -0
  15. package/assets/aurora-hoa.webp +0 -0
  16. package/assets/aurora-kim.webp +0 -0
  17. package/assets/aurora-moc.webp +0 -0
  18. package/assets/aurora-tho.webp +0 -0
  19. package/assets/aurora-thuy.webp +0 -0
  20. package/base/ai.css +8 -3
  21. package/base/collections.css +10 -4
  22. package/base/components.css +5 -2
  23. package/base/controls.css +58 -21
  24. package/base/data.css +1 -1
  25. package/base/feedback.css +9 -2
  26. package/base/forms.css +1 -1
  27. package/base/glass.css +1 -1
  28. package/base/interaction.css +6 -2
  29. package/base/navigation.css +1 -1
  30. package/base/reset.css +7 -1
  31. package/base/responsive.css +13 -12
  32. package/base/shell.css +8 -2
  33. package/components/_i18n/i18n.js +28 -3
  34. package/components/_i18n/strings.js +42 -24
  35. package/components/ai/ChatMessage.d.ts +2 -0
  36. package/components/ai/ChatMessage.jsx +8 -4
  37. package/components/ai/ConfidenceMeter.d.ts +2 -0
  38. package/components/ai/HumanReviewGate.d.ts +2 -0
  39. package/components/ai/PromptInput.d.ts +2 -0
  40. package/components/ai/TypingIndicator.d.ts +2 -0
  41. package/components/ai/ai-conversation.card.html +3 -3
  42. package/components/ai/ai-lumi.card.html +3 -3
  43. package/components/ai/ai.card.html +3 -3
  44. package/components/brand/brand.card.html +3 -3
  45. package/components/button/buttons.card.html +3 -3
  46. package/components/data/Image.jsx +18 -2
  47. package/components/data/Sortable.d.ts +5 -1
  48. package/components/data/Sortable.jsx +42 -9
  49. package/components/data/Sortable.prompt.md +4 -2
  50. package/components/data/Terminal.jsx +3 -2
  51. package/components/data/Tooltip.d.ts +2 -0
  52. package/components/data/Tooltip.jsx +6 -3
  53. package/components/data/Tree.d.ts +2 -1
  54. package/components/data/Tree.jsx +137 -16
  55. package/components/data/Tree.prompt.md +1 -1
  56. package/components/data/collections.card.html +3 -3
  57. package/components/data/data.card.html +3 -3
  58. package/components/datatable/DataTable.d.ts +24 -1
  59. package/components/datatable/DataTable.jsx +78 -5
  60. package/components/datatable/DataTable.prompt.md +2 -1
  61. package/components/datatable/datatable.card.html +20 -16
  62. package/components/dialog/dialog.card.html +3 -3
  63. package/components/feedback/Alert.d.ts +2 -0
  64. package/components/feedback/Alert.jsx +8 -2
  65. package/components/feedback/EmptyState.d.ts +2 -0
  66. package/components/feedback/EmptyState.jsx +6 -3
  67. package/components/feedback/ProgressBar.d.ts +2 -0
  68. package/components/feedback/ProgressBar.jsx +6 -3
  69. package/components/feedback/Toast.jsx +15 -1
  70. package/components/feedback/Toast.prompt.md +2 -1
  71. package/components/feedback/feedback-2.card.html +3 -3
  72. package/components/feedback/feedback.card.html +3 -3
  73. package/components/forms/Cascader.jsx +7 -2
  74. package/components/forms/FileUpload.d.ts +2 -0
  75. package/components/forms/Form.d.ts +3 -1
  76. package/components/forms/Form.jsx +9 -1
  77. package/components/forms/Form.prompt.md +1 -1
  78. package/components/forms/Mentions.d.ts +1 -1
  79. package/components/forms/Mentions.jsx +59 -7
  80. package/components/forms/Mentions.prompt.md +3 -1
  81. package/components/forms/Rating.d.ts +3 -2
  82. package/components/forms/Rating.jsx +34 -3
  83. package/components/forms/Rating.prompt.md +1 -1
  84. package/components/forms/Select.d.ts +2 -0
  85. package/components/forms/Select.jsx +6 -2
  86. package/components/forms/Slider.d.ts +2 -0
  87. package/components/forms/Slider.jsx +5 -2
  88. package/components/forms/Switch.d.ts +2 -0
  89. package/components/forms/Switch.jsx +7 -9
  90. package/components/forms/Toggle.d.ts +2 -0
  91. package/components/forms/Toggle.jsx +14 -2
  92. package/components/forms/forms-2.card.html +3 -3
  93. package/components/forms/forms.card.html +3 -3
  94. package/components/icon/Icon.d.ts +1 -1
  95. package/components/icon/Icon.prompt.md +1 -1
  96. package/components/icon/icon.card.html +3 -3
  97. package/components/logo/logo.card.html +3 -3
  98. package/components/navigation/CommandPalette.d.ts +2 -0
  99. package/components/navigation/Menu.d.ts +2 -0
  100. package/components/navigation/Menu.jsx +60 -6
  101. package/components/navigation/Steps.d.ts +2 -0
  102. package/components/navigation/Steps.jsx +6 -3
  103. package/components/navigation/Tabs.d.ts +2 -0
  104. package/components/navigation/Tabs.jsx +6 -3
  105. package/components/navigation/Toolbar.d.ts +3 -2
  106. package/components/navigation/Toolbar.jsx +117 -11
  107. package/components/navigation/Toolbar.prompt.md +1 -1
  108. package/components/navigation/navigation.card.html +3 -3
  109. package/components/navigation/shell.card.html +3 -3
  110. package/components/overlays/ContextMenu.d.ts +2 -0
  111. package/components/overlays/ContextMenu.jsx +6 -3
  112. package/components/overlays/Drawer.d.ts +2 -0
  113. package/components/overlays/alertdialog.card.html +3 -3
  114. package/components/overlays/overlays.card.html +3 -3
  115. package/components/textfield/textfield.card.html +3 -3
  116. package/dist/styles.min.css +312 -64
  117. package/docs/ci-cd.md +18 -13
  118. package/docs/consumer-grant.md +3 -0
  119. package/docs/consuming.md +7 -7
  120. package/docs/contrast-report.md +79 -1
  121. package/docs/conventions.md +17 -4
  122. package/docs/decisions.md +40 -2
  123. package/docs/deploy.md +17 -6
  124. package/docs/design-styles.md +1 -1
  125. package/docs/quality-gates.md +19 -11
  126. package/docs/release-runbook.md +78 -0
  127. package/docs/sync.md +1 -1
  128. package/docs/vi/ci-cd.md +16 -13
  129. package/docs/vi/consumer-grant.md +3 -0
  130. package/docs/vi/consuming.md +7 -7
  131. package/docs/vi/contrast-report.md +79 -1
  132. package/docs/vi/conventions.md +18 -5
  133. package/docs/vi/decisions.md +39 -2
  134. package/docs/vi/deploy.md +17 -6
  135. package/docs/vi/quality-gates.md +18 -11
  136. package/docs/vi/release-runbook.md +78 -0
  137. package/docs/vi/sync.md +1 -1
  138. package/docs/viewer.html +2 -2
  139. package/fonts/OFL.txt +98 -0
  140. package/guidelines/atomic-view.html +2 -2
  141. package/guidelines/brand-imagery.html +1 -1
  142. package/guidelines/elements-variants.html +5 -5
  143. package/guidelines/spacing-breakpoints.html +2 -1
  144. package/guidelines/surfaces-glass.html +1 -1
  145. package/llms.txt +4 -4
  146. package/package.json +28 -8
  147. package/templates/app-shell/AppShell.dc.html +3 -3
  148. package/templates/app-shell/content-schema.json +7 -0
  149. package/templates/article/Article.dc.html +3 -3
  150. package/templates/article/content-schema.json +7 -0
  151. package/templates/auth/Auth.dc.html +26 -10
  152. package/templates/auth/content-schema.json +25 -0
  153. package/templates/dashboard/Dashboard.dc.html +4 -4
  154. package/templates/dashboard/content-schema.json +7 -0
  155. package/templates/delivery-change-note/DeliveryChangeNote.dc.html +2 -2
  156. package/templates/delivery-runbook/DeliveryRunbook.dc.html +2 -2
  157. package/templates/email-safe/email-announcement.html +2 -2
  158. package/templates/email-safe/email-dunning.html +2 -2
  159. package/templates/email-safe/email-investor.html +2 -2
  160. package/templates/email-safe/email-launch.html +2 -2
  161. package/templates/email-safe/email-newsletter.html +2 -2
  162. package/templates/email-safe/email-status.html +2 -2
  163. package/templates/email-safe/email-transactional.html +2 -2
  164. package/templates/finance-dunning-email/FinanceDunningEmail.dc.html +2 -2
  165. package/templates/finance-expense-report/FinanceExpenseReport.dc.html +2 -2
  166. package/templates/finance-invoice/FinanceInvoice.dc.html +2 -2
  167. package/templates/finance-quote/FinanceQuote.dc.html +4 -4
  168. package/templates/hr-interview-kit/HrInterviewKit.dc.html +1 -1
  169. package/templates/marketing-case-study/MarketingCaseStudy.dc.html +1 -1
  170. package/templates/marketing-page/MarketingPage.dc.html +3 -3
  171. package/templates/marketing-page/content-schema.json +1 -0
  172. package/templates/settings/Settings.dc.html +3 -3
  173. package/templates/settings/content-schema.json +7 -0
  174. package/tokens/element-seeds.json +2 -2
  175. package/tokens/elements.css +193 -19
  176. package/tokens/native/CSTokens.kt +3 -2
  177. package/tokens/native/CSTokens.swift +3 -2
  178. package/tokens/native/cs_tokens.dart +3 -2
  179. package/tokens/provenance.json +8 -8
  180. package/tokens/spacing.css +2 -1
  181. package/tokens/tokens.dtcg.json +19 -14
  182. package/tokens/tokens.js +16 -15
  183. package/tokens/tokens.json +15 -14
  184. package/ui_kits/deck/index.html +1 -1
  185. package/ui_kits/status-hub/StatusHub.jsx +1 -1
  186. package/ui_kits/status-hub/login.html +52 -10
  187. package/ui_kits/status-hub/project.html +1 -1
  188. package/ui_kits/status-hub/settings.html +1 -1
  189. package/ui_kits/website/Website.jsx +1 -1
  190. package/ui_kits/website/careers.html +2 -2
  191. package/ui_kits/website/chat.html +1 -1
  192. package/ui_kits/website/site.css +1 -1
  193. package/ui_kits/website/work.html +2 -2
  194. package/assets/aurora-hoa.png +0 -0
  195. package/assets/aurora-kim.png +0 -0
  196. package/assets/aurora-moc.png +0 -0
  197. package/assets/aurora-thuy.png +0 -0
  198. package/docs/decisions/container-query-migration.md +0 -18
  199. package/docs/decisions/overlay-manager-design.md +0 -101
  200. package/docs/plans/cyberskill-design-system-audit-and-12-month-evolution-plan.md +0 -1490
  201. package/docs/status/assets/favicon.svg +0 -5
  202. package/docs/status/assets/status-legacy.css +0 -399
  203. package/docs/status/assets/status-legacy.js +0 -505
  204. package/docs/status/assets/status.css +0 -644
  205. package/docs/status/assets/status.js +0 -1308
  206. package/docs/status/data/status-feed.json +0 -1
  207. package/docs/status/data/task/TASK-REL-001.js +0 -1
  208. package/docs/status/data/task/TASK-REL-002.js +0 -1
  209. package/docs/status/index.html +0 -46
  210. package/docs/status/roadmap.html +0 -4
  211. package/docs/status/status-legacy.html +0 -122
  212. package/docs/tasks/BACKLOG.md +0 -26
  213. package/docs/tasks/_state/commit-links.yaml +0 -14
  214. package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +0 -55
  215. package/docs/tasks/release/TASK-REL-002-republish-1-1-1/spec.md +0 -54
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
- <rect width="64" height="64" rx="14" fill="#45210E"/>
3
- <rect y="50" width="64" height="14" fill="#F4BA17"/>
4
- <text x="32" y="42" font-family="Georgia, 'Times New Roman', serif" font-size="34" font-weight="700" fill="#ffffff" text-anchor="middle">D</text>
5
- </svg>
@@ -1,399 +0,0 @@
1
- /* Generated by @cyberskill/tokens. Do not edit directly. */
2
- :root {
3
- /* Light is the default theme. Dark/system are opt-in via [data-theme] (see @cyberskill/react theme layer). */
4
- color-scheme: light;
5
- --cs-color-brand-umber: #45210E;
6
- --cs-color-brand-ochre: #F4BA17;
7
- --cs-color-surface-page: #FFFDF8;
8
- --cs-color-surface-panel: #FFFFFF;
9
- --cs-color-surface-raised: #FBF4E9;
10
- --cs-color-text-primary: #45210E;
11
- --cs-color-text-inverse: #FFFFFF;
12
- --cs-color-text-accent: #6E3B0E;
13
- --cs-color-text-muted: #6E5A4C;
14
- --cs-color-semantic-success: #166534;
15
- --cs-color-semantic-danger: #B42318;
16
- --cs-color-semantic-warning: #92400E;
17
- --cs-color-semantic-info: #1D4ED8;
18
- --cs-color-accent-ochre: #F4BA17;
19
- --cs-color-border-default: #E7D9C6;
20
- --cs-space-0: 0px;
21
- --cs-space-1: 4px;
22
- --cs-space-2: 8px;
23
- --cs-space-3: 12px;
24
- --cs-space-4: 16px;
25
- --cs-space-5: 20px;
26
- --cs-space-6: 24px;
27
- --cs-space-8: 32px;
28
- --cs-space-10: 40px;
29
- --cs-space-12: 48px;
30
- --cs-space-16: 64px;
31
- --cs-space-20: 80px;
32
- --cs-space-24: 96px;
33
- --cs-radius-sm: 4px;
34
- --cs-radius-md: 8px;
35
- --cs-radius-full: 999px;
36
- --cs-font-family-ui: Be Vietnam Pro, ui-sans-serif, system-ui;
37
- --cs-font-family-mono: JetBrains Mono, ui-monospace, SFMono-Regular, Menlo, Consolas;
38
- --cs-font-lineHeight-body: 1.5;
39
- --cs-font-lineHeight-heading: 1.35;
40
- --cs-component-button-primary-bg: #45210E;
41
- --cs-component-button-primary-fg: #FFFFFF;
42
- --cs-component-button-gap: 8px;
43
- --cs-component-button-radius: 8px;
44
- --cs-component-button-sm-paddingY: 8px;
45
- --cs-component-button-sm-paddingX: 14px;
46
- --cs-component-button-sm-minHeight: 36px;
47
- --cs-component-button-md-paddingY: 12px;
48
- --cs-component-button-md-paddingX: 20px;
49
- --cs-component-button-md-minHeight: 44px;
50
- --cs-component-button-lg-paddingY: 16px;
51
- --cs-component-button-lg-paddingX: 28px;
52
- --cs-component-button-lg-minHeight: 52px;
53
- --cs-component-textfield-border-default: #BFA58F;
54
- --cs-component-textfield-paddingY: 10px;
55
- --cs-component-textfield-paddingX: 12px;
56
- --cs-component-textfield-minHeight: 44px;
57
- --cs-breakpoint-xs: 0px;
58
- --cs-breakpoint-sm: 640px;
59
- --cs-breakpoint-md: 768px;
60
- --cs-breakpoint-lg: 1024px;
61
- --cs-breakpoint-xl: 1280px;
62
- --cs-breakpoint-2xl: 1536px;
63
- --cs-depth-bg: 0;
64
- --cs-depth-section: 5;
65
- --cs-depth-card: 10;
66
- --cs-depth-nav: 50;
67
- --cs-depth-modal: 100;
68
- --cs-depth-toast: 200;
69
- --cs-glass-whisper-blur: 8px;
70
- --cs-glass-whisper-saturate: 110%;
71
- --cs-glass-whisper-opacity: 60%;
72
- --cs-glass-light-blur: 12px;
73
- --cs-glass-light-saturate: 130%;
74
- --cs-glass-light-opacity: 70%;
75
- --cs-glass-standard-blur: 16px;
76
- --cs-glass-standard-saturate: 150%;
77
- --cs-glass-standard-opacity: 80%;
78
- --cs-glass-heavy-blur: 24px;
79
- --cs-glass-heavy-saturate: 180%;
80
- --cs-glass-heavy-opacity: 90%;
81
- }
82
-
83
- /* status.css - the stylesheet for status-hub@2 (one page, three lenses).
84
- Built on @cyberskill/tokens; tokens.css is prepended at render time.
85
- Contract: raw colour literals live ONLY in the two token blocks below. Every component
86
- rule speaks in var(--cs-*). Dark is opt-in via [data-theme="dark"] on <html>, per CDS. */
87
-
88
- :root {
89
- /* page-local tokens: the CDS palette has no "text on a filled chip" role */
90
- --cs-status-on-ochre: #45210E; /* text on ochre fills - dark in both themes */
91
- --cs-status-on-fill: #FFFFFF; /* text on success / danger fills */
92
- --cs-status-todo: #E7D9C6; /* the "draft" segment - readable in both themes */
93
- --cs-status-header-bg: #45210E;
94
- --cs-status-header-fg: #FFFFFF;
95
- --cs-status-scrim: rgba(23, 17, 12, .45);
96
- --cs-status-shadow: rgba(23, 17, 12, .22);
97
- --cs-status-ghost-border: rgba(255, 255, 255, .25);
98
- }
99
-
100
- [data-theme="dark"] {
101
- color-scheme: dark;
102
- --cs-color-brand-umber: #F0E3D4;
103
- --cs-color-brand-ochre: #F4BA17;
104
- --cs-color-surface-page: #17110C;
105
- --cs-color-surface-panel: #211913;
106
- --cs-color-surface-raised: #2C221A;
107
- --cs-color-text-primary: #F3E9DC;
108
- --cs-color-text-inverse: #17110C;
109
- --cs-color-text-accent: #E9BE86;
110
- --cs-color-text-muted: #A9917C;
111
- --cs-color-semantic-success: #35A264;
112
- --cs-color-semantic-danger: #E4756A;
113
- --cs-color-semantic-warning: #D9A441;
114
- --cs-color-semantic-info: #7BA6F5;
115
- --cs-color-border-default: #3B2E24;
116
- --cs-component-textfield-border-default: #55432F;
117
- --cs-status-header-bg: #120D09;
118
- --cs-status-header-fg: #F3E9DC;
119
- --cs-status-on-fill: #17110C;
120
- --cs-status-todo: #59452F;
121
- }
122
-
123
- /* ---- base ---------------------------------------------------------------- */
124
- * { box-sizing: border-box; }
125
- html { scroll-behavior: smooth; }
126
- body {
127
- margin: 0;
128
- background: var(--cs-color-surface-page);
129
- color: var(--cs-color-text-primary);
130
- font-family: var(--cs-font-family-ui);
131
- font-size: 15px;
132
- line-height: var(--cs-font-lineHeight-body);
133
- -webkit-font-smoothing: antialiased;
134
- }
135
- a { color: var(--cs-color-text-accent); }
136
- button { font: inherit; color: inherit; }
137
- .wrap { max-width: 1320px; margin: 0 auto; padding: 0 var(--cs-space-6); }
138
- .mono, .code { font-family: var(--cs-font-family-mono); }
139
- .muted { color: var(--cs-color-text-muted); }
140
- .skip { position: absolute; left: -9999px; }
141
- .skip:focus { left: var(--cs-space-4); top: var(--cs-space-2); z-index: var(--cs-depth-toast);
142
- background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre);
143
- padding: var(--cs-space-2) var(--cs-space-3); border-radius: var(--cs-radius-md); }
144
- :focus-visible { outline: 2px solid var(--cs-color-brand-ochre); outline-offset: 2px; }
145
-
146
- /* ---- header -------------------------------------------------------------- */
147
- .hd { background: var(--cs-status-header-bg); color: var(--cs-status-header-fg);
148
- border-bottom: 3px solid var(--cs-color-brand-ochre); }
149
- .hd-in { display: flex; align-items: center; justify-content: space-between; gap: var(--cs-space-6);
150
- padding: var(--cs-space-5) var(--cs-space-6); flex-wrap: wrap; }
151
- .hd-id { display: flex; align-items: center; gap: var(--cs-space-4); }
152
- .hd-mark { width: 42px; height: 42px; flex: none; display: grid; place-items: center;
153
- border-radius: 12px; background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre);
154
- font-family: Georgia, "Times New Roman", serif; font-size: 22px; font-weight: 700; }
155
- .hd h1 { margin: 0; font-size: 24px; letter-spacing: .2px; line-height: var(--cs-font-lineHeight-heading); }
156
- .hd-sub { margin: 2px 0 0; font-size: 13.5px; opacity: .8; }
157
- .hd-side { display: flex; align-items: center; gap: var(--cs-space-4); }
158
- .hd-meta { margin: 0; font-size: 12.5px; opacity: .75; text-align: right; }
159
-
160
- /* ---- buttons ------------------------------------------------------------- */
161
- .btn { border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel);
162
- color: var(--cs-color-text-primary); border-radius: var(--cs-radius-md);
163
- padding: 7px 12px; cursor: pointer; font-size: 13.5px; font-weight: 600; }
164
- .btn:hover { border-color: var(--cs-color-brand-ochre); }
165
- .btn.sm { padding: 5px 10px; font-size: 12.5px; }
166
- .hd .btn.ghost { background: transparent; border-color: var(--cs-status-ghost-border);
167
- color: var(--cs-status-header-fg); width: 36px; height: 36px; padding: 0; }
168
-
169
- /* ---- deck ---------------------------------------------------------------- */
170
- .deck { margin: var(--cs-space-6) 0 var(--cs-space-4); display: grid; gap: var(--cs-space-4);
171
- grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); align-items: stretch; }
172
- .panel { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default);
173
- border-radius: 14px; padding: var(--cs-space-4) var(--cs-space-5); }
174
- .panel > h2 { margin: 0 0 var(--cs-space-3); font-size: 12px; text-transform: uppercase;
175
- letter-spacing: .09em; color: var(--cs-color-text-muted); }
176
- .kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: var(--cs-space-3);
177
- margin-bottom: var(--cs-space-4); }
178
- .kpi { text-align: left; border: 0; background: transparent; padding: 0; border-radius: var(--cs-radius-md); }
179
- button.kpi { cursor: pointer; }
180
- .kpi b { display: block; font-size: 24px; line-height: 1.15; }
181
- .kpi span { font-size: 12px; color: var(--cs-color-text-muted); }
182
- .kpi[data-on="1"] b, button.kpi:hover b { color: var(--cs-color-text-accent); }
183
- .bar-seg { height: 12px; border-radius: var(--cs-radius-full); background: var(--cs-color-surface-raised);
184
- overflow: hidden; display: flex; }
185
- .bar-seg i { display: block; height: 100%; }
186
- .seg-done { background: var(--cs-color-semantic-success); }
187
- .seg-active { background: var(--cs-color-brand-ochre); }
188
- .seg-hold { background: var(--cs-color-semantic-danger); }
189
- .seg-todo { background: var(--cs-status-todo); }
190
- .legend { display: flex; gap: var(--cs-space-4); flex-wrap: wrap; margin-top: var(--cs-space-3);
191
- font-size: 12.5px; color: var(--cs-color-text-muted); }
192
- .legend span { display: inline-flex; align-items: center; gap: 6px; }
193
- .dot { width: 10px; height: 10px; border-radius: 3px; display: inline-block; margin-right: 5px; }
194
- .spark { display: flex; align-items: flex-end; gap: 6px; height: 78px; margin-top: var(--cs-space-2); }
195
- .spark a { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center;
196
- gap: 4px; text-decoration: none; color: var(--cs-color-text-muted); font-size: 10.5px; }
197
- .spark i { display: block; width: 100%; background: var(--cs-color-brand-ochre);
198
- border-radius: 4px 4px 0 0; min-height: 3px; }
199
- .spark a:hover i { background: var(--cs-color-text-accent); }
200
- .spark b { font-size: 11px; color: var(--cs-color-text-primary); font-weight: 600; }
201
-
202
- /* ---- now shipping -------------------------------------------------------- */
203
- .now { background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-brand-ochre);
204
- border-left: 4px solid var(--cs-color-brand-ochre); border-radius: 12px;
205
- padding: var(--cs-space-4) var(--cs-space-5); margin-bottom: var(--cs-space-4); }
206
- .now h2 { margin: 0 0 var(--cs-space-2); font-size: 13px; text-transform: uppercase; letter-spacing: .08em; }
207
-
208
- /* ---- command bar --------------------------------------------------------- */
209
- .bar { position: sticky; top: 0; z-index: var(--cs-depth-nav);
210
- background: var(--cs-color-surface-page);
211
- border: 1px solid var(--cs-color-border-default); border-radius: 14px;
212
- padding: var(--cs-space-3) var(--cs-space-4); margin-bottom: var(--cs-space-4); }
213
- .bar-top { display: flex; gap: var(--cs-space-3); align-items: center; flex-wrap: wrap; }
214
- .bar-bot { display: flex; gap: var(--cs-space-2); align-items: center; flex-wrap: wrap;
215
- margin-top: var(--cs-space-3); }
216
- .srch { flex: 1 1 340px; display: flex; align-items: center; gap: var(--cs-space-2);
217
- background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default);
218
- border-radius: var(--cs-radius-full); padding: 0 var(--cs-space-4); min-height: 42px; }
219
- .srch:focus-within { border-color: var(--cs-color-brand-ochre); }
220
- .srch .ic { color: var(--cs-color-text-muted); font-size: 17px; }
221
- .srch input { flex: 1; border: 0; background: transparent; outline: 0; min-width: 0;
222
- color: var(--cs-color-text-primary); font-size: 14px; }
223
- .lenses { display: flex; gap: 4px; background: var(--cs-color-surface-raised);
224
- border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-full); padding: 3px; }
225
- .ln { border: 0; background: transparent; border-radius: var(--cs-radius-full);
226
- padding: 7px 15px; font-size: 13.5px; font-weight: 600; cursor: pointer; color: var(--cs-color-text-accent); }
227
- .ln[aria-selected="true"] { background: var(--cs-color-brand-umber); color: var(--cs-color-text-inverse); }
228
- [data-theme="dark"] .ln[aria-selected="true"] { background: var(--cs-color-brand-ochre);
229
- color: var(--cs-status-on-ochre); }
230
- .facet { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--cs-color-text-muted); }
231
- .facet select { background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary);
232
- border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-sm);
233
- padding: 5px 8px; font-family: inherit; font-size: 13px; max-width: 190px; }
234
- .cnt { margin-left: auto; font-size: 12.5px; color: var(--cs-color-text-muted); }
235
- .chipbar { display: flex; gap: 6px; flex-wrap: wrap; margin-top: var(--cs-space-2); }
236
- .fchip { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600;
237
- background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-border-default);
238
- border-radius: var(--cs-radius-full); padding: 3px 6px 3px 10px; }
239
- .fchip button { border: 0; background: transparent; cursor: pointer; color: var(--cs-color-text-muted);
240
- line-height: 1; padding: 2px 4px; border-radius: var(--cs-radius-full); }
241
- .fchip button:hover { color: var(--cs-color-semantic-danger); }
242
-
243
- /* ---- task chips and pills -------------------------------------------------- */
244
- .task-chips { display: flex; flex-wrap: wrap; gap: 5px; }
245
- .chip { font-family: var(--cs-font-family-mono); font-size: 11px; font-weight: 600;
246
- padding: 3px 7px; border-radius: 6px; cursor: pointer; display: inline-block;
247
- background: var(--cs-color-surface-raised); color: var(--cs-color-text-accent);
248
- border: 1px solid var(--cs-color-border-default); }
249
- .chip:hover { border-color: var(--cs-color-brand-ochre); }
250
- .chip.done { background: var(--cs-color-semantic-success); color: var(--cs-status-on-fill);
251
- border-color: transparent; }
252
- .chip.active { background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre);
253
- border-color: transparent; }
254
- .chip.hold { background: var(--cs-color-semantic-danger); color: var(--cs-status-on-fill);
255
- border-color: transparent; }
256
- .chip.ghost { opacity: .6; border-style: dashed; }
257
- .pill { display: inline-block; font-size: 11px; font-weight: 700; padding: 2px 8px;
258
- border-radius: var(--cs-radius-full); text-transform: uppercase; letter-spacing: .04em; }
259
- .pill.done { background: var(--cs-color-semantic-success); color: var(--cs-status-on-fill); }
260
- .pill.active { background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre); }
261
- .pill.hold { background: var(--cs-color-semantic-danger); color: var(--cs-status-on-fill); }
262
- .pill.todo { background: var(--cs-color-border-default); color: var(--cs-color-text-accent); }
263
- .pri { font-size: 11px; font-weight: 700; letter-spacing: .04em; }
264
- /* task@1 FM-105 priority is p0..p3. The MoSCoW classes are kept so a repo that has
265
- not run the 2026-07-14 schema migration still renders coloured priorities rather
266
- than silently falling back to unstyled text. */
267
- .pri.p0, .pri.MUST { color: var(--cs-color-semantic-danger); }
268
- .pri.p1, .pri.SHOULD { color: var(--cs-color-semantic-warning); }
269
- .pri.p2, .pri.p3, .pri.COULD, .pri.MAY { color: var(--cs-color-text-muted); }
270
-
271
- /* ---- lens: board --------------------------------------------------------- */
272
- .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: var(--cs-space-4); }
273
- .card { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default);
274
- border-radius: 14px; padding: var(--cs-space-4); }
275
- .card.hot { border-color: var(--cs-color-brand-ochre); }
276
- .card-h { display: flex; align-items: baseline; justify-content: space-between; gap: var(--cs-space-2); }
277
- .card-h h3 { margin: 0; font-size: 15px; line-height: var(--cs-font-lineHeight-heading); }
278
- .card-h h3 .k { color: var(--cs-color-brand-umber); font-weight: 700; }
279
- .card-h .pct { font-size: 12.5px; color: var(--cs-color-text-muted); white-space: nowrap; }
280
- .minibar { height: 6px; border-radius: var(--cs-radius-full); background: var(--cs-color-surface-raised);
281
- overflow: hidden; display: flex; margin: var(--cs-space-2) 0 var(--cs-space-3); }
282
- .minibar i { display: block; height: 100%; }
283
-
284
- /* ---- lens: table --------------------------------------------------------- */
285
- .tbl-wrap { border: 1px solid var(--cs-color-border-default); border-radius: 14px; overflow: hidden;
286
- background: var(--cs-color-surface-panel); }
287
- table { border-collapse: collapse; width: 100%; font-size: 13px; }
288
- th, td { text-align: left; padding: 8px 12px; border-bottom: 1px solid var(--cs-color-border-default);
289
- vertical-align: top; }
290
- thead th { position: sticky; top: 78px; z-index: 1; background: var(--cs-color-surface-raised);
291
- font-size: 11.5px; text-transform: uppercase; letter-spacing: .06em; color: var(--cs-color-text-muted);
292
- cursor: pointer; white-space: nowrap; }
293
- thead th[aria-sort="ascending"]::after { content: " \2191"; }
294
- thead th[aria-sort="descending"]::after { content: " \2193"; }
295
- tbody tr { cursor: pointer; }
296
- tbody tr:hover { background: var(--cs-color-surface-raised); }
297
- tbody tr:last-child td { border-bottom: 0; }
298
- td.t { max-width: 520px; }
299
-
300
- /* ---- lens: releases ------------------------------------------------------ */
301
- .rels { display: grid; gap: var(--cs-space-3); }
302
- .rel { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default);
303
- border-radius: 14px; padding: var(--cs-space-4) var(--cs-space-5); display: grid;
304
- grid-template-columns: 30px 1fr; gap: var(--cs-space-4); }
305
- .rel.now { border-color: var(--cs-color-brand-ochre); }
306
- .rel .tick { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center;
307
- font-size: 12px; font-weight: 700; color: var(--cs-status-on-fill);
308
- background: var(--cs-color-semantic-success); }
309
- .rel.now .tick { background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre); }
310
- .rel-h { display: flex; align-items: baseline; gap: var(--cs-space-3); flex-wrap: wrap; }
311
- .rel-h b { font-size: 17px; font-family: var(--cs-font-family-mono); }
312
- .rel-sec { margin-top: var(--cs-space-3); }
313
- .rel-sec h4 { margin: 0 0 var(--cs-space-1); font-size: 11.5px; text-transform: uppercase;
314
- letter-spacing: .07em; color: var(--cs-color-text-muted); }
315
- .rel-sec ul { margin: 0; padding-left: 18px; font-size: 13.5px; }
316
- .rel-sec li { margin: 3px 0; }
317
- .rel details { margin-top: var(--cs-space-3); }
318
- .rel summary { cursor: pointer; font-size: 12.5px; color: var(--cs-color-text-muted); }
319
- .rel .task-chips { margin-top: var(--cs-space-2); }
320
- .relnote { font-size: 12.5px; color: var(--cs-color-text-muted); margin: var(--cs-space-2) 0 0; }
321
-
322
- /* ---- drawer -------------------------------------------------------------- */
323
- .scrim { position: fixed; inset: 0; background: var(--cs-status-scrim); z-index: var(--cs-depth-modal); }
324
- .drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(760px, 100%);
325
- z-index: calc(var(--cs-depth-modal) + 1); background: var(--cs-color-surface-page);
326
- border-left: 1px solid var(--cs-color-border-default);
327
- box-shadow: -18px 0 48px var(--cs-status-shadow); display: flex; flex-direction: column; }
328
- .dw-h { padding: var(--cs-space-4) var(--cs-space-5); border-bottom: 1px solid var(--cs-color-border-default);
329
- background: var(--cs-color-surface-panel); }
330
- .dw-h .row { display: flex; align-items: center; gap: var(--cs-space-2); flex-wrap: wrap; }
331
- .dw-h h2 { margin: var(--cs-space-2) 0 0; font-size: 19px; line-height: var(--cs-font-lineHeight-heading); }
332
- .dw-x { margin-left: auto; border: 0; background: transparent; cursor: pointer; font-size: 22px;
333
- line-height: 1; color: var(--cs-color-text-muted); padding: 2px 6px; }
334
- .dw-x:hover { color: var(--cs-color-semantic-danger); }
335
- .dw-tabs { display: flex; gap: 4px; padding: 0 var(--cs-space-5); background: var(--cs-color-surface-panel);
336
- border-bottom: 1px solid var(--cs-color-border-default); }
337
- .dw-tab { border: 0; background: transparent; cursor: pointer; padding: 9px 12px; font-size: 13.5px;
338
- font-weight: 600; color: var(--cs-color-text-muted); border-bottom: 2px solid transparent; }
339
- .dw-tab[aria-selected="true"] { color: var(--cs-color-text-primary);
340
- border-bottom-color: var(--cs-color-brand-ochre); }
341
- .dw-b { overflow: auto; padding: var(--cs-space-5); flex: 1; }
342
- .meta { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--cs-space-3);
343
- margin: 0 0 var(--cs-space-4); }
344
- .meta div { min-width: 0; }
345
- .meta dt { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--cs-color-text-muted); }
346
- .meta dd { margin: 2px 0 0; font-size: 13.5px; word-break: break-word; }
347
- .sect { margin-top: var(--cs-space-5); }
348
- .sect h3 { margin: 0 0 var(--cs-space-2); font-size: 12px; text-transform: uppercase;
349
- letter-spacing: .08em; color: var(--cs-color-text-muted); }
350
- .tasks { margin: 0; padding-left: 18px; font-size: 13.5px; }
351
- .tasks li { margin: 3px 0; }
352
- .risk { background: var(--cs-color-surface-raised); border-left: 3px solid var(--cs-color-semantic-danger);
353
- border-radius: var(--cs-radius-md); padding: var(--cs-space-3) var(--cs-space-4); font-size: 13.5px; }
354
- .rel-links { display: grid; gap: var(--cs-space-4); }
355
- .rel-links h3 { margin: 0 0 var(--cs-space-2); font-size: 12px; text-transform: uppercase;
356
- letter-spacing: .08em; color: var(--cs-color-text-muted); }
357
- .load { color: var(--cs-color-text-muted); font-size: 13.5px; }
358
- .toc { position: sticky; top: 0; background: var(--cs-color-surface-page); padding-bottom: var(--cs-space-2);
359
- margin-bottom: var(--cs-space-3); border-bottom: 1px solid var(--cs-color-border-default);
360
- display: flex; gap: 6px; flex-wrap: wrap; }
361
- .toc a { font-size: 11.5px; text-decoration: none; border: 1px solid var(--cs-color-border-default);
362
- border-radius: var(--cs-radius-full); padding: 3px 9px; color: var(--cs-color-text-accent); }
363
- .toc a:hover { border-color: var(--cs-color-brand-ochre); }
364
-
365
- /* ---- the task spec, rendered ----------------------------------------------- */
366
- .spec { font-size: 14px; }
367
- .spec h1, .spec h2 { font-size: 16px; margin: var(--cs-space-5) 0 var(--cs-space-2);
368
- padding-bottom: 4px; border-bottom: 1px solid var(--cs-color-border-default); }
369
- .spec h3 { font-size: 14px; margin: var(--cs-space-4) 0 var(--cs-space-1); }
370
- .spec p, .spec li { line-height: 1.6; }
371
- .spec pre { background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-border-default);
372
- border-radius: var(--cs-radius-md); padding: var(--cs-space-3); overflow: auto; font-size: 12.5px; }
373
- .spec code { font-family: var(--cs-font-family-mono); font-size: 12.5px;
374
- background: var(--cs-color-surface-raised); padding: 1px 5px; border-radius: var(--cs-radius-sm); }
375
- .spec pre code { background: transparent; padding: 0; }
376
- .spec table { font-size: 12.5px; margin: var(--cs-space-3) 0; }
377
- .spec th, .spec td { border: 1px solid var(--cs-color-border-default); }
378
- .spec blockquote { margin: var(--cs-space-3) 0; padding-left: var(--cs-space-4);
379
- border-left: 3px solid var(--cs-color-brand-ochre); color: var(--cs-color-text-muted); }
380
- .spec img { max-width: 100%; }
381
-
382
- /* ---- misc ---------------------------------------------------------------- */
383
- .empty { text-align: center; color: var(--cs-color-text-muted); padding: var(--cs-space-16) 0; }
384
- .groupq { margin: var(--cs-space-5) 0 var(--cs-space-3); font-size: 12px; text-transform: uppercase;
385
- letter-spacing: .08em; color: var(--cs-color-text-muted); }
386
- .nojs { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default);
387
- border-radius: 14px; padding: var(--cs-space-4); }
388
- .ft { margin: var(--cs-space-12) 0 var(--cs-space-16); text-align: center; font-size: 12px;
389
- color: var(--cs-color-text-muted); }
390
- [hidden] { display: none !important; }
391
-
392
- @media (max-width: 900px) {
393
- .deck { grid-template-columns: 1fr; }
394
- .hd-meta { text-align: left; }
395
- thead th { top: 0; }
396
- }
397
- @media print {
398
- .bar, .drawer, .scrim, .hd-side { display: none !important; }
399
- }