@beforesemicolon/builder 1.7.0 → 1.8.1

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