edgarodriguez commited on
Commit
bade96c
·
verified ·
1 Parent(s): c1cd0a9

Delete 10.08_styles.css

Browse files
Files changed (1) hide show
  1. 10.08_styles.css +0 -1626
10.08_styles.css DELETED
@@ -1,1626 +0,0 @@
1
- /* ============================================================================
2
- DEPTH geospatial risk map — shared by V6 (10.08) and V7 (10.09)
3
- ============================================================================ */
4
-
5
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;600&display=swap');
6
-
7
- /* -- Design tokens --------------------------------------------------------- */
8
- :root {
9
- /* 4pt spacing scale */
10
- --space-1: 4px;
11
- --space-2: 8px;
12
- --space-3: 12px;
13
- --space-4: 16px;
14
- --space-5: 20px;
15
- --space-6: 24px;
16
- --space-8: 32px;
17
-
18
- /* Surface layers — translucent glass on a near-white field (Spatial UI) */
19
- --c-canvas: oklch(98.5% 0.003 250);
20
- --c-glass-1: oklch(100% 0 0 / 0.72);
21
- --c-glass-2: oklch(100% 0 0 / 0.85);
22
- --c-glass-hover: oklch(96% 0.004 250 / 0.92);
23
- --c-glass-stroke: oklch(82% 0.006 250 / 0.6);
24
- --c-glass-stroke-strong: oklch(72% 0.008 250 / 0.75);
25
-
26
- /* Back-compat aliases for legacy class names still in use */
27
- --c-surf: var(--c-glass-1);
28
- --c-surf-hover: var(--c-glass-hover);
29
- --c-border: var(--c-glass-stroke);
30
- --c-border-str: var(--c-glass-stroke-strong);
31
-
32
- /* Text — all AA on white and on glass-1 */
33
- --c-text: oklch(18% 0.012 250); /* ~13.5:1 on white */
34
- --c-text-mid: oklch(38% 0.010 250); /* ~7.4:1 */
35
- --c-text-dim: oklch(50% 0.008 250); /* ~4.7:1 */
36
-
37
- /* Deep teal / navy — kept for back-compat with existing classes */
38
- --c-navy: #032425;
39
- --c-navy-dim: #0a4042;
40
-
41
- /* Rights Lab teal — primary accent (5.5:1 on white) */
42
- --c-teal: oklch(43% 0.12 218);
43
- --c-teal-pale: oklch(96% 0.025 218);
44
- --c-teal-brand: oklch(68% 0.12 218);
45
-
46
- --c-accent: var(--c-teal);
47
- --c-accent-soft: var(--c-teal-pale);
48
- --c-accent-ink: oklch(28% 0.10 218);
49
-
50
- --c-focus: oklch(58% 0.18 240);
51
-
52
- /* Depth / shadow scale — Spatial layered, restrained */
53
- --depth-1: 0 1px 2px oklch(20% 0.01 250 / 0.06),
54
- 0 1px 1px oklch(20% 0.01 250 / 0.04);
55
- --depth-2: 0 4px 12px oklch(20% 0.01 250 / 0.08),
56
- 0 1px 2px oklch(20% 0.01 250 / 0.05);
57
- --depth-3: 0 12px 32px oklch(20% 0.01 250 / 0.12),
58
- 0 2px 6px oklch(20% 0.01 250 / 0.06);
59
-
60
- /* Glass blur */
61
- --blur-glass: saturate(140%) blur(14px);
62
-
63
- /* Typography — Inter throughout, mono only for stats / coordinates */
64
- --font-ui: 'Inter', system-ui, -apple-system, sans-serif;
65
- --font-mono: 'JetBrains Mono', 'SF Mono', ui-monospace, monospace;
66
-
67
- /* Back-compat aliases — keep legacy class refs working */
68
- --font-label: var(--font-ui);
69
- --font-body: var(--font-ui);
70
-
71
- /* Motion — Spatial spring */
72
- --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
73
- --ease-spring: cubic-bezier(0.34, 1.4, 0.5, 1);
74
- --t-fast: 140ms; --t-base: 220ms; --t-slow: 320ms;
75
-
76
- /* Radii */
77
- --radius-sm: 6px;
78
- --radius-md: 12px;
79
- --radius-lg: 18px;
80
- --radius-pill: 999px;
81
- }
82
-
83
- @media (prefers-reduced-motion: reduce) {
84
- *, *::before, *::after {
85
- animation-duration: 0.01ms !important;
86
- transition-duration: 0.01ms !important;
87
- }
88
- }
89
-
90
- /* -- Page shell ------------------------------------------------------------ */
91
- .bslib-page-fill {
92
- display: flex !important;
93
- flex-direction: column !important;
94
- height: 100dvh !important;
95
- overflow: hidden !important;
96
- }
97
-
98
- /* depth-shell: row container — map takes ~70 %, panel fills ~30 % */
99
- .depth-shell {
100
- flex: 1;
101
- display: flex;
102
- flex-direction: row;
103
- overflow: hidden;
104
- min-height: 0;
105
- }
106
-
107
- /* Map area: all overlay controls are absolute inside here */
108
- .depth-map {
109
- flex: 1;
110
- position: relative;
111
- min-width: 0;
112
- min-height: 0;
113
- overflow: hidden;
114
- background: var(--c-canvas);
115
- }
116
-
117
- .depth-map .htmlwidget,
118
- .depth-map .maplibregl-map {
119
- width: 100% !important;
120
- height: 100% !important;
121
- }
122
-
123
- /* -- Top bar: crime selector + grid controls ------------------------------- */
124
- .map-overlay-top {
125
- position: absolute;
126
- top: var(--space-3);
127
- left: 50%;
128
- transform: translateX(-50%);
129
- z-index: 999;
130
- background: var(--c-surf);
131
- border: 1px solid var(--c-border);
132
- border-radius: var(--radius-md);
133
- padding: var(--space-1) var(--space-3);
134
- display: flex;
135
- align-items: center;
136
- gap: var(--space-2);
137
- white-space: nowrap;
138
- max-width: calc(100vw - 220px);
139
- box-shadow: 0 2px 8px oklch(20% 0.01 265 / 0.16);
140
- }
141
-
142
- .map-overlay-top .form-group { margin-bottom: 0 !important; }
143
-
144
- .map-overlay-top select {
145
- background: var(--c-surf) !important;
146
- color: var(--c-text) !important;
147
- border: 1px solid var(--c-border-str) !important;
148
- border-radius: var(--radius-md) !important;
149
- font-size: 11px !important;
150
- font-family: var(--font-label) !important;
151
- font-weight: 700 !important;
152
- letter-spacing: 0.06em !important;
153
- text-transform: uppercase !important;
154
- padding: 5px var(--space-2) !important;
155
- cursor: pointer;
156
- outline: none;
157
- box-shadow: 0 2px 6px oklch(20% 0.01 265 / 0.12) !important;
158
- }
159
-
160
- .map-overlay-top span {
161
- color: var(--c-text-mid);
162
- font-size: 11px;
163
- font-family: var(--font-label);
164
- font-weight: 700;
165
- letter-spacing: 0.10em;
166
- text-transform: uppercase;
167
- }
168
-
169
- .map-overlay-sep {
170
- width: 1px;
171
- height: 18px;
172
- background: var(--c-border);
173
- flex-shrink: 0;
174
- }
175
-
176
- /* (draw-extra-ctrl + btn-controls removed — controls now live in .depth-nav) */
177
-
178
- /* Wrappers that anchor popovers from nav-bar buttons */
179
- .style-btn-wrap,
180
- .grid-btn-wrap,
181
- .state-btn-wrap {
182
- position: relative;
183
- }
184
-
185
- .style-picker {
186
- position: absolute;
187
- right: 0;
188
- left: auto;
189
- top: calc(100% + 6px);
190
- background: var(--c-glass-2);
191
- backdrop-filter: var(--blur-glass);
192
- -webkit-backdrop-filter: var(--blur-glass);
193
- border: 1px solid var(--c-glass-stroke);
194
- border-radius: var(--radius-md);
195
- padding: var(--space-1);
196
- min-width: 168px;
197
- box-shadow: var(--depth-3);
198
- z-index: 1100;
199
- animation: nav-pop-in var(--t-base) var(--ease-spring);
200
- }
201
-
202
- .style-option {
203
- display: block;
204
- width: 100%;
205
- padding: var(--space-1) var(--space-3);
206
- background: none;
207
- border: none;
208
- text-align: left;
209
- font-size: 10px;
210
- font-family: var(--font-label);
211
- font-weight: 600;
212
- letter-spacing: 0.05em;
213
- color: var(--c-text-dim);
214
- cursor: pointer;
215
- border-radius: var(--radius-sm);
216
- transition: background var(--t-fast) var(--ease-out),
217
- color var(--t-fast) var(--ease-out);
218
- }
219
-
220
- .style-option:hover {
221
- background: var(--c-surf-hover);
222
- color: var(--c-text);
223
- }
224
-
225
- .style-option.active {
226
- color: var(--c-navy);
227
- background: var(--c-teal-pale);
228
- }
229
-
230
- .btn-ctrl {
231
- background: var(--c-surf) !important;
232
- color: var(--c-text) !important;
233
- border: 1px solid var(--c-border) !important;
234
- border-radius: var(--radius-md) !important;
235
- font-size: 10px !important;
236
- font-family: var(--font-label) !important;
237
- font-weight: 700 !important;
238
- letter-spacing: 0.10em !important;
239
- text-transform: uppercase;
240
- padding: var(--space-2) var(--space-3) !important;
241
- cursor: pointer !important;
242
- box-shadow: 0 2px 6px oklch(20% 0.01 265 / 0.14) !important;
243
- transition: background 0.12s, border-color 0.12s !important;
244
- display: inline-flex !important;
245
- align-items: center !important;
246
- gap: var(--space-1) !important;
247
- }
248
-
249
- .btn-ctrl:hover {
250
- background: var(--c-surf-hover) !important;
251
- border-color: var(--c-border-str) !important;
252
- }
253
-
254
- /* -- Layer control panel (bottom-left) ------------------------------------- */
255
- .layer-ctrl-panel {
256
- position: absolute;
257
- bottom: var(--space-3);
258
- left: 11px;
259
- z-index: 999;
260
- background: var(--c-glass-1);
261
- backdrop-filter: var(--blur-glass);
262
- -webkit-backdrop-filter: var(--blur-glass);
263
- border: 1px solid var(--c-glass-stroke);
264
- border-radius: var(--radius-lg);
265
- overflow: hidden;
266
- box-shadow: var(--depth-2);
267
- min-width: 256px;
268
- max-width: 288px;
269
- font-family: var(--font-ui);
270
- }
271
-
272
- .layer-ctrl-header {
273
- display: flex;
274
- align-items: center;
275
- justify-content: space-between;
276
- padding: var(--space-2) var(--space-3);
277
- cursor: pointer;
278
- color: var(--c-text);
279
- font-size: 10px;
280
- font-family: var(--font-label);
281
- font-weight: 700;
282
- letter-spacing: 0.10em;
283
- text-transform: uppercase;
284
- user-select: none;
285
- transition: background var(--t-fast) var(--ease-out);
286
- }
287
-
288
- .layer-ctrl-header:hover { background: var(--c-glass-hover); }
289
-
290
- .layer-ctrl-icon {
291
- font-size: 10px;
292
- color: var(--c-text-dim);
293
- }
294
-
295
- .layer-ctrl-body {
296
- max-height: 300px;
297
- overflow-y: auto;
298
- overflow-x: hidden;
299
- padding: var(--space-1) var(--space-3) var(--space-2);
300
- border-top: 1px solid var(--c-border);
301
- }
302
-
303
- .layer-ctrl-body::-webkit-scrollbar { width: 4px; }
304
- .layer-ctrl-body::-webkit-scrollbar-thumb {
305
- border-radius: 2px;
306
- background-color: var(--c-border-str);
307
- }
308
- .layer-ctrl-body::-webkit-scrollbar-track { background: transparent; }
309
-
310
- .layer-ctrl-body .form-check {
311
- padding: 3px 0 3px 20px;
312
- margin: 0;
313
- }
314
-
315
- .layer-ctrl-body .form-check-input {
316
- margin-left: -16px;
317
- cursor: pointer;
318
- accent-color: var(--c-navy);
319
- }
320
-
321
- .layer-ctrl-body .form-check-label {
322
- color: var(--c-text-dim);
323
- font-size: 11px;
324
- font-family: var(--font-ui);
325
- cursor: pointer;
326
- transition: color var(--t-fast) var(--ease-out);
327
- }
328
-
329
- .layer-ctrl-body .form-check-input:checked ~ .form-check-label {
330
- color: var(--c-text);
331
- }
332
-
333
- .layer-ctrl-body .shiny-input-container { margin: 0 !important; }
334
- .layer-ctrl-body > .shiny-input-container > .form-group { margin: 0 !important; }
335
-
336
- /* -- Analysis panel — right column, 30 % of layout ----------------------- */
337
- .depth-panel {
338
- width: 384px;
339
- flex-shrink: 0;
340
- background: oklch(99% 0.002 250);
341
- border-left: 1px solid var(--c-glass-stroke);
342
- box-shadow: inset 1px 0 0 oklch(100% 0 0 / 0.6);
343
- display: flex;
344
- flex-direction: column;
345
- overflow: hidden;
346
- font-family: var(--font-ui);
347
- color: var(--c-text);
348
- }
349
-
350
- /* All-light header: brand teal appears only as a 2px bottom border */
351
- .dp-header {
352
- background: var(--c-surf);
353
- color: var(--c-text);
354
- padding: var(--space-3) var(--space-4);
355
- flex-shrink: 0;
356
- display: flex;
357
- flex-direction: column;
358
- gap: 4px;
359
- border-bottom: 1px solid var(--c-teal-pale);
360
- }
361
-
362
- .dp-title {
363
- font-family: var(--font-label);
364
- font-size: 24px;
365
- font-weight: 800;
366
- letter-spacing: 0.06em;
367
- text-transform: uppercase;
368
- margin: 0 0 3px;
369
- color: var(--c-navy);
370
- }
371
-
372
- .dp-sub {
373
- font-size: 11px;
374
- color: var(--c-text-mid);
375
- margin: 0;
376
- line-height: 1.45;
377
- }
378
-
379
- /* -- Scrollable body — sections divided by lines, not nested cards --------- */
380
- .dp-scroll {
381
- flex: 1;
382
- overflow-y: auto;
383
- padding: 0 var(--space-4);
384
- display: flex;
385
- flex-direction: column;
386
- }
387
-
388
- .dp-scroll::-webkit-scrollbar { width: 4px; }
389
- .dp-scroll::-webkit-scrollbar-thumb {
390
- border-radius: 2px;
391
- background-color: var(--c-border-str);
392
- }
393
- .dp-scroll::-webkit-scrollbar-track { background: transparent; }
394
-
395
- .dp-card {
396
- padding: var(--space-3) 0;
397
- flex-shrink: 0;
398
- }
399
-
400
- .dp-card + .dp-card {
401
- border-top: 1px solid var(--c-border);
402
- }
403
-
404
- .dp-label {
405
- font-family: var(--font-label);
406
- font-size: 9px;
407
- font-weight: 700;
408
- letter-spacing: 0.14em;
409
- text-transform: uppercase;
410
- color: var(--c-text-dim);
411
- margin: 0 0 var(--space-3);
412
- }
413
-
414
- /* -- Big stats grid -------------------------------------------------------- */
415
- .stat-grid {
416
- display: grid;
417
- grid-template-columns: 1fr 1fr;
418
- gap: var(--space-3) var(--space-6);
419
- margin-bottom: var(--space-3);
420
- }
421
-
422
- .stat-val {
423
- font-family: var(--font-mono);
424
- font-size: 30px;
425
- font-weight: 600;
426
- font-variant-numeric: tabular-nums;
427
- line-height: 1;
428
- margin-bottom: 4px;
429
- letter-spacing: -0.02em;
430
- color: var(--c-text);
431
- }
432
-
433
- .stat-lbl {
434
- font-family: var(--font-ui);
435
- font-size: 10px;
436
- font-weight: 600;
437
- letter-spacing: 0.08em;
438
- text-transform: uppercase;
439
- color: var(--c-text-mid);
440
- }
441
-
442
- .stat-sub {
443
- font-size: 11px;
444
- color: var(--c-text-mid);
445
- margin-top: 4px;
446
- line-height: 1.45;
447
- min-height: 16px;
448
- }
449
-
450
- /* -- Mini stats grid ------------------------------------------------------- */
451
- .mini-grid {
452
- display: grid;
453
- grid-template-columns: 1fr 1fr 1fr;
454
- gap: var(--space-2) var(--space-3);
455
- padding-top: var(--space-3);
456
- border-top: 1px solid var(--c-border);
457
- }
458
-
459
- .mini-val {
460
- font-family: var(--font-mono);
461
- font-size: 16px;
462
- font-weight: 700;
463
- line-height: 1;
464
- margin-bottom: 1px;
465
- }
466
-
467
- .mini-lbl {
468
- font-family: var(--font-label);
469
- font-size: 8px;
470
- font-weight: 700;
471
- letter-spacing: 0.10em;
472
- text-transform: uppercase;
473
- color: var(--c-text-dim);
474
- }
475
-
476
- /* -- Municipality rank list ------------------------------------------------ */
477
- .rank-list {
478
- list-style: none;
479
- margin: 0;
480
- padding: 0;
481
- }
482
-
483
- .rank-item {
484
- display: flex;
485
- align-items: flex-start;
486
- gap: var(--space-2);
487
- padding: var(--space-2) 0;
488
- }
489
-
490
- .rank-item + .rank-item {
491
- border-top: 1px solid var(--c-border);
492
- }
493
-
494
- .rank-num {
495
- font-family: var(--font-label);
496
- font-size: 10px;
497
- font-weight: 700;
498
- color: var(--c-text-dim);
499
- min-width: 18px;
500
- padding-top: 3px;
501
- text-align: right;
502
- }
503
-
504
- .rank-body {
505
- flex: 1;
506
- min-width: 0;
507
- }
508
-
509
- .rank-name {
510
- font-size: 12px;
511
- font-weight: 600;
512
- color: var(--c-text);
513
- white-space: nowrap;
514
- overflow: hidden;
515
- text-overflow: ellipsis;
516
- }
517
-
518
- .rank-meta {
519
- font-size: 10px;
520
- color: var(--c-text-dim);
521
- margin: 1px 0 var(--space-1);
522
- }
523
-
524
- .rank-track {
525
- height: 2px;
526
- background: var(--c-border);
527
- border-radius: 1px;
528
- overflow: hidden;
529
- }
530
-
531
- .rank-fill {
532
- height: 100%;
533
- border-radius: 1px;
534
- transition: width 0.35s cubic-bezier(0.16, 1, 0.3, 1);
535
- }
536
-
537
- .rank-rate {
538
- font-family: var(--font-mono);
539
- font-size: 11px;
540
- font-weight: 700;
541
- color: var(--c-text-mid);
542
- padding-top: 2px;
543
- white-space: nowrap;
544
- }
545
-
546
- /* -- States ---------------------------------------------------------------- */
547
- .dp-empty {
548
- padding: var(--space-6) var(--space-2);
549
- color: var(--c-text-dim);
550
- font-size: 12px;
551
- text-align: center;
552
- line-height: 1.6;
553
- }
554
-
555
- .dp-more {
556
- font-family: var(--font-label);
557
- font-size: 10px;
558
- letter-spacing: 0.04em;
559
- color: var(--c-text-dim);
560
- text-align: center;
561
- padding: var(--space-1) 0 var(--space-2);
562
- }
563
-
564
- /* -- Analysis panel: selection badge --------------------------------------- */
565
- .dp-selection-badge {
566
- display: inline-flex;
567
- align-items: center;
568
- gap: 4px;
569
- font-family: var(--font-label);
570
- font-size: 9px;
571
- font-weight: 600;
572
- letter-spacing: 0.06em;
573
- color: var(--c-teal);
574
- background: var(--c-teal-pale);
575
- border-radius: 10px;
576
- padding: 2px 8px;
577
- margin-top: var(--space-1);
578
- }
579
-
580
- /* -- Analysis panel collapsible section headers ---------------------------- */
581
- .dp-group {
582
- border-bottom: 1px solid var(--c-border);
583
- margin-bottom: var(--space-1);
584
- }
585
-
586
- .dp-group-hdr {
587
- display: flex;
588
- justify-content: space-between;
589
- align-items: center;
590
- cursor: pointer;
591
- padding: var(--space-2) var(--space-1);
592
- user-select: none;
593
- border-radius: var(--radius-sm);
594
- }
595
-
596
- .dp-group-hdr:hover { background: var(--c-surf-hover); }
597
-
598
- .dp-group-label {
599
- font-family: var(--font-label);
600
- font-size: 10px;
601
- font-weight: 700;
602
- letter-spacing: 0.14em;
603
- text-transform: uppercase;
604
- color: var(--c-text);
605
- }
606
-
607
- .dp-group-icon {
608
- font-size: 7px;
609
- color: var(--c-text-dim);
610
- flex-shrink: 0;
611
- }
612
-
613
- .dp-group-body {
614
- padding: var(--space-1) 0 var(--space-2) 0;
615
- }
616
-
617
- /* -- Indicator cards inside panel groups ----------------------------------- */
618
- .ind-card {
619
- border: 1px solid var(--c-glass-stroke);
620
- border-radius: var(--radius-md);
621
- margin-bottom: var(--space-2);
622
- overflow: hidden;
623
- background: oklch(100% 0 0);
624
- box-shadow: var(--depth-1);
625
- transition: transform var(--t-base) var(--ease-spring),
626
- box-shadow var(--t-base) var(--ease-out);
627
- }
628
-
629
- .ind-card:hover {
630
- transform: translateY(-1px);
631
- box-shadow: var(--depth-2);
632
- }
633
-
634
- .ind-card-hdr {
635
- display: flex;
636
- align-items: center;
637
- justify-content: space-between;
638
- padding: 5px 10px;
639
- background: var(--c-surf-hover);
640
- border-bottom: 1px solid var(--c-border);
641
- }
642
-
643
- .ind-card-title {
644
- font-family: var(--font-ui);
645
- font-size: 10px;
646
- font-weight: 600;
647
- letter-spacing: 0.08em;
648
- text-transform: uppercase;
649
- color: var(--c-text-mid);
650
- }
651
-
652
- .ind-card-body {
653
- padding: var(--space-2) 10px;
654
- }
655
-
656
- .ind-card-body .stat-grid {
657
- margin-bottom: 0;
658
- }
659
-
660
- .ind-card-chart {
661
- border-top: 1px solid var(--c-border);
662
- padding: var(--space-1) 10px var(--space-2);
663
- }
664
-
665
- .ind-card-note {
666
- font-size: 11px;
667
- color: var(--c-text-mid);
668
- line-height: 1.5;
669
- padding: 0 10px 4px;
670
- }
671
-
672
- /* -- Horizontal stat row (label left, value right) ------------------------- */
673
- .dp-stat {
674
- display: flex;
675
- justify-content: space-between;
676
- align-items: center;
677
- padding: 4px 0;
678
- border-bottom: 1px solid var(--c-border);
679
- }
680
-
681
- .dp-stat:last-child { border-bottom: none; }
682
-
683
- .dp-stat-lbl {
684
- font-family: var(--font-label);
685
- font-size: 10px;
686
- color: var(--c-text-mid);
687
- flex: 1;
688
- padding-right: var(--space-2);
689
- }
690
-
691
- .dp-stat-val {
692
- font-family: var(--font-mono);
693
- font-size: 12px;
694
- font-weight: 700;
695
- flex-shrink: 0;
696
- }
697
-
698
- /* -- Clear button (light header context) ----------------------------------- */
699
- .btn-clear {
700
- background: transparent !important;
701
- color: var(--c-text-mid) !important;
702
- border: 1px solid var(--c-border-str) !important;
703
- border-radius: var(--radius-sm) !important;
704
- font-size: 9px !important;
705
- font-family: var(--font-label) !important;
706
- font-weight: 700 !important;
707
- letter-spacing: 0.08em !important;
708
- text-transform: uppercase !important;
709
- padding: 3px var(--space-2) !important;
710
- flex-shrink: 0 !important;
711
- white-space: nowrap !important;
712
- transition: background var(--t-fast) var(--ease-out),
713
- color var(--t-fast) var(--ease-out) !important;
714
- }
715
-
716
- .btn-clear:hover {
717
- background: var(--c-surf-hover) !important;
718
- color: var(--c-text) !important;
719
- }
720
-
721
- /* -- Footer: download button — navy accent --------------------------------- */
722
- .dp-footer {
723
- padding: var(--space-2) var(--space-4) var(--space-3);
724
- flex-shrink: 0;
725
- border-top: 1px solid var(--c-border);
726
- }
727
-
728
- .dp-footer .btn {
729
- width: 100%;
730
- padding: var(--space-2) 0;
731
- background: var(--c-navy) !important;
732
- color: oklch(97% 0.003 265) !important;
733
- border: none;
734
- border-radius: var(--radius-md);
735
- font-size: 11px;
736
- font-family: var(--font-label);
737
- font-weight: 700;
738
- letter-spacing: 0.08em;
739
- text-transform: uppercase;
740
- transition: background var(--t-base) var(--ease-out),
741
- transform var(--t-base) var(--ease-spring),
742
- box-shadow var(--t-base) var(--ease-out);
743
- }
744
-
745
- .dp-footer .btn:hover {
746
- background: var(--c-navy-dim) !important;
747
- transform: translateY(-1px);
748
- box-shadow: var(--depth-2);
749
- }
750
-
751
- /* (.btn-ctrl-sq removed — superseded by .nav-btn in the top nav-bar) */
752
-
753
- /* -- Expanded layer panel for accordion ------------------------------------ */
754
- .layer-ctrl-panel {
755
- max-width: 280px !important;
756
- min-width: 240px !important;
757
- }
758
-
759
- .layer-ctrl-body {
760
- max-height: 480px !important;
761
- padding: 0 0 var(--space-1) !important;
762
- }
763
-
764
- /* -- Accordion groups ------------------------------------------------------ */
765
- .acc-group + .acc-group {
766
- border-top: 1px solid var(--c-border);
767
- }
768
-
769
- .acc-header {
770
- display: flex;
771
- align-items: center;
772
- justify-content: space-between;
773
- padding: 6px var(--space-3);
774
- cursor: pointer;
775
- user-select: none;
776
- transition: background var(--t-fast) var(--ease-out);
777
- }
778
-
779
- .acc-header:hover {
780
- background: var(--c-glass-hover);
781
- }
782
-
783
- .acc-label {
784
- font-family: var(--font-label);
785
- font-size: 9px;
786
- font-weight: 700;
787
- letter-spacing: 0.12em;
788
- text-transform: uppercase;
789
- color: var(--c-text-mid);
790
- }
791
-
792
- .acc-icon {
793
- font-size: 7px;
794
- color: var(--c-text-dim);
795
- }
796
-
797
- .acc-body {
798
- padding-bottom: 4px;
799
- }
800
-
801
- .acc-item-wrap {
802
- border-bottom: 1px solid transparent;
803
- }
804
-
805
- .acc-item {
806
- display: flex;
807
- align-items: center;
808
- justify-content: space-between;
809
- padding: 4px var(--space-3);
810
- gap: var(--space-1);
811
- }
812
-
813
- /* -- iOS-style toggle switch ------------------------------------------------ */
814
- .acc-toggle-label {
815
- display: flex;
816
- align-items: center;
817
- gap: 6px;
818
- cursor: pointer;
819
- flex: 1;
820
- min-width: 0;
821
- }
822
-
823
- .acc-toggle-input {
824
- position: absolute;
825
- opacity: 0;
826
- width: 0;
827
- height: 0;
828
- pointer-events: none;
829
- }
830
-
831
- .acc-toggle-track {
832
- display: inline-flex;
833
- align-items: center;
834
- width: 34px;
835
- height: 18px;
836
- background: var(--c-glass-stroke-strong);
837
- border-radius: 999px;
838
- position: relative;
839
- flex-shrink: 0;
840
- transition: background var(--t-base) var(--ease-spring);
841
- }
842
-
843
- .acc-toggle-thumb {
844
- position: absolute;
845
- left: 2px;
846
- width: 14px;
847
- height: 14px;
848
- background: #fff;
849
- border-radius: 50%;
850
- box-shadow: 0 1px 3px oklch(20% 0.01 250 / 0.3);
851
- transition: left var(--t-base) var(--ease-spring);
852
- }
853
-
854
- .acc-toggle-label:has(.acc-toggle-input:checked) .acc-toggle-track {
855
- background: var(--c-accent);
856
- }
857
-
858
- .acc-toggle-label:has(.acc-toggle-input:checked) .acc-toggle-thumb {
859
- left: 18px;
860
- }
861
-
862
- .acc-toggle-label:focus-within .acc-toggle-track {
863
- box-shadow: 0 0 0 3px oklch(43% 0.12 218 / 0.18);
864
- }
865
-
866
- .acc-toggle-text {
867
- font-size: 11.5px;
868
- color: var(--c-text-mid);
869
- font-family: var(--font-ui);
870
- transition: color var(--t-fast) var(--ease-out);
871
- line-height: 1.4;
872
- overflow: hidden;
873
- text-overflow: ellipsis;
874
- }
875
-
876
- .acc-toggle-label:has(.acc-toggle-input:checked) .acc-toggle-text {
877
- color: var(--c-text);
878
- }
879
-
880
- .acc-info-wrap {
881
- flex-shrink: 0;
882
- cursor: help;
883
- display: inline-flex;
884
- align-items: center;
885
- opacity: 0.7;
886
- transition: opacity var(--t-fast) var(--ease-out);
887
- }
888
-
889
- .acc-info-wrap:hover,
890
- .acc-info-wrap:focus-visible { opacity: 1; outline: none; }
891
-
892
- /* -- Layer legends ---------------------------------------------------------- */
893
- .acc-legend {
894
- display: none;
895
- padding: 2px var(--space-3) 6px calc(var(--space-3) + 34px);
896
- }
897
-
898
- /* Legend visibility driven by JS class toggle (preserves correct display type per shape) */
899
- .acc-legend.legend-visible { display: block; }
900
- .acc-legend-dot.legend-visible { display: flex; }
901
- .acc-legend-line-wrap.legend-visible { display: flex; }
902
- .acc-legend-cats.legend-visible { display: flex; }
903
-
904
- .acc-legend-ramp .acc-legend-bar {
905
- height: 8px;
906
- border-radius: 3px;
907
- margin-bottom: 3px;
908
- }
909
-
910
- .acc-legend-labels {
911
- display: flex;
912
- justify-content: space-between;
913
- font-size: 10px;
914
- color: var(--c-text-mid);
915
- font-family: var(--font-ui);
916
- font-variant-numeric: tabular-nums;
917
- }
918
-
919
- .acc-legend-bound {
920
- font-size: 9px;
921
- font-weight: 600;
922
- text-transform: uppercase;
923
- letter-spacing: 0.06em;
924
- color: var(--c-text-dim);
925
- margin-right: 3px;
926
- }
927
-
928
- .acc-legend-bound.bound-max {
929
- margin-right: 0;
930
- margin-left: 2px;
931
- }
932
-
933
- .acc-legend-cats {
934
- flex-direction: column;
935
- gap: 2px;
936
- }
937
-
938
- .acc-legend-cat {
939
- display: flex;
940
- align-items: center;
941
- gap: 5px;
942
- font-size: 9px;
943
- color: var(--c-text-dim);
944
- font-family: var(--font-label);
945
- }
946
-
947
- .acc-legend-swatch {
948
- width: 9px;
949
- height: 9px;
950
- border-radius: 2px;
951
- flex-shrink: 0;
952
- border: 1px solid rgba(0,0,0,0.08);
953
- }
954
-
955
- .acc-legend-dot {
956
- align-items: center;
957
- gap: 6px;
958
- }
959
-
960
- .acc-legend-circle {
961
- width: 9px;
962
- height: 9px;
963
- border-radius: 50%;
964
- flex-shrink: 0;
965
- border: 1px solid rgba(0,0,0,0.15);
966
- }
967
-
968
- .acc-legend-dot-lbl {
969
- font-size: 9px;
970
- color: var(--c-text-dim);
971
- font-family: var(--font-label);
972
- }
973
-
974
- .acc-legend-line-wrap {
975
- align-items: center;
976
- gap: 6px;
977
- }
978
-
979
- .acc-legend-line-seg {
980
- display: inline-block;
981
- width: 24px;
982
- flex-shrink: 0;
983
- }
984
-
985
- .acc-legend-line-lbl {
986
- font-size: 9px;
987
- color: var(--c-text-dim);
988
- font-family: var(--font-label);
989
- }
990
-
991
- /* Crime sub-type radio chips */
992
- .acc-radios {
993
- display: flex;
994
- flex-wrap: wrap;
995
- gap: 3px;
996
- padding: 2px var(--space-3) 5px calc(var(--space-3) + 34px);
997
- }
998
-
999
- .acc-radio {
1000
- font-family: var(--font-ui);
1001
- font-size: 10.5px;
1002
- font-weight: 500;
1003
- letter-spacing: 0.01em;
1004
- color: var(--c-text-mid);
1005
- background: oklch(94% 0.004 250);
1006
- border: none;
1007
- border-radius: var(--radius-pill);
1008
- padding: 4px 9px;
1009
- cursor: pointer;
1010
- transition: background var(--t-fast) var(--ease-out),
1011
- color var(--t-fast) var(--ease-out),
1012
- transform var(--t-base) var(--ease-spring),
1013
- box-shadow var(--t-base) var(--ease-out);
1014
- line-height: 1.4;
1015
- }
1016
-
1017
- .acc-radio:hover {
1018
- background: oklch(90% 0.005 250);
1019
- color: var(--c-text);
1020
- transform: translateY(-0.5px);
1021
- }
1022
-
1023
- .acc-radio:focus-visible {
1024
- outline: 2px solid var(--c-focus);
1025
- outline-offset: 2px;
1026
- }
1027
-
1028
- .acc-radio.active {
1029
- background: var(--c-accent);
1030
- color: #fff;
1031
- box-shadow: var(--depth-1);
1032
- }
1033
-
1034
- /* Static ENVIPE sub-labels */
1035
- .acc-subs {
1036
- padding: 0 var(--space-3) 3px calc(var(--space-3) + 17px);
1037
- }
1038
-
1039
- .acc-sub {
1040
- font-size: 9px;
1041
- color: var(--c-text-dim);
1042
- font-family: var(--font-body);
1043
- line-height: 1.7;
1044
- }
1045
-
1046
- /* Disabled / coming-soon items */
1047
- .acc-disabled {
1048
- opacity: 0.45;
1049
- pointer-events: none;
1050
- }
1051
-
1052
- .acc-coming-tag {
1053
- font-family: var(--font-label);
1054
- font-size: 8px;
1055
- font-weight: 700;
1056
- letter-spacing: 0.06em;
1057
- color: var(--c-teal);
1058
- background: var(--c-teal-pale);
1059
- border-radius: 2px;
1060
- padding: 1px 4px;
1061
- flex-shrink: 0;
1062
- }
1063
-
1064
- /* -- Grid toggle panel (drops down from nav-bar trigger) ------------------- */
1065
- .grid-btn-wrap {
1066
- position: relative;
1067
- display: inline-flex;
1068
- align-items: center;
1069
- }
1070
-
1071
- .grid-panel {
1072
- position: absolute;
1073
- top: calc(100% + 6px);
1074
- right: 0;
1075
- left: auto;
1076
- background: var(--c-glass-2);
1077
- backdrop-filter: var(--blur-glass);
1078
- -webkit-backdrop-filter: var(--blur-glass);
1079
- border: 1px solid var(--c-glass-stroke);
1080
- border-radius: var(--radius-md);
1081
- padding: 4px;
1082
- display: flex;
1083
- flex-direction: row;
1084
- gap: 2px;
1085
- box-shadow: var(--depth-3);
1086
- z-index: 1100;
1087
- white-space: nowrap;
1088
- opacity: 0;
1089
- transform: translateY(-4px) scale(0.97);
1090
- transform-origin: top right;
1091
- transition: opacity var(--t-base) var(--ease-spring),
1092
- transform var(--t-base) var(--ease-spring);
1093
- pointer-events: none;
1094
- }
1095
-
1096
- .grid-panel.open {
1097
- opacity: 1;
1098
- transform: translateY(0) scale(1);
1099
- pointer-events: auto;
1100
- }
1101
-
1102
- .grid-nivel-btn {
1103
- width: 34px;
1104
- height: 28px;
1105
- background: none;
1106
- border: none;
1107
- border-radius: var(--radius-sm);
1108
- font-family: var(--font-ui);
1109
- font-size: 11px;
1110
- font-weight: 600;
1111
- letter-spacing: 0.04em;
1112
- color: var(--c-text-mid);
1113
- cursor: pointer;
1114
- transition: background var(--t-fast) var(--ease-out),
1115
- color var(--t-fast) var(--ease-out),
1116
- transform var(--t-base) var(--ease-spring);
1117
- position: relative;
1118
- }
1119
-
1120
- .grid-nivel-btn:not(.soon):hover {
1121
- background: var(--c-glass-hover);
1122
- color: var(--c-text);
1123
- transform: translateY(-0.5px);
1124
- }
1125
-
1126
- .grid-nivel-btn:focus-visible {
1127
- outline: 2px solid var(--c-focus);
1128
- outline-offset: 2px;
1129
- }
1130
-
1131
- .grid-nivel-btn.active {
1132
- background: var(--c-accent);
1133
- color: #fff;
1134
- box-shadow: var(--depth-1);
1135
- }
1136
-
1137
- /* N7/N8 coming-soon buttons */
1138
- .grid-nivel-btn.soon {
1139
- opacity: 0.4;
1140
- pointer-events: none;
1141
- }
1142
-
1143
- .grid-nivel-btn.soon::after {
1144
- content: 'soon';
1145
- position: absolute;
1146
- top: -5px;
1147
- right: -3px;
1148
- font-size: 6px;
1149
- font-weight: 700;
1150
- letter-spacing: 0;
1151
- color: var(--c-teal);
1152
- background: var(--c-teal-pale);
1153
- border-radius: 2px;
1154
- padding: 1px 2px;
1155
- line-height: 1;
1156
- }
1157
-
1158
- /* -- JS-positioned tooltip (inverted glass) -------------------------------- */
1159
- .depth-tooltip {
1160
- position: fixed;
1161
- background: oklch(15% 0.012 250 / 0.92);
1162
- backdrop-filter: blur(12px) saturate(140%);
1163
- -webkit-backdrop-filter: blur(12px) saturate(140%);
1164
- color: oklch(98% 0.003 250);
1165
- font-size: 11px;
1166
- font-family: var(--font-ui);
1167
- font-weight: 400;
1168
- line-height: 1.5;
1169
- padding: 8px 12px;
1170
- border-radius: var(--radius-md);
1171
- border: 1px solid oklch(100% 0 0 / 0.08);
1172
- max-width: 260px;
1173
- z-index: 99999;
1174
- pointer-events: none;
1175
- transform: translateY(-50%);
1176
- box-shadow: var(--depth-3);
1177
- word-break: break-word;
1178
- display: none;
1179
- }
1180
-
1181
- /* -- Hide MapLibre Draw buttons not needed for area selection --------------- */
1182
- /* mapbox-gl-draw_polygon IS the freehand/lasso — keep it visible */
1183
- /* trash is replaced by our own btn_delete in draw-extra-ctrl */
1184
- button.mapbox-gl-draw_line_string,
1185
- button.mapbox-gl-draw_point,
1186
- button.mapbox-gl-draw_trash,
1187
- button.mapbox-gl-draw_combine,
1188
- button.mapbox-gl-draw_uncombine { display: none !important; }
1189
-
1190
- /* (draw-extra-ctrl position now set in the overrides section below) */
1191
-
1192
- /* (Viewport coords moved into .nav-coords inside the top nav-bar) */
1193
-
1194
- /* Draw measurement display stays at top-left of the map */
1195
- .maplibregl-ctrl-bottom-left {
1196
- top: 46px;
1197
- bottom: auto;
1198
- }
1199
-
1200
- /* -- State filter picker panel (drops down from nav-bar trigger) ----------- */
1201
- .state-picker-panel {
1202
- position: absolute;
1203
- top: calc(100% + 6px);
1204
- right: 0;
1205
- left: auto;
1206
- z-index: 1100;
1207
- background: var(--c-glass-2);
1208
- backdrop-filter: var(--blur-glass);
1209
- -webkit-backdrop-filter: var(--blur-glass);
1210
- border: 1px solid var(--c-glass-stroke);
1211
- border-radius: var(--radius-md);
1212
- padding: var(--space-2) var(--space-3);
1213
- box-shadow: var(--depth-3);
1214
- min-width: 220px;
1215
- display: flex;
1216
- flex-direction: column;
1217
- gap: var(--space-2);
1218
- }
1219
-
1220
- .state-picker-header {
1221
- display: flex;
1222
- align-items: center;
1223
- justify-content: space-between;
1224
- font-family: var(--font-label);
1225
- font-size: 9px;
1226
- font-weight: 700;
1227
- letter-spacing: 0.08em;
1228
- text-transform: uppercase;
1229
- color: var(--c-text-dim);
1230
- }
1231
-
1232
- .state-picker-close {
1233
- background: none;
1234
- border: none;
1235
- cursor: pointer;
1236
- color: var(--c-text-dim);
1237
- font-size: 14px;
1238
- line-height: 1;
1239
- padding: 0;
1240
- }
1241
-
1242
- .state-picker-panel .selectize-control,
1243
- .state-picker-panel select {
1244
- font-size: 11px;
1245
- width: 100%;
1246
- }
1247
-
1248
- .state-picker-actions {
1249
- display: flex;
1250
- gap: var(--space-1);
1251
- }
1252
-
1253
- /* -- Temporal analysis card (migrants, bottom-center of map) ---------------- */
1254
- .temporal-card {
1255
- position: absolute;
1256
- bottom: var(--space-3);
1257
- left: 50%;
1258
- transform: translateX(-50%);
1259
- width: 270px;
1260
- display: none;
1261
- background: var(--c-surf);
1262
- border: 1px solid var(--c-border);
1263
- border-radius: var(--radius-md);
1264
- padding: 5px 10px 4px;
1265
- z-index: 100;
1266
- box-shadow: 0 2px 8px oklch(20% 0.01 265 / 0.14);
1267
- }
1268
-
1269
- .temporal-card-header {
1270
- display: flex;
1271
- align-items: center;
1272
- gap: 4px;
1273
- font-size: 8px;
1274
- font-family: var(--font-label);
1275
- font-weight: 700;
1276
- letter-spacing: 0.08em;
1277
- text-transform: uppercase;
1278
- color: var(--c-text-dim);
1279
- margin-bottom: 1px;
1280
- }
1281
-
1282
- /* =========================================================================
1283
- TOP NAV-BAR — Spatial UI horizontal control strip
1284
- ========================================================================= */
1285
-
1286
- .bslib-page-fill { display: flex !important; flex-direction: column !important; }
1287
-
1288
- .depth-nav {
1289
- flex-shrink: 0;
1290
- height: 52px;
1291
- width: 100%;
1292
- display: flex;
1293
- align-items: center;
1294
- gap: var(--space-3);
1295
- padding: 0 var(--space-3);
1296
- background: var(--c-glass-1);
1297
- backdrop-filter: var(--blur-glass);
1298
- -webkit-backdrop-filter: var(--blur-glass);
1299
- border-bottom: 1px solid var(--c-glass-stroke);
1300
- box-shadow: var(--depth-1);
1301
- z-index: 1000;
1302
- position: relative;
1303
- font-family: var(--font-ui);
1304
- }
1305
-
1306
- /* ---- Brand ---- */
1307
- .nav-brand {
1308
- font-size: 13px;
1309
- font-weight: 700;
1310
- letter-spacing: 0.16em;
1311
- text-transform: uppercase;
1312
- color: var(--c-text);
1313
- padding: 0 var(--space-2);
1314
- white-space: nowrap;
1315
- display: inline-flex;
1316
- align-items: center;
1317
- }
1318
-
1319
- .nav-brand-dot {
1320
- display: inline-block;
1321
- width: 6px;
1322
- height: 6px;
1323
- border-radius: 50%;
1324
- background: var(--c-accent);
1325
- margin-right: 8px;
1326
- }
1327
-
1328
- /* ---- Search input + popover ---- */
1329
- .nav-search {
1330
- position: relative;
1331
- flex: 0 1 380px;
1332
- min-width: 240px;
1333
- height: 36px;
1334
- }
1335
-
1336
- .nav-search-icon {
1337
- position: absolute;
1338
- left: 10px;
1339
- top: 50%;
1340
- transform: translateY(-50%);
1341
- color: var(--c-text-mid);
1342
- pointer-events: none;
1343
- display: inline-flex;
1344
- }
1345
-
1346
- .nav-search-input {
1347
- width: 100%;
1348
- height: 100%;
1349
- padding: 0 32px 0 34px;
1350
- font-family: var(--font-ui);
1351
- font-size: 13px;
1352
- color: var(--c-text);
1353
- background: oklch(100% 0 0 / 0.6);
1354
- border: 1px solid var(--c-glass-stroke);
1355
- border-radius: var(--radius-md);
1356
- transition: background var(--t-fast) var(--ease-out),
1357
- border-color var(--t-fast) var(--ease-out),
1358
- box-shadow var(--t-base) var(--ease-spring);
1359
- outline: none;
1360
- }
1361
-
1362
- .nav-search-input::placeholder { color: var(--c-text-dim); }
1363
-
1364
- .nav-search-input:hover {
1365
- background: oklch(100% 0 0 / 0.78);
1366
- border-color: var(--c-glass-stroke-strong);
1367
- }
1368
-
1369
- .nav-search-input:focus-visible {
1370
- border-color: var(--c-accent);
1371
- background: oklch(100% 0 0 / 0.95);
1372
- box-shadow: 0 0 0 3px oklch(43% 0.12 218 / 0.18);
1373
- }
1374
-
1375
- .nav-search-clear {
1376
- position: absolute;
1377
- right: 6px;
1378
- top: 50%;
1379
- transform: translateY(-50%);
1380
- width: 24px;
1381
- height: 24px;
1382
- display: none;
1383
- align-items: center;
1384
- justify-content: center;
1385
- border: none;
1386
- background: transparent;
1387
- border-radius: var(--radius-sm);
1388
- color: var(--c-text-mid);
1389
- cursor: pointer;
1390
- transition: background var(--t-fast) var(--ease-out),
1391
- color var(--t-fast) var(--ease-out);
1392
- }
1393
-
1394
- .nav-search-clear:hover {
1395
- background: var(--c-glass-hover);
1396
- color: var(--c-text);
1397
- }
1398
-
1399
- .nav-search.has-value .nav-search-clear { display: inline-flex; }
1400
-
1401
- .nav-search-results {
1402
- position: absolute;
1403
- top: calc(100% + 6px);
1404
- left: 0;
1405
- right: 0;
1406
- background: var(--c-glass-2);
1407
- backdrop-filter: var(--blur-glass);
1408
- -webkit-backdrop-filter: var(--blur-glass);
1409
- border: 1px solid var(--c-glass-stroke);
1410
- border-radius: var(--radius-md);
1411
- box-shadow: var(--depth-3);
1412
- max-height: 320px;
1413
- overflow-y: auto;
1414
- z-index: 1100;
1415
- display: none;
1416
- animation: nav-pop-in var(--t-base) var(--ease-spring);
1417
- }
1418
-
1419
- .nav-search.is-open .nav-search-results { display: block; }
1420
-
1421
- .nav-search-result {
1422
- display: flex;
1423
- align-items: center;
1424
- gap: var(--space-2);
1425
- padding: 8px 12px;
1426
- font-size: 12px;
1427
- color: var(--c-text);
1428
- cursor: pointer;
1429
- transition: background var(--t-fast) var(--ease-out),
1430
- color var(--t-fast) var(--ease-out);
1431
- }
1432
-
1433
- .nav-search-result:hover,
1434
- .nav-search-result[aria-selected="true"] {
1435
- background: var(--c-accent-soft);
1436
- color: var(--c-accent-ink);
1437
- }
1438
-
1439
- .nav-search-result-meta {
1440
- margin-left: auto;
1441
- font-size: 10.5px;
1442
- color: var(--c-text-mid);
1443
- font-variant-numeric: tabular-nums;
1444
- white-space: nowrap;
1445
- }
1446
-
1447
- .nav-search-empty,
1448
- .nav-search-loading {
1449
- padding: 12px;
1450
- font-size: 12px;
1451
- color: var(--c-text-mid);
1452
- text-align: center;
1453
- }
1454
-
1455
- @keyframes nav-pop-in {
1456
- from { opacity: 0; transform: translateY(-4px) scale(0.98); }
1457
- to { opacity: 1; transform: translateY(0) scale(1); }
1458
- }
1459
-
1460
- /* ---- Primary action (Overview) ---- */
1461
- .nav-primary {
1462
- display: inline-flex;
1463
- align-items: center;
1464
- gap: 6px;
1465
- height: 36px;
1466
- padding: 0 14px;
1467
- font-family: var(--font-ui);
1468
- font-size: 12px;
1469
- font-weight: 600;
1470
- letter-spacing: 0.02em;
1471
- color: #fff;
1472
- background: var(--c-accent);
1473
- border: 1px solid var(--c-accent);
1474
- border-radius: var(--radius-md);
1475
- box-shadow: var(--depth-1);
1476
- cursor: pointer;
1477
- transition: transform var(--t-base) var(--ease-spring),
1478
- box-shadow var(--t-base) var(--ease-out),
1479
- background var(--t-fast) var(--ease-out);
1480
- white-space: nowrap;
1481
- }
1482
-
1483
- .nav-primary:hover {
1484
- background: oklch(38% 0.12 218);
1485
- transform: translateY(-1px);
1486
- box-shadow: var(--depth-2);
1487
- color: #fff;
1488
- }
1489
-
1490
- .nav-primary:active {
1491
- transform: translateY(0);
1492
- }
1493
-
1494
- .nav-primary:focus-visible {
1495
- outline: 2px solid var(--c-focus);
1496
- outline-offset: 2px;
1497
- }
1498
-
1499
- /* ---- Tool groups + dividers ---- */
1500
- .nav-divider {
1501
- width: 1px;
1502
- height: 22px;
1503
- background: var(--c-glass-stroke);
1504
- flex-shrink: 0;
1505
- }
1506
-
1507
- .nav-group {
1508
- display: flex;
1509
- align-items: center;
1510
- gap: 4px;
1511
- }
1512
-
1513
- /* Single icon-button token-source for the nav-bar */
1514
- .nav-btn {
1515
- width: 36px;
1516
- height: 36px;
1517
- display: inline-flex;
1518
- align-items: center;
1519
- justify-content: center;
1520
- background: transparent;
1521
- color: var(--c-text-mid);
1522
- border: 1px solid transparent;
1523
- border-radius: var(--radius-md);
1524
- cursor: pointer;
1525
- padding: 0;
1526
- transition: background var(--t-fast) var(--ease-out),
1527
- color var(--t-fast) var(--ease-out),
1528
- transform var(--t-base) var(--ease-spring),
1529
- box-shadow var(--t-base) var(--ease-out),
1530
- border-color var(--t-fast) var(--ease-out);
1531
- }
1532
-
1533
- .nav-btn:hover {
1534
- background: var(--c-glass-hover);
1535
- color: var(--c-text);
1536
- transform: translateY(-0.5px);
1537
- box-shadow: var(--depth-1);
1538
- }
1539
-
1540
- .nav-btn:active { transform: translateY(0) scale(0.97); }
1541
-
1542
- .nav-btn:focus-visible {
1543
- outline: 2px solid var(--c-focus);
1544
- outline-offset: 2px;
1545
- }
1546
-
1547
- .nav-btn.active {
1548
- background: var(--c-accent-soft);
1549
- color: var(--c-accent-ink);
1550
- border-color: var(--c-accent);
1551
- }
1552
-
1553
- /* Native mapgl draw buttons relocated into the nav inherit .nav-btn sizing.
1554
- Their built-in background icons need to be re-centered. */
1555
- .depth-nav .mapbox-gl-draw_polygon,
1556
- .depth-nav .mapbox-gl-draw_rectangle,
1557
- .depth-nav .mapbox-gl-draw_radius {
1558
- background-color: transparent !important;
1559
- background-position: center center !important;
1560
- background-repeat: no-repeat !important;
1561
- border: 1px solid transparent !important;
1562
- box-shadow: none !important;
1563
- }
1564
-
1565
- .depth-nav .mapbox-gl-draw_polygon.active,
1566
- .depth-nav .mapbox-gl-draw_rectangle.active,
1567
- .depth-nav .mapbox-gl-draw_radius.active {
1568
- background-color: var(--c-accent-soft) !important;
1569
- border-color: var(--c-accent) !important;
1570
- }
1571
-
1572
- /* ---- Coords pill ---- */
1573
- .nav-coords {
1574
- display: inline-flex;
1575
- align-items: center;
1576
- gap: 10px;
1577
- height: 32px;
1578
- padding: 0 12px;
1579
- background: oklch(100% 0 0 / 0.5);
1580
- border: 1px solid var(--c-glass-stroke);
1581
- border-radius: var(--radius-pill);
1582
- font-family: var(--font-mono);
1583
- font-variant-numeric: tabular-nums;
1584
- font-size: 11px;
1585
- color: var(--c-text);
1586
- white-space: nowrap;
1587
- }
1588
-
1589
- .nav-coords-item {
1590
- display: inline-flex;
1591
- align-items: baseline;
1592
- gap: 5px;
1593
- }
1594
-
1595
- .nav-coords-key {
1596
- font-family: var(--font-ui);
1597
- font-size: 9.5px;
1598
- font-weight: 600;
1599
- letter-spacing: 0.08em;
1600
- text-transform: uppercase;
1601
- color: var(--c-text-mid);
1602
- }
1603
-
1604
- .nav-coords-val {
1605
- min-width: 44px;
1606
- text-align: right;
1607
- }
1608
-
1609
- .nav-coords-sep {
1610
- width: 1px;
1611
- height: 12px;
1612
- background: var(--c-glass-stroke);
1613
- }
1614
-
1615
- /* ---- Responsive collapse ---- */
1616
- @media (max-width: 1280px) {
1617
- .nav-brand { display: none; }
1618
- .nav-search { flex-basis: 280px; }
1619
- }
1620
-
1621
- @media (max-width: 1024px) {
1622
- .nav-coords { display: none; }
1623
- .nav-primary-label { display: none; }
1624
- .nav-primary { padding: 0; width: 36px; justify-content: center; }
1625
- .nav-divider:nth-of-type(n+3) { display: none; }
1626
- }