File size: 5,663 Bytes
1ed908c
 
 
 
 
 
 
 
 
c3b3b4d
 
1ed908c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c3b3b4d
1ed908c
 
 
 
 
 
 
c3b3b4d
 
1ed908c
 
 
 
 
 
 
 
 
 
 
 
c3b3b4d
1ed908c
 
 
 
 
 
 
 
 
 
 
 
 
c3b3b4d
1ed908c
 
 
 
 
c3b3b4d
 
1ed908c
32e860b
 
 
 
 
 
 
 
 
 
 
1ed908c
 
 
 
 
 
c3b3b4d
1ed908c
 
 
 
 
 
 
 
 
 
 
 
 
32e860b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
:root{
  --bg: #ffffff;
  --surface: #ffffff;
  --card: #f6f8f7;
  --accent: #247c53; /* main green */
  --accent-2: #2fb36a; /* lighter green */
  --text: #072021; /* dark text on white */
  --muted: #5f6b67;
  --danger: #ff4d4f;
}

*{box-sizing:border-box}
html,body,#root{height:100%;margin:0;background:var(--bg);color:var(--text);font-family:Inter, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial}

.app-root{display:flex;flex-direction:column;min-height:100vh;background:linear-gradient(180deg, var(--bg) 0%, #fbfdfb 100%);}

.app-header{display:flex;align-items:center;justify-content:space-between;padding:18px 28px;background:var(--surface);border-bottom:1px solid rgba(6,21,13,0.06)}
.brand{display:flex;align-items:center;gap:14px}
.brand-logo{width:150px;}
.brand-title{display:inline-flex;align-items:center;gap:8px;font-size:36px;margin:0}
.theme-dark .brand-title{color:#ffffff}
.theme-light .brand-title{color:#072021}
.brand-title img{filter:grayscale(0);}
.brand-text{display:flex;flex-direction:column;margin-left:100;}
.demo-title{margin:0;font-size:20px;font-weight:700;color:var(--text)}
.theme-dark .demo-title{color:#ffffff}
.theme-light .demo-title{color:var(--text)}
.tagline{margin:6px 0 0;color:var(--muted);font-size:13px}

.status{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:13px}
.ready-dot{width:10px;height:10px;border-radius:50%;background:#e6f3ed}
.ready-dot.on{background:var(--accent)}

.app-main{display:flex;flex:1;gap:20px;padding:20px}
.map-area{flex:1;border-radius:12px;overflow:hidden;box-shadow:0 6px 24px rgba(10,20,18,0.06);background:#f8fbfa;border:1px solid rgba(6,21,13,0.04)}
.map-container{width:100%;height:100%;min-height:420px}

.control-panel{width:360px;background:var(--card);border-radius:12px;padding:18px;border:1px solid rgba(6,21,13,0.04);display:flex;flex-direction:column;gap:12px;max-height:calc(100vh - 120px);overflow:hidden}

/* Ensure the geojson section takes remaining vertical space */
.geojson-section{margin-top:14px;display:flex;flex-direction:column;flex:1;min-height:0}
.geojson-header{display:flex;align-items:center;justify-content:space-between;gap:8px}
.geojson-actions{display:flex;gap:8px}
.geojson-box{
  /* allow box to expand to fill remaining space */
  flex:1;min-height:0;overflow:auto;background:#ffffff;padding:12px;border-radius:8px;border:1px solid rgba(6,21,13,0.04);font-size:12px;color:var(--text);white-space:pre-wrap;word-break:break-word;margin-top:8px
}

.controls-row{display:flex;gap:12px;margin-top:12px}
.btn{
  background:linear-gradient(90deg,var(--accent) 0%, var(--accent-2) 100%);
  color:#ffffff;
  border:0;
  padding:8px 14px;
  border-radius:10px;
  font-weight:600;
  cursor:pointer;
  box-shadow:0 8px 20px rgba(36,124,83,0.12);
  transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease;
  display:inline-flex;align-items:center;gap:8px;
}
.btn:hover{transform:translateY(-2px)}
.btn:disabled{opacity:.6;cursor:not-allowed;transform:none}
.btn.secondary{
  background:transparent;
  color:var(--accent);
  border:1px solid rgba(36,124,83,0.12);
  box-shadow:none;
}
.btn.small{padding:6px 10px;font-size:13px;border-radius:8px;background:transparent;color:var(--muted);border:1px solid rgba(6,21,13,0.04)}

.stats{display:flex;align-items:center;gap:12px;margin-top:12px}
.stats strong{font-size:32px;color:var(--accent-2)}
.stats span{color:var(--muted);font-size:13px}

.geojson-section{margin-top:14px;display:flex;flex-direction:column;flex:1;min-height:0}
.geojson-header{display:flex;align-items:center;justify-content:space-between;gap:8px}
.geojson-actions{display:flex;gap:8px}
.geojson-box{
  flex:1;min-height:0;overflow:auto;background:#ffffff;padding:12px;border-radius:8px;border:1px solid rgba(6,21,13,0.04);font-size:12px;color:var(--text);white-space:pre-wrap;word-break:break-word;margin-top:8px
}

.footer-note{margin-top:auto;color:var(--muted);font-size:13px;text-align:center}
.footer-link{display:inline-flex;align-items:center;gap:8px;color:var(--muted);text-decoration:none}
.footer-logo{width:20px;height:20px;opacity:0.9}
.footer-link span{font-size:13px}

/* Hide only the MapLibre GL Draw toolbar controls (keep draw features/handles visible) */
.mapbox-gl-draw .mapbox-gl-draw_ctrl,
.mapbox-gl-draw .mapbox-gl-draw_ctrl-group,
.mapbox-gl-draw .mapbox-gl-draw_ctrl-top-left,
.mapbox-gl-draw .mapbox-gl-draw_ctrl-bottom-left,
.mapboxgl-ctrl.mapboxgl-ctrl-group,
.mapbox-gl-draw_ctrl-icon { display: none !important; pointer-events: none !important; }

/* responsive */
@media (max-width: 900px){
  .app-main{flex-direction:column}
  .control-panel{width:100%;max-height:none}
  .map-container{min-height:320px}
}

/* Theme dark overrides */
.theme-dark{background:linear-gradient(180deg,#071022 0%, #0f1724 100%);color:#e6eef3}
.theme-dark .app-header{background:linear-gradient(90deg, rgba(255,255,255,0.01), rgba(255,255,255,0.005));border-bottom:1px solid rgba(255,255,255,0.03)}
.theme-dark .brand-logo{box-shadow:0 6px 18px rgba(0,0,0,0.6)}
.theme-dark .app-main{gap:20px;padding:20px}
.theme-dark .map-area{background:#071022;border:1px solid rgba(255,255,255,0.03);box-shadow:0 6px 30px rgba(2,6,23,0.6)}
.theme-dark .control-panel{background:rgba(3,6,12,0.45);border:1px solid rgba(255,255,255,0.03);color:#e6eef3}
.theme-dark .geojson-box{background:#021017;color:#cfeff6;border:1px solid rgba(255,255,255,0.03)}
.theme-dark .btn.small{background:transparent;color:#cfeff6;border:1px solid rgba(255,255,255,0.04)}

/* keep buttons accessible in dark */
.theme-dark .btn{box-shadow:0 8px 20px rgba(0,0,0,0.6)}
.theme-dark .footer-link{color:#cfeff6}