phosphor-ui 0.3.39-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +267 -0
  3. package/dist/cjs/index.js +2 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/package.json +3 -0
  6. package/dist/cjs/styles/components.css +10743 -0
  7. package/dist/esm/ascii.d.ts +3 -0
  8. package/dist/esm/components/admin/AdminShell/AdminShell.d.ts +36 -0
  9. package/dist/esm/components/admin/AdminShell/index.d.ts +2 -0
  10. package/dist/esm/components/admin/ContentEditor/ContentEditor.d.ts +63 -0
  11. package/dist/esm/components/admin/ContentEditor/EditorShell.d.ts +15 -0
  12. package/dist/esm/components/admin/ContentEditor/PairListField.d.ts +11 -0
  13. package/dist/esm/components/admin/ContentEditor/RepeaterField.d.ts +16 -0
  14. package/dist/esm/components/admin/ContentEditor/StatusSelect.d.ts +7 -0
  15. package/dist/esm/components/admin/ContentEditor/TagInput.d.ts +11 -0
  16. package/dist/esm/components/admin/ContentEditor/index.d.ts +12 -0
  17. package/dist/esm/components/admin/CourseEditor/CourseEditor.d.ts +28 -0
  18. package/dist/esm/components/admin/CourseEditor/index.d.ts +2 -0
  19. package/dist/esm/components/admin/LessonEditor/LessonEditor.d.ts +27 -0
  20. package/dist/esm/components/admin/LessonEditor/index.d.ts +2 -0
  21. package/dist/esm/components/admin/NoteEditor/NoteEditor.d.ts +18 -0
  22. package/dist/esm/components/admin/NoteEditor/index.d.ts +2 -0
  23. package/dist/esm/components/admin/ProjectEditor/ProjectEditor.d.ts +26 -0
  24. package/dist/esm/components/admin/ProjectEditor/index.d.ts +2 -0
  25. package/dist/esm/components/admin/index.d.ts +6 -0
  26. package/dist/esm/components/atoms/Avatar/Avatar.d.ts +9 -0
  27. package/dist/esm/components/atoms/Avatar/index.d.ts +2 -0
  28. package/dist/esm/components/atoms/Badge/Badge.d.ts +9 -0
  29. package/dist/esm/components/atoms/Badge/index.d.ts +2 -0
  30. package/dist/esm/components/atoms/Button/Button.d.ts +23 -0
  31. package/dist/esm/components/atoms/Button/index.d.ts +2 -0
  32. package/dist/esm/components/atoms/Checkbox/Checkbox.d.ts +14 -0
  33. package/dist/esm/components/atoms/Checkbox/index.d.ts +2 -0
  34. package/dist/esm/components/atoms/DropdownMenu/DropdownMenu.d.ts +25 -0
  35. package/dist/esm/components/atoms/DropdownMenu/index.d.ts +2 -0
  36. package/dist/esm/components/atoms/Glyph/Glyph.d.ts +14 -0
  37. package/dist/esm/components/atoms/Glyph/index.d.ts +2 -0
  38. package/dist/esm/components/atoms/Headings/Headings.d.ts +17 -0
  39. package/dist/esm/components/atoms/Headings/index.d.ts +2 -0
  40. package/dist/esm/components/atoms/Hr/Hr.d.ts +2 -0
  41. package/dist/esm/components/atoms/Hr/index.d.ts +1 -0
  42. package/dist/esm/components/atoms/Input/Input.d.ts +41 -0
  43. package/dist/esm/components/atoms/Input/index.d.ts +2 -0
  44. package/dist/esm/components/atoms/Kbd/Kbd.d.ts +6 -0
  45. package/dist/esm/components/atoms/Kbd/index.d.ts +1 -0
  46. package/dist/esm/components/atoms/Link/Link.d.ts +7 -0
  47. package/dist/esm/components/atoms/Link/index.d.ts +2 -0
  48. package/dist/esm/components/atoms/ProgressBar/ProgressBar.d.ts +13 -0
  49. package/dist/esm/components/atoms/ProgressBar/index.d.ts +2 -0
  50. package/dist/esm/components/atoms/ReadingRail/ReadingRail.d.ts +5 -0
  51. package/dist/esm/components/atoms/ReadingRail/index.d.ts +1 -0
  52. package/dist/esm/components/atoms/StatPill/StatPill.d.ts +9 -0
  53. package/dist/esm/components/atoms/StatPill/index.d.ts +2 -0
  54. package/dist/esm/components/atoms/Tag/Tag.d.ts +18 -0
  55. package/dist/esm/components/atoms/Tag/index.d.ts +2 -0
  56. package/dist/esm/components/atoms/Text/Text.d.ts +18 -0
  57. package/dist/esm/components/atoms/Text/index.d.ts +2 -0
  58. package/dist/esm/components/atoms/index.d.ts +17 -0
  59. package/dist/esm/components/atoms/primitive.d.ts +7 -0
  60. package/dist/esm/components/content/ArticleList/ArticleList.d.ts +14 -0
  61. package/dist/esm/components/content/ArticleList/index.d.ts +1 -0
  62. package/dist/esm/components/content/CodeBlock/CodeBlock.d.ts +21 -0
  63. package/dist/esm/components/content/CodeBlock/index.d.ts +3 -0
  64. package/dist/esm/components/content/CodeBlock/phosphorTheme.d.ts +2 -0
  65. package/dist/esm/components/content/MdxComponents/MdxComponents.d.ts +16 -0
  66. package/dist/esm/components/content/MdxComponents/index.d.ts +2 -0
  67. package/dist/esm/components/content/PostFrontmatter/PostFrontmatter.d.ts +10 -0
  68. package/dist/esm/components/content/PostFrontmatter/index.d.ts +2 -0
  69. package/dist/esm/components/content/Prose/Prose.d.ts +7 -0
  70. package/dist/esm/components/content/Prose/index.d.ts +2 -0
  71. package/dist/esm/components/content/index.d.ts +6 -0
  72. package/dist/esm/components/index.d.ts +145 -0
  73. package/dist/esm/components/molecules/AuthorCard/AuthorCard.d.ts +13 -0
  74. package/dist/esm/components/molecules/AuthorCard/index.d.ts +2 -0
  75. package/dist/esm/components/molecules/Breadcrumbs/Breadcrumbs.d.ts +13 -0
  76. package/dist/esm/components/molecules/Breadcrumbs/index.d.ts +2 -0
  77. package/dist/esm/components/molecules/Callout/Callout.d.ts +13 -0
  78. package/dist/esm/components/molecules/Callout/index.d.ts +2 -0
  79. package/dist/esm/components/molecules/CheckboxField/index.d.ts +2 -0
  80. package/dist/esm/components/molecules/CourseCard/index.d.ts +2 -0
  81. package/dist/esm/components/molecules/EmptyState/EmptyState.d.ts +16 -0
  82. package/dist/esm/components/molecules/EmptyState/index.d.ts +2 -0
  83. package/dist/esm/components/molecules/FeatureList/FeatureList.d.ts +16 -0
  84. package/dist/esm/components/molecules/FeatureList/index.d.ts +2 -0
  85. package/dist/esm/components/molecules/Field/Field.d.ts +25 -0
  86. package/dist/esm/components/molecules/Field/index.d.ts +2 -0
  87. package/dist/esm/components/molecules/FormField/Form.d.ts +38 -0
  88. package/dist/esm/components/molecules/FormField/FormField.d.ts +17 -0
  89. package/dist/esm/components/molecules/FormField/index.d.ts +4 -0
  90. package/dist/esm/components/molecules/HeaderNav/HeaderNav.d.ts +14 -0
  91. package/dist/esm/components/molecules/HeaderNav/index.d.ts +2 -0
  92. package/dist/esm/components/molecules/InputField/index.d.ts +2 -0
  93. package/dist/esm/components/molecules/LessonRow/LessonRow.d.ts +18 -0
  94. package/dist/esm/components/molecules/LessonRow/index.d.ts +2 -0
  95. package/dist/esm/components/molecules/List/List.d.ts +22 -0
  96. package/dist/esm/components/molecules/List/index.d.ts +2 -0
  97. package/dist/esm/components/molecules/LocaleSwitch/LocaleSwitch.d.ts +17 -0
  98. package/dist/esm/components/molecules/LocaleSwitch/index.d.ts +2 -0
  99. package/dist/esm/components/molecules/Modal/Modal.d.ts +25 -0
  100. package/dist/esm/components/molecules/Modal/index.d.ts +2 -0
  101. package/dist/esm/components/molecules/Pagination/Pagination.d.ts +17 -0
  102. package/dist/esm/components/molecules/Pagination/index.d.ts +2 -0
  103. package/dist/esm/components/molecules/PostFrontmatter/index.d.ts +2 -0
  104. package/dist/esm/components/molecules/PostMeta/PostMeta.d.ts +14 -0
  105. package/dist/esm/components/molecules/PostMeta/index.d.ts +2 -0
  106. package/dist/esm/components/molecules/PrereqList/PrereqList.d.ts +14 -0
  107. package/dist/esm/components/molecules/PrereqList/index.d.ts +2 -0
  108. package/dist/esm/components/molecules/SearchResult/SearchResult.d.ts +23 -0
  109. package/dist/esm/components/molecules/SearchResult/index.d.ts +2 -0
  110. package/dist/esm/components/molecules/Select/Select.d.ts +23 -0
  111. package/dist/esm/components/molecules/Select/index.d.ts +2 -0
  112. package/dist/esm/components/molecules/SelectField/index.d.ts +2 -0
  113. package/dist/esm/components/molecules/ShareBar/ShareBar.d.ts +12 -0
  114. package/dist/esm/components/molecules/ShareBar/index.d.ts +2 -0
  115. package/dist/esm/components/molecules/Stepper/Stepper.d.ts +26 -0
  116. package/dist/esm/components/molecules/Stepper/index.d.ts +2 -0
  117. package/dist/esm/components/molecules/TableOfContents/TableOfContents.d.ts +23 -0
  118. package/dist/esm/components/molecules/TableOfContents/index.d.ts +2 -0
  119. package/dist/esm/components/molecules/Tabs/Tabs.d.ts +21 -0
  120. package/dist/esm/components/molecules/Tabs/index.d.ts +2 -0
  121. package/dist/esm/components/molecules/TextareaField/index.d.ts +2 -0
  122. package/dist/esm/components/molecules/Timeline/Timeline.d.ts +14 -0
  123. package/dist/esm/components/molecules/Timeline/index.d.ts +2 -0
  124. package/dist/esm/components/molecules/Toast/Toast.d.ts +18 -0
  125. package/dist/esm/components/molecules/Toast/index.d.ts +2 -0
  126. package/dist/esm/components/molecules/Tooltip/Tooltip.d.ts +10 -0
  127. package/dist/esm/components/molecules/Tooltip/index.d.ts +2 -0
  128. package/dist/esm/components/molecules/index.d.ts +27 -0
  129. package/dist/esm/components/organisms/AsciiBanner/AsciiBanner.d.ts +21 -0
  130. package/dist/esm/components/organisms/AsciiBanner/index.d.ts +2 -0
  131. package/dist/esm/components/organisms/CourseCard/CourseCard.d.ts +24 -0
  132. package/dist/esm/components/organisms/CourseCard/index.d.ts +2 -0
  133. package/dist/esm/components/organisms/CrtShell/CrtShell.d.ts +10 -0
  134. package/dist/esm/components/organisms/CrtShell/index.d.ts +2 -0
  135. package/dist/esm/components/organisms/Exercise/Exercise.d.ts +15 -0
  136. package/dist/esm/components/organisms/Exercise/index.d.ts +2 -0
  137. package/dist/esm/components/organisms/Footer/Footer.d.ts +19 -0
  138. package/dist/esm/components/organisms/Footer/index.d.ts +2 -0
  139. package/dist/esm/components/organisms/Glyphs/Glyphs.d.ts +11 -0
  140. package/dist/esm/components/organisms/Glyphs/index.d.ts +4 -0
  141. package/dist/esm/components/organisms/Header/Header.d.ts +35 -0
  142. package/dist/esm/components/organisms/Header/index.d.ts +2 -0
  143. package/dist/esm/components/organisms/HeaderNav/index.d.ts +2 -0
  144. package/dist/esm/components/organisms/HeroFrame/HeroFrame.d.ts +42 -0
  145. package/dist/esm/components/organisms/HeroFrame/index.d.ts +2 -0
  146. package/dist/esm/components/organisms/LoginForm/LoginForm.d.ts +16 -0
  147. package/dist/esm/components/organisms/LoginForm/index.d.ts +2 -0
  148. package/dist/esm/components/organisms/ModuleAccordion/ModuleAccordion.d.ts +24 -0
  149. package/dist/esm/components/organisms/ModuleAccordion/index.d.ts +2 -0
  150. package/dist/esm/components/organisms/NerdTree/NerdTree.d.ts +29 -0
  151. package/dist/esm/components/organisms/NerdTree/index.d.ts +2 -0
  152. package/dist/esm/components/organisms/PdaWindow/PdaWindow.d.ts +8 -0
  153. package/dist/esm/components/organisms/PdaWindow/index.d.ts +2 -0
  154. package/dist/esm/components/organisms/PostHeader/PostHeader.d.ts +19 -0
  155. package/dist/esm/components/organisms/PostHeader/index.d.ts +2 -0
  156. package/dist/esm/components/organisms/PostListing/PostListing.d.ts +30 -0
  157. package/dist/esm/components/organisms/PostListing/index.d.ts +2 -0
  158. package/dist/esm/components/organisms/RelatedPosts/RelatedPosts.d.ts +15 -0
  159. package/dist/esm/components/organisms/RelatedPosts/index.d.ts +2 -0
  160. package/dist/esm/components/organisms/Search/Search.d.ts +17 -0
  161. package/dist/esm/components/organisms/Search/index.d.ts +2 -0
  162. package/dist/esm/components/organisms/SeriesNav/SeriesNav.d.ts +14 -0
  163. package/dist/esm/components/organisms/SeriesNav/index.d.ts +2 -0
  164. package/dist/esm/components/organisms/VideoPlayer/VideoPlayer.d.ts +24 -0
  165. package/dist/esm/components/organisms/VideoPlayer/index.d.ts +2 -0
  166. package/dist/esm/components/organisms/index.d.ts +19 -0
  167. package/dist/esm/components/pages/Post/index.d.ts +2 -0
  168. package/dist/esm/components/pages/index.d.ts +1 -0
  169. package/dist/esm/components/presets/SiteShell/index.d.ts +2 -0
  170. package/dist/esm/components/presets/index.d.ts +1 -0
  171. package/dist/esm/components/templates/Layout/Layout.d.ts +1786 -0
  172. package/dist/esm/components/templates/Layout/index.d.ts +2 -0
  173. package/dist/esm/components/templates/MainframeLayout/MainframeLayout.d.ts +39 -0
  174. package/dist/esm/components/templates/MainframeLayout/index.d.ts +2 -0
  175. package/dist/esm/components/templates/PostTemplate/Post.d.ts +30 -0
  176. package/dist/esm/components/templates/PostTemplate/index.d.ts +2 -0
  177. package/dist/esm/components/templates/SiteShell/SiteShell.d.ts +26 -0
  178. package/dist/esm/components/templates/SiteShell/index.d.ts +2 -0
  179. package/dist/esm/components/templates/index.d.ts +4 -0
  180. package/dist/esm/foundations/animation/index.d.ts +16 -0
  181. package/dist/esm/foundations/effects/index.d.ts +9 -0
  182. package/dist/esm/foundations/glyphs/catalog.d.ts +103 -0
  183. package/dist/esm/foundations/glyphs/index.d.ts +2 -0
  184. package/dist/esm/foundations/index.d.ts +8 -0
  185. package/dist/esm/foundations/mdx/index.d.ts +3 -0
  186. package/dist/esm/foundations/syntax/index.d.ts +1 -0
  187. package/dist/esm/foundations/tokens/index.d.ts +32 -0
  188. package/dist/esm/foundations/typography/index.d.ts +8 -0
  189. package/dist/esm/foundations/typography/variants.d.ts +3 -0
  190. package/dist/esm/foundations/utils/index.d.ts +1 -0
  191. package/dist/esm/foundations/utils/slug.d.ts +1 -0
  192. package/dist/esm/hooks/index.d.ts +3 -0
  193. package/dist/esm/hooks/useHashRoute.d.ts +6 -0
  194. package/dist/esm/hooks/useReadingProgress.d.ts +4 -0
  195. package/dist/esm/index.d.ts +3 -0
  196. package/dist/esm/index.js +2 -0
  197. package/dist/esm/index.js.map +1 -0
  198. package/dist/esm/package.json +3 -0
  199. package/dist/esm/styles/components.css +10743 -0
  200. package/dist/esm/utils/browser.d.ts +5 -0
  201. package/dist/esm/utils/classNames.d.ts +2 -0
  202. package/dist/styles/components.css +10743 -0
  203. package/dist/styles/fonts/bender/Bender-Black.woff +0 -0
  204. package/dist/styles/fonts/bender/Bender-BlackItalic.woff +0 -0
  205. package/dist/styles/fonts/bender/Bender-Bold.woff +0 -0
  206. package/dist/styles/fonts/bender/Bender-BoldItalic.woff +0 -0
  207. package/dist/styles/fonts/bender/Bender-Italic.woff +0 -0
  208. package/dist/styles/fonts/bender/Bender-Light.woff +0 -0
  209. package/dist/styles/fonts/bender/Bender-LightItalic.woff +0 -0
  210. package/dist/styles/fonts/bender/Bender.woff +0 -0
  211. package/dist/styles/fonts/vcr_osd_mono/VCR_OSD_MONO_1.001.ttf +0 -0
  212. package/dist/styles/fonts.css +73 -0
  213. package/dist/styles/global.css +486 -0
  214. package/dist/styles/phosphor.css +5 -0
  215. package/dist/styles/tokens.css +382 -0
  216. package/dist/styles/typography.css +193 -0
  217. package/package.json +145 -0
