gigaplan 0.1.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.
@@ -0,0 +1,450 @@
1
+ /* ============================================================
2
+ gigaplan chrome — "Atelier / Terminal" theme
3
+ Ported from the Corrado dello Russo design system
4
+ (colors/typography/spacing/radius/elevation/motion/base tokens
5
+ + the subset of cdr- component classes gigaplan actually uses).
6
+ ============================================================ */
7
+
8
+ @import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,500;12..96,600;12..96,700;12..96,800&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
9
+
10
+ /* ---------------------------------------------------------- COLOR TOKENS */
11
+ :root {
12
+ --bone-0: #FBF7EF; --bone-50: #F8F3E9; --bone-100: #F1EBDF; --bone-200: #E8E0D0;
13
+ --bone-300: #DDD2BE; --bone-400: #CBBCA1; --bone-500: #A8987F; --bone-600: #8C7F6B;
14
+ --bone-700: #5E5648; --bone-800: #3A342B; --bone-900: #26221B; --bone-950: #1B1714;
15
+
16
+ --coal-0: #EDEBE0; --coal-50: #C9C8BB; --coal-100: #9A9C8E; --coal-200: #777A6C;
17
+ --coal-300: #585B4E; --coal-400: #3C3F33; --coal-500: #2A2C22; --coal-600: #1F2018;
18
+ --coal-700: #161710; --coal-800: #0F100B; --coal-900: #0B0C0A; --coal-950: #070803;
19
+
20
+ --vermilion-50: #FBEAE3; --vermilion-400: #E4633F; --vermilion-500: #E0421F;
21
+ --vermilion-600: #C5371A; --vermilion-700: #A42C14;
22
+
23
+ --amber-300: #F6C460; --amber-400: #F4B23E; --amber-500: #E89A1E;
24
+
25
+ --green-300: #97CBAB; --green-400: #6FB58A; --green-500: #4E9A6E;
26
+ --green-600: #3C7C57; --green-700: #2C5C40;
27
+
28
+ --inkblue-500: #2A3F66; --inkblue-600: #1F3052;
29
+
30
+ --crimson-100: #F4D2CE; --crimson-500: #B3261E; --crimson-600: #971F18;
31
+
32
+ --warn-100: #F6E6C4; --warn-500: #C2871A; --warn-600: #9C6C12;
33
+ }
34
+
35
+ :root, [data-theme="light"] {
36
+ color-scheme: light;
37
+ --bg: var(--bone-100);
38
+ --surface: var(--bone-50);
39
+ --surface-2: var(--bone-200);
40
+ --surface-3: var(--bone-300);
41
+ --surface-inset: var(--bone-200);
42
+ --text: var(--bone-950);
43
+ --text-muted: var(--bone-700);
44
+ --text-subtle: var(--bone-600);
45
+ --text-on-accent: var(--bone-0);
46
+ --border: color-mix(in oklab, var(--bone-950) 14%, transparent);
47
+ --border-strong: color-mix(in oklab, var(--bone-950) 28%, transparent);
48
+ --ring: var(--vermilion-500);
49
+ --primary: var(--vermilion-500);
50
+ --primary-hover: var(--vermilion-600);
51
+ --primary-press: var(--vermilion-700);
52
+ --primary-soft: var(--vermilion-50);
53
+ --primary-text: var(--vermilion-700);
54
+ --accent: var(--inkblue-500);
55
+ --accent-soft: color-mix(in oklab, var(--inkblue-500) 12%, var(--bone-50));
56
+ --accent-text: var(--inkblue-600);
57
+ --success: var(--green-600);
58
+ --success-soft: color-mix(in oklab, var(--green-500) 18%, var(--bone-50));
59
+ --success-text: var(--green-700);
60
+ --warning: var(--warn-500);
61
+ --warning-soft: var(--warn-100);
62
+ --warning-text: var(--warn-600);
63
+ --danger: var(--crimson-500);
64
+ --danger-soft: var(--crimson-100);
65
+ --danger-text: var(--crimson-600);
66
+ --glow: none;
67
+ }
68
+
69
+ [data-theme="dark"] {
70
+ color-scheme: dark;
71
+ --bg: var(--coal-900);
72
+ --surface: var(--coal-800);
73
+ --surface-2: var(--coal-700);
74
+ --surface-3: var(--coal-600);
75
+ --surface-inset: var(--coal-950);
76
+ --text: var(--coal-0);
77
+ --text-muted: var(--coal-100);
78
+ --text-subtle: var(--coal-200);
79
+ --text-on-accent: var(--coal-950);
80
+ --border: color-mix(in oklab, var(--coal-0) 14%, transparent);
81
+ --border-strong: color-mix(in oklab, var(--coal-0) 26%, transparent);
82
+ --ring: var(--amber-400);
83
+ --primary: var(--amber-400);
84
+ --primary-hover: var(--amber-300);
85
+ --primary-press: var(--amber-300);
86
+ --primary-soft: color-mix(in oklab, var(--amber-400) 16%, var(--coal-800));
87
+ --primary-text: var(--amber-300);
88
+ --accent: var(--green-400);
89
+ --accent-soft: color-mix(in oklab, var(--green-400) 16%, var(--coal-800));
90
+ --accent-text: var(--green-300);
91
+ --success: var(--green-400);
92
+ --success-soft: color-mix(in oklab, var(--green-400) 16%, var(--coal-800));
93
+ --success-text: var(--green-300);
94
+ --warning: var(--amber-400);
95
+ --warning-soft: color-mix(in oklab, var(--amber-400) 16%, var(--coal-800));
96
+ --warning-text: var(--amber-300);
97
+ --danger: #E5604D;
98
+ --danger-soft: color-mix(in oklab, #E5604D 16%, var(--coal-800));
99
+ --danger-text: #F0937F;
100
+ --glow: 0 0 22px color-mix(in oklab, var(--amber-400) 35%, transparent);
101
+ }
102
+
103
+ /* ---------------------------------------------------------- TYPE + SPACING + RADIUS + ELEVATION + MOTION */
104
+ :root {
105
+ --font-display: "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;
106
+ --font-sans: "Bricolage Grotesque", ui-sans-serif, system-ui, -apple-system, sans-serif;
107
+ --font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;
108
+ --fw-medium: 500; --fw-semibold: 600; --fw-bold: 700; --fw-black: 800;
109
+
110
+ --text-2xs: 0.6875rem; --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem;
111
+ --text-md: 1.125rem; --text-lg: 1.4rem; --text-xl: 1.8rem; --text-2xl: 2.35rem;
112
+ --leading-tight: 0.96; --leading-normal: 1.5;
113
+ --tracking-tighter: -0.045em; --tracking-tight: -0.025em; --tracking-label: 0.14em;
114
+
115
+ --space-1: 0.25rem; --space-1_5: 0.375rem; --space-2: 0.5rem; --space-2_5: 0.625rem;
116
+ --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem;
117
+
118
+ --radius-xs: 2px; --radius-sm: 3px; --radius-md: 5px; --radius-lg: 8px;
119
+ --radius-control: var(--radius-sm); --radius-card: var(--radius-md);
120
+
121
+ --shadow-sm: 0 1px 2px color-mix(in oklab, var(--bone-950) 7%, transparent);
122
+ --shadow-md: 0 4px 12px color-mix(in oklab, var(--bone-950) 9%, transparent);
123
+ --ring-width: 3px;
124
+ --ring-color: color-mix(in oklab, var(--ring) 40%, transparent);
125
+ --focus-ring: 0 0 0 var(--ring-width) var(--ring-color);
126
+
127
+ --dur-fast: 140ms; --dur-base: 200ms;
128
+ --ease-standard: cubic-bezier(0.2, 0, 0.1, 1);
129
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
130
+ --transition-control: color var(--dur-fast) var(--ease-standard),
131
+ background-color var(--dur-fast) var(--ease-standard),
132
+ border-color var(--dur-fast) var(--ease-standard),
133
+ box-shadow var(--dur-fast) var(--ease-standard),
134
+ transform var(--dur-fast) var(--ease-standard);
135
+ }
136
+
137
+ [data-theme="dark"] {
138
+ --shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.5);
139
+ --shadow-md: 0 6px 18px rgba(0, 0, 0, 0.55);
140
+ }
141
+
142
+ @media (prefers-reduced-motion: reduce) {
143
+ :root { --dur-fast: 0ms; --dur-base: 0ms; }
144
+ }
145
+
146
+ /* ---------------------------------------------------------- BASE */
147
+ * , *::before, *::after { box-sizing: border-box; }
148
+
149
+ body {
150
+ margin: 0;
151
+ background: var(--bg);
152
+ color: var(--text);
153
+ font-family: var(--font-sans);
154
+ font-size: var(--text-base);
155
+ line-height: var(--leading-normal);
156
+ -webkit-font-smoothing: antialiased;
157
+ }
158
+
159
+ h1, h2, h3 {
160
+ font-family: var(--font-display);
161
+ font-weight: var(--fw-bold);
162
+ line-height: var(--leading-tight);
163
+ letter-spacing: var(--tracking-tight);
164
+ margin: 0;
165
+ color: var(--text);
166
+ }
167
+
168
+ :focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--radius-xs); }
169
+
170
+ .ds-eyebrow {
171
+ font-family: var(--font-mono);
172
+ font-size: var(--text-xs);
173
+ font-weight: var(--fw-medium);
174
+ letter-spacing: var(--tracking-label);
175
+ text-transform: uppercase;
176
+ color: var(--text-muted);
177
+ }
178
+
179
+ ::-webkit-scrollbar { width: 10px; height: 10px; }
180
+ ::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 6px; }
181
+ ::-webkit-scrollbar-track { background: transparent; }
182
+
183
+ /* ---------------------------------------------------------- BUTTON */
184
+ .cdr-btn {
185
+ display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2);
186
+ font-family: var(--font-sans); font-weight: var(--fw-medium); font-size: var(--text-sm);
187
+ line-height: 1; white-space: nowrap; border: 1px solid transparent;
188
+ background: var(--primary); color: var(--text-on-accent);
189
+ border-radius: var(--radius-control); padding: 0 var(--space-4); height: 38px;
190
+ cursor: pointer; user-select: none; transition: var(--transition-control);
191
+ }
192
+ .cdr-btn:hover { background: var(--primary-hover); }
193
+ .cdr-btn:active { background: var(--primary-press); transform: translateY(0.5px); }
194
+ .cdr-btn[disabled] { opacity: 0.45; pointer-events: none; }
195
+ [data-theme="dark"] .cdr-btn:hover { box-shadow: var(--glow); }
196
+
197
+ .cdr-btn--secondary { background: var(--surface); color: var(--text); border-color: var(--border-strong); }
198
+ .cdr-btn--secondary:hover { background: var(--surface-2); border-color: var(--text-subtle); }
199
+ [data-theme="dark"] .cdr-btn--secondary:hover { box-shadow: none; }
200
+
201
+ .cdr-btn--sm { height: 30px; font-size: var(--text-xs); padding: 0 var(--space-3); gap: var(--space-1_5); }
202
+ .cdr-btn--lg { height: 46px; font-size: var(--text-base); padding: 0 var(--space-6); }
203
+
204
+ .cdr-iconbtn {
205
+ display: inline-flex; align-items: center; justify-content: center;
206
+ width: 38px; height: 38px; border-radius: var(--radius-control);
207
+ border: 1px solid transparent; background: transparent; color: var(--text-muted);
208
+ cursor: pointer; transition: var(--transition-control); flex-shrink: 0;
209
+ }
210
+ .cdr-iconbtn:hover { background: var(--surface-2); color: var(--text); }
211
+ .cdr-iconbtn--solid { background: var(--surface); border-color: var(--border-strong); }
212
+ [data-theme="dark"] .cdr-iconbtn--solid:hover { box-shadow: var(--glow); }
213
+ .cdr-iconbtn svg { width: 18px; height: 18px; }
214
+
215
+ .gp-comment-btn {
216
+ display: inline-flex; align-items: center; justify-content: center;
217
+ width: 30px; height: 30px; flex-shrink: 0; border: none; border-radius: var(--radius-sm);
218
+ background: transparent; color: var(--text-subtle); cursor: pointer;
219
+ opacity: 0.3;
220
+ transition: opacity 120ms ease, background 120ms ease, color 120ms ease;
221
+ }
222
+ .gp-commentable:hover .gp-comment-btn,
223
+ .gp-comment-btn:focus-visible,
224
+ .gp-comment-btn--open,
225
+ .gp-comment-btn--active { opacity: 1; }
226
+ .gp-comment-btn--open { background: var(--surface-3); }
227
+ .gp-comment-btn--active { color: var(--accent-text); }
228
+ .gp-comment-btn svg { width: 14px; height: 14px; }
229
+
230
+ /* ---------------------------------------------------------- CARD */
231
+ .cdr-card {
232
+ background: var(--surface); border: 1px solid var(--border);
233
+ border-radius: var(--radius-card); box-shadow: var(--shadow-sm); overflow: clip;
234
+ }
235
+
236
+ /* ---------------------------------------------------------- BADGE */
237
+ .cdr-badge {
238
+ display: inline-flex; align-items: center; gap: var(--space-1);
239
+ font-family: var(--font-mono); font-size: var(--text-2xs); font-weight: var(--fw-medium);
240
+ letter-spacing: 0.02em; text-transform: uppercase; padding: 3px var(--space-2);
241
+ border-radius: var(--radius-xs); background: var(--surface-3); color: var(--text-muted);
242
+ line-height: 1.4; white-space: nowrap;
243
+ }
244
+ .cdr-badge--accent { background: var(--accent-soft); color: var(--accent-text); }
245
+ .cdr-badge--success { background: var(--success-soft); color: var(--success-text); }
246
+ .cdr-badge--warning { background: var(--warning-soft); color: var(--warning-text); }
247
+ .cdr-badge--dot::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
248
+
249
+ /* ---------------------------------------------------------- AVATAR */
250
+ .cdr-avatar {
251
+ display: inline-flex; align-items: center; justify-content: center;
252
+ border-radius: 50%; background: var(--surface-3); color: var(--text);
253
+ font-family: var(--font-display); font-weight: var(--fw-semibold);
254
+ overflow: hidden; flex-shrink: 0; user-select: none;
255
+ }
256
+ .cdr-avatar--sm { width: 26px; height: 26px; font-size: 11px; }
257
+
258
+ /* ---------------------------------------------------------- CHECKBOX / RADIO */
259
+ .cdr-choice {
260
+ display: inline-flex; align-items: center; gap: var(--space-2_5); cursor: pointer;
261
+ font-family: var(--font-sans); font-size: var(--text-sm); color: var(--text);
262
+ }
263
+ .cdr-choice input { position: absolute; opacity: 0; width: 0; height: 0; }
264
+ .cdr-box {
265
+ width: 18px; height: 18px; flex-shrink: 0; border: 1.5px solid var(--border-strong);
266
+ background: var(--surface); border-radius: var(--radius-xs);
267
+ display: inline-flex; align-items: center; justify-content: center;
268
+ color: var(--text-on-accent); transition: var(--transition-control);
269
+ }
270
+ .cdr-box--radio { border-radius: 50%; }
271
+ .cdr-choice:hover .cdr-box { border-color: var(--text-subtle); }
272
+ .cdr-choice input:focus-visible + .cdr-box { box-shadow: var(--focus-ring); }
273
+ .cdr-choice input:checked + .cdr-box { background: var(--primary); border-color: var(--primary); }
274
+ .cdr-box svg { width: 13px; height: 13px; opacity: 0; transform: scale(0.6); transition: var(--transition-control); }
275
+ .cdr-choice input:checked + .cdr-box svg { opacity: 1; transform: scale(1); }
276
+ .cdr-box--radio::after {
277
+ content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--text-on-accent);
278
+ opacity: 0; transform: scale(0.5); transition: var(--transition-control);
279
+ }
280
+ .cdr-choice input:checked + .cdr-box--radio::after { opacity: 1; transform: scale(1); }
281
+ .cdr-choice input:disabled ~ * { opacity: 0.5; }
282
+ .cdr-choice--disabled { opacity: 0.5; pointer-events: none; }
283
+
284
+ /* ---------------------------------------------------------- TEXTAREA */
285
+ .cdr-textarea {
286
+ font-family: var(--font-sans); font-size: var(--text-sm); color: var(--text);
287
+ background: var(--surface); border: 1px solid var(--border-strong);
288
+ border-radius: var(--radius-control); padding: var(--space-3); width: 100%;
289
+ line-height: var(--leading-normal); resize: vertical; min-height: 80px;
290
+ transition: var(--transition-control);
291
+ }
292
+ .cdr-textarea::placeholder { color: var(--text-subtle); }
293
+ .cdr-textarea:hover { border-color: var(--text-subtle); }
294
+ .cdr-textarea:focus { outline: none; border-color: var(--primary); box-shadow: var(--focus-ring); }
295
+
296
+ /* ---------------------------------------------------------- BANNER */
297
+ .cdr-banner {
298
+ display: flex; align-items: flex-start; gap: var(--space-3);
299
+ padding: var(--space-3) var(--space-4); border: 1px solid var(--border);
300
+ border-radius: var(--radius-md); background: var(--surface); color: var(--text);
301
+ font-size: var(--text-sm); border-left-width: 3px;
302
+ }
303
+ .cdr-banner svg { width: 18px; height: 18px; flex-shrink: 0; margin-top: 1px; }
304
+ .cdr-banner--success { border-left-color: var(--success); background: var(--success-soft); }
305
+ .cdr-banner--success svg { color: var(--success); }
306
+ .cdr-banner-title { font-weight: var(--fw-semibold); }
307
+ .cdr-banner-body { color: var(--text-muted); margin-top: 2px; }
308
+
309
+ /* ============================================================
310
+ gigaplan layout
311
+ ============================================================ */
312
+
313
+ .gp-app { min-height: 100vh; background: var(--bg); color: var(--text); font-family: var(--font-sans); }
314
+
315
+ /* ---- top bar ---- */
316
+ .gp-topbar {
317
+ position: sticky; top: 0; z-index: 20; background: var(--surface); border-bottom: 1px solid var(--border);
318
+ }
319
+ .gp-topbar-inner {
320
+ max-width: 1320px; margin: 0 auto; padding: 16px 32px;
321
+ display: flex; flex-direction: column; gap: 10px;
322
+ }
323
+ .gp-topbar-row { display: flex; align-items: center; gap: 14px; }
324
+ .gp-topbar-heading { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; }
325
+ .gp-topbar-brand {
326
+ font-family: var(--font-mono); font-weight: 600; font-size: 14px; color: var(--primary); white-space: nowrap;
327
+ }
328
+ .gp-topbar-title {
329
+ font-family: var(--font-mono); font-weight: 600; font-size: 14px; color: var(--text);
330
+ min-width: 0; line-height: 1.15;
331
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
332
+ }
333
+ .gp-topbar-meta {
334
+ display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--text-muted); flex-wrap: wrap;
335
+ }
336
+ .gp-topbar-meta b { color: var(--text); font-weight: 600; }
337
+ .gp-topbar-meta .gp-dot { color: var(--border-strong); }
338
+ .gp-topbar-meta .gp-mono { font-family: var(--font-mono); font-size: 12px; }
339
+
340
+ /* ---- layout grid ---- */
341
+ .gp-body {
342
+ max-width: 1320px; margin: 0 auto; padding: 28px 32px 0;
343
+ display: grid; grid-template-columns: 1fr 320px; gap: 28px; align-items: start;
344
+ }
345
+ .gp-main-col { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
346
+
347
+ /* ---- section card ---- */
348
+ .gp-section { border: 1px solid var(--border); border-radius: var(--radius-card); background: var(--surface); overflow: hidden; box-shadow: var(--shadow-sm); }
349
+ .gp-section-head {
350
+ display: flex; align-items: center; gap: 10px; padding: 14px 20px;
351
+ background: var(--surface-2); border-bottom: 1px solid var(--border);
352
+ }
353
+ .gp-section-collapse { background: none; border: none; cursor: pointer; color: var(--text-subtle); display: flex; padding: 0; flex-shrink: 0; }
354
+ .gp-section-collapse svg { width: 16px; height: 16px; }
355
+ .gp-section-num { font-family: var(--font-mono); font-size: 12px; color: var(--text-subtle); flex-shrink: 0; }
356
+ .gp-section-title { font-family: var(--font-display); font-weight: 700; font-size: 15px; }
357
+ .gp-section-spacer { margin-left: auto; }
358
+ .gp-section-body { padding: 6px 20px 20px; }
359
+
360
+ /* ---- commentable rows ---- */
361
+ .gp-commentable { position: relative; padding: 8px 0; scroll-margin-top: 96px; }
362
+ .gp-section { scroll-margin-top: 96px; }
363
+ .gp-commentable-row { display: flex; align-items: flex-start; gap: 12px; }
364
+ .gp-commentable-content { flex: 1; min-width: 0; }
365
+ .gp-commentable-content p { margin: 0; font-size: 14.5px; line-height: 1.65; color: var(--text); }
366
+
367
+ .gp-item-ol { display: flex; gap: 10px; font-size: 14.5px; line-height: 1.7; color: var(--text); }
368
+ .gp-item-ol .gp-ordinal { font-family: var(--font-mono); color: var(--text-subtle); flex-shrink: 0; }
369
+ .gp-item-ul { display: flex; gap: 10px; font-size: 14.5px; line-height: 1.7; color: var(--text-muted); }
370
+ .gp-item-ul .gp-bullet { color: var(--text-subtle); flex-shrink: 0; }
371
+ .gp-item-checklist { display: flex; align-items: flex-start; gap: 10px; font-size: 14.5px; line-height: 1.5; color: var(--text-muted); }
372
+
373
+ .gp-commentable-content pre {
374
+ margin: 0; background: var(--surface-inset); border: 1px solid var(--border);
375
+ border-radius: var(--radius-md); padding: 16px 18px; overflow-x: auto;
376
+ font-family: var(--font-mono); font-size: 13px; line-height: 1.6; color: var(--text); white-space: pre;
377
+ }
378
+ .gp-commentable-content table { border-collapse: collapse; display: block; overflow-x: auto; width: max-content; max-width: 100%; }
379
+ .gp-commentable-content th, .gp-commentable-content td { border: 1px solid var(--border); padding: 6px 12px; font-size: 13.5px; }
380
+ .gp-commentable-content th { font-family: var(--font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-subtle); }
381
+ .gp-commentable-content blockquote {
382
+ margin: 0; padding: 8px 16px; border-left: 3px solid var(--border-strong);
383
+ color: var(--text-muted); font-size: 14.5px; line-height: 1.6;
384
+ }
385
+ .gp-hr { border: 0; border-top: 1px solid var(--border); margin: 4px 0; }
386
+
387
+ /* ---- comment thread + composer ---- */
388
+ .gp-thread-comment {
389
+ margin: 10px 0; padding: 12px 14px; background: var(--surface-2);
390
+ border-radius: var(--radius-md); border-left: 3px solid var(--border-strong);
391
+ }
392
+ .gp-thread-comment-head { display: flex; align-items: center; gap: 8px; }
393
+ .gp-thread-comment-author { font-size: 13px; font-weight: 600; }
394
+ .gp-thread-comment-time { font-family: var(--font-mono); font-size: 11px; color: var(--text-subtle); margin-left: auto; }
395
+ .gp-thread-comment-body { font-size: 13.5px; line-height: 1.55; color: var(--text-muted); margin-top: 6px; white-space: pre-wrap; }
396
+ .gp-stale-banner {
397
+ font-size: 12px; color: var(--warning-text); background: var(--warning-soft);
398
+ border: 1px solid var(--warning); border-radius: var(--radius-sm); padding: 4px 8px; margin: 6px 0;
399
+ }
400
+
401
+ .gp-composer { margin: 10px 0; padding: 14px; border: 1px solid var(--border-strong); border-radius: var(--radius-md); background: var(--surface); }
402
+ .gp-composer-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 10px; }
403
+
404
+ /* ---- orphaned section ---- */
405
+ .gp-orphaned-section { margin: 8px 0 0; padding-top: 16px; border-top: 1px dashed var(--border); }
406
+ .gp-orphaned-section h2 { font-size: 14px; color: var(--text-muted); font-family: var(--font-sans); font-weight: 600; }
407
+ .gp-orphaned-meta { font-size: 12px; color: var(--text-subtle); margin-bottom: 4px; }
408
+
409
+ /* ---- sidebar ---- */
410
+ .gp-sidebar { position: sticky; top: 110px; display: flex; flex-direction: column; gap: 16px; }
411
+ .gp-coverage-card { padding: 18px 20px; }
412
+ .gp-coverage-numbers { display: flex; align-items: baseline; gap: 8px; margin-top: 10px; }
413
+ .gp-coverage-count { font-family: var(--font-display); font-weight: 800; font-size: 30px; letter-spacing: -0.03em; }
414
+ .gp-coverage-total { font-size: 13px; color: var(--text-muted); }
415
+ .gp-coverage-bar { height: 6px; background: var(--surface-3); border-radius: 999px; overflow: hidden; margin-top: 12px; }
416
+ .gp-coverage-bar-fill { height: 100%; background: var(--primary); border-radius: inherit; transition: width var(--dur-base) ease; }
417
+ .gp-coverage-footer { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border); font-size: 12.5px; color: var(--text-muted); }
418
+
419
+ .gp-comments-card-head { padding: 14px 20px; border-bottom: 1px solid var(--border); font-family: var(--font-display); font-weight: 700; font-size: 14px; }
420
+ .gp-comment-row { cursor: pointer; padding: 14px 20px; border-bottom: 1px solid var(--border); transition: background var(--dur-fast) ease; }
421
+ .gp-comment-row:last-child { border-bottom: none; }
422
+ .gp-comment-row:hover { background: var(--surface-2); }
423
+ .gp-comment-row-head { display: flex; align-items: center; gap: 8px; }
424
+ .gp-comment-row-author { font-size: 12.5px; font-weight: 600; }
425
+ .gp-comment-row-time { font-family: var(--font-mono); font-size: 11px; color: var(--text-subtle); margin-left: auto; }
426
+ .gp-comment-row-section {
427
+ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase;
428
+ color: var(--accent-text); margin-top: 8px;
429
+ }
430
+ .gp-comment-row-text {
431
+ font-size: 12.5px; line-height: 1.5; color: var(--text-muted); margin-top: 4px;
432
+ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
433
+ }
434
+ .gp-empty-comments { padding: 20px; font-size: 13px; color: var(--text-subtle); line-height: 1.5; }
435
+
436
+ /* ---- finish review panel ---- */
437
+ .gp-finish-panel { max-width: 1320px; margin: 0 auto; padding: 28px 32px 56px; }
438
+ .gp-finish-head { padding: 20px 24px; border-bottom: 1px solid var(--border); }
439
+ .gp-finish-title { font-family: var(--font-display); font-size: var(--text-lg); font-weight: 700; margin-top: 6px; }
440
+ .gp-finish-body { padding: 22px 24px; display: flex; flex-direction: column; gap: 18px; }
441
+ .gp-verdict-label { font-size: 13px; font-weight: 600; margin-bottom: 12px; }
442
+ .gp-verdict-options { display: flex; gap: 24px; flex-wrap: wrap; }
443
+ .gp-verdict-hint { font-size: 12px; color: var(--text-subtle); margin-top: 8px; }
444
+ .gp-finish-actions { display: flex; justify-content: flex-end; }
445
+ .gp-submitted-quote { font-size: 13.5px; line-height: 1.6; color: var(--text-muted); padding: 0 4px; }
446
+
447
+ @media (max-width: 900px) {
448
+ .gp-body { grid-template-columns: 1fr; }
449
+ .gp-sidebar { position: static; }
450
+ }