@commonpub/layer 0.4.0 → 0.4.2

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.
@@ -1,7 +1,30 @@
1
+ <script setup lang="ts">
2
+ const { themeId } = useTheme();
3
+ const isAgora = computed(() => themeId.value === 'agora' || themeId.value === 'agora-dark');
4
+ </script>
5
+
1
6
  <template>
2
7
  <span class="cpub-site-logo">
3
- <span class="cpub-logo-bracket">[</span>C<span class="cpub-logo-bracket">]</span>
4
- <span class="cpub-logo-name">CommonPub</span>
8
+ <template v-if="isAgora">
9
+ <!-- Town Square mark: 4 blocks + green center -->
10
+ <svg class="cpub-logo-mark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="22" height="22" aria-hidden="true">
11
+ <rect x="18" y="18" width="72" height="72" fill="none" stroke="currentColor" stroke-width="7" stroke-linejoin="round"/>
12
+ <rect x="110" y="18" width="72" height="72" fill="none" stroke="currentColor" stroke-width="7" stroke-linejoin="round"/>
13
+ <rect x="18" y="110" width="72" height="72" fill="none" stroke="currentColor" stroke-width="7" stroke-linejoin="round"/>
14
+ <rect x="110" y="110" width="72" height="72" fill="none" stroke="currentColor" stroke-width="7" stroke-linejoin="round"/>
15
+ <rect x="88" y="88" width="24" height="24" fill="var(--accent, #3d8b5e)"/>
16
+ <!-- Content lines: 1 green accent per block -->
17
+ <line x1="34" y1="54" x2="72" y2="54" stroke="var(--accent, #3d8b5e)" stroke-width="3.5" stroke-linecap="round" opacity="0.7"/>
18
+ <line x1="128" y1="46" x2="166" y2="46" stroke="var(--accent, #3d8b5e)" stroke-width="3.5" stroke-linecap="round" opacity="0.7"/>
19
+ <line x1="34" y1="148" x2="68" y2="148" stroke="var(--accent, #3d8b5e)" stroke-width="3.5" stroke-linecap="round" opacity="0.7"/>
20
+ <line x1="128" y1="142" x2="162" y2="142" stroke="var(--accent, #3d8b5e)" stroke-width="3.5" stroke-linecap="round" opacity="0.7"/>
21
+ </svg>
22
+ <span class="cpub-logo-name cpub-logo-name--agora">Common<span class="cpub-logo-pub">Pub</span></span>
23
+ </template>
24
+ <template v-else>
25
+ <span class="cpub-logo-bracket">[</span>C<span class="cpub-logo-bracket">]</span>
26
+ <span class="cpub-logo-name">CommonPub</span>
27
+ </template>
5
28
  </span>
6
29
  </template>
7
30
 
@@ -18,4 +41,20 @@
18
41
  }
19
42
  .cpub-logo-bracket { color: var(--accent); font-size: 15px; }
20
43
  .cpub-logo-name { margin-left: 2px; }
44
+
45
+ /* Agora wordmark */
46
+ .cpub-logo-mark {
47
+ margin-right: 6px;
48
+ flex-shrink: 0;
49
+ }
50
+ .cpub-logo-name--agora {
51
+ font-family: var(--font-display, var(--font-heading));
52
+ font-weight: 700;
53
+ font-size: 16px;
54
+ letter-spacing: -0.02em;
55
+ margin-left: 0;
56
+ }
57
+ .cpub-logo-pub {
58
+ color: var(--accent);
59
+ }
21
60
  </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commonpub/layer",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "files": [
@@ -50,15 +50,15 @@
50
50
  "vue": "^3.4.0",
51
51
  "vue-router": "^4.3.0",
52
52
  "zod": "^4.3.6",
53
- "@commonpub/config": "0.8.0",
54
53
  "@commonpub/auth": "0.5.0",
55
- "@commonpub/editor": "0.5.0",
54
+ "@commonpub/config": "0.8.0",
56
55
  "@commonpub/docs": "0.5.2",
57
- "@commonpub/learning": "0.5.0",
58
- "@commonpub/ui": "0.8.0",
56
+ "@commonpub/protocol": "0.9.5",
57
+ "@commonpub/editor": "0.5.0",
59
58
  "@commonpub/server": "2.22.0",
60
59
  "@commonpub/schema": "0.8.13",
