@beforesemicolon/builder 1.7.0 → 1.8.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 (161) hide show
  1. package/README.md +33 -30
  2. package/dist/cjs/build-modules.js +1 -1
  3. package/dist/cjs/docs/run.js +1 -1
  4. package/dist/cjs/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
  5. package/dist/cjs/docs/templates/fading-citrus/assets/client-server.svg +4 -0
  6. package/dist/cjs/docs/templates/fading-citrus/assets/facebook.svg +8 -0
  7. package/dist/cjs/docs/templates/fading-citrus/assets/fast.svg +4 -0
  8. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/android-chrome-192x192.png +0 -0
  9. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/android-chrome-512x512.png +0 -0
  10. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/apple-touch-icon.png +0 -0
  11. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/favicon-16x16.png +0 -0
  12. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/favicon-32x32.png +0 -0
  13. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/favicon.ico +0 -0
  14. package/dist/cjs/docs/templates/fading-citrus/assets/favicon/site.webmanifest +19 -0
  15. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Black.otf +0 -0
  16. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BlackItalic.otf +0 -0
  17. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Bold.otf +0 -0
  18. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BoldItalic.otf +0 -0
  19. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBold.otf +0 -0
  20. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBoldItalic.otf +0 -0
  21. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLight.otf +0 -0
  22. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLightItalic.otf +0 -0
  23. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Italic.otf +0 -0
  24. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Light.otf +0 -0
  25. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-LightItalic.otf +0 -0
  26. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Medium.otf +0 -0
  27. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-MediumItalic.otf +0 -0
  28. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Regular.otf +0 -0
  29. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBold.otf +0 -0
  30. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBoldItalic.otf +0 -0
  31. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Thin.otf +0 -0
  32. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ThinItalic.otf +0 -0
  33. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/SIL Open Font License.txt +43 -0
  34. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/Apache License.txt +201 -0
  35. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Bold.ttf +0 -0
  36. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-BoldItalic.ttf +0 -0
  37. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBold.ttf +0 -0
  38. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf +0 -0
  39. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Italic.ttf +0 -0
  40. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Light.ttf +0 -0
  41. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-LightItalic.ttf +0 -0
  42. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Regular.ttf +0 -0
  43. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Semibold.ttf +0 -0
  44. package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-SemiboldItalic.ttf +0 -0
  45. package/dist/cjs/docs/templates/fading-citrus/assets/independent.svg +23 -0
  46. package/dist/cjs/docs/templates/fading-citrus/assets/instagram.svg +28 -0
  47. package/dist/cjs/docs/templates/fading-citrus/assets/markup-banner.jpg +0 -0
  48. package/dist/cjs/docs/templates/fading-citrus/assets/markup-essentials-training.jpg +0 -0
  49. package/dist/cjs/docs/templates/fading-citrus/assets/markup-favicon.jpg +0 -0
  50. package/dist/cjs/docs/templates/fading-citrus/assets/markup-favicon.png +0 -0
  51. package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo-name.svg +10 -0
  52. package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo-name@2x.png +0 -0
  53. package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo.svg +13 -0
  54. package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo@2x.png +0 -0
  55. package/dist/cjs/docs/templates/fading-citrus/assets/medium2.svg +18 -0
  56. package/dist/cjs/docs/templates/fading-citrus/assets/reactive.svg +3 -0
  57. package/dist/cjs/docs/templates/fading-citrus/assets/reddit.svg +16 -0
  58. package/dist/cjs/docs/templates/fading-citrus/assets/simple.svg +8 -0
  59. package/dist/cjs/docs/templates/fading-citrus/assets/small.svg +8 -0
  60. package/dist/cjs/docs/templates/fading-citrus/assets/twitter.svg +11 -0
  61. package/dist/cjs/docs/templates/fading-citrus/assets/youtube.svg +10 -0
  62. package/dist/cjs/docs/templates/fading-citrus/layouts/_code-snippet.js +75 -0
  63. package/dist/cjs/docs/templates/fading-citrus/layouts/_copy-code.js +50 -0
  64. package/dist/cjs/docs/templates/fading-citrus/layouts/_footer.js +72 -0
  65. package/dist/cjs/docs/templates/fading-citrus/layouts/_head-meta.js +231 -0
  66. package/dist/cjs/docs/templates/fading-citrus/layouts/_header.js +41 -0
  67. package/dist/cjs/docs/templates/fading-citrus/layouts/_logo.js +31 -0
  68. package/dist/cjs/docs/templates/fading-citrus/layouts/document.js +92 -0
  69. package/dist/cjs/docs/templates/fading-citrus/layouts/landing.js +636 -0
  70. package/dist/cjs/docs/templates/fading-citrus/stylesheets/common.css +814 -0
  71. package/dist/cjs/docs/templates/fading-citrus/stylesheets/documentation.css +603 -0
  72. package/dist/cjs/docs/templates/fading-citrus/stylesheets/fonts.css +1 -0
  73. package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +107 -0
  74. package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +107 -0
  75. package/dist/cjs/docs/templates/fading-citrus/stylesheets/hybrid.hightlighter.css +102 -0
  76. package/dist/cjs/docs/templates/fading-citrus/stylesheets/landing.css +1553 -0
  77. package/dist/cjs/docs/templates/fading-citrus/stylesheets/normalize.css +351 -0
  78. package/dist/cjs/docs/templates/fading-citrus/template.config.js +14 -0
  79. package/dist/cjs/docs/types.js +1 -1
  80. package/dist/esm/build-modules.js +1 -1
  81. package/dist/esm/docs/run.js +1 -1
  82. package/dist/esm/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
  83. package/dist/esm/docs/templates/fading-citrus/assets/client-server.svg +4 -0
  84. package/dist/esm/docs/templates/fading-citrus/assets/facebook.svg +8 -0
  85. package/dist/esm/docs/templates/fading-citrus/assets/fast.svg +4 -0
  86. package/dist/esm/docs/templates/fading-citrus/assets/favicon/android-chrome-192x192.png +0 -0
  87. package/dist/esm/docs/templates/fading-citrus/assets/favicon/android-chrome-512x512.png +0 -0
  88. package/dist/esm/docs/templates/fading-citrus/assets/favicon/apple-touch-icon.png +0 -0
  89. package/dist/esm/docs/templates/fading-citrus/assets/favicon/favicon-16x16.png +0 -0
  90. package/dist/esm/docs/templates/fading-citrus/assets/favicon/favicon-32x32.png +0 -0
  91. package/dist/esm/docs/templates/fading-citrus/assets/favicon/favicon.ico +0 -0
  92. package/dist/esm/docs/templates/fading-citrus/assets/favicon/site.webmanifest +19 -0
  93. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Black.otf +0 -0
  94. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BlackItalic.otf +0 -0
  95. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Bold.otf +0 -0
  96. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BoldItalic.otf +0 -0
  97. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBold.otf +0 -0
  98. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBoldItalic.otf +0 -0
  99. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLight.otf +0 -0
  100. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLightItalic.otf +0 -0
  101. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Italic.otf +0 -0
  102. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Light.otf +0 -0
  103. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-LightItalic.otf +0 -0
  104. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Medium.otf +0 -0
  105. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-MediumItalic.otf +0 -0
  106. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Regular.otf +0 -0
  107. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBold.otf +0 -0
  108. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBoldItalic.otf +0 -0
  109. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Thin.otf +0 -0
  110. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ThinItalic.otf +0 -0
  111. package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/SIL Open Font License.txt +43 -0
  112. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/Apache License.txt +201 -0
  113. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Bold.ttf +0 -0
  114. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-BoldItalic.ttf +0 -0
  115. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBold.ttf +0 -0
  116. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf +0 -0
  117. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Italic.ttf +0 -0
  118. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Light.ttf +0 -0
  119. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-LightItalic.ttf +0 -0
  120. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Regular.ttf +0 -0
  121. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Semibold.ttf +0 -0
  122. package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-SemiboldItalic.ttf +0 -0
  123. package/dist/esm/docs/templates/fading-citrus/assets/independent.svg +23 -0
  124. package/dist/esm/docs/templates/fading-citrus/assets/instagram.svg +28 -0
  125. package/dist/esm/docs/templates/fading-citrus/assets/markup-banner.jpg +0 -0
  126. package/dist/esm/docs/templates/fading-citrus/assets/markup-essentials-training.jpg +0 -0
  127. package/dist/esm/docs/templates/fading-citrus/assets/markup-favicon.jpg +0 -0
  128. package/dist/esm/docs/templates/fading-citrus/assets/markup-favicon.png +0 -0
  129. package/dist/esm/docs/templates/fading-citrus/assets/markup-logo-name.svg +10 -0
  130. package/dist/esm/docs/templates/fading-citrus/assets/markup-logo-name@2x.png +0 -0
  131. package/dist/esm/docs/templates/fading-citrus/assets/markup-logo.svg +13 -0
  132. package/dist/esm/docs/templates/fading-citrus/assets/markup-logo@2x.png +0 -0
  133. package/dist/esm/docs/templates/fading-citrus/assets/medium2.svg +18 -0
  134. package/dist/esm/docs/templates/fading-citrus/assets/reactive.svg +3 -0
  135. package/dist/esm/docs/templates/fading-citrus/assets/reddit.svg +16 -0
  136. package/dist/esm/docs/templates/fading-citrus/assets/simple.svg +8 -0
  137. package/dist/esm/docs/templates/fading-citrus/assets/small.svg +8 -0
  138. package/dist/esm/docs/templates/fading-citrus/assets/twitter.svg +11 -0
  139. package/dist/esm/docs/templates/fading-citrus/assets/youtube.svg +10 -0
  140. package/dist/esm/docs/templates/fading-citrus/layouts/_code-snippet.js +75 -0
  141. package/dist/esm/docs/templates/fading-citrus/layouts/_copy-code.js +50 -0
  142. package/dist/esm/docs/templates/fading-citrus/layouts/_footer.js +72 -0
  143. package/dist/esm/docs/templates/fading-citrus/layouts/_head-meta.js +231 -0
  144. package/dist/esm/docs/templates/fading-citrus/layouts/_header.js +41 -0
  145. package/dist/esm/docs/templates/fading-citrus/layouts/_logo.js +31 -0
  146. package/dist/esm/docs/templates/fading-citrus/layouts/document.js +92 -0
  147. package/dist/esm/docs/templates/fading-citrus/layouts/landing.js +636 -0
  148. package/dist/esm/docs/templates/fading-citrus/stylesheets/common.css +814 -0
  149. package/dist/esm/docs/templates/fading-citrus/stylesheets/documentation.css +603 -0
  150. package/dist/esm/docs/templates/fading-citrus/stylesheets/fonts.css +1 -0
  151. package/dist/esm/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +107 -0
  152. package/dist/esm/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +107 -0
  153. package/dist/esm/docs/templates/fading-citrus/stylesheets/hybrid.hightlighter.css +102 -0
  154. package/dist/esm/docs/templates/fading-citrus/stylesheets/landing.css +1553 -0
  155. package/dist/esm/docs/templates/fading-citrus/stylesheets/normalize.css +351 -0
  156. package/dist/esm/docs/templates/fading-citrus/template.config.js +14 -0
  157. package/dist/types/build-browser.d.ts +1 -1
  158. package/dist/types/build-modules.d.ts +1 -1
  159. package/dist/types/docs/run.d.ts +2 -1
  160. package/dist/types/docs/types.d.ts +28 -6
  161. package/package.json +1 -1
