claude-code-memory-explorer 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,789 @@
1
+ /* #region VARIABLES */
2
+ :root {
3
+ --bg-deep: #101114;
4
+ --bg-surface: #16181c;
5
+ --bg-elevated: #1e2025;
6
+ --bg-hover: #282a30;
7
+ --border: #363840;
8
+ --text-primary: #f0f1f3;
9
+ --text-secondary: #c2c4c9;
10
+ --text-tertiary: #9a9da5;
11
+ --text-muted: #7d808a;
12
+ --accent: #e86f33;
13
+ --accent-text: #f0a070;
14
+ --accent-dim: rgba(232, 111, 51, 0.22);
15
+ --accent-glow: rgba(232, 111, 51, 0.55);
16
+ --success: #3ecf8e;
17
+ --success-dim: rgba(62, 207, 142, 0.18);
18
+ --warning: #f0b429;
19
+ --warning-dim: rgba(240, 180, 41, 0.18);
20
+ --error: #ef4444;
21
+ --error-dim: rgba(239, 68, 68, 0.18);
22
+ --scope-user: #c08050;
23
+ --scope-project: #7ab5a0;
24
+ --scope-local: #8a9bb5;
25
+ --scope-rule: #a89bc4;
26
+ --scope-memory: #c4a06a;
27
+ --scope-policy: #b58a8a;
28
+ --font-mono: 'IBM Plex Mono', monospace;
29
+ --font-serif: 'Playfair Display', serif;
30
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
31
+ }
32
+ /* #endregion VARIABLES */
33
+
34
+ /* #region RESET */
35
+ * {
36
+ margin: 0;
37
+ padding: 0;
38
+ box-sizing: border-box;
39
+ }
40
+ body {
41
+ background: var(--bg-deep);
42
+ color: var(--text-primary);
43
+ font-family: var(--font-sans);
44
+ font-size: 13px;
45
+ line-height: 1.5;
46
+ height: calc(100vh / 1.25);
47
+ display: flex;
48
+ flex-direction: column;
49
+ overflow: hidden;
50
+ zoom: 1.25;
51
+ }
52
+ .mono {
53
+ font-family: var(--font-mono);
54
+ }
55
+ /* #endregion RESET */
56
+
57
+ /* #region SCROLLBAR */
58
+ ::-webkit-scrollbar {
59
+ width: 6px;
60
+ height: 6px;
61
+ }
62
+ ::-webkit-scrollbar-track {
63
+ background: transparent;
64
+ }
65
+ ::-webkit-scrollbar-thumb {
66
+ background: var(--border);
67
+ border-radius: 3px;
68
+ }
69
+ ::-webkit-scrollbar-thumb:hover {
70
+ background: var(--accent);
71
+ }
72
+ /* #endregion SCROLLBAR */
73
+
74
+ /* #region TOPBAR */
75
+ .topbar {
76
+ background: var(--bg-surface);
77
+ border-bottom: 1px solid var(--border);
78
+ padding: 10px 16px;
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 12px;
82
+ flex-shrink: 0;
83
+ z-index: 10;
84
+ }
85
+ .topbar-logo {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: 10px;
89
+ }
90
+ .logo-mark {
91
+ width: 24px;
92
+ height: 24px;
93
+ background: var(--accent);
94
+ border-radius: 6px;
95
+ display: flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+ }
99
+ .logo-mark svg {
100
+ width: 14px;
101
+ height: 14px;
102
+ color: white;
103
+ }
104
+ .logo-text {
105
+ font-family: var(--font-serif);
106
+ font-size: 17px;
107
+ font-weight: 500;
108
+ letter-spacing: -0.02em;
109
+ white-space: nowrap;
110
+ }
111
+ .topbar-project {
112
+ display: flex;
113
+ align-items: center;
114
+ gap: 6px;
115
+ background: var(--bg-elevated);
116
+ border: 1px solid var(--border);
117
+ color: var(--text-tertiary);
118
+ padding: 6px 10px;
119
+ border-radius: 6px;
120
+ cursor: pointer;
121
+ font-size: 11px;
122
+ font-family: var(--font-mono);
123
+ max-width: 300px;
124
+ }
125
+ .topbar-project:hover {
126
+ border-color: var(--accent);
127
+ color: var(--text-secondary);
128
+ }
129
+ .spacer {
130
+ flex: 1;
131
+ }
132
+ .topbar-btn {
133
+ padding: 6px 10px;
134
+ border-radius: 6px;
135
+ font-size: 11px;
136
+ font-weight: 500;
137
+ border: 1px solid var(--border);
138
+ background: var(--bg-elevated);
139
+ color: var(--text-tertiary);
140
+ font-family: var(--font-mono);
141
+ text-transform: uppercase;
142
+ letter-spacing: 0.03em;
143
+ cursor: pointer;
144
+ display: flex;
145
+ align-items: center;
146
+ gap: 6px;
147
+ }
148
+ .topbar-btn:hover {
149
+ border-color: var(--accent);
150
+ color: var(--text-secondary);
151
+ }
152
+ /* #endregion TOPBAR */
153
+
154
+ /* #region BUDGET_BAR */
155
+ .budget-bar {
156
+ background: var(--bg-surface);
157
+ border-bottom: 1px solid var(--border);
158
+ padding: 6px 16px 8px;
159
+ flex-shrink: 0;
160
+ }
161
+ .budget-label {
162
+ display: flex;
163
+ justify-content: space-between;
164
+ font-size: 10px;
165
+ color: var(--text-muted);
166
+ margin-bottom: 4px;
167
+ text-transform: uppercase;
168
+ letter-spacing: 0.3px;
169
+ }
170
+ .budget-track {
171
+ height: 6px;
172
+ background: var(--bg-elevated);
173
+ border-radius: 3px;
174
+ overflow: hidden;
175
+ }
176
+ .budget-segments {
177
+ display: flex;
178
+ height: 100%;
179
+ }
180
+ .budget-segment {
181
+ height: 100%;
182
+ transition: width 0.3s;
183
+ position: relative;
184
+ }
185
+ .budget-segment:first-child {
186
+ border-radius: 3px 0 0 3px;
187
+ }
188
+ .budget-segment:last-child {
189
+ border-radius: 0 3px 3px 0;
190
+ }
191
+ /* #endregion BUDGET_BAR */
192
+
193
+ /* #region MAIN_LAYOUT */
194
+ .main-layout {
195
+ display: flex;
196
+ flex: 1;
197
+ overflow: hidden;
198
+ }
199
+ .tree-panel {
200
+ width: 260px;
201
+ min-width: 150px;
202
+ max-width: 50%;
203
+ background: var(--bg-surface);
204
+ border-right: 1px solid var(--border);
205
+ overflow-y: auto;
206
+ flex-shrink: 0;
207
+ }
208
+ .resize-handle {
209
+ width: 4px;
210
+ margin-left: -2px;
211
+ margin-right: -2px;
212
+ cursor: col-resize;
213
+ background: transparent;
214
+ flex-shrink: 0;
215
+ z-index: 10;
216
+ position: relative;
217
+ transition: background 0.15s;
218
+ }
219
+ .resize-handle:hover,
220
+ .resize-handle.active {
221
+ background: var(--accent);
222
+ }
223
+ .preview-panel {
224
+ flex: 1;
225
+ overflow-y: auto;
226
+ background: var(--bg-deep);
227
+ display: flex;
228
+ flex-direction: column;
229
+ }
230
+ .preview-empty {
231
+ display: flex;
232
+ flex-direction: column;
233
+ align-items: center;
234
+ justify-content: center;
235
+ height: 100%;
236
+ gap: 8px;
237
+ color: var(--text-muted);
238
+ font-size: 13px;
239
+ }
240
+ /* #endregion MAIN_LAYOUT */
241
+
242
+ /* #region TREE */
243
+ .tree-group-header {
244
+ padding: 8px 12px 4px;
245
+ font-size: 10px;
246
+ font-weight: 600;
247
+ text-transform: uppercase;
248
+ letter-spacing: 0.5px;
249
+ color: var(--text-muted);
250
+ display: flex;
251
+ align-items: center;
252
+ gap: 6px;
253
+ }
254
+ .tree-item {
255
+ padding: 5px 12px 5px 24px;
256
+ cursor: pointer;
257
+ display: flex;
258
+ align-items: center;
259
+ gap: 6px;
260
+ transition: background 0.1s;
261
+ font-size: 12px;
262
+ color: var(--text-secondary);
263
+ }
264
+ .tree-item:hover {
265
+ background: var(--bg-hover);
266
+ }
267
+ .tree-item.selected {
268
+ background: var(--accent-dim);
269
+ color: var(--accent);
270
+ }
271
+ .tree-item .load-icon {
272
+ font-size: 10px;
273
+ width: 12px;
274
+ text-align: center;
275
+ flex-shrink: 0;
276
+ }
277
+ .tree-item .file-name {
278
+ font-family: var(--font-mono);
279
+ font-size: 11px;
280
+ flex: 1;
281
+ overflow: hidden;
282
+ text-overflow: ellipsis;
283
+ white-space: nowrap;
284
+ }
285
+ .tree-item .file-meta {
286
+ font-size: 10px;
287
+ color: var(--text-muted);
288
+ font-family: var(--font-mono);
289
+ flex-shrink: 0;
290
+ }
291
+ .tree-child .file-name { opacity: 0.75; }
292
+ .tree-conditional .file-name { opacity: 0.55; }
293
+ body.light .tree-conditional .file-name { opacity: 0.75; }
294
+ /* #endregion TREE */
295
+
296
+ /* #region PREVIEW */
297
+ .preview-header {
298
+ padding: 12px 16px;
299
+ border-bottom: 1px solid var(--border);
300
+ background: var(--bg-surface);
301
+ }
302
+ .preview-title {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 8px;
306
+ margin-bottom: 6px;
307
+ }
308
+ .preview-title .file-path {
309
+ font-family: var(--font-mono);
310
+ font-size: 11px;
311
+ color: var(--text-muted);
312
+ overflow: hidden;
313
+ text-overflow: ellipsis;
314
+ }
315
+ .preview-badges {
316
+ display: flex;
317
+ gap: 6px;
318
+ flex-wrap: wrap;
319
+ }
320
+ .preview-imports {
321
+ display: flex;
322
+ gap: 8px;
323
+ flex-wrap: wrap;
324
+ margin-top: 6px;
325
+ }
326
+ .preview-filepath {
327
+ padding: 4px 16px;
328
+ font-family: var(--font-mono);
329
+ font-size: 10px;
330
+ color: var(--text-muted);
331
+ background: var(--bg-deep);
332
+ border-bottom: 1px solid var(--border);
333
+ overflow: hidden;
334
+ text-overflow: ellipsis;
335
+ white-space: nowrap;
336
+ }
337
+ .preview-code {
338
+ font-family: var(--font-mono);
339
+ font-size: 11px;
340
+ line-height: 1.6;
341
+ color: var(--text-secondary);
342
+ white-space: pre-wrap;
343
+ word-break: break-word;
344
+ padding: 12px 16px;
345
+ margin: 0;
346
+ overflow: auto;
347
+ flex: 1;
348
+ }
349
+ .preview-code .hljs {
350
+ background: transparent;
351
+ padding: 0;
352
+ }
353
+ .preview-footer {
354
+ padding: 10px 16px;
355
+ border-top: 1px solid var(--border);
356
+ background: var(--bg-surface);
357
+ display: flex;
358
+ gap: 8px;
359
+ }
360
+ .hl-frontmatter {
361
+ color: var(--text-muted);
362
+ opacity: 0.6;
363
+ }
364
+ .import-link {
365
+ color: var(--accent);
366
+ cursor: pointer;
367
+ text-decoration: underline;
368
+ text-decoration-style: dotted;
369
+ }
370
+ .import-link:hover {
371
+ text-decoration-style: solid;
372
+ }
373
+ .inline-import {
374
+ color: var(--accent);
375
+ text-decoration: underline;
376
+ text-decoration-style: dotted;
377
+ cursor: pointer;
378
+ }
379
+ .inline-import:hover {
380
+ text-decoration-style: solid;
381
+ }
382
+ .import-link.unresolved {
383
+ color: var(--text-muted);
384
+ cursor: default;
385
+ text-decoration: none;
386
+ opacity: 0.6;
387
+ }
388
+ .cutoff-line {
389
+ border-top: 2px dashed var(--error);
390
+ margin: 8px 0;
391
+ position: relative;
392
+ }
393
+ .cutoff-label {
394
+ position: absolute;
395
+ top: -10px;
396
+ right: 0;
397
+ font-size: 9px;
398
+ color: var(--error);
399
+ background: var(--bg-deep);
400
+ padding: 0 4px;
401
+ }
402
+ .preview-code-faded {
403
+ opacity: 0.35;
404
+ }
405
+ /* #endregion PREVIEW */
406
+
407
+ /* #region BADGES */
408
+ .scope-badge {
409
+ display: inline-block;
410
+ font-size: 9px;
411
+ padding: 1px 5px;
412
+ border-radius: 3px;
413
+ font-weight: 600;
414
+ text-transform: uppercase;
415
+ letter-spacing: 0.3px;
416
+ }
417
+ .scope-user {
418
+ background: rgba(196, 149, 106, 0.18);
419
+ color: var(--scope-user);
420
+ }
421
+ .scope-project {
422
+ background: rgba(122, 181, 160, 0.18);
423
+ color: var(--scope-project);
424
+ }
425
+ .scope-local {
426
+ background: rgba(138, 155, 181, 0.18);
427
+ color: var(--scope-local);
428
+ }
429
+ .scope-rule {
430
+ background: rgba(168, 155, 196, 0.18);
431
+ color: var(--scope-rule);
432
+ }
433
+ .scope-memory {
434
+ background: rgba(196, 149, 106, 0.18);
435
+ color: var(--scope-memory);
436
+ }
437
+ .scope-policy {
438
+ background: rgba(181, 138, 138, 0.18);
439
+ color: var(--scope-policy);
440
+ }
441
+ .load-badge {
442
+ display: inline-block;
443
+ font-size: 9px;
444
+ padding: 1px 5px;
445
+ border-radius: 3px;
446
+ border: 1px solid var(--border);
447
+ color: var(--text-muted);
448
+ }
449
+ .tag-badge {
450
+ display: inline-block;
451
+ font-size: 9px;
452
+ padding: 1px 5px;
453
+ background: var(--bg-elevated);
454
+ border-radius: 3px;
455
+ color: var(--text-tertiary);
456
+ font-family: var(--font-mono);
457
+ }
458
+ /* #endregion BADGES */
459
+
460
+ /* #region SUMMARY_BAR */
461
+ .summary-bar {
462
+ background: var(--bg-surface);
463
+ border-top: 1px solid var(--border);
464
+ padding: 4px 16px;
465
+ display: flex;
466
+ gap: 12px;
467
+ flex-shrink: 0;
468
+ }
469
+ .summary-card {
470
+ display: flex;
471
+ align-items: baseline;
472
+ gap: 6px;
473
+ }
474
+ .sc-value {
475
+ font-family: var(--font-mono);
476
+ font-size: 11px;
477
+ font-weight: 600;
478
+ color: var(--accent);
479
+ }
480
+ .sc-label {
481
+ font-size: 9px;
482
+ color: var(--text-muted);
483
+ text-transform: uppercase;
484
+ }
485
+ /* #endregion SUMMARY_BAR */
486
+
487
+ /* #region MODAL */
488
+ .modal-overlay {
489
+ display: none;
490
+ position: fixed;
491
+ inset: 0;
492
+ background: rgba(0, 0, 0, 0.6);
493
+ z-index: 200;
494
+ align-items: center;
495
+ justify-content: center;
496
+ }
497
+ .modal-overlay.open {
498
+ display: flex;
499
+ }
500
+ .modal {
501
+ background: var(--bg-surface);
502
+ border: 1px solid var(--border);
503
+ border-radius: 8px;
504
+ width: 440px;
505
+ max-width: 90vw;
506
+ max-height: 80vh;
507
+ overflow-y: auto;
508
+ }
509
+ .modal-header {
510
+ display: flex;
511
+ align-items: center;
512
+ justify-content: space-between;
513
+ padding: 14px 16px;
514
+ border-bottom: 1px solid var(--border);
515
+ }
516
+ .modal-header h3 {
517
+ font-size: 14px;
518
+ font-weight: 600;
519
+ }
520
+ .modal-close {
521
+ background: none;
522
+ border: none;
523
+ color: var(--text-muted);
524
+ cursor: pointer;
525
+ font-size: 16px;
526
+ padding: 2px;
527
+ }
528
+ .modal-close:hover {
529
+ color: var(--text-primary);
530
+ }
531
+ .modal-body {
532
+ padding: 16px;
533
+ }
534
+ .modal-desc {
535
+ font-size: 12px;
536
+ color: var(--text-secondary);
537
+ margin-bottom: 12px;
538
+ }
539
+ .modal-field {
540
+ margin-bottom: 12px;
541
+ }
542
+ .modal-field label {
543
+ display: block;
544
+ font-size: 11px;
545
+ color: var(--text-muted);
546
+ margin-bottom: 4px;
547
+ }
548
+ .modal-field input {
549
+ width: 100%;
550
+ padding: 6px 10px;
551
+ background: var(--bg-elevated);
552
+ border: 1px solid var(--border);
553
+ border-radius: 4px;
554
+ color: var(--text-primary);
555
+ font-family: var(--font-mono);
556
+ font-size: 12px;
557
+ }
558
+ .modal-field input:focus {
559
+ outline: none;
560
+ border-color: var(--accent);
561
+ }
562
+ .modal-hint {
563
+ font-size: 10px;
564
+ color: var(--text-muted);
565
+ margin-top: 4px;
566
+ display: block;
567
+ }
568
+ .modal-actions {
569
+ display: flex;
570
+ justify-content: flex-end;
571
+ gap: 8px;
572
+ margin-top: 16px;
573
+ }
574
+ .modal-divider {
575
+ border: none;
576
+ border-top: 1px solid var(--border);
577
+ margin: 12px 0;
578
+ }
579
+ .modal-close-btn {
580
+ display: block;
581
+ width: calc(100% - 32px);
582
+ margin: 0 16px 16px;
583
+ padding: 8px;
584
+ background: var(--bg-elevated);
585
+ border: 1px solid var(--border);
586
+ border-radius: 4px;
587
+ color: var(--text-secondary);
588
+ cursor: pointer;
589
+ font-size: 12px;
590
+ }
591
+ .modal-close-btn:hover {
592
+ background: var(--bg-hover);
593
+ }
594
+ .action-btn {
595
+ padding: 6px 14px;
596
+ border-radius: 4px;
597
+ border: 1px solid var(--border);
598
+ background: var(--bg-elevated);
599
+ color: var(--text-secondary);
600
+ cursor: pointer;
601
+ font-size: 12px;
602
+ }
603
+ .action-btn:hover {
604
+ background: var(--bg-hover);
605
+ }
606
+ .action-btn.primary {
607
+ background: var(--accent);
608
+ border-color: var(--accent);
609
+ color: #fff;
610
+ }
611
+ .action-btn.primary:hover {
612
+ filter: brightness(1.1);
613
+ }
614
+ .action-btn.small {
615
+ padding: 2px 6px;
616
+ font-size: 10px;
617
+ margin-left: auto;
618
+ display: inline-flex;
619
+ align-items: center;
620
+ justify-content: center;
621
+ }
622
+ .shortcut-section {
623
+ font-size: 11px;
624
+ color: var(--text-muted);
625
+ margin-bottom: 6px;
626
+ text-transform: uppercase;
627
+ }
628
+ .shortcut-grid {
629
+ display: grid;
630
+ grid-template-columns: 1fr 1fr;
631
+ gap: 16px;
632
+ }
633
+ .shortcut-table {
634
+ font-size: 12px;
635
+ }
636
+ .shortcut-table td {
637
+ padding: 2px 0;
638
+ }
639
+ .shortcut-table td:first-child {
640
+ padding-right: 12px;
641
+ }
642
+ kbd {
643
+ background: var(--bg-elevated);
644
+ border: 1px solid var(--border);
645
+ border-radius: 3px;
646
+ padding: 1px 5px;
647
+ font-family: var(--font-mono);
648
+ font-size: 10px;
649
+ color: var(--text-secondary);
650
+ }
651
+ .recent-projects-label {
652
+ font-size: 11px;
653
+ color: var(--text-muted);
654
+ margin: 10px 0 4px;
655
+ }
656
+ .recent-project-item {
657
+ display: flex;
658
+ align-items: center;
659
+ padding: 5px 8px;
660
+ border-radius: 4px;
661
+ cursor: pointer;
662
+ font-size: 12px;
663
+ font-family: var(--font-mono);
664
+ color: var(--text-secondary);
665
+ }
666
+ .recent-project-item:hover {
667
+ background: var(--bg-hover);
668
+ }
669
+ .recent-project-item span {
670
+ flex: 1;
671
+ overflow: hidden;
672
+ text-overflow: ellipsis;
673
+ white-space: nowrap;
674
+ }
675
+ .recent-project-remove {
676
+ background: none;
677
+ border: none;
678
+ color: var(--text-muted);
679
+ cursor: pointer;
680
+ font-size: 12px;
681
+ padding: 0 4px;
682
+ opacity: 0;
683
+ }
684
+ .recent-project-item:hover .recent-project-remove {
685
+ opacity: 1;
686
+ }
687
+ /* #endregion MODAL */
688
+
689
+ /* #region LOADING */
690
+ .loading-state {
691
+ display: flex;
692
+ align-items: center;
693
+ justify-content: center;
694
+ gap: 8px;
695
+ padding: 40px;
696
+ color: var(--text-muted);
697
+ font-size: 12px;
698
+ }
699
+ .loading-spinner {
700
+ width: 16px;
701
+ height: 16px;
702
+ border: 2px solid var(--border);
703
+ border-top-color: var(--accent);
704
+ border-radius: 50%;
705
+ animation: spin 0.6s linear infinite;
706
+ }
707
+ @keyframes spin {
708
+ to {
709
+ transform: rotate(360deg);
710
+ }
711
+ }
712
+ /* #endregion LOADING */
713
+
714
+ /* #region TOAST */
715
+ .toast-container {
716
+ position: fixed;
717
+ bottom: 16px;
718
+ right: 16px;
719
+ z-index: 300;
720
+ }
721
+ .toast {
722
+ background: var(--bg-elevated);
723
+ border: 1px solid var(--border);
724
+ border-radius: 6px;
725
+ padding: 8px 14px;
726
+ font-size: 12px;
727
+ color: var(--text-secondary);
728
+ animation: slideIn 0.2s;
729
+ margin-top: 6px;
730
+ }
731
+ .toast.error {
732
+ border-color: var(--error);
733
+ color: var(--error);
734
+ }
735
+ .toast.success {
736
+ border-color: var(--success);
737
+ color: var(--success);
738
+ }
739
+ @keyframes slideIn {
740
+ from {
741
+ opacity: 0;
742
+ transform: translateY(8px);
743
+ }
744
+ to {
745
+ opacity: 1;
746
+ transform: translateY(0);
747
+ }
748
+ }
749
+ /* #endregion TOAST */
750
+
751
+ /* #region LIGHT_THEME */
752
+ body.light {
753
+ --bg-deep: #e8e6e3;
754
+ --bg-surface: #f4f3f1;
755
+ --bg-elevated: #ffffff;
756
+ --bg-hover: #e0ddd8;
757
+ --border: #c5c0b8;
758
+ --text-primary: #0a0a0a;
759
+ --text-secondary: #333333;
760
+ --text-tertiary: #666666;
761
+ --text-muted: #999999;
762
+ --accent-text: #b85a20;
763
+ }
764
+ /* #endregion LIGHT_THEME */
765
+
766
+ /* #region RESPONSIVE */
767
+ @media (max-width: 900px) {
768
+ .tree-panel {
769
+ width: 200px;
770
+ }
771
+ }
772
+ @media (max-width: 600px) {
773
+ .tree-panel {
774
+ width: 100%;
775
+ border-right: none;
776
+ border-bottom: 1px solid var(--border);
777
+ max-height: 40vh;
778
+ }
779
+ .main-layout {
780
+ flex-direction: column;
781
+ }
782
+ .summary-bar {
783
+ flex-wrap: wrap;
784
+ }
785
+ .shortcut-grid {
786
+ grid-template-columns: 1fr;
787
+ }
788
+ }
789
+ /* #endregion RESPONSIVE */