@sharpee/devkit 1.0.4 → 1.0.5

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,1988 @@
1
+ /*
2
+ * Sharpee IF Browser Client — Component-based theme kits (ADR-170)
3
+ *
4
+ * Per-theme kits target the `.sharpee-*` component vocabulary published by
5
+ * the platform DOM. Visual rules are scoped under [data-theme="<id>"];
6
+ * structural rules (layout, scroll, positioning) live in base.css.
7
+ *
8
+ * Phase 2 (component-theme migration):
9
+ * - dos-classic ✓
10
+ * - modern-dark ✓
11
+ * - retro-terminal ✓
12
+ * - paper ✓
13
+ *
14
+ * Phase 3 (System 6 fifth kit, plan-20260507-component-themes):
15
+ * - system-6 ✓ (Macintosh System 6 — bundled webfonts)
16
+ *
17
+ * Themes without a kit fall back only to base.css structural rules and
18
+ * will appear visually unstyled until their kit lands.
19
+ */
20
+
21
+ /* ============================================
22
+ Theme palettes (CSS variable definitions)
23
+ ============================================ */
24
+
25
+ :root,
26
+ :root[data-theme="dos-classic"] {
27
+ --theme-bg: #0000aa;
28
+ --theme-bg-alt: #000088;
29
+ --theme-text: #ffffff;
30
+ --theme-text-muted: #aaaaaa;
31
+ --theme-accent: #00aaaa;
32
+ --theme-accent-text: #000000;
33
+ --theme-border: #00aaaa;
34
+ --theme-input-bg: transparent;
35
+ --theme-menu-bg: #0000aa;
36
+ --theme-menu-hover: #000088;
37
+ --theme-font: "Perfect DOS VGA 437", "Consolas", "Courier New", monospace;
38
+ --theme-font-size: 16px;
39
+ --theme-line-height: 1.4;
40
+ }
41
+
42
+ :root[data-theme="modern-dark"] {
43
+ --theme-bg: #1e1e2e;
44
+ --theme-bg-alt: #181825;
45
+ --theme-text: #cdd6f4;
46
+ --theme-text-muted: #a6adc8;
47
+ --theme-accent: #89b4fa;
48
+ --theme-accent-text: #1e1e2e;
49
+ --theme-border: #313244;
50
+ --theme-input-bg: #11111b;
51
+ --theme-menu-bg: #181825;
52
+ --theme-menu-hover: #313244;
53
+ --theme-font: "Inter", system-ui, -apple-system, sans-serif;
54
+ --theme-font-size: 15px;
55
+ --theme-line-height: 1.6;
56
+ }
57
+
58
+ :root[data-theme="retro-terminal"] {
59
+ --theme-bg: #0a0a0a;
60
+ --theme-bg-alt: #0f0f0f;
61
+ --theme-text: #00ff00;
62
+ --theme-text-muted: #00aa00;
63
+ --theme-accent: #00ff00;
64
+ --theme-accent-text: #000000;
65
+ --theme-border: #003300;
66
+ --theme-input-bg: transparent;
67
+ --theme-menu-bg: #0f0f0f;
68
+ --theme-menu-hover: #001100;
69
+ --theme-font: "JetBrains Mono", "Consolas", monospace;
70
+ --theme-font-size: 14px;
71
+ --theme-line-height: 1.5;
72
+ }
73
+
74
+ :root[data-theme="paper"] {
75
+ --theme-bg: #f5f5f0;
76
+ --theme-bg-alt: #eaeae5;
77
+ --theme-text: #1a1a1a;
78
+ --theme-text-muted: #555555;
79
+ --theme-accent: #2c2c2c;
80
+ --theme-accent-text: #f5f5f0;
81
+ --theme-border: #cccccc;
82
+ --theme-input-bg: transparent;
83
+ --theme-menu-bg: #eaeae5;
84
+ --theme-menu-hover: #ddddd8;
85
+ --theme-font: "Crimson Text", Georgia, serif;
86
+ --theme-font-size: 17px;
87
+ --theme-line-height: 1.7;
88
+ }
89
+
90
+ :root[data-theme="system-6"] {
91
+ --theme-bg: #ffffff;
92
+ --theme-bg-alt: #ffffff;
93
+ --theme-text: #000000;
94
+ --theme-text-muted: #555555;
95
+ --theme-accent: #000000;
96
+ --theme-accent-text: #ffffff;
97
+ --theme-border: #000000;
98
+ --theme-input-bg: #ffffff;
99
+ --theme-menu-bg: #ffffff;
100
+ --theme-menu-hover: #000000;
101
+ --theme-desktop-bg: #aaaaaa;
102
+ --theme-font-chrome: "ChicagoFLF", "Charcoal", "Chicago", system-ui, sans-serif;
103
+ --theme-font-body: "FindersKeepers", "Geneva", system-ui, sans-serif;
104
+ --theme-font: var(--theme-font-body);
105
+ --theme-font-size: 24px;
106
+ /* FindersKeepers has WinAscent+WinDescent ≈ 0.79em (USE_TYPO_METRICS not
107
+ set), so the browser uses ~19px as the intrinsic line-box floor at 24px.
108
+ 1.0 gives a 24px line box (~5px leading on 19px glyphs) — the tightest
109
+ usable spacing without overriding @font-face metrics. ChicagoFLF
110
+ (chrome/dialog) has intrinsic metrics ≈ 1.19em, so its line boxes are
111
+ governed by the font, not this value. */
112
+ --theme-line-height: 1.0;
113
+ }
114
+
115
+ /* ============================================
116
+ Theme kit: DOS Classic
117
+ ============================================ */
118
+
119
+ [data-theme="dos-classic"] body {
120
+ background: var(--theme-bg);
121
+ color: var(--theme-text);
122
+ font-family: var(--theme-font);
123
+ font-size: var(--theme-font-size);
124
+ line-height: var(--theme-line-height);
125
+ }
126
+
127
+ /* Window chrome */
128
+
129
+ [data-theme="dos-classic"] .sharpee-window-title-bar {
130
+ background: var(--theme-bg-alt);
131
+ height: 28px;
132
+ padding: 0 8px;
133
+ font-size: 14px;
134
+ }
135
+
136
+ [data-theme="dos-classic"] .sharpee-window-title {
137
+ font-weight: bold;
138
+ margin-right: 16px;
139
+ text-transform: uppercase;
140
+ }
141
+
142
+ /* Menu bar */
143
+
144
+ [data-theme="dos-classic"] .sharpee-menu-bar {
145
+ background: var(--theme-bg-alt);
146
+ border-bottom: 1px solid var(--theme-border);
147
+ padding: 0 8px;
148
+ }
149
+
150
+ [data-theme="dos-classic"] .sharpee-menu-bar-trigger {
151
+ color: var(--theme-text);
152
+ border-radius: 2px;
153
+ }
154
+
155
+ [data-theme="dos-classic"] .sharpee-menu-bar-trigger:hover,
156
+ [data-theme="dos-classic"] .sharpee-menu-bar-item--open > .sharpee-menu-bar-trigger {
157
+ background: var(--theme-accent);
158
+ color: var(--theme-accent-text);
159
+ }
160
+
161
+ [data-theme="dos-classic"] .sharpee-menu-dropdown {
162
+ background: var(--theme-menu-bg);
163
+ border: 1px solid var(--theme-border);
164
+ box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
165
+ }
166
+
167
+ [data-theme="dos-classic"] .sharpee-menu-option {
168
+ color: var(--theme-text);
169
+ }
170
+
171
+ [data-theme="dos-classic"] .sharpee-menu-option:hover {
172
+ background: var(--theme-accent);
173
+ color: var(--theme-accent-text);
174
+ }
175
+
176
+ [data-theme="dos-classic"] .sharpee-menu-separator {
177
+ background: var(--theme-border);
178
+ }
179
+
180
+ /* Status bar */
181
+
182
+ [data-theme="dos-classic"] .sharpee-status-bar {
183
+ background: var(--theme-accent);
184
+ color: var(--theme-accent-text);
185
+ font-weight: bold;
186
+ }
187
+
188
+ [data-theme="dos-classic"] #location-name {
189
+ text-transform: uppercase;
190
+ }
191
+
192
+ /* Prose pane */
193
+
194
+ [data-theme="dos-classic"] .sharpee-prose-pane p {
195
+ margin-bottom: 0.8em;
196
+ }
197
+
198
+ [data-theme="dos-classic"] .sharpee-prose-pane p:last-child {
199
+ margin-bottom: 0;
200
+ }
201
+
202
+ [data-theme="dos-classic"] .sharpee-prose-pane .command-echo {
203
+ color: var(--theme-text-muted);
204
+ margin-top: 1em;
205
+ margin-bottom: 0.5em;
206
+ }
207
+
208
+ [data-theme="dos-classic"] .sharpee-prose-pane .system-message {
209
+ color: var(--theme-accent);
210
+ }
211
+
212
+ [data-theme="dos-classic"] .sharpee-prose-pane .game-status {
213
+ text-align: center;
214
+ font-weight: bold;
215
+ margin: 1em 0;
216
+ padding: 0.5em;
217
+ border: 1px solid var(--theme-border);
218
+ }
219
+
220
+ [data-theme="dos-classic"] .sharpee-prose-pane {
221
+ scrollbar-width: thin;
222
+ scrollbar-color: var(--theme-accent) var(--theme-bg);
223
+ }
224
+
225
+ [data-theme="dos-classic"] .sharpee-prose-pane::-webkit-scrollbar {
226
+ width: 8px;
227
+ }
228
+
229
+ [data-theme="dos-classic"] .sharpee-prose-pane::-webkit-scrollbar-track {
230
+ background: var(--theme-bg);
231
+ }
232
+
233
+ [data-theme="dos-classic"] .sharpee-prose-pane::-webkit-scrollbar-thumb {
234
+ background: var(--theme-accent);
235
+ }
236
+
237
+ /* Input bar */
238
+
239
+ [data-theme="dos-classic"] .sharpee-input-bar {
240
+ background: var(--theme-bg);
241
+ border-top: 2px solid var(--theme-border);
242
+ }
243
+
244
+ [data-theme="dos-classic"] .sharpee-input-prompt {
245
+ color: var(--theme-text);
246
+ }
247
+
248
+ [data-theme="dos-classic"] .sharpee-input-field {
249
+ background: var(--theme-input-bg);
250
+ color: var(--theme-text);
251
+ caret-color: var(--theme-text);
252
+ }
253
+
254
+ [data-theme="dos-classic"] .sharpee-input-field::placeholder {
255
+ color: var(--theme-text-muted);
256
+ opacity: 0.5;
257
+ }
258
+
259
+ /* Dialogs */
260
+
261
+ [data-theme="dos-classic"] .sharpee-dialog {
262
+ background: var(--theme-bg);
263
+ color: var(--theme-text);
264
+ border: 2px solid var(--theme-border);
265
+ font-family: var(--theme-font);
266
+ font-size: var(--theme-font-size);
267
+ line-height: var(--theme-line-height);
268
+ }
269
+
270
+ [data-theme="dos-classic"] .sharpee-dialog::backdrop {
271
+ background: rgba(0, 0, 0, 0.7);
272
+ }
273
+
274
+ [data-theme="dos-classic"] .sharpee-dialog-title {
275
+ background: var(--theme-accent);
276
+ color: var(--theme-accent-text);
277
+ }
278
+
279
+ [data-theme="dos-classic"] .sharpee-dialog-buttons {
280
+ border-top: 1px solid var(--theme-border);
281
+ }
282
+
283
+ [data-theme="dos-classic"] .sharpee-dialog-button {
284
+ background: var(--theme-bg-alt);
285
+ border: 1px solid var(--theme-border);
286
+ color: var(--theme-text);
287
+ font-family: inherit;
288
+ font-size: inherit;
289
+ }
290
+
291
+ [data-theme="dos-classic"] .sharpee-dialog-button:hover {
292
+ background: var(--theme-accent);
293
+ color: var(--theme-accent-text);
294
+ border-color: var(--theme-accent);
295
+ }
296
+
297
+ [data-theme="dos-classic"] .sharpee-dialog-button:focus {
298
+ outline: 1px solid var(--theme-accent);
299
+ outline-offset: 2px;
300
+ }
301
+
302
+ [data-theme="dos-classic"] .sharpee-dialog-button:disabled {
303
+ color: var(--theme-text-muted);
304
+ }
305
+
306
+ /* Dialog body internals (save/restore UX, not part of contract) */
307
+
308
+ [data-theme="dos-classic"] .save-input-row {
309
+ display: flex;
310
+ align-items: center;
311
+ gap: 8px;
312
+ margin-bottom: 12px;
313
+ }
314
+
315
+ [data-theme="dos-classic"] .save-input-row label {
316
+ white-space: nowrap;
317
+ }
318
+
319
+ [data-theme="dos-classic"] #save-name-input {
320
+ background: var(--theme-bg-alt);
321
+ border: 1px solid var(--theme-border);
322
+ color: var(--theme-text);
323
+ padding: 4px 6px;
324
+ }
325
+
326
+ [data-theme="dos-classic"] #save-name-input:focus {
327
+ border-color: var(--theme-accent);
328
+ }
329
+
330
+ [data-theme="dos-classic"] .saves-list-label {
331
+ color: var(--theme-text-muted);
332
+ margin-bottom: 8px;
333
+ font-size: 0.9em;
334
+ }
335
+
336
+ [data-theme="dos-classic"] .saves-list {
337
+ background: var(--theme-bg-alt);
338
+ border: 1px solid var(--theme-border);
339
+ max-height: 200px;
340
+ overflow-y: auto;
341
+ }
342
+
343
+ [data-theme="dos-classic"] .save-slot {
344
+ padding: 6px 8px;
345
+ cursor: pointer;
346
+ display: flex;
347
+ justify-content: space-between;
348
+ gap: 12px;
349
+ border-bottom: 1px solid #333;
350
+ }
351
+
352
+ [data-theme="dos-classic"] .save-slot:last-child {
353
+ border-bottom: none;
354
+ }
355
+
356
+ [data-theme="dos-classic"] .save-slot:hover {
357
+ background: var(--theme-menu-hover);
358
+ }
359
+
360
+ [data-theme="dos-classic"] .save-slot.selected {
361
+ background: var(--theme-accent);
362
+ color: var(--theme-accent-text);
363
+ }
364
+
365
+ [data-theme="dos-classic"] .save-slot-name {
366
+ font-weight: bold;
367
+ flex: 1;
368
+ overflow: hidden;
369
+ text-overflow: ellipsis;
370
+ white-space: nowrap;
371
+ }
372
+
373
+ [data-theme="dos-classic"] .save-slot-info {
374
+ color: var(--theme-text-muted);
375
+ font-size: 0.85em;
376
+ white-space: nowrap;
377
+ }
378
+
379
+ [data-theme="dos-classic"] .save-slot.selected .save-slot-info {
380
+ color: var(--theme-accent-text);
381
+ }
382
+
383
+ [data-theme="dos-classic"] .no-saves-message {
384
+ color: var(--theme-text-muted);
385
+ font-style: italic;
386
+ padding: 12px;
387
+ text-align: center;
388
+ }
389
+
390
+ [data-theme="dos-classic"] .startup-info {
391
+ color: var(--theme-accent);
392
+ margin: 0 0 12px 0;
393
+ line-height: 1.4;
394
+ }
395
+
396
+ [data-theme="dos-classic"] .startup-question {
397
+ color: var(--theme-text);
398
+ margin: 0;
399
+ }
400
+
401
+ [data-theme="dos-classic"] .saves-list::-webkit-scrollbar,
402
+ [data-theme="dos-classic"] .sharpee-dialog-body::-webkit-scrollbar {
403
+ width: 8px;
404
+ }
405
+
406
+ [data-theme="dos-classic"] .saves-list::-webkit-scrollbar-track,
407
+ [data-theme="dos-classic"] .sharpee-dialog-body::-webkit-scrollbar-track {
408
+ background: var(--theme-bg-alt);
409
+ }
410
+
411
+ [data-theme="dos-classic"] .saves-list::-webkit-scrollbar-thumb,
412
+ [data-theme="dos-classic"] .sharpee-dialog-body::-webkit-scrollbar-thumb {
413
+ background: var(--theme-accent);
414
+ }
415
+
416
+ /* Mobile */
417
+
418
+ @media (max-width: 600px) {
419
+ [data-theme="dos-classic"] body {
420
+ font-size: 14px;
421
+ }
422
+ [data-theme="dos-classic"] .sharpee-status-bar {
423
+ font-size: 12px;
424
+ }
425
+ [data-theme="dos-classic"] .sharpee-input-prompt {
426
+ font-size: 16px;
427
+ }
428
+ [data-theme="dos-classic"] .sharpee-dialog {
429
+ min-width: 280px;
430
+ margin: 12px;
431
+ }
432
+ [data-theme="dos-classic"] .save-input-row {
433
+ flex-direction: column;
434
+ align-items: stretch;
435
+ gap: 4px;
436
+ }
437
+ [data-theme="dos-classic"] .sharpee-dialog-buttons {
438
+ gap: 12px;
439
+ }
440
+ [data-theme="dos-classic"] .sharpee-dialog-button {
441
+ flex: 1;
442
+ padding: 10px 16px;
443
+ }
444
+ }
445
+
446
+ @media (max-width: 380px) {
447
+ [data-theme="dos-classic"] body {
448
+ font-size: 13px;
449
+ }
450
+ [data-theme="dos-classic"] .sharpee-status-bar {
451
+ font-size: 11px;
452
+ flex-wrap: wrap;
453
+ gap: 4px;
454
+ }
455
+ [data-theme="dos-classic"] #location-name {
456
+ flex: 1 1 100%;
457
+ text-align: center;
458
+ }
459
+ [data-theme="dos-classic"] #score-turns {
460
+ flex: 1 1 100%;
461
+ text-align: center;
462
+ }
463
+ }
464
+
465
+ @media (max-height: 500px) and (orientation: landscape) {
466
+ [data-theme="dos-classic"] body {
467
+ font-size: 13px;
468
+ line-height: 1.3;
469
+ }
470
+ [data-theme="dos-classic"] .sharpee-prose-pane p {
471
+ margin-bottom: 0.5em;
472
+ }
473
+ }
474
+
475
+ /* ============================================
476
+ Theme kit: Modern Dark (Catppuccin Mocha)
477
+ ============================================ */
478
+
479
+ [data-theme="modern-dark"] body {
480
+ background: var(--theme-bg);
481
+ color: var(--theme-text);
482
+ font-family: var(--theme-font);
483
+ font-size: var(--theme-font-size);
484
+ line-height: var(--theme-line-height);
485
+ }
486
+
487
+ /* Window chrome */
488
+
489
+ [data-theme="modern-dark"] .sharpee-window-title-bar {
490
+ background: var(--theme-bg-alt);
491
+ height: 28px;
492
+ padding: 0 8px;
493
+ font-size: 14px;
494
+ }
495
+
496
+ [data-theme="modern-dark"] .sharpee-window-title {
497
+ font-weight: bold;
498
+ margin-right: 16px;
499
+ text-transform: uppercase;
500
+ }
501
+
502
+ /* Menu bar */
503
+
504
+ [data-theme="modern-dark"] .sharpee-menu-bar {
505
+ background: var(--theme-bg-alt);
506
+ border-bottom: 1px solid var(--theme-border);
507
+ padding: 0 8px;
508
+ }
509
+
510
+ [data-theme="modern-dark"] .sharpee-menu-bar-trigger {
511
+ color: var(--theme-text);
512
+ border-radius: 2px;
513
+ }
514
+
515
+ [data-theme="modern-dark"] .sharpee-menu-bar-trigger:hover,
516
+ [data-theme="modern-dark"] .sharpee-menu-bar-item--open > .sharpee-menu-bar-trigger {
517
+ background: var(--theme-accent);
518
+ color: var(--theme-accent-text);
519
+ }
520
+
521
+ [data-theme="modern-dark"] .sharpee-menu-dropdown {
522
+ background: var(--theme-menu-bg);
523
+ border: 1px solid var(--theme-border);
524
+ box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
525
+ }
526
+
527
+ [data-theme="modern-dark"] .sharpee-menu-option {
528
+ color: var(--theme-text);
529
+ }
530
+
531
+ [data-theme="modern-dark"] .sharpee-menu-option:hover {
532
+ background: var(--theme-accent);
533
+ color: var(--theme-accent-text);
534
+ }
535
+
536
+ [data-theme="modern-dark"] .sharpee-menu-separator {
537
+ background: var(--theme-border);
538
+ }
539
+
540
+ /* Status bar */
541
+
542
+ [data-theme="modern-dark"] .sharpee-status-bar {
543
+ background: var(--theme-accent);
544
+ color: var(--theme-accent-text);
545
+ font-weight: bold;
546
+ }
547
+
548
+ [data-theme="modern-dark"] #location-name {
549
+ text-transform: uppercase;
550
+ }
551
+
552
+ /* Prose pane */
553
+
554
+ [data-theme="modern-dark"] .sharpee-prose-pane p {
555
+ margin-bottom: 0.8em;
556
+ }
557
+
558
+ [data-theme="modern-dark"] .sharpee-prose-pane p:last-child {
559
+ margin-bottom: 0;
560
+ }
561
+
562
+ [data-theme="modern-dark"] .sharpee-prose-pane .command-echo {
563
+ color: var(--theme-text-muted);
564
+ margin-top: 1em;
565
+ margin-bottom: 0.5em;
566
+ }
567
+
568
+ [data-theme="modern-dark"] .sharpee-prose-pane .system-message {
569
+ color: var(--theme-accent);
570
+ }
571
+
572
+ [data-theme="modern-dark"] .sharpee-prose-pane .game-status {
573
+ text-align: center;
574
+ font-weight: bold;
575
+ margin: 1em 0;
576
+ padding: 0.5em;
577
+ border: 1px solid var(--theme-border);
578
+ }
579
+
580
+ [data-theme="modern-dark"] .sharpee-prose-pane {
581
+ scrollbar-width: thin;
582
+ scrollbar-color: var(--theme-accent) var(--theme-bg);
583
+ }
584
+
585
+ [data-theme="modern-dark"] .sharpee-prose-pane::-webkit-scrollbar {
586
+ width: 8px;
587
+ }
588
+
589
+ [data-theme="modern-dark"] .sharpee-prose-pane::-webkit-scrollbar-track {
590
+ background: var(--theme-bg);
591
+ }
592
+
593
+ [data-theme="modern-dark"] .sharpee-prose-pane::-webkit-scrollbar-thumb {
594
+ background: var(--theme-accent);
595
+ }
596
+
597
+ /* Input bar */
598
+
599
+ [data-theme="modern-dark"] .sharpee-input-bar {
600
+ background: var(--theme-bg);
601
+ border-top: 2px solid var(--theme-border);
602
+ }
603
+
604
+ [data-theme="modern-dark"] .sharpee-input-prompt {
605
+ color: var(--theme-text);
606
+ }
607
+
608
+ [data-theme="modern-dark"] .sharpee-input-field {
609
+ background: var(--theme-input-bg);
610
+ color: var(--theme-text);
611
+ caret-color: var(--theme-text);
612
+ }
613
+
614
+ [data-theme="modern-dark"] .sharpee-input-field::placeholder {
615
+ color: var(--theme-text-muted);
616
+ opacity: 0.5;
617
+ }
618
+
619
+ /* Dialogs */
620
+
621
+ [data-theme="modern-dark"] .sharpee-dialog {
622
+ background: var(--theme-bg);
623
+ color: var(--theme-text);
624
+ border: 2px solid var(--theme-border);
625
+ font-family: var(--theme-font);
626
+ font-size: var(--theme-font-size);
627
+ line-height: var(--theme-line-height);
628
+ }
629
+
630
+ [data-theme="modern-dark"] .sharpee-dialog::backdrop {
631
+ background: rgba(0, 0, 0, 0.7);
632
+ }
633
+
634
+ [data-theme="modern-dark"] .sharpee-dialog-title {
635
+ background: var(--theme-accent);
636
+ color: var(--theme-accent-text);
637
+ }
638
+
639
+ [data-theme="modern-dark"] .sharpee-dialog-buttons {
640
+ border-top: 1px solid var(--theme-border);
641
+ }
642
+
643
+ [data-theme="modern-dark"] .sharpee-dialog-button {
644
+ background: var(--theme-bg-alt);
645
+ border: 1px solid var(--theme-border);
646
+ color: var(--theme-text);
647
+ font-family: inherit;
648
+ font-size: inherit;
649
+ }
650
+
651
+ [data-theme="modern-dark"] .sharpee-dialog-button:hover {
652
+ background: var(--theme-accent);
653
+ color: var(--theme-accent-text);
654
+ border-color: var(--theme-accent);
655
+ }
656
+
657
+ [data-theme="modern-dark"] .sharpee-dialog-button:focus {
658
+ outline: 1px solid var(--theme-accent);
659
+ outline-offset: 2px;
660
+ }
661
+
662
+ [data-theme="modern-dark"] .sharpee-dialog-button:disabled {
663
+ color: var(--theme-text-muted);
664
+ }
665
+
666
+ /* Dialog body internals */
667
+
668
+ [data-theme="modern-dark"] .save-input-row {
669
+ display: flex;
670
+ align-items: center;
671
+ gap: 8px;
672
+ margin-bottom: 12px;
673
+ }
674
+
675
+ [data-theme="modern-dark"] .save-input-row label {
676
+ white-space: nowrap;
677
+ }
678
+
679
+ [data-theme="modern-dark"] #save-name-input {
680
+ background: var(--theme-bg-alt);
681
+ border: 1px solid var(--theme-border);
682
+ color: var(--theme-text);
683
+ padding: 4px 6px;
684
+ }
685
+
686
+ [data-theme="modern-dark"] #save-name-input:focus {
687
+ border-color: var(--theme-accent);
688
+ }
689
+
690
+ [data-theme="modern-dark"] .saves-list-label {
691
+ color: var(--theme-text-muted);
692
+ margin-bottom: 8px;
693
+ font-size: 0.9em;
694
+ }
695
+
696
+ [data-theme="modern-dark"] .saves-list {
697
+ background: var(--theme-bg-alt);
698
+ border: 1px solid var(--theme-border);
699
+ max-height: 200px;
700
+ overflow-y: auto;
701
+ }
702
+
703
+ [data-theme="modern-dark"] .save-slot {
704
+ padding: 6px 8px;
705
+ cursor: pointer;
706
+ display: flex;
707
+ justify-content: space-between;
708
+ gap: 12px;
709
+ border-bottom: 1px solid var(--theme-border);
710
+ }
711
+
712
+ [data-theme="modern-dark"] .save-slot:last-child {
713
+ border-bottom: none;
714
+ }
715
+
716
+ [data-theme="modern-dark"] .save-slot:hover {
717
+ background: var(--theme-menu-hover);
718
+ }
719
+
720
+ [data-theme="modern-dark"] .save-slot.selected {
721
+ background: var(--theme-accent);
722
+ color: var(--theme-accent-text);
723
+ }
724
+
725
+ [data-theme="modern-dark"] .save-slot-name {
726
+ font-weight: bold;
727
+ flex: 1;
728
+ overflow: hidden;
729
+ text-overflow: ellipsis;
730
+ white-space: nowrap;
731
+ }
732
+
733
+ [data-theme="modern-dark"] .save-slot-info {
734
+ color: var(--theme-text-muted);
735
+ font-size: 0.85em;
736
+ white-space: nowrap;
737
+ }
738
+
739
+ [data-theme="modern-dark"] .save-slot.selected .save-slot-info {
740
+ color: var(--theme-accent-text);
741
+ }
742
+
743
+ [data-theme="modern-dark"] .no-saves-message {
744
+ color: var(--theme-text-muted);
745
+ font-style: italic;
746
+ padding: 12px;
747
+ text-align: center;
748
+ }
749
+
750
+ [data-theme="modern-dark"] .startup-info {
751
+ color: var(--theme-accent);
752
+ margin: 0 0 12px 0;
753
+ line-height: 1.4;
754
+ }
755
+
756
+ [data-theme="modern-dark"] .startup-question {
757
+ color: var(--theme-text);
758
+ margin: 0;
759
+ }
760
+
761
+ [data-theme="modern-dark"] .saves-list::-webkit-scrollbar,
762
+ [data-theme="modern-dark"] .sharpee-dialog-body::-webkit-scrollbar {
763
+ width: 8px;
764
+ }
765
+
766
+ [data-theme="modern-dark"] .saves-list::-webkit-scrollbar-track,
767
+ [data-theme="modern-dark"] .sharpee-dialog-body::-webkit-scrollbar-track {
768
+ background: var(--theme-bg-alt);
769
+ }
770
+
771
+ [data-theme="modern-dark"] .saves-list::-webkit-scrollbar-thumb,
772
+ [data-theme="modern-dark"] .sharpee-dialog-body::-webkit-scrollbar-thumb {
773
+ background: var(--theme-accent);
774
+ }
775
+
776
+ /* Mobile */
777
+
778
+ @media (max-width: 600px) {
779
+ [data-theme="modern-dark"] body {
780
+ font-size: 14px;
781
+ }
782
+ [data-theme="modern-dark"] .sharpee-status-bar {
783
+ font-size: 12px;
784
+ }
785
+ [data-theme="modern-dark"] .sharpee-input-prompt {
786
+ font-size: 16px;
787
+ }
788
+ [data-theme="modern-dark"] .sharpee-dialog {
789
+ min-width: 280px;
790
+ margin: 12px;
791
+ }
792
+ [data-theme="modern-dark"] .save-input-row {
793
+ flex-direction: column;
794
+ align-items: stretch;
795
+ gap: 4px;
796
+ }
797
+ [data-theme="modern-dark"] .sharpee-dialog-buttons {
798
+ gap: 12px;
799
+ }
800
+ [data-theme="modern-dark"] .sharpee-dialog-button {
801
+ flex: 1;
802
+ padding: 10px 16px;
803
+ }
804
+ }
805
+
806
+ @media (max-width: 380px) {
807
+ [data-theme="modern-dark"] body {
808
+ font-size: 13px;
809
+ }
810
+ [data-theme="modern-dark"] .sharpee-status-bar {
811
+ font-size: 11px;
812
+ flex-wrap: wrap;
813
+ gap: 4px;
814
+ }
815
+ [data-theme="modern-dark"] #location-name {
816
+ flex: 1 1 100%;
817
+ text-align: center;
818
+ }
819
+ [data-theme="modern-dark"] #score-turns {
820
+ flex: 1 1 100%;
821
+ text-align: center;
822
+ }
823
+ }
824
+
825
+ @media (max-height: 500px) and (orientation: landscape) {
826
+ [data-theme="modern-dark"] body {
827
+ font-size: 13px;
828
+ line-height: 1.3;
829
+ }
830
+ [data-theme="modern-dark"] .sharpee-prose-pane p {
831
+ margin-bottom: 0.5em;
832
+ }
833
+ }
834
+
835
+ /* ============================================
836
+ Theme kit: Retro Terminal (Green Phosphor)
837
+ ============================================ */
838
+
839
+ [data-theme="retro-terminal"] body {
840
+ background-color: var(--theme-bg);
841
+ background-image: repeating-linear-gradient(
842
+ 0deg,
843
+ rgba(0, 0, 0, 0.15),
844
+ rgba(0, 0, 0, 0.15) 1px,
845
+ transparent 1px,
846
+ transparent 2px
847
+ );
848
+ color: var(--theme-text);
849
+ font-family: var(--theme-font);
850
+ font-size: var(--theme-font-size);
851
+ line-height: var(--theme-line-height);
852
+ text-shadow: 0 0 5px rgba(0, 255, 0, 0.5);
853
+ }
854
+
855
+ /* Window chrome */
856
+
857
+ [data-theme="retro-terminal"] .sharpee-window-title-bar {
858
+ background: var(--theme-bg-alt);
859
+ height: 28px;
860
+ padding: 0 8px;
861
+ font-size: 14px;
862
+ }
863
+
864
+ [data-theme="retro-terminal"] .sharpee-window-title {
865
+ font-weight: bold;
866
+ margin-right: 16px;
867
+ text-transform: uppercase;
868
+ }
869
+
870
+ /* Menu bar */
871
+
872
+ [data-theme="retro-terminal"] .sharpee-menu-bar {
873
+ background: var(--theme-bg-alt);
874
+ border-bottom: 1px solid var(--theme-border);
875
+ padding: 0 8px;
876
+ }
877
+
878
+ [data-theme="retro-terminal"] .sharpee-menu-bar-trigger {
879
+ color: var(--theme-text);
880
+ border-radius: 2px;
881
+ }
882
+
883
+ [data-theme="retro-terminal"] .sharpee-menu-bar-trigger:hover,
884
+ [data-theme="retro-terminal"] .sharpee-menu-bar-item--open > .sharpee-menu-bar-trigger {
885
+ background: var(--theme-accent);
886
+ color: var(--theme-accent-text);
887
+ }
888
+
889
+ [data-theme="retro-terminal"] .sharpee-menu-dropdown {
890
+ background: var(--theme-menu-bg);
891
+ border: 1px solid var(--theme-border);
892
+ box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
893
+ }
894
+
895
+ [data-theme="retro-terminal"] .sharpee-menu-option {
896
+ color: var(--theme-text);
897
+ }
898
+
899
+ [data-theme="retro-terminal"] .sharpee-menu-option:hover {
900
+ background: var(--theme-accent);
901
+ color: var(--theme-accent-text);
902
+ }
903
+
904
+ [data-theme="retro-terminal"] .sharpee-menu-separator {
905
+ background: var(--theme-border);
906
+ }
907
+
908
+ /* Status bar */
909
+
910
+ [data-theme="retro-terminal"] .sharpee-status-bar {
911
+ background: var(--theme-accent);
912
+ color: var(--theme-accent-text);
913
+ font-weight: bold;
914
+ }
915
+
916
+ [data-theme="retro-terminal"] #location-name {
917
+ text-transform: uppercase;
918
+ }
919
+
920
+ /* Prose pane */
921
+
922
+ [data-theme="retro-terminal"] .sharpee-prose-pane p {
923
+ margin-bottom: 0.8em;
924
+ }
925
+
926
+ [data-theme="retro-terminal"] .sharpee-prose-pane p:last-child {
927
+ margin-bottom: 0;
928
+ }
929
+
930
+ [data-theme="retro-terminal"] .sharpee-prose-pane .command-echo {
931
+ color: var(--theme-text-muted);
932
+ margin-top: 1em;
933
+ margin-bottom: 0.5em;
934
+ }
935
+
936
+ [data-theme="retro-terminal"] .sharpee-prose-pane .system-message {
937
+ color: var(--theme-accent);
938
+ }
939
+
940
+ [data-theme="retro-terminal"] .sharpee-prose-pane .game-status {
941
+ text-align: center;
942
+ font-weight: bold;
943
+ margin: 1em 0;
944
+ padding: 0.5em;
945
+ border: 1px solid var(--theme-border);
946
+ }
947
+
948
+ [data-theme="retro-terminal"] .sharpee-prose-pane {
949
+ scrollbar-width: thin;
950
+ scrollbar-color: var(--theme-accent) var(--theme-bg);
951
+ }
952
+
953
+ [data-theme="retro-terminal"] .sharpee-prose-pane::-webkit-scrollbar {
954
+ width: 8px;
955
+ }
956
+
957
+ [data-theme="retro-terminal"] .sharpee-prose-pane::-webkit-scrollbar-track {
958
+ background: var(--theme-bg);
959
+ }
960
+
961
+ [data-theme="retro-terminal"] .sharpee-prose-pane::-webkit-scrollbar-thumb {
962
+ background: var(--theme-accent);
963
+ }
964
+
965
+ /* Input bar */
966
+
967
+ [data-theme="retro-terminal"] .sharpee-input-bar {
968
+ background: var(--theme-bg);
969
+ border-top: 2px solid var(--theme-border);
970
+ }
971
+
972
+ [data-theme="retro-terminal"] .sharpee-input-prompt {
973
+ color: var(--theme-text);
974
+ }
975
+
976
+ [data-theme="retro-terminal"] .sharpee-input-field {
977
+ background: var(--theme-input-bg);
978
+ color: var(--theme-text);
979
+ caret-color: var(--theme-text);
980
+ }
981
+
982
+ [data-theme="retro-terminal"] .sharpee-input-field::placeholder {
983
+ color: var(--theme-text-muted);
984
+ opacity: 0.5;
985
+ }
986
+
987
+ /* Dialogs */
988
+
989
+ [data-theme="retro-terminal"] .sharpee-dialog {
990
+ background: var(--theme-bg);
991
+ color: var(--theme-text);
992
+ border: 2px solid var(--theme-border);
993
+ font-family: var(--theme-font);
994
+ font-size: var(--theme-font-size);
995
+ line-height: var(--theme-line-height);
996
+ }
997
+
998
+ [data-theme="retro-terminal"] .sharpee-dialog::backdrop {
999
+ background: rgba(0, 0, 0, 0.7);
1000
+ }
1001
+
1002
+ [data-theme="retro-terminal"] .sharpee-dialog-title {
1003
+ background: var(--theme-accent);
1004
+ color: var(--theme-accent-text);
1005
+ }
1006
+
1007
+ [data-theme="retro-terminal"] .sharpee-dialog-buttons {
1008
+ border-top: 1px solid var(--theme-border);
1009
+ }
1010
+
1011
+ [data-theme="retro-terminal"] .sharpee-dialog-button {
1012
+ background: var(--theme-bg-alt);
1013
+ border: 1px solid var(--theme-border);
1014
+ color: var(--theme-text);
1015
+ font-family: inherit;
1016
+ font-size: inherit;
1017
+ }
1018
+
1019
+ [data-theme="retro-terminal"] .sharpee-dialog-button:hover {
1020
+ background: var(--theme-accent);
1021
+ color: var(--theme-accent-text);
1022
+ border-color: var(--theme-accent);
1023
+ }
1024
+
1025
+ [data-theme="retro-terminal"] .sharpee-dialog-button:focus {
1026
+ outline: 1px solid var(--theme-accent);
1027
+ outline-offset: 2px;
1028
+ }
1029
+
1030
+ [data-theme="retro-terminal"] .sharpee-dialog-button:disabled {
1031
+ color: var(--theme-text-muted);
1032
+ }
1033
+
1034
+ /* Dialog body internals */
1035
+
1036
+ [data-theme="retro-terminal"] .save-input-row {
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: 8px;
1040
+ margin-bottom: 12px;
1041
+ }
1042
+
1043
+ [data-theme="retro-terminal"] .save-input-row label {
1044
+ white-space: nowrap;
1045
+ }
1046
+
1047
+ [data-theme="retro-terminal"] #save-name-input {
1048
+ background: var(--theme-bg-alt);
1049
+ border: 1px solid var(--theme-border);
1050
+ color: var(--theme-text);
1051
+ padding: 4px 6px;
1052
+ }
1053
+
1054
+ [data-theme="retro-terminal"] #save-name-input:focus {
1055
+ border-color: var(--theme-accent);
1056
+ }
1057
+
1058
+ [data-theme="retro-terminal"] .saves-list-label {
1059
+ color: var(--theme-text-muted);
1060
+ margin-bottom: 8px;
1061
+ font-size: 0.9em;
1062
+ }
1063
+
1064
+ [data-theme="retro-terminal"] .saves-list {
1065
+ background: var(--theme-bg-alt);
1066
+ border: 1px solid var(--theme-border);
1067
+ max-height: 200px;
1068
+ overflow-y: auto;
1069
+ }
1070
+
1071
+ [data-theme="retro-terminal"] .save-slot {
1072
+ padding: 6px 8px;
1073
+ cursor: pointer;
1074
+ display: flex;
1075
+ justify-content: space-between;
1076
+ gap: 12px;
1077
+ border-bottom: 1px solid var(--theme-border);
1078
+ }
1079
+
1080
+ [data-theme="retro-terminal"] .save-slot:last-child {
1081
+ border-bottom: none;
1082
+ }
1083
+
1084
+ [data-theme="retro-terminal"] .save-slot:hover {
1085
+ background: var(--theme-menu-hover);
1086
+ }
1087
+
1088
+ [data-theme="retro-terminal"] .save-slot.selected {
1089
+ background: var(--theme-accent);
1090
+ color: var(--theme-accent-text);
1091
+ }
1092
+
1093
+ [data-theme="retro-terminal"] .save-slot-name {
1094
+ font-weight: bold;
1095
+ flex: 1;
1096
+ overflow: hidden;
1097
+ text-overflow: ellipsis;
1098
+ white-space: nowrap;
1099
+ }
1100
+
1101
+ [data-theme="retro-terminal"] .save-slot-info {
1102
+ color: var(--theme-text-muted);
1103
+ font-size: 0.85em;
1104
+ white-space: nowrap;
1105
+ }
1106
+
1107
+ [data-theme="retro-terminal"] .save-slot.selected .save-slot-info {
1108
+ color: var(--theme-accent-text);
1109
+ }
1110
+
1111
+ [data-theme="retro-terminal"] .no-saves-message {
1112
+ color: var(--theme-text-muted);
1113
+ font-style: italic;
1114
+ padding: 12px;
1115
+ text-align: center;
1116
+ }
1117
+
1118
+ [data-theme="retro-terminal"] .startup-info {
1119
+ color: var(--theme-accent);
1120
+ margin: 0 0 12px 0;
1121
+ line-height: 1.4;
1122
+ }
1123
+
1124
+ [data-theme="retro-terminal"] .startup-question {
1125
+ color: var(--theme-text);
1126
+ margin: 0;
1127
+ }
1128
+
1129
+ [data-theme="retro-terminal"] .saves-list::-webkit-scrollbar,
1130
+ [data-theme="retro-terminal"] .sharpee-dialog-body::-webkit-scrollbar {
1131
+ width: 8px;
1132
+ }
1133
+
1134
+ [data-theme="retro-terminal"] .saves-list::-webkit-scrollbar-track,
1135
+ [data-theme="retro-terminal"] .sharpee-dialog-body::-webkit-scrollbar-track {
1136
+ background: var(--theme-bg-alt);
1137
+ }
1138
+
1139
+ [data-theme="retro-terminal"] .saves-list::-webkit-scrollbar-thumb,
1140
+ [data-theme="retro-terminal"] .sharpee-dialog-body::-webkit-scrollbar-thumb {
1141
+ background: var(--theme-accent);
1142
+ }
1143
+
1144
+ /* Mobile */
1145
+
1146
+ @media (max-width: 600px) {
1147
+ [data-theme="retro-terminal"] body {
1148
+ font-size: 14px;
1149
+ }
1150
+ [data-theme="retro-terminal"] .sharpee-status-bar {
1151
+ font-size: 12px;
1152
+ }
1153
+ [data-theme="retro-terminal"] .sharpee-input-prompt {
1154
+ font-size: 16px;
1155
+ }
1156
+ [data-theme="retro-terminal"] .sharpee-dialog {
1157
+ min-width: 280px;
1158
+ margin: 12px;
1159
+ }
1160
+ [data-theme="retro-terminal"] .save-input-row {
1161
+ flex-direction: column;
1162
+ align-items: stretch;
1163
+ gap: 4px;
1164
+ }
1165
+ [data-theme="retro-terminal"] .sharpee-dialog-buttons {
1166
+ gap: 12px;
1167
+ }
1168
+ [data-theme="retro-terminal"] .sharpee-dialog-button {
1169
+ flex: 1;
1170
+ padding: 10px 16px;
1171
+ }
1172
+ }
1173
+
1174
+ @media (max-width: 380px) {
1175
+ [data-theme="retro-terminal"] body {
1176
+ font-size: 13px;
1177
+ }
1178
+ [data-theme="retro-terminal"] .sharpee-status-bar {
1179
+ font-size: 11px;
1180
+ flex-wrap: wrap;
1181
+ gap: 4px;
1182
+ }
1183
+ [data-theme="retro-terminal"] #location-name {
1184
+ flex: 1 1 100%;
1185
+ text-align: center;
1186
+ }
1187
+ [data-theme="retro-terminal"] #score-turns {
1188
+ flex: 1 1 100%;
1189
+ text-align: center;
1190
+ }
1191
+ }
1192
+
1193
+ @media (max-height: 500px) and (orientation: landscape) {
1194
+ [data-theme="retro-terminal"] body {
1195
+ font-size: 13px;
1196
+ line-height: 1.3;
1197
+ }
1198
+ [data-theme="retro-terminal"] .sharpee-prose-pane p {
1199
+ margin-bottom: 0.5em;
1200
+ }
1201
+ }
1202
+
1203
+ /* ============================================
1204
+ Theme kit: Paper (High Contrast Book Style)
1205
+ ============================================ */
1206
+
1207
+ [data-theme="paper"] body {
1208
+ background: var(--theme-bg);
1209
+ color: var(--theme-text);
1210
+ font-family: var(--theme-font);
1211
+ font-size: var(--theme-font-size);
1212
+ line-height: var(--theme-line-height);
1213
+ }
1214
+
1215
+ /* Window chrome */
1216
+
1217
+ [data-theme="paper"] .sharpee-window-title-bar {
1218
+ background: var(--theme-bg-alt);
1219
+ height: 28px;
1220
+ padding: 0 8px;
1221
+ font-size: 14px;
1222
+ }
1223
+
1224
+ [data-theme="paper"] .sharpee-window-title {
1225
+ font-weight: bold;
1226
+ margin-right: 16px;
1227
+ text-transform: uppercase;
1228
+ }
1229
+
1230
+ /* Menu bar */
1231
+
1232
+ [data-theme="paper"] .sharpee-menu-bar {
1233
+ background: var(--theme-bg-alt);
1234
+ border-bottom: 1px solid var(--theme-border);
1235
+ padding: 0 8px;
1236
+ }
1237
+
1238
+ [data-theme="paper"] .sharpee-menu-bar-trigger {
1239
+ color: var(--theme-text);
1240
+ border-radius: 2px;
1241
+ }
1242
+
1243
+ [data-theme="paper"] .sharpee-menu-bar-trigger:hover,
1244
+ [data-theme="paper"] .sharpee-menu-bar-item--open > .sharpee-menu-bar-trigger {
1245
+ background: var(--theme-accent);
1246
+ color: var(--theme-accent-text);
1247
+ }
1248
+
1249
+ [data-theme="paper"] .sharpee-menu-dropdown {
1250
+ background: var(--theme-menu-bg);
1251
+ border: 1px solid var(--theme-border);
1252
+ box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
1253
+ }
1254
+
1255
+ [data-theme="paper"] .sharpee-menu-option {
1256
+ color: var(--theme-text);
1257
+ }
1258
+
1259
+ [data-theme="paper"] .sharpee-menu-option:hover {
1260
+ background: var(--theme-accent);
1261
+ color: var(--theme-accent-text);
1262
+ }
1263
+
1264
+ [data-theme="paper"] .sharpee-menu-separator {
1265
+ background: var(--theme-border);
1266
+ }
1267
+
1268
+ /* Status bar */
1269
+
1270
+ [data-theme="paper"] .sharpee-status-bar {
1271
+ background: var(--theme-accent);
1272
+ color: var(--theme-accent-text);
1273
+ font-weight: bold;
1274
+ }
1275
+
1276
+ [data-theme="paper"] #location-name {
1277
+ text-transform: uppercase;
1278
+ }
1279
+
1280
+ /* Prose pane */
1281
+
1282
+ [data-theme="paper"] .sharpee-prose-pane p {
1283
+ margin-bottom: 0.8em;
1284
+ }
1285
+
1286
+ [data-theme="paper"] .sharpee-prose-pane p:last-child {
1287
+ margin-bottom: 0;
1288
+ }
1289
+
1290
+ [data-theme="paper"] .sharpee-prose-pane .command-echo {
1291
+ color: var(--theme-text-muted);
1292
+ margin-top: 1em;
1293
+ margin-bottom: 0.5em;
1294
+ }
1295
+
1296
+ [data-theme="paper"] .sharpee-prose-pane .system-message {
1297
+ color: var(--theme-accent);
1298
+ }
1299
+
1300
+ [data-theme="paper"] .sharpee-prose-pane .game-status {
1301
+ text-align: center;
1302
+ font-weight: bold;
1303
+ margin: 1em 0;
1304
+ padding: 0.5em;
1305
+ border: 1px solid var(--theme-border);
1306
+ }
1307
+
1308
+ [data-theme="paper"] .sharpee-prose-pane {
1309
+ scrollbar-width: thin;
1310
+ scrollbar-color: var(--theme-accent) var(--theme-bg);
1311
+ }
1312
+
1313
+ [data-theme="paper"] .sharpee-prose-pane::-webkit-scrollbar {
1314
+ width: 8px;
1315
+ }
1316
+
1317
+ [data-theme="paper"] .sharpee-prose-pane::-webkit-scrollbar-track {
1318
+ background: var(--theme-bg);
1319
+ }
1320
+
1321
+ [data-theme="paper"] .sharpee-prose-pane::-webkit-scrollbar-thumb {
1322
+ background: var(--theme-accent);
1323
+ }
1324
+
1325
+ /* Input bar */
1326
+
1327
+ [data-theme="paper"] .sharpee-input-bar {
1328
+ background: var(--theme-bg);
1329
+ border-top: 2px solid var(--theme-border);
1330
+ }
1331
+
1332
+ [data-theme="paper"] .sharpee-input-prompt {
1333
+ color: var(--theme-text);
1334
+ }
1335
+
1336
+ [data-theme="paper"] .sharpee-input-field {
1337
+ background: var(--theme-input-bg);
1338
+ color: var(--theme-text);
1339
+ caret-color: var(--theme-text);
1340
+ }
1341
+
1342
+ [data-theme="paper"] .sharpee-input-field::placeholder {
1343
+ color: var(--theme-text-muted);
1344
+ opacity: 0.5;
1345
+ }
1346
+
1347
+ /* Dialogs */
1348
+
1349
+ [data-theme="paper"] .sharpee-dialog {
1350
+ background: var(--theme-bg);
1351
+ color: var(--theme-text);
1352
+ border: 2px solid var(--theme-border);
1353
+ font-family: var(--theme-font);
1354
+ font-size: var(--theme-font-size);
1355
+ line-height: var(--theme-line-height);
1356
+ }
1357
+
1358
+ [data-theme="paper"] .sharpee-dialog::backdrop {
1359
+ background: rgba(0, 0, 0, 0.5);
1360
+ }
1361
+
1362
+ [data-theme="paper"] .sharpee-dialog-title {
1363
+ background: var(--theme-accent);
1364
+ color: var(--theme-accent-text);
1365
+ }
1366
+
1367
+ [data-theme="paper"] .sharpee-dialog-buttons {
1368
+ border-top: 1px solid var(--theme-border);
1369
+ }
1370
+
1371
+ [data-theme="paper"] .sharpee-dialog-button {
1372
+ background: var(--theme-bg-alt);
1373
+ border: 1px solid var(--theme-border);
1374
+ color: var(--theme-text);
1375
+ font-family: inherit;
1376
+ font-size: inherit;
1377
+ }
1378
+
1379
+ [data-theme="paper"] .sharpee-dialog-button:hover {
1380
+ background: var(--theme-accent);
1381
+ color: var(--theme-accent-text);
1382
+ border-color: var(--theme-accent);
1383
+ }
1384
+
1385
+ [data-theme="paper"] .sharpee-dialog-button:focus {
1386
+ outline: 1px solid var(--theme-accent);
1387
+ outline-offset: 2px;
1388
+ }
1389
+
1390
+ [data-theme="paper"] .sharpee-dialog-button:disabled {
1391
+ color: var(--theme-text-muted);
1392
+ }
1393
+
1394
+ /* Dialog body internals */
1395
+
1396
+ [data-theme="paper"] .save-input-row {
1397
+ display: flex;
1398
+ align-items: center;
1399
+ gap: 8px;
1400
+ margin-bottom: 12px;
1401
+ }
1402
+
1403
+ [data-theme="paper"] .save-input-row label {
1404
+ white-space: nowrap;
1405
+ }
1406
+
1407
+ [data-theme="paper"] #save-name-input {
1408
+ background: var(--theme-bg-alt);
1409
+ border: 1px solid var(--theme-border);
1410
+ color: var(--theme-text);
1411
+ padding: 4px 6px;
1412
+ }
1413
+
1414
+ [data-theme="paper"] #save-name-input:focus {
1415
+ border-color: var(--theme-accent);
1416
+ }
1417
+
1418
+ [data-theme="paper"] .saves-list-label {
1419
+ color: var(--theme-text-muted);
1420
+ margin-bottom: 8px;
1421
+ font-size: 0.9em;
1422
+ }
1423
+
1424
+ [data-theme="paper"] .saves-list {
1425
+ background: var(--theme-bg-alt);
1426
+ border: 1px solid var(--theme-border);
1427
+ max-height: 200px;
1428
+ overflow-y: auto;
1429
+ }
1430
+
1431
+ [data-theme="paper"] .save-slot {
1432
+ padding: 6px 8px;
1433
+ cursor: pointer;
1434
+ display: flex;
1435
+ justify-content: space-between;
1436
+ gap: 12px;
1437
+ border-bottom: 1px solid var(--theme-border);
1438
+ }
1439
+
1440
+ [data-theme="paper"] .save-slot:last-child {
1441
+ border-bottom: none;
1442
+ }
1443
+
1444
+ [data-theme="paper"] .save-slot:hover {
1445
+ background: var(--theme-menu-hover);
1446
+ }
1447
+
1448
+ [data-theme="paper"] .save-slot.selected {
1449
+ background: var(--theme-accent);
1450
+ color: var(--theme-accent-text);
1451
+ }
1452
+
1453
+ [data-theme="paper"] .save-slot-name {
1454
+ font-weight: bold;
1455
+ flex: 1;
1456
+ overflow: hidden;
1457
+ text-overflow: ellipsis;
1458
+ white-space: nowrap;
1459
+ }
1460
+
1461
+ [data-theme="paper"] .save-slot-info {
1462
+ color: var(--theme-text-muted);
1463
+ font-size: 0.85em;
1464
+ white-space: nowrap;
1465
+ }
1466
+
1467
+ [data-theme="paper"] .save-slot.selected .save-slot-info {
1468
+ color: var(--theme-accent-text);
1469
+ }
1470
+
1471
+ [data-theme="paper"] .no-saves-message {
1472
+ color: var(--theme-text-muted);
1473
+ font-style: italic;
1474
+ padding: 12px;
1475
+ text-align: center;
1476
+ }
1477
+
1478
+ [data-theme="paper"] .startup-info {
1479
+ color: var(--theme-accent);
1480
+ margin: 0 0 12px 0;
1481
+ line-height: 1.4;
1482
+ }
1483
+
1484
+ [data-theme="paper"] .startup-question {
1485
+ color: var(--theme-text);
1486
+ margin: 0;
1487
+ }
1488
+
1489
+ [data-theme="paper"] .saves-list::-webkit-scrollbar,
1490
+ [data-theme="paper"] .sharpee-dialog-body::-webkit-scrollbar {
1491
+ width: 8px;
1492
+ }
1493
+
1494
+ [data-theme="paper"] .saves-list::-webkit-scrollbar-track,
1495
+ [data-theme="paper"] .sharpee-dialog-body::-webkit-scrollbar-track {
1496
+ background: var(--theme-bg-alt);
1497
+ }
1498
+
1499
+ [data-theme="paper"] .saves-list::-webkit-scrollbar-thumb,
1500
+ [data-theme="paper"] .sharpee-dialog-body::-webkit-scrollbar-thumb {
1501
+ background: var(--theme-accent);
1502
+ }
1503
+
1504
+ /* Mobile */
1505
+
1506
+ @media (max-width: 600px) {
1507
+ [data-theme="paper"] body {
1508
+ font-size: 14px;
1509
+ }
1510
+ [data-theme="paper"] .sharpee-status-bar {
1511
+ font-size: 12px;
1512
+ }
1513
+ [data-theme="paper"] .sharpee-input-prompt {
1514
+ font-size: 16px;
1515
+ }
1516
+ [data-theme="paper"] .sharpee-dialog {
1517
+ min-width: 280px;
1518
+ margin: 12px;
1519
+ }
1520
+ [data-theme="paper"] .save-input-row {
1521
+ flex-direction: column;
1522
+ align-items: stretch;
1523
+ gap: 4px;
1524
+ }
1525
+ [data-theme="paper"] .sharpee-dialog-buttons {
1526
+ gap: 12px;
1527
+ }
1528
+ [data-theme="paper"] .sharpee-dialog-button {
1529
+ flex: 1;
1530
+ padding: 10px 16px;
1531
+ }
1532
+ }
1533
+
1534
+ @media (max-width: 380px) {
1535
+ [data-theme="paper"] body {
1536
+ font-size: 13px;
1537
+ }
1538
+ [data-theme="paper"] .sharpee-status-bar {
1539
+ font-size: 11px;
1540
+ flex-wrap: wrap;
1541
+ gap: 4px;
1542
+ }
1543
+ [data-theme="paper"] #location-name {
1544
+ flex: 1 1 100%;
1545
+ text-align: center;
1546
+ }
1547
+ [data-theme="paper"] #score-turns {
1548
+ flex: 1 1 100%;
1549
+ text-align: center;
1550
+ }
1551
+ }
1552
+
1553
+ @media (max-height: 500px) and (orientation: landscape) {
1554
+ [data-theme="paper"] body {
1555
+ font-size: 13px;
1556
+ line-height: 1.3;
1557
+ }
1558
+ [data-theme="paper"] .sharpee-prose-pane p {
1559
+ margin-bottom: 0.5em;
1560
+ }
1561
+ }
1562
+
1563
+ /* ============================================
1564
+ Theme kit: System 6 (Macintosh System 6)
1565
+ ============================================ */
1566
+
1567
+ /* Webfonts bundled under templates/browser/themes/system-6/fonts/.
1568
+ Build copies the directory alongside styles.css.
1569
+ ChicagoFLF + FindersKeepers provenance: sakofchit/system.css (MIT, 2022). */
1570
+
1571
+ @font-face {
1572
+ font-family: "ChicagoFLF";
1573
+ src: url("themes/system-6/fonts/ChicagoFLF.woff2") format("woff2");
1574
+ font-weight: normal;
1575
+ font-style: normal;
1576
+ font-display: swap;
1577
+ }
1578
+
1579
+ @font-face {
1580
+ font-family: "FindersKeepers";
1581
+ src: url("themes/system-6/fonts/FindersKeepers.woff2") format("woff2");
1582
+ font-weight: normal;
1583
+ font-style: normal;
1584
+ font-display: swap;
1585
+ }
1586
+
1587
+ [data-theme="system-6"] body {
1588
+ background-color: var(--theme-desktop-bg);
1589
+ color: var(--theme-text);
1590
+ font-family: var(--theme-font);
1591
+ font-size: var(--theme-font-size);
1592
+ line-height: var(--theme-line-height);
1593
+ }
1594
+
1595
+ [data-theme="system-6"] .sharpee-window {
1596
+ background: var(--theme-bg);
1597
+ border: 1px solid var(--theme-border);
1598
+ }
1599
+
1600
+ /* Window chrome — striped active title bar with white "punch-out" title label */
1601
+
1602
+ [data-theme="system-6"] .sharpee-window-title-bar {
1603
+ background:
1604
+ repeating-linear-gradient(
1605
+ to bottom,
1606
+ #000000 0, #000000 1px, #ffffff 1px, #ffffff 3px
1607
+ );
1608
+ border-bottom: 1px solid var(--theme-border);
1609
+ height: 26px;
1610
+ padding: 0 8px;
1611
+ font-family: var(--theme-font-chrome);
1612
+ font-size: 16px;
1613
+ }
1614
+
1615
+ [data-theme="system-6"] .sharpee-window-title {
1616
+ background: var(--theme-bg);
1617
+ padding: 0 8px;
1618
+ font-weight: bold;
1619
+ white-space: nowrap;
1620
+ }
1621
+
1622
+ /* Menu bar */
1623
+
1624
+ [data-theme="system-6"] .sharpee-menu-bar {
1625
+ background: var(--theme-menu-bg);
1626
+ border-bottom: 1px solid var(--theme-border);
1627
+ font-family: var(--theme-font-chrome);
1628
+ font-size: 16px;
1629
+ }
1630
+
1631
+ [data-theme="system-6"] .sharpee-menu-bar-trigger {
1632
+ color: var(--theme-text);
1633
+ padding: 4px 12px;
1634
+ }
1635
+
1636
+ [data-theme="system-6"] .sharpee-menu-bar-trigger:hover,
1637
+ [data-theme="system-6"] .sharpee-menu-bar-item--open > .sharpee-menu-bar-trigger {
1638
+ background: var(--theme-accent);
1639
+ color: var(--theme-accent-text);
1640
+ }
1641
+
1642
+ [data-theme="system-6"] .sharpee-menu-dropdown {
1643
+ background: var(--theme-menu-bg);
1644
+ border: 1px solid var(--theme-border);
1645
+ box-shadow: 1px 1px 0 var(--theme-border);
1646
+ font-family: var(--theme-font-chrome);
1647
+ font-size: 16px;
1648
+ padding: 2px 0;
1649
+ }
1650
+
1651
+ [data-theme="system-6"] .sharpee-menu-option {
1652
+ color: var(--theme-text);
1653
+ padding: 3px 16px;
1654
+ }
1655
+
1656
+ [data-theme="system-6"] .sharpee-menu-option:hover {
1657
+ background: var(--theme-accent);
1658
+ color: var(--theme-accent-text);
1659
+ }
1660
+
1661
+ [data-theme="system-6"] .sharpee-menu-separator {
1662
+ background: var(--theme-border);
1663
+ height: 1px;
1664
+ margin: 2px 0;
1665
+ }
1666
+
1667
+ /* Status bar */
1668
+
1669
+ [data-theme="system-6"] .sharpee-status-bar {
1670
+ background: var(--theme-bg);
1671
+ color: var(--theme-text);
1672
+ border-bottom: 1px solid var(--theme-border);
1673
+ font-family: var(--theme-font-chrome);
1674
+ font-size: 15px;
1675
+ font-weight: bold;
1676
+ }
1677
+
1678
+ /* Prose pane */
1679
+
1680
+ [data-theme="system-6"] .sharpee-prose-pane {
1681
+ background: var(--theme-bg);
1682
+ scrollbar-width: thin;
1683
+ scrollbar-color: var(--theme-accent) var(--theme-bg);
1684
+ }
1685
+
1686
+ [data-theme="system-6"] .sharpee-prose-pane p {
1687
+ margin-bottom: 0.6em;
1688
+ }
1689
+
1690
+ [data-theme="system-6"] .sharpee-prose-pane p:last-child {
1691
+ margin-bottom: 0;
1692
+ }
1693
+
1694
+ [data-theme="system-6"] .sharpee-prose-pane .command-echo {
1695
+ color: var(--theme-text-muted);
1696
+ margin-top: 0.8em;
1697
+ margin-bottom: 0.4em;
1698
+ }
1699
+
1700
+ [data-theme="system-6"] .sharpee-prose-pane .system-message {
1701
+ color: var(--theme-text);
1702
+ font-weight: bold;
1703
+ }
1704
+
1705
+ [data-theme="system-6"] .sharpee-prose-pane .game-status {
1706
+ text-align: center;
1707
+ font-family: var(--theme-font-chrome);
1708
+ font-weight: bold;
1709
+ margin: 1em 0;
1710
+ padding: 0.5em;
1711
+ border: 1px solid var(--theme-border);
1712
+ }
1713
+
1714
+ [data-theme="system-6"] .sharpee-prose-pane::-webkit-scrollbar {
1715
+ width: 16px;
1716
+ }
1717
+
1718
+ [data-theme="system-6"] .sharpee-prose-pane::-webkit-scrollbar-track {
1719
+ background: var(--theme-bg);
1720
+ border-left: 1px solid var(--theme-border);
1721
+ }
1722
+
1723
+ [data-theme="system-6"] .sharpee-prose-pane::-webkit-scrollbar-thumb {
1724
+ background:
1725
+ repeating-linear-gradient(45deg, #000000 0, #000000 1px, #ffffff 1px, #ffffff 2px);
1726
+ border: 1px solid var(--theme-border);
1727
+ }
1728
+
1729
+ /* Input bar */
1730
+
1731
+ [data-theme="system-6"] .sharpee-input-bar {
1732
+ background: var(--theme-bg);
1733
+ border-top: 1px solid var(--theme-border);
1734
+ }
1735
+
1736
+ [data-theme="system-6"] .sharpee-input-prompt {
1737
+ color: var(--theme-text);
1738
+ font-family: var(--theme-font-chrome);
1739
+ font-weight: bold;
1740
+ }
1741
+
1742
+ [data-theme="system-6"] .sharpee-input-field {
1743
+ background: transparent;
1744
+ color: var(--theme-text);
1745
+ caret-color: var(--theme-text);
1746
+ }
1747
+
1748
+ [data-theme="system-6"] .sharpee-input-field::placeholder {
1749
+ color: var(--theme-text-muted);
1750
+ opacity: 0.7;
1751
+ }
1752
+
1753
+ /* Dialogs */
1754
+
1755
+ [data-theme="system-6"] .sharpee-dialog {
1756
+ background: var(--theme-bg);
1757
+ color: var(--theme-text);
1758
+ border: 1px solid var(--theme-border);
1759
+ box-shadow: 1px 1px 0 var(--theme-border);
1760
+ font-family: var(--theme-font);
1761
+ font-size: var(--theme-font-size);
1762
+ line-height: var(--theme-line-height);
1763
+ }
1764
+
1765
+ [data-theme="system-6"] .sharpee-dialog::backdrop {
1766
+ background: rgba(0, 0, 0, 0.25);
1767
+ }
1768
+
1769
+ [data-theme="system-6"] .sharpee-dialog-title {
1770
+ background:
1771
+ repeating-linear-gradient(
1772
+ to bottom,
1773
+ #000000 0, #000000 1px, #ffffff 1px, #ffffff 3px
1774
+ );
1775
+ border-bottom: 1px solid var(--theme-border);
1776
+ font-family: var(--theme-font-chrome);
1777
+ font-size: 16px;
1778
+ padding: 4px 8px;
1779
+ text-align: center;
1780
+ font-weight: bold;
1781
+ }
1782
+
1783
+ [data-theme="system-6"] .sharpee-dialog-buttons {
1784
+ border-top: 1px solid var(--theme-border);
1785
+ }
1786
+
1787
+ [data-theme="system-6"] .sharpee-dialog-button {
1788
+ background: var(--theme-bg);
1789
+ border: 1px solid var(--theme-border);
1790
+ border-radius: 4px;
1791
+ color: var(--theme-text);
1792
+ font-family: var(--theme-font-chrome);
1793
+ font-size: 16px;
1794
+ padding: 4px 16px;
1795
+ }
1796
+
1797
+ [data-theme="system-6"] .sharpee-dialog-button:hover {
1798
+ background: var(--theme-accent);
1799
+ color: var(--theme-accent-text);
1800
+ }
1801
+
1802
+ [data-theme="system-6"] .sharpee-dialog-button:focus {
1803
+ outline: 1px solid var(--theme-border);
1804
+ outline-offset: 2px;
1805
+ }
1806
+
1807
+ [data-theme="system-6"] .sharpee-dialog-button:disabled {
1808
+ color: var(--theme-text-muted);
1809
+ }
1810
+
1811
+ /* Dialog body internals */
1812
+
1813
+ [data-theme="system-6"] .save-input-row {
1814
+ display: flex;
1815
+ align-items: center;
1816
+ gap: 8px;
1817
+ margin-bottom: 12px;
1818
+ }
1819
+
1820
+ [data-theme="system-6"] .save-input-row label {
1821
+ white-space: nowrap;
1822
+ }
1823
+
1824
+ [data-theme="system-6"] #save-name-input {
1825
+ background: var(--theme-bg);
1826
+ border: 1px solid var(--theme-border);
1827
+ color: var(--theme-text);
1828
+ font-family: var(--theme-font);
1829
+ padding: 3px 6px;
1830
+ }
1831
+
1832
+ [data-theme="system-6"] #save-name-input:focus {
1833
+ outline: 1px solid var(--theme-border);
1834
+ outline-offset: 1px;
1835
+ }
1836
+
1837
+ [data-theme="system-6"] .saves-list-label {
1838
+ color: var(--theme-text-muted);
1839
+ margin-bottom: 8px;
1840
+ font-size: 0.9em;
1841
+ }
1842
+
1843
+ [data-theme="system-6"] .saves-list {
1844
+ background: var(--theme-bg);
1845
+ border: 1px solid var(--theme-border);
1846
+ max-height: 200px;
1847
+ overflow-y: auto;
1848
+ }
1849
+
1850
+ [data-theme="system-6"] .save-slot {
1851
+ padding: 4px 8px;
1852
+ cursor: pointer;
1853
+ display: flex;
1854
+ justify-content: space-between;
1855
+ gap: 12px;
1856
+ border-bottom: 1px dotted #aaaaaa;
1857
+ }
1858
+
1859
+ [data-theme="system-6"] .save-slot:last-child {
1860
+ border-bottom: none;
1861
+ }
1862
+
1863
+ [data-theme="system-6"] .save-slot:hover {
1864
+ background: #dddddd;
1865
+ }
1866
+
1867
+ [data-theme="system-6"] .save-slot.selected {
1868
+ background: var(--theme-accent);
1869
+ color: var(--theme-accent-text);
1870
+ }
1871
+
1872
+ [data-theme="system-6"] .save-slot-name {
1873
+ font-weight: bold;
1874
+ flex: 1;
1875
+ overflow: hidden;
1876
+ text-overflow: ellipsis;
1877
+ white-space: nowrap;
1878
+ }
1879
+
1880
+ [data-theme="system-6"] .save-slot-info {
1881
+ color: var(--theme-text-muted);
1882
+ font-size: 0.9em;
1883
+ white-space: nowrap;
1884
+ }
1885
+
1886
+ [data-theme="system-6"] .save-slot.selected .save-slot-info {
1887
+ color: var(--theme-accent-text);
1888
+ }
1889
+
1890
+ [data-theme="system-6"] .no-saves-message {
1891
+ color: var(--theme-text-muted);
1892
+ font-style: italic;
1893
+ padding: 12px;
1894
+ text-align: center;
1895
+ }
1896
+
1897
+ [data-theme="system-6"] .startup-info {
1898
+ color: var(--theme-text);
1899
+ margin: 0 0 12px 0;
1900
+ line-height: 1.4;
1901
+ }
1902
+
1903
+ [data-theme="system-6"] .startup-question {
1904
+ color: var(--theme-text);
1905
+ font-weight: bold;
1906
+ margin: 0;
1907
+ }
1908
+
1909
+ [data-theme="system-6"] .saves-list::-webkit-scrollbar,
1910
+ [data-theme="system-6"] .sharpee-dialog-body::-webkit-scrollbar {
1911
+ width: 12px;
1912
+ }
1913
+
1914
+ [data-theme="system-6"] .saves-list::-webkit-scrollbar-track,
1915
+ [data-theme="system-6"] .sharpee-dialog-body::-webkit-scrollbar-track {
1916
+ background: var(--theme-bg);
1917
+ border-left: 1px solid var(--theme-border);
1918
+ }
1919
+
1920
+ [data-theme="system-6"] .saves-list::-webkit-scrollbar-thumb,
1921
+ [data-theme="system-6"] .sharpee-dialog-body::-webkit-scrollbar-thumb {
1922
+ background:
1923
+ repeating-linear-gradient(45deg, #000000 0, #000000 1px, #ffffff 1px, #ffffff 2px);
1924
+ border: 1px solid var(--theme-border);
1925
+ }
1926
+
1927
+ /* Mobile */
1928
+
1929
+ @media (max-width: 600px) {
1930
+ [data-theme="system-6"] body {
1931
+ background-color: var(--theme-bg);
1932
+ font-size: 13px;
1933
+ }
1934
+ [data-theme="system-6"] .sharpee-window {
1935
+ border: 0;
1936
+ }
1937
+ [data-theme="system-6"] .sharpee-status-bar {
1938
+ font-size: 11px;
1939
+ }
1940
+ [data-theme="system-6"] .sharpee-input-prompt {
1941
+ font-size: 14px;
1942
+ }
1943
+ [data-theme="system-6"] .sharpee-dialog {
1944
+ min-width: 280px;
1945
+ margin: 12px;
1946
+ }
1947
+ [data-theme="system-6"] .save-input-row {
1948
+ flex-direction: column;
1949
+ align-items: stretch;
1950
+ gap: 4px;
1951
+ }
1952
+ [data-theme="system-6"] .sharpee-dialog-buttons {
1953
+ gap: 12px;
1954
+ }
1955
+ [data-theme="system-6"] .sharpee-dialog-button {
1956
+ flex: 1;
1957
+ padding: 10px 16px;
1958
+ }
1959
+ }
1960
+
1961
+ @media (max-width: 380px) {
1962
+ [data-theme="system-6"] body {
1963
+ font-size: 12px;
1964
+ }
1965
+ [data-theme="system-6"] .sharpee-status-bar {
1966
+ font-size: 10px;
1967
+ flex-wrap: wrap;
1968
+ gap: 4px;
1969
+ }
1970
+ [data-theme="system-6"] #location-name {
1971
+ flex: 1 1 100%;
1972
+ text-align: center;
1973
+ }
1974
+ [data-theme="system-6"] #score-turns {
1975
+ flex: 1 1 100%;
1976
+ text-align: center;
1977
+ }
1978
+ }
1979
+
1980
+ @media (max-height: 500px) and (orientation: landscape) {
1981
+ [data-theme="system-6"] body {
1982
+ font-size: 11px;
1983
+ line-height: 1.3;
1984
+ }
1985
+ [data-theme="system-6"] .sharpee-prose-pane p {
1986
+ margin-bottom: 0.4em;
1987
+ }
1988
+ }