@@ -0,0 +1,814 @@
1
+ @import 'normalize.css';
2
+ @import 'fonts.css';
3
+
4
+ :root {
5
+ --background: oklch(0.18 0.015 250);
6
+ --foreground: oklch(0.96 0.005 250);
7
+ --card: oklch(0.22 0.018 250);
8
+ --primary: oklch(0.74 0.18 45);
9
+ --primary-glow: oklch(0.78 0.19 50);
10
+ --primary-foreground: oklch(0.18 0.02 250);
11
+ --secondary: oklch(0.27 0.02 250);
12
+ --muted: oklch(0.25 0.018 250);
13
+ --muted-foreground: oklch(0.68 0.02 250);
14
+ --accent: oklch(0.7 0.16 200);
15
+ --border: oklch(0.3 0.02 250);
16
+ --ring: oklch(0.74 0.18 45);
17
+ --radius: 0.75rem;
18
+ --code-bg: oklch(0.16 0.015 250);
19
+ --syntax-comment: oklch(0.55 0.02 250);
20
+ --syntax-keyword: oklch(0.78 0.19 50);
21
+ --syntax-string: oklch(0.78 0.15 145);
22
+ --syntax-tag: oklch(0.72 0.16 200);
23
+ --syntax-attr: oklch(0.82 0.14 90);
24
+
25
+ --font-sans:
26
+ ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
27
+ sans-serif;
28
+ --font-title: var(--font-sans);
29
+ --font-mono:
30
+ 'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo,
31
+ monospace;
32
+
33
+ --gradient-hero: radial-gradient(
34
+ ellipse at top,
35
+ oklch(0.28 0.08 45 / 0.35),
36
+ transparent 60%
37
+ );
38
+ --gradient-primary: linear-gradient(
39
+ 135deg,
40
+ var(--primary),
41
+ var(--primary-glow)
42
+ );
43
+ --gradient-text: linear-gradient(
44
+ 135deg,
45
+ oklch(0.98 0.005 250),
46
+ oklch(0.78 0.05 250)
47
+ );
48
+ --gradient-border: linear-gradient(
49
+ 135deg,
50
+ oklch(0.74 0.18 45 / 0.5),
51
+ oklch(0.7 0.16 200 / 0.3)
52
+ );
53
+ --shadow-glow: 0 0 60px -15px oklch(0.74 0.18 45 / 0.5);
54
+ --shadow-card:
55
+ 0 1px 0 0 oklch(1 0 0 / 0.05) inset,
56
+ 0 20px 40px -20px oklch(0 0 0 / 0.5);
57
+
58
+ --transition-smooth: cubic-bezier(0.22, 1, 0.36, 1);
59
+ }
60
+
61
+ html,
62
+ body {
63
+ margin: 0;
64
+ padding: 0;
65
+ min-height: 100vh;
66
+ min-width: 100vw;
67
+ scroll-behavior: smooth;
68
+ scroll-padding-top: 6rem;
69
+ background-color: var(--background);
70
+ color: var(--foreground);
71
+ }
72
+
73
+ body {
74
+ font-size: 16px;
75
+ font-family: var(--font-sans);
76
+ line-height: 1.6;
77
+ letter-spacing: 0;
78
+ display: flex;
79
+ flex-direction: column;
80
+ }
81
+
82
+ *,
83
+ *::before,
84
+ *::after {
85
+ box-sizing: border-box;
86
+ }
87
+
88
+ .wrapper {
89
+ max-width: 1280px;
90
+ width: 100%;
91
+ margin-left: auto;
92
+ margin-right: auto;
93
+ padding-left: 24px;
94
+ padding-right: 24px;
95
+ }
96
+
97
+ h1,
98
+ h2,
99
+ h3,
100
+ h4,
101
+ h5,
102
+ h6 {
103
+ margin-top: 0;
104
+ line-height: 1.25;
105
+ }
106
+
107
+ h1,
108
+ h2,
109
+ h3,
110
+ h4,
111
+ h5,
112
+ h6 {
113
+ font-family: var(--font-title);
114
+ color: oklch(1 0 0);
115
+ font-weight: 800;
116
+ }
117
+
118
+ h1 a,
119
+ h2 a,
120
+ h3 a,
121
+ h4 a,
122
+ h5 a,
123
+ h6 a {
124
+ text-decoration: none;
125
+ position: relative;
126
+ color: inherit;
127
+ }
128
+
129
+ h1 a::before,
130
+ h2 a::before,
131
+ h3 a::before,
132
+ h4 a::before,
133
+ h5 a::before,
134
+ h6 a::before {
135
+ content: '#';
136
+ opacity: 0;
137
+ font-size: 70%;
138
+ position: absolute;
139
+ top: 50%;
140
+ left: 0;
141
+ transform: translate(calc(-100% - 8px), -50%);
142
+ color: var(--primary);
143
+ transition: opacity 0.2s ease;
144
+ }
145
+
146
+ h1 a:hover::before,
147
+ h2 a:hover::before,
148
+ h3 a:hover::before,
149
+ h4 a:hover::before,
150
+ h5 a:hover::before,
151
+ h6 a:hover::before {
152
+ opacity: 0.7;
153
+ }
154
+
155
+ p {
156
+ margin-top: 0;
157
+ line-height: 1.6;
158
+ font-weight: 400;
159
+ color: var(--muted-foreground);
160
+ }
161
+
162
+ a {
163
+ text-decoration: none;
164
+ transition: color 0.2s ease;
165
+ }
166
+
167
+ img {
168
+ max-width: 100%;
169
+ height: auto;
170
+ }
171
+
172
+ ul {
173
+ list-style: none;
174
+ padding: 0;
175
+ margin: 0;
176
+ }
177
+
178
+ /* Gradients & Utilities */
179
+ .text-gradient {
180
+ background: var(--gradient-text);
181
+ -webkit-background-clip: text;
182
+ -webkit-text-fill-color: transparent;
183
+ background-clip: text;
184
+ }
185
+
186
+ .text-gradient-primary {
187
+ background: var(--gradient-primary);
188
+ -webkit-background-clip: text;
189
+ -webkit-text-fill-color: transparent;
190
+ background-clip: text;
191
+ }
192
+
193
+ .bg-grid {
194
+ background-size: 48px 48px;
195
+ background-image:
196
+ linear-gradient(to right, oklch(1 0 0 / 0.04) 1px, transparent 1px),
197
+ linear-gradient(to bottom, oklch(1 0 0 / 0.04) 1px, transparent 1px);
198
+ mask-image: radial-gradient(
199
+ ellipse 80% 60% at 50% 0%,
200
+ black 30%,
201
+ transparent 80%
202
+ );
203
+ -webkit-mask-image: radial-gradient(
204
+ ellipse 80% 60% at 50% 0%,
205
+ black 30%,
206
+ transparent 80%
207
+ );
208
+ }
209
+
210
+ .glow {
211
+ box-shadow: var(--shadow-glow);
212
+ }
213
+
214
+ /* Animations */
215
+ @keyframes float-up {
216
+ 0% {
217
+ transform: translateY(20px);
218
+ opacity: 0;
219
+ }
220
+ 100% {
221
+ transform: translateY(0);
222
+ opacity: 1;
223
+ }
224
+ }
225
+
226
+ @keyframes pulse-glow {
227
+ 0%,
228
+ 100% {
229
+ opacity: 0.4;
230
+ }
231
+ 50% {
232
+ opacity: 0.8;
233
+ }
234
+ }
235
+
236
+ .animate-float-up {
237
+ animation: float-up 0.8s var(--transition-smooth) forwards;
238
+ }
239
+
240
+ .animate-pulse-glow {
241
+ animation: pulse-glow 4s ease-in-out infinite;
242
+ }
243
+
244
+ /* header ---------------- */
245
+ header {
246
+ height: 4rem;
247
+ max-width: 1280px;
248
+ border-bottom: 1px solid oklch(0.3 0.02 250 / 0.5);
249
+ background-color: oklch(0.18 0.015 250 / 0.6);
250
+ backdrop-filter: blur(16px);
251
+ -webkit-backdrop-filter: blur(16px);
252
+ display: flex;
253
+ justify-content: space-between;
254
+ align-items: center;
255
+ position: sticky;
256
+ top: 0;
257
+ z-index: 50;
258
+ }
259
+
260
+ header h1 {
261
+ margin: 0;
262
+ font-size: 1.1rem;
263
+ font-weight: 700;
264
+ }
265
+
266
+ header h1 a {
267
+ display: flex;
268
+ align-items: center;
269
+ gap: 8px;
270
+ color: var(--foreground);
271
+ text-decoration: none;
272
+ transition: transform 0.2s ease;
273
+ }
274
+
275
+ header h1 a:hover {
276
+ transform: scale(1.02);
277
+ }
278
+
279
+ header h1 a svg {
280
+ height: 1.5rem;
281
+ width: auto;
282
+ }
283
+
284
+ header nav {
285
+ display: flex;
286
+ align-items: center;
287
+ gap: 48px;
288
+ }
289
+
290
+ header nav.nav-actions {
291
+ gap: 16px;
292
+ }
293
+
294
+ header nav.nav-actions .btn-primary {
295
+ height: 34px;
296
+ border-radius: 6px;
297
+ }
298
+
299
+ header nav a {
300
+ text-decoration: none;
301
+ transition: all 0.2s ease;
302
+ font-size: 0.9rem;
303
+ font-weight: 500;
304
+ color: var(--muted-foreground);
305
+ }
306
+
307
+ header nav a:hover,
308
+ header nav a.active {
309
+ color: var(--foreground);
310
+ }
311
+
312
+ header nav a.github-link {
313
+ width: 36px;
314
+ height: 36px;
315
+ display: inline-grid;
316
+ place-items: center;
317
+ border: 1px solid oklch(0.3 0.02 250 / 0.7);
318
+ border-radius: 8px;
319
+ }
320
+
321
+ header nav a.github-link:hover {
322
+ border-color: oklch(0.74 0.18 45 / 0.45);
323
+ color: var(--primary);
324
+ }
325
+
326
+ /* footer ------------------- */
327
+ footer {
328
+ background: oklch(0.14 0.012 250);
329
+ color: var(--muted-foreground);
330
+ border-top: 1px solid var(--border);
331
+ padding-top: 60px;
332
+ padding-bottom: 40px;
333
+ display: flex;
334
+ flex-wrap: wrap;
335
+ gap: 40px;
336
+ }
337
+
338
+ footer .footer-brand {
339
+ flex: 1;
340
+ min-width: 280px;
341
+ }
342
+
343
+ footer .footer-brand svg {
344
+ margin-bottom: 16px;
345
+ display: block;
346
+ }
347
+
348
+ footer .footer-brand p {
349
+ font-size: 0.9rem;
350
+ max-width: 320px;
351
+ margin-bottom: 20px;
352
+ }
353
+
354
+ footer h4 {
355
+ color: var(--foreground);
356
+ font-size: 0.95rem;
357
+ font-weight: 600;
358
+ margin-bottom: 16px;
359
+ text-transform: uppercase;
360
+ letter-spacing: 0.05rem;
361
+ }
362
+
363
+ footer .learning-resources,
364
+ footer .about-bfs {
365
+ width: 20%;
366
+ min-width: 180px;
367
+ }
368
+
369
+ footer .learning-resources li,
370
+ footer .about-bfs li {
371
+ padding: 6px 0;
372
+ font-size: 0.9rem;
373
+ }
374
+
375
+ footer .learning-resources li a,
376
+ footer .about-bfs li a {
377
+ color: var(--muted-foreground);
378
+ }
379
+
380
+ footer .learning-resources li a:hover,
381
+ footer .about-bfs li a:hover {
382
+ color: var(--foreground);
383
+ }
384
+
385
+ footer address {
386
+ margin-top: 16px;
387
+ display: flex;
388
+ gap: 12px;
389
+ flex-wrap: wrap;
390
+ }
391
+
392
+ footer address a {
393
+ display: flex;
394
+ align-items: center;
395
+ justify-content: center;
396
+ width: 32px;
397
+ height: 32px;
398
+ border-radius: 6px;
399
+ border: 1px solid var(--border);
400
+ background: oklch(1 1 1 / 0.02);
401
+ transition: all 0.2s ease;
402
+ }
403
+
404
+ footer address a img {
405
+ filter: invert(1);
406
+ opacity: 0.6;
407
+ transition: opacity 0.2s ease;
408
+ }
409
+
410
+ footer address a:hover {
411
+ border-color: var(--primary);
412
+ background: oklch(0.74 0.18 45 / 0.05);
413
+ }
414
+
415
+ footer address a:hover img {
416
+ opacity: 1;
417
+ }
418
+
419
+ footer .copyright-section {
420
+ width: 100%;
421
+ border-top: 1px solid oklch(1 1 1 / 0.05);
422
+ padding-top: 24px;
423
+ margin-top: 20px;
424
+ display: flex;
425
+ justify-content: space-between;
426
+ align-items: center;
427
+ flex-wrap: wrap;
428
+ gap: 16px;
429
+ font-size: 0.85rem;
430
+ }
431
+
432
+ footer .copyright-section .brand-logo-container {
433
+ display: flex;
434
+ align-items: center;
435
+ gap: 10px;
436
+ }
437
+
438
+ footer .copyright-section .brand-logo-container img {
439
+ height: 20px;
440
+ opacity: 0.8;
441
+ }
442
+
443
+ /* .code-snippet ------------------- */
444
+ .code-snippet {
445
+ background: var(--code-bg);
446
+ border-radius: 0.75rem;
447
+ border: 1px solid oklch(0.3 0.02 250 / 0.6);
448
+ margin: 16px 0;
449
+ width: 100%;
450
+ max-width: 100%;
451
+ max-height: 80vh;
452
+ min-width: 0;
453
+ display: flex;
454
+ flex-direction: column;
455
+ overflow: hidden;
456
+ box-shadow: var(--shadow-card);
457
+ }
458
+
459
+ .code-snippet .header {
460
+ flex: 0 0 41px;
461
+ min-height: 41px;
462
+ display: flex;
463
+ align-items: center;
464
+ gap: 12px;
465
+ padding: 0 10px 0 16px;
466
+ background: oklch(0.22 0.018 250 / 0.6);
467
+ border-bottom: 1px solid oklch(0.3 0.02 250 / 0.6);
468
+ }
469
+
470
+ .code-snippet .mac-dots {
471
+ flex: 0 0 auto;
472
+ display: flex;
473
+ gap: 6px;
474
+ }
475
+
476
+ .code-snippet .mac-dots span {
477
+ width: 10px;
478
+ height: 10px;
479
+ border-radius: 50%;
480
+ }
481
+
482
+ .code-snippet .mac-dots .dot-red {
483
+ background-color: oklch(0.62 0.22 25 / 0.7);
484
+ }
485
+
486
+ .code-snippet .mac-dots .dot-yellow {
487
+ background-color: oklch(0.78 0.14 90 / 0.7);
488
+ }
489
+
490
+ .code-snippet .mac-dots .dot-green {
491
+ background-color: oklch(0.78 0.15 145 / 0.7);
492
+ }
493
+
494
+ .code-snippet .filename {
495
+ flex: 1 1 auto;
496
+ min-width: 0;
497
+ font-family: var(--font-mono);
498
+ font-size: 0.75rem;
499
+ color: var(--muted-foreground);
500
+ line-height: 20px;
501
+ overflow: hidden;
502
+ text-overflow: ellipsis;
503
+ white-space: nowrap;
504
+ }
505
+
506
+ .code-snippet .label {
507
+ flex: 0 0 auto;
508
+ font-family: var(--font-mono);
509
+ font-size: 0.625rem;
510
+ color: var(--muted-foreground);
511
+ text-transform: uppercase;
512
+ line-height: 20px;
513
+ opacity: 0.6;
514
+ }
515
+
516
+ .code-snippet .content {
517
+ flex: 1 1 auto;
518
+ min-height: 0;
519
+ width: 100%;
520
+ overflow: auto;
521
+ padding: 12px;
522
+ }
523
+
524
+ .code-snippet pre {
525
+ margin: 0;
526
+ font-family: var(--font-mono);
527
+ font-size: 13px;
528
+ line-height: 1.5rem;
529
+ width: max-content;
530
+ min-width: 100%;
531
+ }
532
+
533
+ .code-snippet pre code {
534
+ font-family: inherit;
535
+ font-size: inherit;
536
+ }
537
+
538
+ .code-snippet .syntax-comment {
539
+ color: var(--syntax-comment);
540
+ font-style: italic;
541
+ }
542
+
543
+ .code-snippet .syntax-keyword {
544
+ color: var(--syntax-keyword);
545
+ }
546
+
547
+ .code-snippet .syntax-string {
548
+ color: var(--syntax-string);
549
+ }
550
+
551
+ .code-snippet .syntax-tag {
552
+ color: var(--syntax-tag);
553
+ }
554
+
555
+ .code-snippet .syntax-attr {
556
+ color: var(--syntax-attr);
557
+ }
558
+
559
+ .code-snippet .syntax-expression {
560
+ color: var(--foreground);
561
+ }
562
+
563
+ .code-snippet .code-line {
564
+ display: flex;
565
+ }
566
+
567
+ .code-snippet .line-number {
568
+ user-select: none;
569
+ width: 32px;
570
+ padding-right: 16px;
571
+ flex-shrink: 0;
572
+ text-align: right;
573
+ color: oklch(0.68 0.02 250 / 0.5);
574
+ }
575
+
576
+ .code-snippet .line-code {
577
+ flex: 1;
578
+ white-space: pre;
579
+ }
580
+
581
+ .code-snippet .code-copy-btn {
582
+ all: unset;
583
+ position: relative;
584
+ flex: 0 0 28px;
585
+ width: 28px;
586
+ height: 28px;
587
+ overflow: hidden;
588
+ text-indent: 999px;
589
+ white-space: nowrap;
590
+ color: var(--muted-foreground);
591
+ cursor: pointer;
592
+ transition: all 0.2s ease;
593
+ border-radius: 6px;
594
+ }
595
+
596
+ .code-snippet .code-copy-btn::before,
597
+ .code-snippet .code-copy-btn::after {
598
+ content: '';
599
+ position: absolute;
600
+ border: 1.5px solid currentColor;
601
+ border-radius: 2px;
602
+ width: 10px;
603
+ height: 12px;
604
+ text-indent: 0;
605
+ }
606
+
607
+ .code-snippet .code-copy-btn::before {
608
+ top: 10px;
609
+ left: 8px;
610
+ opacity: 0.55;
611
+ }
612
+
613
+ .code-snippet .code-copy-btn::after {
614
+ top: 7px;
615
+ left: 12px;
616
+ background: oklch(0.22 0.018 250);
617
+ }
618
+
619
+ .code-snippet .code-copy-btn:hover {
620
+ color: var(--foreground);
621
+ background: oklch(0.25 0.018 250 / 0.6);
622
+ }
623
+
624
+ .code-snippet .code-copy-btn.copied {
625
+ color: oklch(0.78 0.15 145);
626
+ }
627
+
628
+ @media screen and (max-width: 768px) {
629
+ .code-snippet pre code {
630
+ font-size: 0.7rem !important;
631
+ line-height: 150% !important;
632
+ }
633
+
634
+ footer {
635
+ padding-top: 40px;
636
+ padding-bottom: 30px;
637
+ }
638
+
639
+ footer .copyright-section {
640
+ flex-direction: column;
641
+ align-items: flex-start;
642
+ gap: 12px;
643
+ }
644
+ }
645
+
646
+ /* React landing shell parity */
647
+ header.site-header {
648
+ position: fixed;
649
+ inset: 0 0 auto;
650
+ width: 100%;
651
+ max-width: none;
652
+ height: auto;
653
+ padding: 0;
654
+ backdrop-filter: blur(24px);
655
+ -webkit-backdrop-filter: blur(24px);
656
+ }
657
+
658
+ header.site-header .header-inner {
659
+ height: 64px;
660
+ display: flex;
661
+ align-items: center;
662
+ justify-content: space-between;
663
+ }
664
+
665
+ header.site-header h1 a svg {
666
+ height: 28px;
667
+ }
668
+
669
+ header.site-header nav a {
670
+ letter-spacing: 0;
671
+ }
672
+
673
+ header.site-header nav a.github-link {
674
+ width: 36px;
675
+ height: 36px;
676
+ }
677
+
678
+ header.site-header nav a.docs-github-link {
679
+ width: auto;
680
+ min-width: 36px;
681
+ padding: 0 12px;
682
+ display: inline-flex;
683
+ align-items: center;
684
+ justify-content: center;
685
+ gap: 8px;
686
+ font-family: var(--font-mono);
687
+ font-size: 0.75rem;
688
+ }
689
+
690
+ .site-footer {
691
+ border-top: 1px solid oklch(0.3 0.02 250 / 0.5);
692
+ background: transparent;
693
+ padding: 56px 0 36px;
694
+ }
695
+
696
+ .site-footer .footer-inner {
697
+ display: grid;
698
+ grid-template-columns: minmax(240px, 1fr) minmax(180px, auto) minmax(
699
+ 220px,
700
+ auto
701
+ );
702
+ align-items: start;
703
+ gap: 40px;
704
+ }
705
+
706
+ .site-footer .footer-brand svg {
707
+ height: 28px;
708
+ width: auto;
709
+ color: var(--foreground);
710
+ }
711
+
712
+ .site-footer .footer-brand p {
713
+ max-width: 360px;
714
+ margin: 16px 0 0;
715
+ font-size: 0.875rem;
716
+ line-height: 1.6;
717
+ }
718
+
719
+ .footer-links {
720
+ margin: 0;
721
+ padding: 0;
722
+ }
723
+
724
+ .footer-links li {
725
+ margin: 0 0 8px;
726
+ padding: 0;
727
+ }
728
+
729
+ .footer-links h4 {
730
+ margin: 0 0 14px;
731
+ color: var(--foreground);
732
+ font-size: 0.8125rem;
733
+ line-height: 1.25;
734
+ letter-spacing: 0.08em;
735
+ text-transform: uppercase;
736
+ }
737
+
738
+ .footer-links a {
739
+ color: var(--muted-foreground);
740
+ font-size: 0.875rem;
741
+ }
742
+
743
+ .footer-links a:hover {
744
+ color: var(--primary);
745
+ }
746
+
747
+ .footer-credit {
748
+ grid-column: 1 / -1;
749
+ border-top: 1px solid oklch(0.3 0.02 250 / 0.5);
750
+ padding-top: 24px;
751
+ display: flex;
752
+ align-items: center;
753
+ gap: 12px;
754
+ font-size: 0.8125rem;
755
+ }
756
+
757
+ .footer-social {
758
+ display: flex;
759
+ align-items: center;
760
+ justify-content: flex-end;
761
+ flex-wrap: wrap;
762
+ gap: 8px;
763
+ }
764
+
765
+ .footer-social a {
766
+ width: 36px;
767
+ height: 36px;
768
+ display: grid;
769
+ place-items: center;
770
+ border-radius: 6px;
771
+ border: 1px solid oklch(0.3 0.02 250 / 0.6);
772
+ color: var(--muted-foreground);
773
+ background: oklch(0.22 0.018 250 / 0.25);
774
+ transition: all 0.2s ease;
775
+ }
776
+
777
+ .footer-social img {
778
+ filter: invert(1);
779
+ opacity: 0.62;
780
+ transition: opacity 0.2s ease;
781
+ }
782
+
783
+ .footer-social a:hover {
784
+ color: var(--primary);
785
+ border-color: oklch(0.74 0.18 45 / 0.5);
786
+ background: oklch(0.74 0.18 45 / 0.06);
787
+ }
788
+
789
+ .footer-social a:hover img {
790
+ opacity: 1;
791
+ }
792
+
793
+ @media screen and (max-width: 768px) {
794
+ header.site-header .nav-links {
795
+ display: none;
796
+ }
797
+
798
+ header.site-header .github-link {
799
+ display: none;
800
+ }
801
+
802
+ .site-footer .footer-inner {
803
+ grid-template-columns: 1fr;
804
+ gap: 28px;
805
+ }
806
+
807
+ .footer-social {
808
+ justify-content: flex-start;
809
+ }
810
+
811
+ .footer-credit {
812
+ align-items: flex-start;
813
+ }
814
+ }