61
- "@commonpub/protocol": "0.9.5"
60
+ "@commonpub/ui": "0.8.2",
61
+ "@commonpub/learning": "0.5.0"
62
62
  },
63
63
  "devDependencies": {
64
64
  "@testing-library/jest-dom": "^6.9.1",
@@ -2,7 +2,11 @@
2
2
  /* ===========================================
3
3
  CommonPub Agora Theme — Dark (Grove)
4
4
  Warm dark surfaces with green-tinted blacks,
5
- green accent, serif display font.
5
+ commons green accent, serif display font,
6
+ paper texture, snappy easing.
7
+
8
+ Complete design system override — mirrors
9
+ all agora.css component overrides.
6
10
  =========================================== */
7
11
 
8
12
  [data-theme="agora-dark"] {
@@ -34,9 +38,9 @@
34
38
  --color-on-primary: #ffffff;
35
39
  --color-primary-hover: #4aa06e;
36
40
 
37
- /* === BORDERS (grove-tinted) === */
38
- --border: #3a4f40;
39
- --border2: #2a3a2f;
41
+ /* === BORDERS (grove-tinted, soft) === */
42
+ --border: rgba(232, 232, 226, 0.15);
43
+ --border2: rgba(232, 232, 226, 0.08);
40
44
 
41
45
  --color-border: var(--border2);
42
46
  --color-border-strong: var(--border);
@@ -141,17 +145,215 @@
141
145
  --shadow-lg: 6px 6px 0 rgba(0, 0, 0, 0.4);
142
146
  --shadow-xl: 8px 8px 0 rgba(0, 0, 0, 0.4);
143
147
 
148
+ /* === TRANSITIONS (snappy) === */
149
+ --transition-fast: 120ms cubic-bezier(0.22, 1, 0.36, 1);
150
+ --transition-default: 250ms cubic-bezier(0.22, 1, 0.36, 1);
151
+ --transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
152
+
144
153
  /* === FOCUS === */
145
- --focus-ring: var(--shadow-accent);
154
+ --focus-ring: 0 0 0 3px rgba(74, 160, 110, 0.25);
146
155
 
147
156
  color-scheme: dark;
148
157
  }
158
+ } /* end @layer commonpub — token overrides only */
159
+
160
+
161
+ /* ═══════════════════════════════════════════
162
+ COMPONENT OVERRIDES (outside @layer so they
163
+ beat Vue scoped styles)
164
+ ═══════════════════════════════════════════ */
165
+
166
+
167
+ /* ═══════════════════════════════════════════
168
+ PAPER TEXTURE — darker, grove-tinted
169
+ ═══════════════════════════════════════════ */
170
+
171
+ [data-theme="agora-dark"] body::after {
172
+ content: '';
173
+ position: fixed;
174
+ inset: 0;
175
+ pointer-events: none;
176
+ z-index: 9999;
177
+ opacity: 0.03;
178
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
179
+ }
180
+
181
+
182
+ /* ═══════════════════════════════════════════
183
+ TYPOGRAPHY — Serif headings
184
+ ═══════════════════════════════════════════ */
185
+
186
+ [data-theme="agora-dark"] h1,
187
+ [data-theme="agora-dark"] h2,
188
+ [data-theme="agora-dark"] h3 {
189
+ font-family: var(--font-display);
190
+ }
191
+
192
+ [data-theme="agora-dark"] :focus-visible {
193
+ outline: none;
194
+ box-shadow: var(--focus-ring);
195
+ }
196
+
197
+
198
+ /* ═══════════════════════════════════════════
199
+ COMPONENT OVERRIDES — mirrors agora.css
200
+ ═══════════════════════════════════════════ */
201
+
202
+ /* Topbar */
203
+ [data-theme="agora-dark"] .cpub-topbar {
204
+ background: var(--surface);
205
+ border-bottom-color: var(--border);
206
+ }
207
+
208
+ [data-theme="agora-dark"] .cpub-site-logo .cpub-logo-name {
209
+ font-family: var(--font-display);
210
+ font-weight: 700;
211
+ letter-spacing: -0.02em;
212
+ }
213
+
214
+ [data-theme="agora-dark"] .cpub-site-logo .cpub-logo-bracket {
215
+ color: var(--accent);
216
+ }
217
+
218
+ /* Buttons */
219
+ [data-theme="agora-dark"] .cpub-btn {
220
+ border-color: var(--border);
221
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
222
+ }
223
+
224
+ [data-theme="agora-dark"] .cpub-btn:hover {
225
+ transform: translateY(-1px);
226
+ box-shadow: var(--shadow-sm);
227
+ }
228
+
229
+ [data-theme="agora-dark"] .cpub-btn:active {
230
+ transform: translateY(0);
231
+ box-shadow: none;
232
+ }
233
+
234
+ [data-theme="agora-dark"] .cpub-btn-primary {
235
+ background: var(--accent);
236
+ border-color: #2a6342;
237
+ box-shadow: var(--shadow-md);
238
+ }
239
+
240
+ [data-theme="agora-dark"] .cpub-btn-primary:hover {
241
+ background: #5ab87e;
242
+ box-shadow: var(--shadow-accent);
243
+ transform: translateY(-1px);
244
+ }
245
+
246
+ [data-theme="agora-dark"] .cpub-btn-ghost {
247
+ color: var(--accent);
248
+ border-color: transparent;
249
+ }
250
+
251
+ [data-theme="agora-dark"] .cpub-btn-ghost:hover {
252
+ color: #5ab87e;
253
+ background: var(--accent-bg);
254
+ }
255
+
256
+ /* Cards */
257
+ [data-theme="agora-dark"] .cpub-sb-card,
258
+ [data-theme="agora-dark"] .cpub-stat-card {
259
+ background: var(--surface);
260
+ border-color: var(--border);
261
+ box-shadow: var(--shadow-sm);
262
+ }
263
+
264
+ [data-theme="agora-dark"] .cpub-content-card {
265
+ border-color: var(--border);
266
+ background: var(--surface);
267
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
268
+ }
269
+
270
+ [data-theme="agora-dark"] .cpub-content-card:hover {
271
+ border-left-color: var(--accent);
272
+ border-left-width: 4px;
273
+ transform: translateY(-2px);
274
+ box-shadow: var(--shadow-md);
275
+ }
276
+
277
+ [data-theme="agora-dark"] .cpub-content-card h3,
278
+ [data-theme="agora-dark"] .cpub-content-card .cpub-card-title {
279
+ font-family: var(--font-display);
280
+ font-weight: 700;
281
+ }
282
+
283
+ /* Inputs */
284
+ [data-theme="agora-dark"] .cpub-input,
285
+ [data-theme="agora-dark"] .cpub-textarea,
286
+ [data-theme="agora-dark"] .cpub-select {
287
+ border-color: var(--border);
288
+ background: var(--surface);
289
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
290
+ }
291
+
292
+ [data-theme="agora-dark"] .cpub-input:focus,
293
+ [data-theme="agora-dark"] .cpub-textarea:focus,
294
+ [data-theme="agora-dark"] .cpub-select:focus {
295
+ border-color: var(--accent);
296
+ box-shadow: var(--focus-ring);
297
+ outline: none;
298
+ }
299
+
300
+ /* Tags */
301
+ [data-theme="agora-dark"] .cpub-tag {
302
+ border-width: 1px;
303
+ }
304
+
305
+ /* Section titles */
306
+ [data-theme="agora-dark"] .cpub-section-title-lg,
307
+ [data-theme="agora-dark"] .cpub-section-title-sm {
308
+ font-family: var(--font-display);
309
+ }
310
+
311
+ /* Prose */
312
+ [data-theme="agora-dark"] .cpub-prose h1,
313
+ [data-theme="agora-dark"] .cpub-prose h2,
314
+ [data-theme="agora-dark"] .cpub-prose h3,
315
+ [data-theme="agora-dark"] .cpub-prose h4 {
316
+ font-family: var(--font-display);
317
+ }
318
+
319
+ [data-theme="agora-dark"] .cpub-prose blockquote {
320
+ border-left-color: var(--accent);
321
+ background: var(--accent-bg);
322
+ }
323
+
324
+ [data-theme="agora-dark"] .cpub-prose a {
325
+ color: var(--accent);
326
+ text-decoration-color: rgba(74, 160, 110, 0.3);
327
+ }
328
+
329
+ /* Admin */
330
+ [data-theme="agora-dark"] .admin-brand {
331
+ font-family: var(--font-display);
332
+ }
333
+
334
+ [data-theme="agora-dark"] .admin-nav-link.router-link-exact-active {
335
+ color: var(--accent);
336
+ background: var(--accent-bg);
337
+ }
338
+
339
+ [data-theme="agora-dark"] .admin-badge {
340
+ background: var(--accent);
341
+ }
342
+
343
+ /* Footer */
344
+ [data-theme="agora-dark"] .cpub-footer-logo .cpub-logo-name {
345
+ font-family: var(--font-display);
346
+ font-weight: 700;
347
+ }
348
+
349
+
350
+ /* ═══════════════════════════════════════════
351
+ CONTENT TYPE BADGE COLORS (Agora dark)
352
+ ═══════════════════════════════════════════ */
149
353
 