@@ -0,0 +1,382 @@
1
+ :root {
2
+ color-scheme: dark;
3
+
4
+ /* ── primary phosphor column ───────────────────────────── */
5
+ --phosphor: #2cff7a; /* primary tube glow */
6
+ --phosphor-bright: #b6ffce; /* paper-mint highlight */
7
+ --phosphor-dim: #1fb854; /* mid-green */
8
+ --phosphor-fade: #0a4d22; /* deep forest */
9
+
10
+ /* ── accent phosphor (slightly cooler / paler) ─────────── */
11
+ --magenta: #62ff9a; /* accent green (legacy var name) */
12
+ --magenta-bright: #d6ffe2;
13
+ --magenta-deep: #157a3b;
14
+ --magenta-fade: #06321a;
15
+
16
+ /* ── extra single-channel hues ─────────────────────────── */
17
+ --moss: #00cec8;
18
+ --spring: #00ff7f;
19
+ --rose: #88ffae;
20
+
21
+ /* ── tube body / surfaces ──────────────────────────────── */
22
+ --bg: #04140a; /* near-black w/ green undertone */
23
+ --bg-raise: #082416; /* raised surface */
24
+ --bg-deep: #010604; /* tube-back */
25
+ --ink: #d8ffe7; /* default text */
26
+
27
+ /* ── public semantic color aliases ───────────────────────
28
+ Prefer these --pho-* tokens in consumer apps. The legacy
29
+ raw variables above stay supported for existing sites. */
30
+ --pho-color-background: var(--bg);
31
+ --pho-color-background-raised: var(--bg-raise);
32
+ --pho-color-background-deep: var(--bg-deep);
33
+ --pho-color-text: var(--ink);
34
+ --pho-color-text-strong: var(--phosphor-bright);
35
+ --pho-color-text-muted: var(--phosphor-dim);
36
+ --pho-color-text-faint: var(--phosphor-fade);
37
+ --pho-color-primary: var(--phosphor);
38
+ --pho-color-primary-strong: var(--phosphor-bright);
39
+ --pho-color-primary-muted: var(--phosphor-dim);
40
+ --pho-color-primary-faint: var(--phosphor-fade);
41
+ --pho-color-accent: var(--magenta);
42
+ --pho-color-accent-strong: var(--magenta-bright);
43
+ --pho-color-accent-muted: var(--magenta-deep);
44
+ --pho-color-accent-faint: var(--magenta-fade);
45
+ --pho-color-info: var(--moss);
46
+ --pho-color-success: var(--spring);
47
+ --pho-color-highlight: var(--rose);
48
+ --pho-color-link: var(--pho-color-accent);
49
+ --pho-color-link-hover: var(--pho-color-accent-strong);
50
+ --pho-color-inverse: var(--bg);
51
+ --pho-color-selection-bg: var(--pho-color-primary);
52
+ --pho-color-selection-text: var(--pho-color-background);
53
+ --pho-color-surface: var(--pho-color-background-raised);
54
+ --pho-color-surface-deep: var(--pho-color-background-deep);
55
+ --pho-color-border: var(--pho-color-primary-faint);
56
+ --pho-color-border-strong: var(--pho-color-primary-muted);
57
+ --pho-color-danger: #ff6a6a;
58
+ --pho-color-danger-strong: #ff8a8a;
59
+ --pho-color-danger-emphasis: #ff3a3a;
60
+ --pho-color-danger-contrast: #1a0606;
61
+ --pho-color-danger-muted: rgba(255, 58, 58, 0.35);
62
+ --pho-color-danger-faint: rgba(255, 58, 58, 0.12);
63
+ --pho-color-danger-subtle: rgba(255, 58, 58, 0.08);
64
+ --pho-color-danger-glow: rgba(255, 58, 58, 0.55);
65
+ --pho-color-danger-glow-soft: rgba(255, 58, 58, 0.25);
66
+ --pho-color-warning: #dfffaa;
67
+ --pho-color-warning-strong: #efffc9;
68
+ --pho-color-warning-muted: rgba(170, 255, 102, 0.42);
69
+ --pho-color-warning-faint: rgba(170, 255, 102, 0.07);
70
+ --pho-color-status-draft: var(--pho-color-text-muted);
71
+ --pho-color-status-published: var(--pho-color-success);
72
+ --pho-color-status-archived: var(--pho-color-text-faint);
73
+ --pho-color-status-locked: var(--pho-color-danger);
74
+ --pho-color-status-current: var(--pho-color-primary);
75
+ --pho-color-status-missing: var(--pho-color-danger-strong);
76
+
77
+ /* ── alpha overlays ───────────────────────────────────── */
78
+ --pho-alpha-primary-01: rgba(44, 255, 122, 0.01);
79
+ --pho-alpha-primary-02: rgba(44, 255, 122, 0.02);
80
+ --pho-alpha-primary-03: rgba(44, 255, 122, 0.03);
81
+ --pho-alpha-primary-04: rgba(44, 255, 122, 0.04);
82
+ --pho-alpha-primary-05: rgba(44, 255, 122, 0.05);
83
+ --pho-alpha-primary-06: rgba(44, 255, 122, 0.06);
84
+ --pho-alpha-primary-07: rgba(44, 255, 122, 0.07);
85
+ --pho-alpha-primary-08: rgba(44, 255, 122, 0.08);
86
+ --pho-alpha-primary-10: rgba(44, 255, 122, 0.1);
87
+ --pho-alpha-primary-12: rgba(44, 255, 122, 0.12);
88
+ --pho-alpha-primary-14: rgba(44, 255, 122, 0.14);
89
+ --pho-alpha-primary-16: rgba(44, 255, 122, 0.16);
90
+ --pho-alpha-primary-18: rgba(44, 255, 122, 0.18);
91
+ --pho-alpha-primary-22: rgba(44, 255, 122, 0.22);
92
+ --pho-alpha-primary-28: rgba(44, 255, 122, 0.28);
93
+ --pho-alpha-primary-35: rgba(44, 255, 122, 0.35);
94
+ --pho-alpha-primary-45: rgba(44, 255, 122, 0.45);
95
+ --pho-alpha-accent-04: rgba(98, 255, 154, 0.04);
96
+ --pho-alpha-accent-08: rgba(98, 255, 154, 0.08);
97
+ --pho-alpha-accent-12: rgba(98, 255, 154, 0.12);
98
+ --pho-alpha-accent-14: rgba(98, 255, 154, 0.14);
99
+ --pho-alpha-surface-45: rgba(1, 6, 4, 0.45);
100
+ --pho-alpha-surface-62: rgba(1, 6, 4, 0.62);
101
+ --pho-alpha-surface-72: rgba(1, 6, 4, 0.72);
102
+ --pho-alpha-surface-82: rgba(3, 17, 10, 0.82);
103
+
104
+ /* ── glow utilities ────────────────────────────────────── */
105
+ --glow-emerald:
106
+ 0 0 1px var(--phosphor), 0 0 6px rgba(44, 255, 122, 0.55),
107
+ 0 0 14px rgba(44, 255, 122, 0.25);
108
+ --glow-magenta:
109
+ 0 0 1px var(--magenta), 0 0 8px rgba(98, 255, 154, 0.5),
110
+ 0 0 18px rgba(98, 255, 154, 0.2);
111
+ --glow-amber: 0 0 1px var(--moss), 0 0 8px rgba(170, 255, 82, 0.5);
112
+
113
+ --glow-soft-emerald:
114
+ 0 0 1px rgba(44, 255, 122, 0.45), 0 0 4px rgba(44, 255, 122, 0.22);
115
+
116
+ --glow-soft-magenta:
117
+ 0 0 1px rgba(98, 255, 154, 0.4), 0 0 4px rgba(98, 255, 154, 0.2);
118
+
119
+ --glow-readable: none;
120
+
121
+ /* ── public effect aliases ─────────────────────────────── */
122
+ --pho-glow-primary: var(--glow-emerald);
123
+ --pho-glow-accent: var(--glow-magenta);
124
+ --pho-glow-info: var(--glow-amber);
125
+ --pho-glow-primary-soft: var(--glow-soft-emerald);
126
+ --pho-glow-accent-soft: var(--glow-soft-magenta);
127
+ --pho-glow-readable: var(--glow-readable);
128
+
129
+ /* ── typography stacks ─────────────────────────────────── */
130
+ --font-display:
131
+ "Bender", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
132
+ monospace;
133
+ --font-heading:
134
+ "Bender", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
135
+ monospace;
136
+ --font-body:
137
+ "JetBrains Mono", "Bender", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
138
+ monospace;
139
+ --font-code:
140
+ "JetBrains Mono", "Bender", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
141
+ monospace;
142
+ --font-terminal:
143
+ "VCR OSD Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
144
+ Consolas, monospace;
145
+ --font-control:
146
+ "Bender", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
147
+ monospace;
148
+
149
+ --pho-font-display: var(--font-display);
150
+ --pho-font-heading: var(--font-heading);
151
+ --pho-font-body: var(--font-body);
152
+ --pho-font-code: var(--font-code);
153
+ --pho-font-terminal: var(--font-terminal);
154
+ --pho-font-control: var(--font-control);
155
+
156
+ /* ── code-block tokens (all greens, no warm channels) ──── */
157
+ --code-bg: #03110a;
158
+ --code-fn: #b6ffce;
159
+ --code-comment: #3a7a52;
160
+ --code-keyword: #62ff9a;
161
+ --code-string: #00d4b5;
162
+ --code-number: #aaff66;
163
+ --code-var: #d6ffe2;
164
+ --code-type: #5cf5d4;
165
+ --code-punct: #4d8a6e;
166
+ --code-tag: #62ff9a;
167
+ --code-attr: #aaff66;
168
+ --code-builtin: #5cf5d4;
169
+ --code-operator: #b6ffce;
170
+
171
+ /* ── borders ───────────────────────────────────────────── */
172
+ --border-frame: 2px solid var(--phosphor-dim);
173
+ --border-line: 1px solid var(--phosphor-fade);
174
+ --border-dash: 1px dashed var(--phosphor-fade);
175
+ --border-dot: 1px dotted var(--phosphor-fade);
176
+ --rail-strong: 2px solid var(--phosphor);
177
+ --rail-quote: 3px double var(--phosphor);
178
+ --border-magenta-strong: 1.5px solid var(--magenta);
179
+ --border-magenta-dash: 1px dashed var(--magenta-deep);
180
+
181
+ --pho-border-frame: var(--border-frame);
182
+ --pho-border-line: var(--border-line);
183
+ --pho-border-dashed: var(--border-dash);
184
+ --pho-border-dotted: var(--border-dot);
185
+ --pho-border-accent: var(--border-magenta-strong);
186
+ --pho-border-accent-dashed: var(--border-magenta-dash);
187
+ --pho-rail-strong: var(--rail-strong);
188
+ --pho-rail-quote: var(--rail-quote);
189
+ --pho-focus-ring: 2px solid var(--pho-color-primary-strong);
190
+ --pho-focus-offset: 2px;
191
+ --pho-radius-none: 0;
192
+ --pho-radius-sm: 0;
193
+ --pho-radius-md: 0;
194
+
195
+ /* ── spacing scale (modular) ───────────────────────────── */
196
+ --space-0: 0.1rem;
197
+ --space-1: 0.2rem;
198
+ --space-2: 0.4rem;
199
+ --space-3: 0.6rem;
200
+ --space-4: 0.8rem;
201
+ --space-5: 1rem;
202
+ --space-6: 1.4rem;
203
+ --space-7: 2rem;
204
+
205
+ --pho-space-0: var(--space-0);
206
+ --pho-space-1: var(--space-1);
207
+ --pho-space-2: var(--space-2);
208
+ --pho-space-3: var(--space-3);
209
+ --pho-space-4: var(--space-4);
210
+ --pho-space-5: var(--space-5);
211
+ --pho-space-6: var(--space-6);
212
+ --pho-space-7: var(--space-7);
213
+ --pho-size-touch-target: 2.5rem;
214
+ --pho-size-content: 72rem;
215
+ --pho-size-prose: 68ch;
216
+ --pho-layout-site-max: 88rem;
217
+ --pho-layout-content-max: 72rem;
218
+ --pho-layout-prose-max: 68ch;
219
+ --pho-layout-sidebar-width: 18rem;
220
+ --pho-layout-toc-width: 17.5rem;
221
+ --pho-layout-admin-sidebar-width: clamp(18rem, 24vw, 22rem);
222
+ --pho-layout-gutter: clamp(1rem, 2vw, 1.75rem);
223
+ --pho-layout-sticky-top: 1rem;
224
+ --pho-bp-xs: 360px;
225
+ --pho-bp-sm: 520px;
226
+ --pho-bp-md: 720px;
227
+ --pho-bp-lg: 880px;
228
+ --pho-bp-xl: 1120px;
229
+ --pho-motion-fast: 120ms;
230
+ --pho-motion-base: 180ms;
231
+ --pho-motion-slow: 320ms;
232
+ --pho-ease-out: ease-out;
233
+ --pho-ease-terminal: steps(8);
234
+ --pho-caret-blink-duration: 0.78s;
235
+ --pho-caret-gap: 0.16em;
236
+ --pho-caret-idle-delay: 520ms;
237
+ --pho-caret-glow:
238
+ 0 0 1px var(--pho-color-primary-strong), 0 0 5px var(--pho-alpha-primary-28);
239
+ --pho-placeholder-color: rgba(31, 184, 84, 0.72);
240
+ --pho-placeholder-opacity: 1;
241
+ --pho-focus-glow:
242
+ 0 0 0 1px var(--pho-alpha-primary-18), 0 0 10px var(--pho-alpha-primary-18);
243
+ --pho-active-glow:
244
+ 0 0 0 1px var(--pho-alpha-primary-22),
245
+ inset 0 0 14px var(--pho-alpha-primary-05);
246
+ --pho-scanline-opacity: 0.11;
247
+ --pho-scanline-size: 4px;
248
+ --pho-flicker-opacity-min: 0.88;
249
+ --pho-card-border: 1px solid var(--pho-color-border);
250
+ --pho-card-bg: var(--pho-color-surface);
251
+ --pho-card-padding: var(--pho-space-5);
252
+ --pho-thumb-post-w: 160px;
253
+ --pho-thumb-post-h: 100px;
254
+ --pho-thumb-post-w-sm: 88px;
255
+ --pho-thumb-post-h-sm: 56px;
256
+ --pho-ascii-glow-pad-x: 1.5em;
257
+ --pho-ascii-glow-pad-y: 1.1em;
258
+
259
+ /* ── z-index ramp ──────────────────────────────────────── */
260
+ --z-deep: 0;
261
+ --z-default: 1;
262
+ --z-raised: 2;
263
+ --z-fx-noise: 6;
264
+ --z-fx-vignette: 7;
265
+ --z-fx-frame: 8;
266
+ --z-fx-flicker: 9;
267
+ --z-shell: 10;
268
+ --z-backdrop: 49;
269
+ --z-drawer: 50;
270
+
271
+ --pho-z-deep: var(--z-deep);
272
+ --pho-z-default: var(--z-default);
273
+ --pho-z-raised: var(--z-raised);
274
+ --pho-z-fx-noise: var(--z-fx-noise);
275
+ --pho-z-fx-vignette: var(--z-fx-vignette);
276
+ --pho-z-fx-frame: var(--z-fx-frame);
277
+ --pho-z-fx-flicker: var(--z-fx-flicker);
278
+ --pho-z-shell: var(--z-shell);
279
+ --pho-z-backdrop: var(--z-backdrop);
280
+ --pho-z-drawer: var(--z-drawer);
281
+
282
+ /* ── semantic type roles ───────────────────────────────── */
283
+ --type-h1-size: clamp(2rem, 3.6vw, 2.6rem);
284
+ --type-h2-size: clamp(1.55rem, 2.8vw, 2rem);
285
+ --type-h3-size: clamp(1.25rem, 2.1vw, 1.5rem);
286
+ --type-h4-size: clamp(1.05rem, 1.7vw, 1.2rem);
287
+ --type-h5-size: 0.98rem;
288
+ --type-h6-size: 0.88rem;
289
+ --type-lead-size: clamp(1.05rem, 0.3vw + 1rem, 1.2rem);
290
+ --type-body-size: clamp(16px, 0.4vw + 14px, 18px);
291
+ --type-small-size: 0.875rem;
292
+ --type-caption-size: 0.78rem;
293
+ --type-micro-size: 0.68rem;
294
+ --type-ui-xs-size: 0.72rem;
295
+ --type-ui-sm-size: 0.82rem;
296
+ --type-label-size: 0.78rem;
297
+ --type-mono-size: 0.86em;
298
+ --type-control-size: 0.95rem;
299
+ --type-control-sm-size: 0.875rem;
300
+ --type-control-lg-size: 1.1rem;
301
+ --type-icon-sm-size: 1rem;
302
+ --type-icon-md-size: 1.25rem;
303
+ --type-icon-lg-size: 1.65rem;
304
+
305
+ --type-line-tight: 1.05;
306
+ --type-line-snug: 1.15;
307
+ --type-line-normal: 1.6;
308
+ --type-line-prose: 1.7;
309
+ --type-line-control: 1;
310
+ --type-line-caption: 1.35;
311
+
312
+ --tracking-tight: 0;
313
+ --tracking-normal: 0;
314
+ --tracking-wide: 0.06em;
315
+ --tracking-wider: 0.14em;
316
+ --tracking-stamp: 0.22em;
317
+
318
+ --pho-type-h1-size: var(--type-h1-size);
319
+ --pho-type-h2-size: var(--type-h2-size);
320
+ --pho-type-h3-size: var(--type-h3-size);
321
+ --pho-type-h4-size: var(--type-h4-size);
322
+ --pho-type-h5-size: var(--type-h5-size);
323
+ --pho-type-h6-size: var(--type-h6-size);
324
+ --pho-type-lead-size: var(--type-lead-size);
325
+ --pho-type-body-size: var(--type-body-size);
326
+ --pho-type-small-size: var(--type-small-size);
327
+ --pho-type-caption-size: var(--type-caption-size);
328
+ --pho-type-micro-size: var(--type-micro-size);
329
+ --pho-type-ui-xs-size: var(--type-ui-xs-size);
330
+ --pho-type-ui-sm-size: var(--type-ui-sm-size);
331
+ --pho-type-label-size: var(--type-label-size);
332
+ --pho-type-mono-size: var(--type-mono-size);
333
+ --pho-type-control-size: var(--type-control-size);
334
+ --pho-type-control-sm-size: var(--type-control-sm-size);
335
+ --pho-type-control-lg-size: var(--type-control-lg-size);
336
+ --pho-type-icon-sm-size: var(--type-icon-sm-size);
337
+ --pho-type-icon-md-size: var(--type-icon-md-size);
338
+ --pho-type-icon-lg-size: var(--type-icon-lg-size);
339
+ --pho-line-tight: var(--type-line-tight);
340
+ --pho-line-snug: var(--type-line-snug);
341
+ --pho-line-normal: var(--type-line-normal);
342
+ --pho-line-prose: var(--type-line-prose);
343
+ --pho-line-control: var(--type-line-control);
344
+ --pho-line-caption: var(--type-line-caption);
345
+ --pho-tracking-tight: var(--tracking-tight);
346
+ --pho-tracking-normal: var(--tracking-normal);
347
+ --pho-tracking-wide: var(--tracking-wide);
348
+ --pho-tracking-wider: var(--tracking-wider);
349
+ --pho-tracking-stamp: var(--tracking-stamp);
350
+
351
+ /* ── scrollbar ─────────────────────────────────────────── */
352
+ --scrollbar-size: 8px;
353
+ --scrollbar-track: var(--bg-deep);
354
+ --scrollbar-track-border: 1px dashed var(--phosphor-fade);
355
+ --scrollbar-thumb: var(--phosphor-fade);
356
+ --scrollbar-thumb-edge: var(--phosphor-dim);
357
+ --scrollbar-thumb-hover: var(--phosphor-dim);
358
+ --scrollbar-thumb-active: var(--phosphor);
359
+ --scrollbar-glow: 0 0 6px rgba(44, 255, 122, 0.4);
360
+
361
+ --pho-scrollbar-size: var(--scrollbar-size);
362
+ --pho-scrollbar-track: var(--scrollbar-track);
363
+ --pho-scrollbar-thumb: var(--scrollbar-thumb);
364
+ --pho-scrollbar-thumb-hover: var(--scrollbar-thumb-hover);
365
+ --pho-scrollbar-thumb-active: var(--scrollbar-thumb-active);
366
+ --pho-cursor-default:
367
+ url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M8 1v14M1 8h14' stroke='%232cff7a' stroke-width='1' stroke-linecap='square'/%3E%3Ccircle cx='8' cy='8' r='4.25' stroke='%231fb854' stroke-width='.75'/%3E%3C/svg%3E")
368
+ 8 8,
369
+ default;
370
+ --pho-cursor-pointer:
371
+ url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none'%3E%3Cpath d='M3 2l11 7-5 1.2L6.2 16 3 2z' fill='%2304140a' stroke='%232cff7a' stroke-width='1.2' stroke-linejoin='miter'/%3E%3Cpath d='M7 8.5l2.2 1.7' stroke='%23b6ffce' stroke-width='.8'/%3E%3C/svg%3E")
372
+ 3 2,
373
+ pointer;
374
+ --pho-cursor-text:
375
+ url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M6 2h4M8 2v12M6 14h4' stroke='%23b6ffce' stroke-width='1.2' stroke-linecap='square'/%3E%3Cpath d='M4 8h8' stroke='%231fb854' stroke-width='.8'/%3E%3C/svg%3E")
376
+ 8 8,
377
+ text;
378
+ --pho-cursor-disabled:
379
+ url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none'%3E%3Ccircle cx='9' cy='9' r='6' stroke='%231fb854' stroke-width='1'/%3E%3Cpath d='M5 13L13 5' stroke='%232cff7a' stroke-width='1.2'/%3E%3C/svg%3E")
380
+ 9 9,
381
+ not-allowed;
382
+ }
@@ -0,0 +1,193 @@
1
+ /* ─── semantic typography utilities ───────────────────────── */
2
+ .t-h1 {
3
+ font-family: var(--pho-font-heading);
4
+ font-weight: 700;
5
+ font-size: var(--pho-type-h1-size);
6
+ line-height: var(--pho-line-snug);
7
+ letter-spacing: var(--pho-tracking-wide);
8
+ text-transform: uppercase;
9
+ color: var(--pho-color-text-strong);
10
+ text-shadow: var(--pho-glow-primary);
11
+ }
12
+ .t-h2 {
13
+ font-family: var(--pho-font-heading);
14
+ font-weight: 700;
15
+ font-size: var(--pho-type-h2-size);
16
+ line-height: var(--pho-line-snug);
17
+ letter-spacing: 0.08em;
18
+ text-transform: uppercase;
19
+ color: var(--pho-color-text-strong);
20
+ text-shadow: var(--pho-glow-primary);
21
+ }
22
+ .t-h3 {
23
+ font-family: var(--pho-font-heading);
24
+ font-weight: 700;
25
+ font-size: var(--pho-type-h3-size);
26
+ line-height: var(--pho-line-snug);
27
+ color: var(--pho-color-accent);
28
+ text-shadow: var(--pho-glow-accent);
29
+ letter-spacing: 0.04em;
30
+ }
31
+ .t-h4 {
32
+ font-family: var(--pho-font-heading);
33
+ font-weight: 700;
34
+ font-size: var(--pho-type-h4-size);
35
+ line-height: var(--pho-line-snug);
36
+ text-transform: uppercase;
37
+ letter-spacing: var(--pho-tracking-wide);
38
+ color: var(--pho-color-primary);
39
+ }
40
+ .t-h5 {
41
+ font-family: var(--pho-font-heading);
42
+ font-weight: 700;
43
+ font-size: var(--pho-type-h5-size);
44
+ line-height: var(--pho-line-snug);
45
+ letter-spacing: var(--pho-tracking-wide);
46
+ text-transform: uppercase;
47
+ color: var(--pho-color-primary);
48
+ }
49
+ .t-h6 {
50
+ font-family: var(--pho-font-heading);
51
+ font-weight: 700;
52
+ font-size: var(--pho-type-h6-size);
53
+ line-height: var(--pho-line-snug);
54
+ letter-spacing: var(--pho-tracking-wider);
55
+ text-transform: uppercase;
56
+ color: var(--pho-color-text-muted);
57
+ }
58
+ .pho-heading {
59
+ display: flex;
60
+ align-items: baseline;
61
+ gap: 0.55ch;
62
+ }
63
+ .pho-heading__glyph {
64
+ color: var(--pho-color-primary);
65
+ font-family: var(--pho-font-code);
66
+ text-shadow: var(--pho-glow-primary);
67
+ line-height: 1;
68
+ flex: 0 0 auto;
69
+ }
70
+ .pho-heading__text {
71
+ min-width: 0;
72
+ }
73
+ .t-body {
74
+ font-family: var(--pho-font-body);
75
+ font-size: var(--pho-type-body-size);
76
+ line-height: var(--pho-line-prose);
77
+ color: var(--pho-color-text);
78
+ }
79
+ .t-lead {
80
+ font-family: var(--pho-font-body);
81
+ font-size: var(--pho-type-lead-size);
82
+ line-height: var(--pho-line-prose);
83
+ color: var(--pho-color-text-strong);
84
+ }
85
+ .t-small {
86
+ font-family: var(--pho-font-body);
87
+ font-size: var(--pho-type-small-size);
88
+ line-height: var(--pho-line-normal);
89
+ color: var(--pho-color-text);
90
+ }
91
+ .t-caption {
92
+ font-family: var(--pho-font-code);
93
+ font-size: var(--pho-type-caption-size);
94
+ line-height: var(--pho-line-caption);
95
+ color: var(--pho-color-text-faint);
96
+ letter-spacing: var(--pho-tracking-wide);
97
+ text-transform: uppercase;
98
+ }
99
+ .t-mono {
100
+ font-family: var(--pho-font-code);
101
+ font-size: var(--pho-type-mono-size);
102
+ }
103
+ .t-code {
104
+ font-family: var(--pho-font-code);
105
+ font-size: var(--pho-type-mono-size);
106
+ color: var(--pho-color-text-strong);
107
+ }
108
+ .t-terminal {
109
+ font-family: var(--pho-font-terminal);
110
+ font-size: 1.3em;
111
+ letter-spacing: var(--pho-tracking-wider);
112
+ text-transform: uppercase;
113
+ }
114
+ .t-stamp {
115
+ font-family: var(--pho-font-terminal);
116
+ font-size: var(--pho-type-caption-size);
117
+ letter-spacing: var(--pho-tracking-stamp);
118
+ text-transform: uppercase;
119
+ color: var(--pho-color-text-faint);
120
+ }
121
+ .t-prompt {
122
+ color: var(--pho-color-accent-strong);
123
+ text-shadow: var(--pho-glow-accent);
124
+ font-family: var(--pho-font-terminal);
125
+ font-weight: 700;
126
+ }
127
+ .t-glow {
128
+ color: var(--pho-color-primary);
129
+ text-shadow: var(--pho-glow-primary);
130
+ }
131
+ .t-glow-pale {
132
+ color: var(--pho-color-primary-strong);
133
+ text-shadow: var(--pho-glow-primary);
134
+ }
135
+ .t-muted {
136
+ color: var(--pho-color-text-muted);
137
+ text-shadow: none;
138
+ }
139
+ .t-dim {
140
+ color: var(--pho-color-text-muted);
141
+ text-shadow: none;
142
+ }
143
+ .t-faded {
144
+ color: var(--pho-color-text-faint);
145
+ text-shadow: none;
146
+ }
147
+ .t-truncate {
148
+ overflow: hidden;
149
+ text-overflow: ellipsis;
150
+ white-space: nowrap;
151
+ }
152
+ .t-balance {
153
+ text-wrap: balance;
154
+ }
155
+ .t-nowrap {
156
+ white-space: nowrap;
157
+ }
158
+ .t-align-start {
159
+ text-align: start;
160
+ }
161
+ .t-align-center {
162
+ text-align: center;
163
+ }
164
+ .t-align-end {
165
+ text-align: end;
166
+ }
167
+ .t-uppercase {
168
+ text-transform: uppercase;
169
+ }
170
+ .t-lowercase {
171
+ text-transform: lowercase;
172
+ }
173
+ .t-capitalize {
174
+ text-transform: capitalize;
175
+ }
176
+ .t-tone-primary {
177
+ color: var(--pho-color-primary-strong);
178
+ text-shadow: var(--pho-glow-primary-soft);
179
+ }
180
+ .t-tone-accent {
181
+ color: var(--pho-color-accent-strong);
182
+ text-shadow: var(--pho-glow-accent-soft);
183
+ }
184
+ .t-tone-danger {
185
+ color: var(--pho-color-danger-strong);
186
+ text-shadow: 0 0 10px var(--pho-color-danger-glow-soft);
187
+ }
188
+ .t-dim,
189
+ .t-faded,
190
+ .t-muted {
191
+ text-shadow: none;
192
+ filter: none;
193
+ }