@commonpub/layer 0.4.0 → 0.4.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.
@@ -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.1",
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",
54
+ "@commonpub/config": "0.8.0",
55
55
  "@commonpub/editor": "0.5.0",
56
+ "@commonpub/protocol": "0.9.5",
56
57
  "@commonpub/docs": "0.5.2",
57
- "@commonpub/learning": "0.5.0",
58
- "@commonpub/ui": "0.8.0",
59
58
  "@commonpub/server": "2.22.0",
59
+ "@commonpub/ui": "0.8.1",
60
60
  "@commonpub/schema": "0.8.13",
61
- "@commonpub/protocol": "0.9.5"
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,13 +145,205 @@
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
  }
149
158
 
150
- /* === CONTENT TYPE BADGE COLORS (Agora dark palette) === */
159
+
160
+ /* ═══════════════════════════════════════════
161
+ PAPER TEXTURE — darker, grove-tinted
162
+ ═══════════════════════════════════════════ */
163
+
164
+ [data-theme="agora-dark"] body::after {
165
+ content: '';
166
+ position: fixed;
167
+ inset: 0;
168
+ pointer-events: none;
169
+ z-index: 9999;
170
+ opacity: 0.03;
171
+ 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");
172
+ }
173
+
174
+
175
+ /* ═══════════════════════════════════════════
176
+ TYPOGRAPHY — Serif headings
177
+ ═══════════════════════════════════════════ */
178
+
179
+ [data-theme="agora-dark"] h1,
180
+ [data-theme="agora-dark"] h2,
181
+ [data-theme="agora-dark"] h3 {
182
+ font-family: var(--font-display);
183
+ }
184
+
185
+ [data-theme="agora-dark"] :focus-visible {
186
+ outline: none;
187
+ box-shadow: var(--focus-ring);
188
+ }
189
+
190
+
191
+ /* ═══════════════════════════════════════════
192
+ COMPONENT OVERRIDES — mirrors agora.css
193
+ ═══════════════════════════════════════════ */
194
+
195
+ /* Topbar */
196
+ [data-theme="agora-dark"] .cpub-topbar {
197
+ background: var(--surface);
198
+ border-bottom-color: var(--border);
199
+ }
200
+
201
+ [data-theme="agora-dark"] .cpub-site-logo .cpub-logo-name {
202
+ font-family: var(--font-display);
203
+ font-weight: 700;
204
+ letter-spacing: -0.02em;
205
+ }
206
+
207
+ [data-theme="agora-dark"] .cpub-site-logo .cpub-logo-bracket {
208
+ color: var(--accent);
209
+ }
210
+
211
+ /* Buttons */
212
+ [data-theme="agora-dark"] .cpub-btn {
213
+ border-color: var(--border);
214
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
215
+ }
216
+
217
+ [data-theme="agora-dark"] .cpub-btn:hover {
218
+ transform: translateY(-1px);
219
+ box-shadow: var(--shadow-sm);
220
+ }
221
+
222
+ [data-theme="agora-dark"] .cpub-btn:active {
223
+ transform: translateY(0);
224
+ box-shadow: none;
225
+ }
226
+
227
+ [data-theme="agora-dark"] .cpub-btn-primary {
228
+ background: var(--accent);
229
+ border-color: #2a6342;
230
+ box-shadow: var(--shadow-md);
231
+ }
232
+
233
+ [data-theme="agora-dark"] .cpub-btn-primary:hover {
234
+ background: #5ab87e;
235
+ box-shadow: var(--shadow-accent);
236
+ transform: translateY(-1px);
237
+ }
238
+
239
+ [data-theme="agora-dark"] .cpub-btn-ghost {
240
+ color: var(--accent);
241
+ border-color: transparent;
242
+ }
243
+
244
+ [data-theme="agora-dark"] .cpub-btn-ghost:hover {
245
+ color: #5ab87e;
246
+ background: var(--accent-bg);
247
+ }
248
+
249
+ /* Cards */
250
+ [data-theme="agora-dark"] .cpub-sb-card,
251
+ [data-theme="agora-dark"] .cpub-stat-card {
252
+ background: var(--surface);
253
+ border-color: var(--border);
254
+ box-shadow: var(--shadow-sm);
255
+ }
256
+
257
+ [data-theme="agora-dark"] .cpub-content-card {
258
+ border-color: var(--border);
259
+ background: var(--surface);
260
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
261
+ }
262
+
263
+ [data-theme="agora-dark"] .cpub-content-card:hover {
264
+ border-left-color: var(--accent);
265
+ border-left-width: 4px;
266
+ transform: translateY(-2px);
267
+ box-shadow: var(--shadow-md);
268
+ }
269
+
270
+ [data-theme="agora-dark"] .cpub-content-card h3,
271
+ [data-theme="agora-dark"] .cpub-content-card .cpub-card-title {
272
+ font-family: var(--font-display);
273
+ font-weight: 700;
274
+ }
275
+
276
+ /* Inputs */
277
+ [data-theme="agora-dark"] .cpub-input,
278
+ [data-theme="agora-dark"] .cpub-textarea,
279
+ [data-theme="agora-dark"] .cpub-select {
280
+ border-color: var(--border);
281
+ background: var(--surface);
282
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
283
+ }
284
+
285
+ [data-theme="agora-dark"] .cpub-input:focus,
286
+ [data-theme="agora-dark"] .cpub-textarea:focus,
287
+ [data-theme="agora-dark"] .cpub-select:focus {
288
+ border-color: var(--accent);
289
+ box-shadow: var(--focus-ring);
290
+ outline: none;
291
+ }
292
+
293
+ /* Tags */
294
+ [data-theme="agora-dark"] .cpub-tag {
295
+ border-width: 1px;
296
+ }
297
+
298
+ /* Section titles */
299
+ [data-theme="agora-dark"] .cpub-section-title-lg,
300
+ [data-theme="agora-dark"] .cpub-section-title-sm {
301
+ font-family: var(--font-display);
302
+ }
303
+
304
+ /* Prose */
305
+ [data-theme="agora-dark"] .cpub-prose h1,
306
+ [data-theme="agora-dark"] .cpub-prose h2,
307
+ [data-theme="agora-dark"] .cpub-prose h3,
308
+ [data-theme="agora-dark"] .cpub-prose h4 {
309
+ font-family: var(--font-display);
310
+ }
311
+
312
+ [data-theme="agora-dark"] .cpub-prose blockquote {
313
+ border-left-color: var(--accent);
314
+ background: var(--accent-bg);
315
+ }
316
+
317
+ [data-theme="agora-dark"] .cpub-prose a {
318
+ color: var(--accent);
319
+ text-decoration-color: rgba(74, 160, 110, 0.3);
320
+ }
321
+
322
+ /* Admin */
323
+ [data-theme="agora-dark"] .admin-brand {
324
+ font-family: var(--font-display);
325
+ }
326
+
327
+ [data-theme="agora-dark"] .admin-nav-link.router-link-exact-active {
328
+ color: var(--accent);
329
+ background: var(--accent-bg);
330
+ }
331
+
332
+ [data-theme="agora-dark"] .admin-badge {
333
+ background: var(--accent);
334
+ }
335
+
336
+ /* Footer */
337
+ [data-theme="agora-dark"] .cpub-footer-logo .cpub-logo-name {
338
+ font-family: var(--font-display);
339
+ font-weight: 700;
340
+ }
341
+
342
+
343
+ /* ═══════════════════════════════════════════
344
+ CONTENT TYPE BADGE COLORS (Agora dark)
345
+ ═══════════════════════════════════════════ */
346
+
151
347
  [data-theme="agora-dark"] [data-content-type="article"] { --badge-color: #6a9fd0; --badge-bg: rgba(106, 159, 208, 0.12); }
152
348
  [data-theme="agora-dark"] [data-content-type="blog"] { --badge-color: #4aa06e; --badge-bg: rgba(74, 160, 110, 0.12); }
153
349
  [data-theme="agora-dark"] [data-content-type="project"] { --badge-color: #9a7ec4; --badge-bg: rgba(154, 126, 196, 0.12); }
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,17 +143,310 @@
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
+
161
+
162
+ /* ═══════════════════════════════════════════
163
+ PAPER TEXTURE OVERLAY
164
+ Subtle noise that gives everything a
165
+ tactile, printed-on-paper feel.
166
+ ═══════════════════════════════════════════ */
167
+
168
+ [data-theme="agora"] body::after {
169
+ content: '';
170
+ position: fixed;
171
+ inset: 0;
172
+ pointer-events: none;
173
+ z-index: 9999;
174
+ opacity: 0.02;
175
+ 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");
176
+ }
177
+
178
+
179
+ /* ═══════════════════════════════════════════
180
+ TYPOGRAPHY OVERRIDES
181
+ Fraunces for display/headings, Work Sans
182
+ for body, wider tracking on labels.
183
+ ═══════════════════════════════════════════ */
184
+
185
+ [data-theme="agora"] h1,
186
+ [data-theme="agora"] h2,
187
+ [data-theme="agora"] h3 {
188
+ font-family: var(--font-display);
189
+ }
190
+
191
+ /* Focus: glow instead of outline */
192
+ [data-theme="agora"] :focus-visible {
193
+ outline: none;
194
+ box-shadow: var(--focus-ring);
195
+ }
196
+
197
+
198
+ /* ═══════════════════════════════════════════
199
+ COMPONENT: TOPBAR / NAVIGATION
200
+ ═══════════════════════════════════════════ */
201
+
202
+ [data-theme="agora"] .cpub-topbar {
203
+ background: var(--surface);
204
+ border-bottom-color: var(--border);
205
+ }
206
+
207
+ /* Agora wordmark in topbar */
208
+ [data-theme="agora"] .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"] .cpub-site-logo .cpub-logo-bracket {
215
+ color: var(--accent);
216
+ }
217
+
218
+ [data-theme="agora"] .cpub-topbar-link.router-link-active {
219
+ color: var(--accent);
220
+ }
221
+
222
+
223
+ /* ═══════════════════════════════════════════
224
+ COMPONENT: BUTTONS
225
+ Snappy easing, green primary, softer borders.
226
+ ═══════════════════════════════════════════ */
227
+
228
+ [data-theme="agora"] .cpub-btn {
229
+ border-color: var(--border);
230
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
147
231
  }
148
232
 
149
- /* === CONTENT TYPE BADGE COLORS (Agora palette) === */
233
+ [data-theme="agora"] .cpub-btn:hover {
234
+ transform: translateY(-1px);
235
+ box-shadow: var(--shadow-sm);
236
+ }
237
+
238
+ [data-theme="agora"] .cpub-btn:active {
239
+ transform: translateY(0);
240
+ box-shadow: none;
241
+ }
242
+
243
+ [data-theme="agora"] .cpub-btn-primary {
244
+ background: var(--accent);
245
+ border-color: #2a6342;
246
+ box-shadow: var(--shadow-md);
247
+ }
248
+
249
+ [data-theme="agora"] .cpub-btn-primary:hover {
250
+ background: #348050;
251
+ box-shadow: var(--shadow-accent);
252
+ transform: translateY(-1px);
253
+ }
254
+
255
+ [data-theme="agora"] .cpub-btn-ghost {
256
+ color: var(--accent);
257
+ border-color: transparent;
258
+ }
259
+
260
+ [data-theme="agora"] .cpub-btn-ghost:hover {
261
+ color: #2a6342;
262
+ background: var(--accent-bg);
263
+ }
264
+
265
+
266
+ /* ═══════════════════════════════════════════
267
+ COMPONENT: CARDS
268
+ Linen backgrounds, soft borders, accent
269
+ left-border treatment on hover.
270
+ ═══════════════════════════════════════════ */
271
+
272
+ [data-theme="agora"] .cpub-sb-card,
273
+ [data-theme="agora"] .cpub-stat-card {
274
+ background: var(--bg);
275
+ border-color: var(--border);
276
+ box-shadow: var(--shadow-sm);
277
+ }
278
+
279
+ [data-theme="agora"] .cpub-sb-card:hover,
280
+ [data-theme="agora"] .cpub-stat-card:hover {
281
+ box-shadow: var(--shadow-md);
282
+ }
283
+
284
+ /* Content cards get accent left border on hover */
285
+ [data-theme="agora"] .cpub-content-card {
286
+ border-color: var(--border);
287
+ background: var(--surface);
288
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
289
+ }
290
+
291
+ [data-theme="agora"] .cpub-content-card:hover {
292
+ border-left-color: var(--accent);
293
+ border-left-width: 4px;
294
+ transform: translateY(-2px);
295
+ box-shadow: var(--shadow-md);
296
+ }
297
+
298
+ /* Card headers use display font */
299
+ [data-theme="agora"] .cpub-content-card h3,
300
+ [data-theme="agora"] .cpub-content-card .cpub-card-title {
301
+ font-family: var(--font-display);
302
+ font-weight: 700;
303
+ }
304
+
305
+
306
+ /* ═══════════════════════════════════════════
307
+ COMPONENT: INPUTS & FORMS
308
+ Soft borders, glow focus ring.
309
+ ═══════════════════════════════════════════ */
310
+
311
+ [data-theme="agora"] .cpub-input,
312
+ [data-theme="agora"] .cpub-textarea,
313
+ [data-theme="agora"] .cpub-select {
314
+ border-color: var(--border);
315
+ background: var(--bg);
316
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
317
+ }
318
+
319
+ [data-theme="agora"] .cpub-input:focus,
320
+ [data-theme="agora"] .cpub-textarea:focus,
321
+ [data-theme="agora"] .cpub-select:focus {
322
+ border-color: var(--accent);
323
+ box-shadow: var(--focus-ring);
324
+ outline: none;
325
+ }
326
+
327
+ /* Form labels get wider tracking */
328
+ [data-theme="agora"] .cpub-form-label {
329
+ letter-spacing: var(--tracking-wider);
330
+ }
331
+
332
+
333
+ /* ═══════════════════════════════════════════
334
+ COMPONENT: BADGES & TAGS
335
+ Thinner borders (1px), warmer palette.
336
+ ═══════════════════════════════════════════ */
337
+
338
+ [data-theme="agora"] .cpub-tag {
339
+ border-width: 1px;
340
+ }
341
+
342
+ [data-theme="agora"] .cpub-badge-filled {
343
+ background: var(--accent);
344
+ border-color: var(--accent);
345
+ color: #fff;
346
+ }
347
+
348
+
349
+ /* ═══════════════════════════════════════════
350
+ COMPONENT: SECTION TITLES & HEADINGS
351
+ Fraunces display, green accent numbers.
352
+ ═══════════════════════════════════════════ */
353
+
354
+ [data-theme="agora"] .cpub-section-title-lg {
355
+ font-family: var(--font-display);
356
+ font-weight: 700;
357
+ }
358
+
359
+ [data-theme="agora"] .cpub-section-title-sm {
360
+ font-family: var(--font-display);
361
+ font-weight: 600;
362
+ }
363
+
364
+ [data-theme="agora"] .admin-page-title {
365
+ font-family: var(--font-display);
366
+ }
367
+
368
+
369
+ /* ═══════════════════════════════════════════
370
+ COMPONENT: LINKS
371
+ Green links with underline offset.
372
+ ═══════════════════════════════════════════ */
373
+
374
+ [data-theme="agora"] a:not(.cpub-btn):not(.cpub-topbar-link):not(.cpub-footer-link):not(.admin-nav-link) {
375
+ text-decoration-color: rgba(61, 139, 94, 0.3);
376
+ text-underline-offset: 2px;
377
+ }
378
+
379
+
380
+ /* ═══════════════════════════════════════════
381
+ COMPONENT: FOOTER
382
+ Warm treatment, serif brand name.
383
+ ═══════════════════════════════════════════ */
384
+
385
+ [data-theme="agora"] .cpub-footer {
386
+ border-top-color: var(--border);
387
+ }
388
+
389
+ [data-theme="agora"] .cpub-footer-logo .cpub-logo-name {
390
+ font-family: var(--font-display);
391
+ font-weight: 700;
392
+ }
393
+
394
+ [data-theme="agora"] .cpub-footer-col-title {
395
+ letter-spacing: var(--tracking-widest);
396
+ }
397
+
398
+
399
+ /* ═══════════════════════════════════════════
400
+ PROSE / CONTENT AREA
401
+ Serif headings, warmer body feel.
402
+ ═══════════════════════════════════════════ */
403
+
404
+ [data-theme="agora"] .cpub-prose h1,
405
+ [data-theme="agora"] .cpub-prose h2,
406
+ [data-theme="agora"] .cpub-prose h3,
407
+ [data-theme="agora"] .cpub-prose h4 {
408
+ font-family: var(--font-display);
409
+ }
410
+
411
+ [data-theme="agora"] .cpub-prose blockquote {
412
+ border-left-color: var(--accent);
413
+ background: var(--accent-bg);
414
+ }
415
+
416
+ [data-theme="agora"] .cpub-prose a {
417
+ color: var(--accent);
418
+ text-decoration-color: rgba(61, 139, 94, 0.3);
419
+ }
420
+
421
+ [data-theme="agora"] .cpub-prose code {
422
+ background: var(--surface2);
423
+ border-color: var(--border2);
424
+ }
425
+
426
+
427
+ /* ═══════════════════════════════════════════
428
+ ADMIN LAYOUT
429
+ Warm sidebar, serif titles.
430
+ ═══════════════════════════════════════════ */
431
+
432
+ [data-theme="agora"] .admin-brand {
433
+ font-family: var(--font-display);
434
+ }
435
+
436
+ [data-theme="agora"] .admin-nav-link.router-link-exact-active {
437
+ color: var(--accent);
438
+ background: var(--accent-bg);
439
+ }
440
+
441
+ [data-theme="agora"] .admin-badge {
442
+ background: var(--accent);
443
+ }
444
+
445
+
446
+ /* ═══════════════════════════════════════════
447
+ CONTENT TYPE BADGE COLORS (Agora palette)
448
+ ═══════════════════════════════════════════ */
449
+
150
450
  [data-theme="agora"] [data-content-type="article"] { --badge-color: #4a7fb8; --badge-bg: rgba(74, 127, 184, 0.08); }
151
451
  [data-theme="agora"] [data-content-type="blog"] { --badge-color: #3d8b5e; --badge-bg: rgba(61, 139, 94, 0.08); }
152
452
  [data-theme="agora"] [data-content-type="project"] { --badge-color: #7b5ea7; --badge-bg: rgba(123, 94, 167, 0.08); }