150
- /* === CONTENT TYPE BADGE COLORS (Agora dark palette) === */
151
354
  [data-theme="agora-dark"] [data-content-type="article"] { --badge-color: #6a9fd0; --badge-bg: rgba(106, 159, 208, 0.12); }
152
355
  [data-theme="agora-dark"] [data-content-type="blog"] { --badge-color: #4aa06e; --badge-bg: rgba(74, 160, 110, 0.12); }
153
356
  [data-theme="agora-dark"] [data-content-type="project"] { --badge-color: #9a7ec4; --badge-bg: rgba(154, 126, 196, 0.12); }
154
357
  [data-theme="agora-dark"] [data-content-type="explainer"] { --badge-color: #3dbcab; --badge-bg: rgba(61, 188, 171, 0.12); }
155
358
  [data-theme="agora-dark"] [data-content-type="video"] { --badge-color: #d85e55; --badge-bg: rgba(216, 94, 85, 0.12); }
156
359
  [data-theme="agora-dark"] [data-content-type="tutorial"] { --badge-color: #daa040; --badge-bg: rgba(218, 160, 64, 0.12); }
157
- }
package/theme/agora.css CHANGED
@@ -1,9 +1,16 @@
1
1
  @layer commonpub {
2
2
  /* ===========================================
3
3
  CommonPub Agora Theme — Light
4
+ "Where makers gather, build, and share."
5
+
4
6
  Warm institutional aesthetic: parchment
5
- backgrounds, green accent, serif display
6
- font, offset shadows.
7
+ backgrounds, commons green accent, Fraunces
8
+ serif display, Work Sans body, soft rgba
9
+ borders, paper texture, snappy easing.
10
+
11
+ This is a COMPLETE design system, not just
12
+ a color swap. It overrides tokens AND
13
+ component styles.
7
14
  =========================================== */
8
15
 
9
16
  [data-theme="agora"] {
@@ -32,9 +39,9 @@
32
39
  --color-text-muted: var(--text-faint);
33
40
  --color-text-inverse: #f7f4ed;
34
41
 
35
- /* === BORDERS (warm) === */
36
- --border: #1a1a1a;
37
- --border2: #d4cfc4;
42
+ /* === BORDERS (soft, warm) === */
43
+ --border: rgba(26, 26, 26, 0.25);
44
+ --border2: rgba(26, 26, 26, 0.12);
38
45
 
39
46
  --color-border: var(--border2);
40
47
  --color-border-strong: var(--border);
@@ -98,8 +105,8 @@
98
105
  --color-badge-overlay: rgba(26, 26, 26, 0.75);
99
106
 
100
107
  /* === INTERACTIVE === */
101
- --color-link: var(--accent);
102
- --color-link-hover: #2a6342;
108
+ --color-link: #2a6342;
109
+ --color-link-hover: #1e4f32;
103
110
 
104
111
  /* === TYPOGRAPHY (warm, distinctive) === */
105
112
  --font-sans: 'Work Sans', system-ui, -apple-system, sans-serif;
@@ -128,7 +135,7 @@
128
135
  --leading-normal: 1.7;
129
136
  --leading-relaxed: 1.9;
130
137
 
131
- /* Letter Spacing */
138
+ /* Letter Spacing (wider for Agora's institutional feel) */
132
139
  --tracking-tight: -0.02em;
133
140
  --tracking-normal: 0;
134
141
  --tracking-wide: 0.06em;
@@ -136,21 +143,320 @@
136
143
  --tracking-widest: 0.16em;
137
144
 
138
145
  /* === SHADOWS (offset, warm ink) === */
139
- --shadow-sm: 2px 2px 0 var(--border);
140
- --shadow-md: 4px 4px 0 var(--border);
141
- --shadow-lg: 6px 6px 0 var(--border);
142
- --shadow-xl: 8px 8px 0 var(--border);
146
+ --shadow-sm: 2px 2px 0 rgba(26, 26, 26, 0.25);
147
+ --shadow-md: 4px 4px 0 rgba(26, 26, 26, 0.25);
148
+ --shadow-lg: 6px 6px 0 rgba(26, 26, 26, 0.25);
149
+ --shadow-xl: 8px 8px 0 rgba(26, 26, 26, 0.25);
143
150
  --shadow-accent: 4px 4px 0 var(--accent);
144
151
 
145
- /* === FOCUS === */
146
- --focus-ring: var(--shadow-accent);
152
+ /* === TRANSITIONS (snappy) === */
153
+ --transition-fast: 120ms cubic-bezier(0.22, 1, 0.36, 1);
154
+ --transition-default: 250ms cubic-bezier(0.22, 1, 0.36, 1);
155
+ --transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
156
+
157
+ /* === FOCUS (glow instead of outline) === */
158
+ --focus-ring: 0 0 0 3px rgba(61, 139, 94, 0.2);
159
+ }
160
+ } /* end @layer commonpub — token overrides only */
161
+
162
+
163
+ /* ═══════════════════════════════════════════
164
+ COMPONENT OVERRIDES (outside @layer so they
165
+ beat Vue scoped styles)
166
+ ═══════════════════════════════════════════ */
167
+
168
+
169
+ /* ═══════════════════════════════════════════
170
+ PAPER TEXTURE OVERLAY
171
+ Subtle noise that gives everything a
172
+ tactile, printed-on-paper feel.
173
+ ═══════════════════════════════════════════ */
174
+
175
+ [data-theme="agora"] body::after {
176
+ content: '';
177
+ position: fixed;
178
+ inset: 0;
179
+ pointer-events: none;
180
+ z-index: 9999;
181
+ opacity: 0.02;
182
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
183
+ }
184
+
185
+
186
+ /* ═══════════════════════════════════════════
187
+ TYPOGRAPHY OVERRIDES
188
+ Fraunces for display/headings, Work Sans
189
+ for body, wider tracking on labels.
190
+ ═══════════════════════════════════════════ */
191
+
192
+ [data-theme="agora"] h1,
193
+ [data-theme="agora"] h2,
194
+ [data-theme="agora"] h3 {
195
+ font-family: var(--font-display);
196
+ }
197
+
198
+ /* Focus: glow instead of outline */
199
+ [data-theme="agora"] :focus-visible {
200
+ outline: none;
201
+ box-shadow: var(--focus-ring);
202
+ }
203
+
204
+
205
+ /* ═══════════════════════════════════════════
206
+ COMPONENT: TOPBAR / NAVIGATION
207
+ ═══════════════════════════════════════════ */
208
+
209
+ [data-theme="agora"] .cpub-topbar {
210
+ background: var(--surface);
211
+ border-bottom-color: var(--border);
212
+ }
213
+
214
+ /* Agora wordmark in topbar */
215
+ [data-theme="agora"] .cpub-site-logo .cpub-logo-name {
216
+ font-family: var(--font-display);
217
+ font-weight: 700;
218
+ letter-spacing: -0.02em;
219
+ }
220
+
221
+ [data-theme="agora"] .cpub-site-logo .cpub-logo-bracket {
222
+ color: var(--accent);
223
+ }
224
+
225
+ [data-theme="agora"] .cpub-topbar-link.router-link-active {
226
+ color: var(--accent);
227
+ }
228
+
229
+
230
+ /* ═══════════════════════════════════════════
231
+ COMPONENT: BUTTONS
232
+ Snappy easing, green primary, softer borders.
233
+ ═══════════════════════════════════════════ */
234
+
235
+ [data-theme="agora"] .cpub-btn {
236
+ border-color: var(--border);
237
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
238
+ }
239
+
240
+ [data-theme="agora"] .cpub-btn:hover {
241
+ transform: translateY(-1px);
242
+ box-shadow: var(--shadow-sm);
243
+ }
244
+
245
+ [data-theme="agora"] .cpub-btn:active {
246
+ transform: translateY(0);
247
+ box-shadow: none;
248
+ }
249
+
250
+ [data-theme="agora"] .cpub-btn-primary {
251
+ background: var(--accent);
252
+ border-color: #2a6342;
253
+ box-shadow: var(--shadow-md);
254
+ }
255
+
256
+ [data-theme="agora"] .cpub-btn-primary:hover {
257
+ background: #348050;
258
+ box-shadow: var(--shadow-accent);
259
+ transform: translateY(-1px);
260
+ }
261
+
262
+ [data-theme="agora"] .cpub-btn-ghost {
263
+ color: var(--accent);
264
+ border-color: transparent;
265
+ }
266
+
267
+ [data-theme="agora"] .cpub-btn-ghost:hover {
268
+ color: #2a6342;
269
+ background: var(--accent-bg);
270
+ }
271
+
272
+
273
+ /* ═══════════════════════════════════════════
274
+ COMPONENT: CARDS
275
+ Linen backgrounds, soft borders, accent
276
+ left-border treatment on hover.
277
+ ═══════════════════════════════════════════ */
278
+
279
+ [data-theme="agora"] .cpub-sb-card,
280
+ [data-theme="agora"] .cpub-stat-card {
281
+ background: var(--bg);
282
+ border-color: var(--border);
283
+ box-shadow: var(--shadow-sm);
284
+ }
285
+
286
+ [data-theme="agora"] .cpub-sb-card:hover,
287
+ [data-theme="agora"] .cpub-stat-card:hover {
288
+ box-shadow: var(--shadow-md);
289
+ }
290
+
291
+ /* Content cards get accent left border on hover */
292
+ [data-theme="agora"] .cpub-content-card {
293
+ border-color: var(--border);
294
+ background: var(--surface);
295
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
296
+ }
297
+
298
+ [data-theme="agora"] .cpub-content-card:hover {
299
+ border-left-color: var(--accent);
300
+ border-left-width: 4px;
301
+ transform: translateY(-2px);
302
+ box-shadow: var(--shadow-md);
303
+ }
304
+
305
+ /* Card headers use display font */
306
+ [data-theme="agora"] .cpub-content-card h3,
307
+ [data-theme="agora"] .cpub-content-card .cpub-card-title {
308
+ font-family: var(--font-display);
309
+ font-weight: 700;
310
+ }
311
+
312
+
313
+ /* ═══════════════════════════════════════════
314
+ COMPONENT: INPUTS & FORMS
315
+ Soft borders, glow focus ring.
316
+ ═══════════════════════════════════════════ */
317
+
318
+ [data-theme="agora"] .cpub-input,
319
+ [data-theme="agora"] .cpub-textarea,
320
+ [data-theme="agora"] .cpub-select {
321
+ border-color: var(--border);
322
+ background: var(--bg);
323
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
324
+ }
325
+
326
+ [data-theme="agora"] .cpub-input:focus,
327
+ [data-theme="agora"] .cpub-textarea:focus,
328
+ [data-theme="agora"] .cpub-select:focus {
329
+ border-color: var(--accent);
330
+ box-shadow: var(--focus-ring);
331
+ outline: none;
332
+ }
333
+
334
+ /* Form labels get wider tracking */
335
+ [data-theme="agora"] .cpub-form-label {
336
+ letter-spacing: var(--tracking-wider);
337
+ }
338
+
339
+
340
+ /* ═══════════════════════════════════════════
341
+ COMPONENT: BADGES & TAGS
342
+ Thinner borders (1px), warmer palette.
343
+ ═══════════════════════════════════════════ */
344
+
345
+ [data-theme="agora"] .cpub-tag {
346
+ border-width: 1px;
347
+ }
348
+
349
+ [data-theme="agora"] .cpub-badge-filled {
350
+ background: var(--accent);
351
+ border-color: var(--accent);
352
+ color: #fff;
353
+ }
354
+
355
+
356
+ /* ═══════════════════════════════════════════
357
+ COMPONENT: SECTION TITLES & HEADINGS
358
+ Fraunces display, green accent numbers.
359
+ ═══════════════════════════════════════════ */
360
+
361
+ [data-theme="agora"] .cpub-section-title-lg {
362
+ font-family: var(--font-display);
363
+ font-weight: 700;
364
+ }
365
+
366
+ [data-theme="agora"] .cpub-section-title-sm {
367
+ font-family: var(--font-display);
368
+ font-weight: 600;
369
+ }
370
+
371
+ [data-theme="agora"] .admin-page-title {
372
+ font-family: var(--font-display);
373
+ }
374
+
375
+
376
+ /* ═══════════════════════════════════════════
377
+ COMPONENT: LINKS
378
+ Green links with underline offset.
379
+ ═══════════════════════════════════════════ */
380
+
381
+ [data-theme="agora"] a:not(.cpub-btn):not(.cpub-topbar-link):not(.cpub-footer-link):not(.admin-nav-link) {
382
+ text-decoration-color: rgba(61, 139, 94, 0.3);
383
+ text-underline-offset: 2px;
384
+ }
385
+
386
+
387
+ /* ═══════════════════════════════════════════
388
+ COMPONENT: FOOTER
389
+ Warm treatment, serif brand name.
390
+ ═══════════════════════════════════════════ */
391
+
392
+ [data-theme="agora"] .cpub-footer {
393
+ border-top-color: var(--border);
394
+ }
395
+
396
+ [data-theme="agora"] .cpub-footer-logo .cpub-logo-name {
397
+ font-family: var(--font-display);
398
+ font-weight: 700;
399
+ }
400
+
401
+ [data-theme="agora"] .cpub-footer-col-title {
402
+ letter-spacing: var(--tracking-widest);
403
+ }
404
+
405
+
406
+ /* ═══════════════════════════════════════════
407
+ PROSE / CONTENT AREA
408
+ Serif headings, warmer body feel.
409
+ ═══════════════════════════════════════════ */
410
+
411
+ [data-theme="agora"] .cpub-prose h1,
412
+ [data-theme="agora"] .cpub-prose h2,
413
+ [data-theme="agora"] .cpub-prose h3,
414
+ [data-theme="agora"] .cpub-prose h4 {
415
+ font-family: var(--font-display);
416
+ }
417
+
418
+ [data-theme="agora"] .cpub-prose blockquote {
419
+ border-left-color: var(--accent);
420
+ background: var(--accent-bg);
421
+ }
422
+
423
+ [data-theme="agora"] .cpub-prose a {
424
+ color: var(--accent);
425
+ text-decoration-color: rgba(61, 139, 94, 0.3);
147
426
  }
148
427
 
149
- /* === CONTENT TYPE BADGE COLORS (Agora palette) === */
428
+ [data-theme="agora"] .cpub-prose code {
429
+ background: var(--surface2);
430
+ border-color: var(--border2);
431
+ }
432
+
433
+
434
+ /* ═══════════════════════════════════════════
435
+ ADMIN LAYOUT
436
+ Warm sidebar, serif titles.
437
+ ═══════════════════════════════════════════ */
438
+
439
+ [data-theme="agora"] .admin-brand {
440
+ font-family: var(--font-display);
441
+ }
442
+
443
+ [data-theme="agora"] .admin-nav-link.router-link-exact-active {
444
+ color: var(--accent);
445
+ background: var(--accent-bg);
446
+ }
447
+
448
+ [data-theme="agora"] .admin-badge {
449
+ background: var(--accent);
450
+ }
451
+
452
+
453
+ /* ═══════════════════════════════════════════
454
+ CONTENT TYPE BADGE COLORS (Agora palette)
455
+ ═══════════════════════════════════════════ */
456
+
150
457
  [data-theme="agora"] [data-content-type="article"] { --badge-color: #4a7fb8; --badge-bg: rgba(74, 127, 184, 0.08); }
151
458
  [data-theme="agora"] [data-content-type="blog"] { --badge-color: #3d8b5e; --badge-bg: rgba(61, 139, 94, 0.08); }
152
459
  [data-theme="agora"] [data-content-type="project"] { --badge-color: #7b5ea7; --badge-bg: rgba(123, 94, 167, 0.08); }
153
460
  [data-theme="agora"] [data-content-type="explainer"] { --badge-color: #2a9d8f; --badge-bg: rgba(42, 157, 143, 0.08); }
154
461
  [data-theme="agora"] [data-content-type="video"] { --badge-color: #c4443a; --badge-bg: rgba(196, 68, 58, 0.08); }
155
462
  [data-theme="agora"] [data-content-type="tutorial"] { --badge-color: #c4882a; --badge-bg: rgba(196, 136, 42, 0.08); }
156
- }