rip-lang 3.14.4 → 3.15.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,472 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
2
+
3
+ /**
4
+ * Rip App Demo — Self-contained styles
5
+ * No external dependencies (no Tailwind)
6
+ */
7
+
8
+ /* ============================================
9
+ Design Tokens
10
+ ============================================ */
11
+
12
+ :root {
13
+ --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
14
+
15
+ --gray-50: #f9fafb;
16
+ --gray-100: #f3f4f6;
17
+ --gray-200: #e5e7eb;
18
+ --gray-300: #d1d5db;
19
+ --gray-400: #9ca3af;
20
+ --gray-500: #6b7280;
21
+ --gray-600: #4b5563;
22
+ --gray-700: #374151;
23
+ --gray-800: #1f2937;
24
+ --gray-900: #111827;
25
+
26
+ --blue-50: #eff6ff;
27
+ --blue-100: #dbeafe;
28
+ --blue-500: #3b82f6;
29
+ --blue-600: #2563eb;
30
+ --blue-700: #1d4ed8;
31
+
32
+ --green-50: #f0fdf4;
33
+ --green-500: #22c55e;
34
+ --green-600: #16a34a;
35
+
36
+ --red-50: #fef2f2;
37
+ --red-500: #ef4444;
38
+
39
+ --surface: var(--gray-50);
40
+ --card: #ffffff;
41
+ --text: var(--gray-900);
42
+ --text-secondary: var(--gray-500);
43
+ --text-muted: var(--gray-400);
44
+ --border: var(--gray-200);
45
+ --accent: var(--blue-600);
46
+ --accent-hover: var(--blue-700);
47
+
48
+ --radius: 0.75rem;
49
+ --radius-lg: 1rem;
50
+ --shadow: 0 1px 3px rgb(0 0 0 / 0.1), 0 1px 2px rgb(0 0 0 / 0.06);
51
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
52
+ --transition: 150ms cubic-bezier(0.4, 0, 0.2, 1);
53
+ }
54
+
55
+ /* ============================================
56
+ Reset
57
+ ============================================ */
58
+
59
+ *, *::before, *::after { box-sizing: border-box; }
60
+ * { margin: 0; }
61
+
62
+ html { -webkit-text-size-adjust: 100%; }
63
+
64
+ body {
65
+ font-family: var(--font);
66
+ line-height: 1.6;
67
+ color: var(--text);
68
+ background: var(--surface);
69
+ -webkit-font-smoothing: antialiased;
70
+ -moz-osx-font-smoothing: grayscale;
71
+ }
72
+
73
+ a { color: inherit; text-decoration: none; }
74
+ img, svg { display: block; max-width: 100%; }
75
+ input, button, textarea, select { font: inherit; }
76
+
77
+ #app {
78
+ max-width: 52rem;
79
+ margin: 0 auto;
80
+ padding: 2rem;
81
+ }
82
+
83
+ /* ============================================
84
+ Layout Shell
85
+ ============================================ */
86
+
87
+ .app-layout {
88
+ min-height: 100vh;
89
+ display: flex;
90
+ flex-direction: column;
91
+ }
92
+
93
+ .app-nav {
94
+ background: var(--card);
95
+ border-bottom: 1px solid var(--border);
96
+ border-radius: var(--radius);
97
+ padding: 0 1.5rem;
98
+ position: sticky;
99
+ top: 0;
100
+ z-index: 100;
101
+ }
102
+
103
+ .nav-inner {
104
+ max-width: 48rem;
105
+ margin: 0 auto;
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: space-between;
109
+ height: 3.5rem;
110
+ }
111
+
112
+ .nav-brand {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 0.5rem;
116
+ font-weight: 600;
117
+ font-size: 0.9375rem;
118
+ letter-spacing: -0.02em;
119
+ }
120
+
121
+ .nav-links {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 0.25rem;
125
+ }
126
+
127
+ .nav-link {
128
+ padding: 0.375rem 0.75rem;
129
+ border-radius: 0.5rem;
130
+ color: var(--text-secondary);
131
+ font-size: 0.8125rem;
132
+ font-weight: 500;
133
+ transition: color var(--transition), background-color var(--transition);
134
+ }
135
+
136
+ .nav-link:hover {
137
+ color: var(--text);
138
+ background-color: var(--gray-100);
139
+ }
140
+
141
+ .nav-link.active {
142
+ color: var(--accent);
143
+ background: var(--blue-50);
144
+ }
145
+
146
+ .app-main {
147
+ flex: 1;
148
+ max-width: 48rem;
149
+ width: 100%;
150
+ margin: 0 auto;
151
+ padding: 2rem 1.5rem;
152
+ }
153
+
154
+ /* ============================================
155
+ Page Sections
156
+ ============================================ */
157
+
158
+ .page-header {
159
+ margin-bottom: 2rem;
160
+ }
161
+
162
+ .page-title {
163
+ font-size: 1.5rem;
164
+ font-weight: 700;
165
+ letter-spacing: -0.03em;
166
+ line-height: 1.2;
167
+ color: var(--text);
168
+ }
169
+
170
+ .page-subtitle {
171
+ font-size: 0.875rem;
172
+ color: var(--text-secondary);
173
+ margin-top: 0.25rem;
174
+ }
175
+
176
+ /* ============================================
177
+ Card
178
+ ============================================ */
179
+
180
+ .card {
181
+ background: var(--card);
182
+ border: 1px solid var(--border);
183
+ border-radius: var(--radius-lg);
184
+ box-shadow: var(--shadow);
185
+ padding: 1.5rem;
186
+ }
187
+
188
+ .card + .card {
189
+ margin-top: 1rem;
190
+ }
191
+
192
+ .card-title {
193
+ font-size: 0.8125rem;
194
+ font-weight: 600;
195
+ text-transform: uppercase;
196
+ letter-spacing: 0.05em;
197
+ color: var(--text-secondary);
198
+ margin-bottom: 1rem;
199
+ }
200
+
201
+ /* ============================================
202
+ Button
203
+ ============================================ */
204
+
205
+ .btn {
206
+ display: inline-flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ gap: 0.5rem;
210
+ padding: 0.5rem 1rem;
211
+ border: 1px solid var(--border);
212
+ border-radius: 0.5rem;
213
+ background-color: var(--card);
214
+ color: var(--text);
215
+ font-size: 0.8125rem;
216
+ font-weight: 500;
217
+ cursor: pointer;
218
+ transition: color var(--transition), background-color var(--transition), border-color var(--transition), transform var(--transition);
219
+ user-select: none;
220
+ }
221
+
222
+ .btn:hover { background-color: var(--gray-50); border-color: var(--gray-300); }
223
+ .btn:active { transform: scale(0.98); }
224
+
225
+ .btn-primary {
226
+ background: var(--accent);
227
+ border-color: var(--accent);
228
+ color: white;
229
+ }
230
+
231
+ .btn-primary:hover { background: var(--accent-hover); border-color: var(--accent-hover); }
232
+
233
+ .btn-danger {
234
+ color: var(--red-500);
235
+ border-color: var(--red-500);
236
+ }
237
+
238
+ .btn-danger:hover { background: var(--red-50); }
239
+
240
+ .btn-sm {
241
+ padding: 0.25rem 0.5rem;
242
+ font-size: 0.75rem;
243
+ }
244
+
245
+ .btn-group {
246
+ display: flex;
247
+ gap: 0.5rem;
248
+ flex-wrap: wrap;
249
+ }
250
+
251
+ /* ============================================
252
+ Counter Display
253
+ ============================================ */
254
+
255
+ .counter-display {
256
+ font-size: 4rem;
257
+ font-weight: 700;
258
+ letter-spacing: -0.04em;
259
+ text-align: center;
260
+ padding: 2rem 0;
261
+ font-variant-numeric: tabular-nums;
262
+ color: var(--text);
263
+ transition: color var(--transition);
264
+ }
265
+
266
+ .counter-display.positive { color: var(--green-600); }
267
+ .counter-display.negative { color: var(--red-500); }
268
+
269
+ .counter-controls {
270
+ display: flex;
271
+ justify-content: center;
272
+ gap: 0.5rem;
273
+ }
274
+
275
+ /* ============================================
276
+ Input
277
+ ============================================ */
278
+
279
+ .input {
280
+ width: 100%;
281
+ padding: 0.5rem 0.75rem;
282
+ border: 1px solid var(--border);
283
+ border-radius: 0.5rem;
284
+ background-color: var(--card);
285
+ color: var(--text);
286
+ font-size: 0.875rem;
287
+ transition: border-color var(--transition), box-shadow var(--transition);
288
+ }
289
+
290
+ .input::placeholder { color: var(--text-muted); }
291
+ .input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 2px var(--blue-100); }
292
+
293
+ /* ============================================
294
+ Todo List
295
+ ============================================ */
296
+
297
+ .todo-input-row {
298
+ display: flex;
299
+ gap: 0.5rem;
300
+ margin-bottom: 1rem;
301
+ }
302
+
303
+ .todo-input-row .input { flex: 1; }
304
+
305
+ .todo-list {
306
+ list-style: none;
307
+ padding: 0;
308
+ }
309
+
310
+ .todo-item {
311
+ display: flex;
312
+ align-items: center;
313
+ gap: 0.75rem;
314
+ padding: 0.75rem 0;
315
+ border-bottom: 1px solid var(--gray-100);
316
+ transition: opacity var(--transition);
317
+ }
318
+
319
+ .todo-item:last-child { border-bottom: none; }
320
+
321
+ .todo-checkbox {
322
+ width: 1.25rem;
323
+ height: 1.25rem;
324
+ border: 2px solid var(--gray-300);
325
+ border-radius: 0.375rem;
326
+ cursor: pointer;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ transition: background-color var(--transition), border-color var(--transition);
331
+ flex-shrink: 0;
332
+ }
333
+
334
+ .todo-checkbox:hover { border-color: var(--accent); }
335
+
336
+ .todo-checkbox.checked {
337
+ background: var(--accent);
338
+ border-color: var(--accent);
339
+ }
340
+
341
+ .todo-checkbox.checked::after {
342
+ content: '';
343
+ width: 0.4rem;
344
+ height: 0.25rem;
345
+ border-left: 2px solid white;
346
+ border-bottom: 2px solid white;
347
+ transform: rotate(-45deg);
348
+ margin-bottom: 1px;
349
+ }
350
+
351
+ .todo-text {
352
+ flex: 1;
353
+ font-size: 0.875rem;
354
+ color: var(--text);
355
+ }
356
+
357
+ .todo-text.done {
358
+ text-decoration: line-through;
359
+ color: var(--text-muted);
360
+ }
361
+
362
+ .todo-delete {
363
+ opacity: 0;
364
+ padding: 0.125rem 0.375rem;
365
+ border: none;
366
+ background: none;
367
+ color: var(--text-muted);
368
+ cursor: pointer;
369
+ border-radius: 0.25rem;
370
+ font-size: 0.75rem;
371
+ transition: opacity var(--transition), color var(--transition), background-color var(--transition);
372
+ }
373
+
374
+ .todo-item:hover .todo-delete { opacity: 1; }
375
+ .todo-delete:hover { color: var(--red-500); background: var(--red-50); }
376
+
377
+ .todo-stats {
378
+ display: flex;
379
+ justify-content: space-between;
380
+ padding-top: 0.75rem;
381
+ border-top: 1px solid var(--gray-100);
382
+ font-size: 0.75rem;
383
+ color: var(--text-secondary);
384
+ }
385
+
386
+ /* ============================================
387
+ Feature Grid (Home page)
388
+ ============================================ */
389
+
390
+ .feature-grid {
391
+ display: grid;
392
+ grid-template-columns: repeat(2, 1fr);
393
+ gap: 1rem;
394
+ }
395
+
396
+ @media (max-width: 640px) {
397
+ .feature-grid { grid-template-columns: 1fr; }
398
+ }
399
+
400
+ .feature-card {
401
+ background-color: var(--card);
402
+ border: 1px solid var(--border);
403
+ border-radius: var(--radius);
404
+ padding: 1.25rem;
405
+ transition: border-color var(--transition), box-shadow var(--transition);
406
+ }
407
+
408
+ .feature-card:hover {
409
+ border-color: var(--gray-300);
410
+ box-shadow: var(--shadow);
411
+ }
412
+
413
+ .feature-icon {
414
+ font-size: 1.5rem;
415
+ margin-bottom: 0.75rem;
416
+ }
417
+
418
+ .feature-name {
419
+ font-size: 0.875rem;
420
+ font-weight: 600;
421
+ color: var(--text);
422
+ margin-bottom: 0.25rem;
423
+ }
424
+
425
+ .feature-desc {
426
+ font-size: 0.8125rem;
427
+ color: var(--text-secondary);
428
+ line-height: 1.5;
429
+ }
430
+
431
+ /* ============================================
432
+ Code Block
433
+ ============================================ */
434
+
435
+ .code-block {
436
+ background: var(--gray-800);
437
+ color: var(--gray-100);
438
+ padding: 1rem 1.25rem;
439
+ border-radius: var(--radius);
440
+ font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
441
+ font-size: 0.8125rem;
442
+ line-height: 1.6;
443
+ overflow-x: auto;
444
+ white-space: pre;
445
+ }
446
+
447
+ .code-keyword { color: #c084fc; }
448
+ .code-string { color: #86efac; }
449
+ .code-comment { color: var(--gray-500); }
450
+ .code-number { color: #fbbf24; }
451
+
452
+ /* ============================================
453
+ Stat badge
454
+ ============================================ */
455
+
456
+ .stat {
457
+ display: inline-flex;
458
+ align-items: center;
459
+ gap: 0.375rem;
460
+ padding: 0.375rem 0.75rem;
461
+ background: var(--gray-100);
462
+ border-radius: var(--radius);
463
+ font-size: 0.8125rem;
464
+ font-weight: 500;
465
+ color: var(--text-secondary);
466
+ }
467
+
468
+ .stat-value {
469
+ font-weight: 700;
470
+ color: var(--text);
471
+ font-variant-numeric: tabular-nums;
472
+ }