robertocarlosmedina commited on
Commit
ce4384d
·
1 Parent(s): ba82f4a

feat: add first version of the app

Browse files
Files changed (5) hide show
  1. README.md +11 -0
  2. app.py +149 -0
  3. requirements.txt +8 -0
  4. src/cape-verde.html +230 -0
  5. src/cape-verde.svg +100 -0
README.md CHANGED
@@ -11,3 +11,14 @@ short_description: Variant classifier (Barlavento, Sotavento) for Cape Verde
11
  ---
12
 
13
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
11
  ---
12
 
13
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
14
+
15
+ Clear the cached model
16
+
17
+ Hugging Face caches models in ~/.cache/huggingface/transformers (or ~/.cache/huggingface/hub). Delete the folder for your model:
18
+
19
+ rm -rf ~/.cache/huggingface/transformers/your-model-name
20
+
21
+ or for a full cache refresh:
22
+
23
+ rm -rf ~/.cache/huggingface/transformers/*
24
+ rm -rf ~/.cache/huggingface/hub/*
app.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import torch
3
+ import threading
4
+ import gradio as gr
5
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
6
+
7
+ # Hugging Face token for private models (if private)
8
+ HF_TOKEN = os.environ.get("HF_TOKEN")
9
+
10
+ # Models dictionary
11
+ MODELS = {
12
+ "kriolSet-v2-BART-variant-classifier": "robertocarlosmedina/kriolSet-v2-BART-variant-classifier",
13
+ "kriolSet-v2-BERT-variant-classifier": "robertocarlosmedina/kriolSet-v2-BERT-variant-classifier",
14
+ "kriolSet-v2-DistilBERT-variant-classifier": "robertocarlosmedina/kriolSet-v2-DistilBERT-variant-classifier",
15
+ "kriolSet-v2-XML-RoBERTa-variant-classifier": "robertocarlosmedina/kriolSet-v2-XML-RoBERTa-variant-classifier",
16
+ }
17
+
18
+ css = """
19
+ .gradio-container {
20
+ max-width: 1164px !important; /* limit wide screens */
21
+ margin: auto !important; /* center */
22
+ width: 100% !important; /* allow fluid scaling */
23
+ }
24
+ """
25
+
26
+ loaded_models = {} # cache: tokenizer + model + device
27
+
28
+ # Preload model in background
29
+ def preload_models():
30
+ for model_name, model_id in MODELS.items():
31
+ if model_id not in loaded_models:
32
+ tokenizer = AutoTokenizer.from_pretrained(
33
+ model_id, use_auth_token=HF_TOKEN)
34
+ model = AutoModelForSequenceClassification.from_pretrained(
35
+ model_id, use_auth_token=HF_TOKEN) #force_download=True,
36
+ device = "cuda" if torch.cuda.is_available() else "cpu"
37
+ model.to(device)
38
+ loaded_models[model_id] = (tokenizer, model, device)
39
+ print(f"Preloaded {model_name} -> {model_id}")
40
+
41
+ threading.Thread(target=preload_models, daemon=True).start()
42
+
43
+ # Classification function
44
+ def classify_variant(model_name, text):
45
+ if not text.strip():
46
+ return {}
47
+
48
+ model_id = MODELS[model_name]
49
+ tokenizer, model, device = loaded_models[model_id]
50
+
51
+ inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=256).to(device)
52
+
53
+ with torch.no_grad():
54
+ outputs = model(**inputs)
55
+ probs = torch.nn.functional.softmax(outputs.logits, dim=-1)[0]
56
+
57
+ label_map = {0: "Barlavento", 1: "Sotavento"}
58
+ return {label_map[i]: float(probs[i]) for i in range(len(probs))}
59
+
60
+ # Example texts
61
+ examples = [
62
+ ["Nha fidju ta studa na Mindelo."],
63
+ ["Nha casa sta na Praia."],
64
+ ["Kume bu txoma?"],
65
+ ["Mi sta na Santiago."]
66
+ ]
67
+
68
+ html_content = ""
69
+ js_content = ""
70
+
71
+ with open("src/cape-verde.html", "r", encoding="utf-8") as f:
72
+ html_full = f.read()
73
+
74
+ # Separate JS from HTML if your script is inline
75
+ import re
76
+ js_matches = re.findall(r"<script>(.*?)</script>", html_full, re.DOTALL)
77
+ for js in js_matches:
78
+ js_content += js + "\n"
79
+
80
+ html_content = re.sub(r"<script>.*?</script>", "", html_full, flags=re.DOTALL)
81
+
82
+ # Gradio UI
83
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="orange", neutral_hue="gray"), css=css) as demo:
84
+ gr.Markdown("<h2>Cape Verdean Creole Variant Classifier</h2>")
85
+ gr.Markdown("""<p>These models were trained on a subset of KriolSet V2 containing 12,000 sentences
86
+ (6,000 from Sotavento and 6,000 from Barlavento) to perform classification
87
+ between the two variants.</p>""")
88
+ gr.Markdown("""<p>We invite you to try it out: simply choose a model,
89
+ enter a Cape Verdean Creole sentence or choose one from the examples, and click Classify.</p>""")
90
+
91
+ with gr.Row():
92
+ with gr.Column(scale=1):
93
+ model_select = gr.Dropdown(
94
+ list(MODELS.keys()), label="Choose Model", value=list(MODELS.keys())[0])
95
+
96
+ text_input = gr.Textbox(label="Input Text", placeholder="Enter a sentence...")
97
+ classify_btn = gr.Button("Classify")
98
+ output_label = gr.Label(label="Predicted Variant")
99
+
100
+ example_comp = gr.Examples(
101
+ examples=examples,
102
+ inputs=[text_input],
103
+ label="Example Sentences"
104
+ )
105
+
106
+ with gr.Column(scale=1):
107
+ html_embed = gr.HTML(
108
+ f"""
109
+ <div style="
110
+ height:390px;
111
+ overflow: auto;
112
+ background-color: #1f2a38;
113
+ border-radius: 4px;
114
+ border: 1px solid #374151;
115
+ margin-top: -10px;
116
+ margin-bottom: -10px;
117
+ ">
118
+ {html_content}
119
+ </div>
120
+ """
121
+ )
122
+ gr.HTML("""
123
+ <div style="
124
+ height: auto;
125
+ overflow: auto;
126
+ background-color: #1f2a38;
127
+ border-radius: 4px;
128
+ border: 1px solid #374151;
129
+ padding: 10px;
130
+ display: flex; align-items: center; gap: 2rem;
131
+ ">
132
+ <div style="display: flex; align-items: center; gap: 6px;">
133
+ <div style="width: 10px; height: 10px; border-radius: 50%; background-color: #4caf50;"></div>
134
+ <span style="color: #4caf50;">Barlavento islands</span>
135
+ </div>
136
+ <div style="display: flex; align-items: center; gap: 6px;">
137
+ <div style="width: 10px; height: 10px; border-radius: 50%; background-color: #2196f3;"></div>
138
+ <span style="color: #2196f3;">Sotavento islands</span>
139
+ </div>
140
+ """)
141
+
142
+ classify_btn.click(
143
+ fn=classify_variant,
144
+ inputs=[model_select, text_input],
145
+ outputs=output_label
146
+ )
147
+ gr.HTML(f"<script>{js_content}</script>", render=True)
148
+
149
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ gradio>=3.44,<3.50
2
+ transformers
3
+ torch
4
+ tiktoken
5
+ protobuf
6
+ sentencepiece
7
+ matplotlib
8
+ wordcloud
src/cape-verde.html ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Cape Verde Map Tooltip</title>
7
+ <style>
8
+ .map-svg {
9
+ width: auto;
10
+ height: auto;
11
+ margin: 0 auto;
12
+ padding: 20px;
13
+ }
14
+ .tooltip {
15
+ position: absolute;
16
+ background-color: rgba(0, 0, 0, 0.8);
17
+ color: #fff;
18
+ padding: 5px 10px;
19
+ border-radius: 5px;
20
+ pointer-events: none;
21
+ opacity: 0;
22
+ transition: opacity 0.2s;
23
+ font-size: 14px;
24
+ }
25
+ .island {
26
+ stroke: #fff;
27
+ stroke-width: 1;
28
+ cursor: pointer;
29
+ transition: fill 0.2s;
30
+ }
31
+ .barlavento {
32
+ fill: #4caf50;
33
+ }
34
+ .sotavento {
35
+ fill: #2196f3;
36
+ }
37
+ .island:hover {
38
+ opacity: 0.5;
39
+ }
40
+ </style>
41
+ </head>
42
+ <body>
43
+ <div class="tooltip" id="tooltip"></div>
44
+ <svg
45
+ class="map-svg"
46
+ xmlns:mapsvg="http://mapsvg.com"
47
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
48
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
49
+ xmlns:svg="http://www.w3.org/2000/svg"
50
+ xmlns="http://www.w3.org/2000/svg"
51
+ mapsvg:geoViewBox="-25.361959 17.205510 -22.664740 14.801614"
52
+ width="350"
53
+ height="330"
54
+ >
55
+ <path
56
+ class="island sotavento"
57
+ transform="scale(0.4, 0.4)"
58
+ d="m 216.68917,759.77285 0.71,1 -1.06,0.82 0.27,0.46 1.06,-0.46 0.44,0.73 1.42,0.18 0.44,0.55 -0.97,0.46 -0.27,0.82 -0.97,-0.18 -0.18,0.73 0.89,0.27 -0.35,0.64 0.18,2.73 0.89,0.09 0.18,1.18 0.71,0.91 -0.09,0.82 1.33,1 0.44,1.27 -0.09,1.37 -0.88,1.64 0.62,0.73 0.35,0.36 0.8,0.64 -0.35,0.82 -1.06,0 -0.27,1 0.53,1 0,0.55 -0.44,0.82 -1.42,0.46 0.44,1 -0.71,2 0.27,0.46 -1.24,0.18 -0.62,1 -0.62,-0.27 -1.24,0.82 -0.44,0.55 -0.44,0.36 -0.53,0 -0.44,0.82 -0.88,-0.18 -0.71,0.73 -0.35,0.55 -0.97,0.09 0,0.73 -0.62,0.27 -1.24,-1 0.62,-0.64 -0.18,-1.27 -2.04,0.36 -0.27,0.64 -0.53,-0.55 -0.62,0.64 -0.09,-0.91 -1.24,0.09 -0.09,-0.73 -0.62,-0.09 -1.24,-0.46 -0.09,-1.18 -1.42,-1.18 -0.44,-1.64 -0.71,-0.46 -0.97,-1.82 -0.8,0.18 -0.62,1.37 -2.04,-1.73 0,-2.28 0.71,0.18 0.35,-2.82 -1.33,-1 0.18,-0.82 0.88,-0.27 -1.24,-1.18 0.53,-0.73 -0.27,-1.27 0.44,-0.18 -0.44,-0.82 0.8,0.27 0.71,-0.73 0.44,0.82 0.97,-0.55 1.06,0.55 1.24,-0.82 0.18,-1.55 -0.97,-0.09 -0.35,-0.73 0.35,-1 -0.27,-1.09 0.8,0.36 0.27,-0.91 1.33,-1.09 -0.09,-1.55 0.44,0.09 -0.09,0.64 0.53,0.09 0,0.36 0.88,-0.18 0.27,0.55 0.8,-1 0.71,0.64 -0.09,0.55 1.06,0.36 0.53,-0.55 -0.18,-0.36 1.24,-1 1.68,-0.27 0.44,-0.45 2.66,-0.09 0.62,-0.46 -0.09,-1.46 1.86,-0.09 0.62,1 0.7,-1.21 z m 7.97,-23.49 0.53,1.55 -1.06,-0.27 -0.71,0.64 -0.53,-0.27 0.18,-1.09 1.37,0.3 -0.22,-0.48 0.44,-0.38 z m 2.83,-0.09 0.53,0.46 0,0.91 -0.97,-0.27 0,-1.09 0.44,0 z m -10.97,-1.82 1.15,0.82 0.09,1 -0.53,1 -0.71,0 0.27,0.73 -0.71,0.73 0.44,0.36 -1.42,1.28 -2.04,0.36 -1.33,-1.37 0.09,-1.18 0.8,0.55 -0.09,-1.09 0.89,-0.73 -0.35,-0.64 0.88,-0.09 -0.09,-0.55 1.15,-1.09 0.53,0.18 0,0.91 0.35,0 0.18,-1 0.45,-0.18 z m 15.4,-2.1 1.15,1.91 0.71,0.09 -0.18,1.64 -1.15,-0.37 0.44,0.82 -0.89,0.46 -0.27,0.73 -0.35,-0.27 -0.35,0.45 -0.3,-0.18 -0.14,1.1 -0.62,0.73 -1.06,-0.73 0,-0.46 -0.97,0.55 0.89,-1.55 0.88,0.09 0.18,-0.64 1.5,-0.73 0.09,-1.09 0.35,-0.09 -0.35,-0.27 0.35,-1.37 -0.44,-0.64 0.53,-0.18 z"
59
+ title="Brava"
60
+ id="CV-BR"
61
+ />
62
+ <path
63
+ class="island barlavento"
64
+ transform="scale(0.4, 0.4)"
65
+ d="m 772.87917,340.29285 2.13,0.73 0.62,0.83 0.71,0 0.88,1.28 0.09,1.28 -0.62,0.37 -0.8,-0.73 -1.15,-0.18 -0.18,-1.19 -1.59,-1.01 -0.09,-1.38 z m 47.44,-17.04 0,1.1 0.53,-0.18 0.53,-1.19 0.44,0.37 -0.35,0.92 0.53,-0.18 0.02,-0.41 0.59,0.23 -0.71,1.19 0.8,0.92 2.83,-0.18 0.35,-0.37 0.53,0.64 2.57,0.64 4.25,2.38 2.48,0.27 0.8,-0.37 0.71,0.82 2.21,-0.18 0.62,1.37 1.06,0.37 1.42,-0.73 1.5,0.46 0.53,-0.37 0.27,0.37 -0.62,0.55 0.53,0.27 0.44,-0.37 0,0.83 0.71,0 0.27,-0.73 1.15,0.37 0,0.83 -0.62,0 -1.24,1.1 0.44,1.1 1.06,0.18 -0.62,2.11 -0.44,0.27 1.06,2.75 6.02,6.05 2.74,3.39 0.62,0.18 0.18,0.64 0.8,-0.27 -0.53,1.1 0.8,2.47 -0.27,1.1 1.5,1.65 -1.95,-0.64 -0.97,1.28 -0.27,1.74 0.97,2.02 0.09,1.65 1.24,1.01 -0.27,2.29 0.71,0.46 0,1.74 0.8,1.47 -0.18,0.46 0.71,0.09 0,0.64 -0.97,-0.18 -0.27,0.37 0,1.46 -1.15,0.82 -0.35,1.92 -1.33,1.28 -0.18,1.19 -0.62,0.27 -0.53,4.3 -2.13,2.75 -0.88,0 -0.89,0.64 -0.35,-0.73 -0.62,-0.18 -1.95,2.11 -2.74,0.73 -1.5,1.74 0.27,0.55 -0.71,0.82 -0.8,-0.18 -1.24,1.01 -1.24,-0.46 -0.71,0.82 -1.95,0.55 -5.4,3.39 -0.71,0 -0.53,-0.64 -0.71,0.92 0.35,0.55 -0.53,0.18 -0.88,2.01 -2.83,0.92 -2.39,0.18 -0.71,0.55 0,0.64 -3.01,1.92 -2.12,2.56 -0.09,0.92 -1.42,0 -0.97,0.55 -1.59,-1.1 -0.97,0.37 -2.3,-0.46 -10.8,0.09 -7.53,1.37 -1.24,-1.28 -0.8,-0.18 -0.35,-1.65 -1.33,-1.19 -0.18,-1.92 -2.3,-1.83 -2.66,-1.1 -0.44,0.82 -0.44,0 -5.13,-1.28 -7.79,-3.57 -2.13,-2.75 0.44,-2.56 -1.15,-1.1 -0.97,1.1 0.09,-1.65 -1.59,-2.29 1.59,-2.75 0,-1.46 0.53,-0.92 -0.44,-2.11 0.27,-1.28 1.33,-1.1 0.27,-0.82 -1.33,-3.3 3.72,-4.21 1.5,-0.92 1.24,0.37 1.5,-0.37 7.26,-6.32 0.27,-1.1 1.24,-0.92 0.09,-1.92 -0.8,-1.83 0.8,-1.37 0.27,-1.65 1.77,-0.92 -0.35,-0.85 0.27,-0.82 -1.59,0.64 0,-0.82 -0.53,-0.18 -0.18,-1.56 -0.62,-0.46 -0.44,-1.74 -1.06,-0.55 -0.44,-2.38 -1.77,-0.64 -0.09,-0.92 0.71,-0.27 -0.27,-0.82 0.71,-1.19 0,-0.37 -0.44,0.18 -0.44,-0.46 0.71,-0.64 0.89,0.46 -0.44,-2.56 0.62,-1.01 1.33,-0.73 0,-1.19 -2.92,-1.46 0.8,-2.02 -0.18,-1.56 -0.88,-0.37 0.35,-2.11 1.95,-1.19 1.77,0 -0.53,2.11 1.59,0.46 2.39,1.83 1.15,-0.27 0.44,0.46 -0.27,0.92 2.21,1.83 5.4,1.74 5.49,0.37 2.39,-0.46 3.54,0.27 8.32,-1.74 2.04,-1.1 2.04,-2.2 1.06,0.18 0.53,-0.46 -0.18,-0.64 -1.24,0.27 -0.71,-1.28 0.35,-0.37 0.97,0.18 -0.44,-0.55 0.18,-1.19 1.5,-0.46 -0.19,0.83 z"
66
+ title="Boa Vista"
67
+ id="CV-BV"
68
+ />
69
+ <path
70
+ class="island sotavento"
71
+ transform="scale(0.4, 0.4)"
72
+ d="m 552.39917,689.24285 -3.46,3.03 -4.47,1.59 -0.17,2.3 1.03,1.42 0,1.42 -1.55,2.3 0.69,3.01 -0.13,3.3 0,0 -0.59,0 0,0 -1.91,1.31 -1.06,5.89 -5.52,0 -1.27,0.66 -1.27,1.75 0.21,2.18 -1.7,3.05 -0.21,1.31 0,1.09 1.7,2.18 -0.64,0.88 -1.9,0.43 -4.19,5.57 0,0 -0.62,-0.36 -1.95,0.18 -0.8,-1.37 -1.32,-0.36 -0.45,-1.37 0.62,-1 0.36,0.37 1.5,-0.28 -0.26,-1.54 0.88,0.18 -0.09,-0.46 1.07,-0.64 0.17,-1.09 -0.79,-0.27 -0.27,-0.82 1.15,-0.64 -0.09,-1.36 -0.53,0.09 -0.53,-0.82 -0.53,0 0.09,-0.64 -1.51,-1.46 -0.62,-0.09 -0.7,-1.37 -1.78,-0.27 -0.97,-0.82 -0.88,-1.82 -0.71,-0.46 -0.89,0.37 -0.44,1.27 -1.24,0.1 -1.24,-2.28 -0.09,-1.73 -1.06,-0.73 -0.71,-1.73 -1.24,-0.28 -0.44,-0.91 0.27,-1.27 -1.86,-0.73 -0.98,-1.19 -0.62,0 -0.26,0.64 -1.15,-0.18 0.35,-1.28 -1.06,-1.54 0.35,-0.82 1.15,0.27 0.98,-0.46 -0.18,-1.64 -1.24,-2.09 0.36,-1 -0.36,-0.91 2.57,-1.37 -0.36,-1 0.45,-0.55 -0.36,-3.1 0.53,-1.82 0.54,0 -0.36,-1.37 0.71,-0.91 -0.09,-0.45 -1.15,-0.1 0.18,-1.09 1.59,-0.45 1.59,-2.37 -0.08,-0.82 -1.24,-0.73 0,-1.01 0.53,-0.18 0.53,-1.82 -1.86,-0.55 0.09,-2.82 -0.44,-0.73 1.15,-1.46 -2.13,-3.56 1.24,0.1 1.33,-0.92 -0.53,-1.73 0.26,-2 1.86,-2.34 0,0 3.95,0.06 2.33,-1.09 1.7,0.87 1.49,1.53 1.27,0.22 0.63,-0.22 1.06,-4.15 1.91,0.66 0.64,1.52 1.27,1.31 4.24,0 0,0 0.64,5.68 1.06,0.87 4.24,0 1.48,0.44 3.82,3.49 1.49,2.63 -0.43,1.96 -2.33,3.71 -0.21,1.09 0.42,0.88 1.91,0 3.39,-0.88 4.79,-6.11 0,0 2.21,0.44 0.42,1.74 -1.06,3.28 0,1.31 1.27,0.43 0,1.31 -0.42,0.88 -1.7,0.22 -0.84,0.65 0,1.96 0,0 z"
73
+ title="Santa Catarina"
74
+ id="CV-CA"
75
+ />
76
+ <path
77
+ class="island sotavento"
78
+ transform="scale(0.4, 0.4)"
79
+ d="m 343.62917,750.22285 -2.09,2.12 -4.13,6.76 -3.48,2.52 -5.94,1.33 -4,0.27 -4,-0.93 -4.77,-4.25 -1.16,-4.11 0.13,-3.85 1.93,-2.38 5.29,-4.25 2.6,-2.69 0,0 1.7,1.62 0,0 2.84,0.49 5.44,-0.98 7.87,-0.13 0,0 0.71,3.35 0.62,0.28 z"
80
+ title="Santa Catarina do Fogo"
81
+ id="CV-CF"
82
+ />
83
+ <path
84
+ class="island sotavento"
85
+ transform="scale(0.4, 0.4)"
86
+ d="m 574.91917,705.21285 -0.35,-3.56 -1.2,-4.6 -1.38,-0.89 -1.89,0 -0.86,0.18 -2.41,1.77 -0.69,0 -2.06,-0.71 -0.35,-1.41 -1.2,-0.53 -0.69,-1.78 -0.71,-0.42 0,0 0.85,-0.49 0,0 2.33,-0.21 0,-1.75 -1.69,-1.31 -9.97,0 0,0 -0.63,-0.66 0,0 0,-1.96 0.84,-0.65 1.7,-0.22 0.42,-0.88 0,-1.31 -1.27,-0.43 0,-1.31 1.06,-3.28 -0.42,-1.74 -2.21,-0.44 0,0 0.3,-0.44 3.18,0 1.49,-0.43 8.82,-7.71 0,0 0.87,0.46 0.62,-0.18 0.7,1.27 0.71,-1 0.89,0.27 0.18,0.28 -0.89,0.45 0.09,1.73 1.41,-0.18 0.62,0.46 -0.35,1.64 -0.71,0 0.09,0.54 -0.44,0.28 0.62,0.64 1.33,0.18 0.7,1 0.98,0.37 1.59,-0.1 -0.09,-0.63 0.62,0.09 -0.18,2 2.04,-0.54 0.98,-1.1 0.97,0 1.33,0.46 0.88,0.91 -0.71,1.46 0.8,-0.64 1.15,0.27 0.71,-0.73 0.35,1.73 1.33,0.19 -0.09,0.82 0.44,0.45 -0.26,1.1 -0.62,0.09 -0.27,0.73 0.71,0.73 0.09,1.27 1.15,-0.09 0.53,0.55 1.86,-0.28 1.06,1.01 1.51,0.36 1.59,-0.18 0.36,0.45 -0.18,2.83 1.33,2.92 -0.62,0.91 0.88,-0.37 0.71,0.91 0.09,0.82 0.71,0.28 -0.45,1.18 0.62,0.64 0,0 -1.21,1.7 -2.33,6.11 -2.12,3.71 -4.03,3.27 -2.54,0.88 -2.55,-0.22 -1.27,-2.84 -3.61,-1.75 -0.84,-1.52 0,0 z"
87
+ title="Santa Cruz"
88
+ id="CV-CR"
89
+ />
90
+ <path
91
+ class="island sotavento"
92
+ transform="scale(0.4, 0.4)"
93
+ d="m 695.59917,615.79285 0.71,0.64 -0.18,1.19 0.71,0.46 -0.53,1.09 0.89,2.55 1.68,0.46 1.77,-0.18 0.62,-1.55 -0.35,-1.1 1.06,-1.46 0.35,1.46 -0.27,3.01 1.42,1.28 0.53,0 0.27,0.73 2.57,0.36 3.28,1.46 2.21,-1 1.06,-1.64 0.71,0.91 0.88,-0.91 1.33,0.55 0.18,1.37 0.89,0.09 -0.27,0.55 1.06,0.55 0.88,2.74 0.53,0.27 -0.35,0.46 0.35,1.28 -0.18,0.82 0.71,2.28 0.97,1.18 0,0.73 -0.27,1.28 -1.15,0.18 -0.27,1.28 -0.97,1 1.24,0.18 0.27,1.73 0.62,0.18 0.27,1.55 0.8,0.73 0.27,3.1 0.8,1.64 -0.18,0.91 0.71,1.55 -0.62,1.19 0.53,0.64 -0.35,1.19 0.88,1.91 -0.62,0.37 0.97,4.56 0.53,0.09 -0.18,1 0.35,0.18 -0.18,0.64 -1.06,0.73 0,0.91 1.59,3.46 -1.06,0.73 0.97,3.1 -2.21,0.82 -0.18,0.27 -1.15,2.46 -0.71,0.91 -0.35,0.55 -1.33,1.19 -0.71,0 0,1.09 -0.8,0.82 -1.06,-0.09 -1.24,1.55 -0.62,0.09 -0.44,-0.46 -0.88,0.91 -1.5,0.09 -0.62,1.09 -1.24,0.64 0,0.73 -1.06,0.55 -0.97,-0.27 -0.62,0.46 -0.27,0 -0.44,0 -0.97,2.55 -2.75,0.82 -2.57,-0.27 -2.39,-1 -2.39,-0.09 -1.77,0.46 -1.77,-1.09 -0.97,-0.09 0,-0.46 -1.5,-0.09 -1.33,-0.73 -0.97,0.18 -0.53,-1.55 -1.77,-1.73 0,-1 -1.42,-1.19 -0.97,0.09 0.09,-0.82 1.59,0.09 -0.09,-1.46 -1.95,-2.37 -0.44,0.09 -1.77,-2.1 -0.8,-0.27 0.44,2.46 -0.88,-2.37 0.44,-5.01 -0.62,-1.73 0.18,-1.19 0.8,-0.55 0.35,-1.09 0,-3.74 0.71,-2.73 -0.27,-2.28 0.53,-0.64 1.15,0.09 2.04,-0.82 -0.27,-5.2 0.27,-1 0.18,-1.91 -1.5,-3.19 -3.36,-0.27 0,-2.83 0.18,-0.37 1.06,0.18 1.06,-1.82 -0.27,-0.55 -1.06,-0.27 0.44,-1.09 2.3,0.64 1.42,-0.82 4.43,-4.29 0.53,-2.74 0.35,-0.64 0.8,-1.09 -1.95,-2.46 1.68,-0.37 0.71,0.73 0.71,-0.18 0.44,0.73 1.06,0 1.42,-1.09 0.09,-0.73 -1.86,-2.83 0.09,-0.64 1.24,-0.09 0.8,-1.19 0.53,0 -0.88,-1.1 0.35,-0.46 0.44,0.37 0.16,-1.84 z"
94
+ title="Maio"
95
+ id="CV-MA"
96
+ />
97
+ <path
98
+ class="island sotavento"
99
+ transform="scale(0.4, 0.4)"
100
+ d="m 306.40917,717.34285 1.9,-0.82 -0.53,-1.55 0.8,0.36 0.88,-0.82 1.33,-0.36 2.04,-1.91 0.88,-0.1 0.44,-0.82 1.24,-0.27 1.07,-0.91 0.71,0.82 1.32,0.46 3.81,-0.28 2.48,0.73 0.17,0.46 2.31,0.09 1.85,1.09 0.18,1.64 0.53,0.46 1.33,0 0.44,0.45 1.33,-0.18 1.24,0.55 1.06,1.64 0.62,2.18 1.95,0.82 0.71,0.91 0.97,4.19 -0.62,1.64 1.51,0.55 0.62,0.91 0.62,5.01 1.24,1.27 0.17,0.82 -0.62,2.46 0.27,1.37 -0.8,0.54 0,1.02 0,0 -7.87,0.13 -5.44,0.98 -2.84,-0.49 0,0 -3.31,-3.16 0,0 -2.84,-3.9 -0.24,-4.38 -4.02,-1.94 z"
101
+ title="Mosteiros"
102
+ id="CV-MO"
103
+ />
104
+ <path
105
+ class="island barlavento"
106
+ transform="scale(0.4, 0.4)"
107
+ d="m 109.13917,11.132852 1.5,0.92 -0.35,0.83 0.53,1.29 -0.18,1.28 0.71,0.56 -1.24,1.47 1.33,1.2 0,1.65 0.53,0.83 2.04,1.48 0.17,1.65 0.98,0.74 0.71,1.47 0.97,0.83 1.24,0 0.18,0.46 -0.45,0.46 0.8,0.46 1.77,-1.1 0,1.56 0.62,0 0.62,0.56 1.5,0 0.89,1.1 0.97,-1.1 1.33,0.82 -0.09,1.2 0.62,1.84 -0.35,2.76 1.06,0.37 -0.71,0.74 0.53,1.65 -1.85,1.94 -0.09,1.01 -1.51,0.83 -0.26,1.2 -0.45,0 -0.53,1 0,0 -13.68,-11.09 -3.08,-0.95 -4.9,0 -3.08,0.57 -1.63,-0.75 -0.36,-1.32 -1.61,-1.17 0,0 1.06,-0.53 2.9,-4.72 5.26,-6.22 3.81,-2.27 1.09,-4.53 z"
108
+ title="Paul"
109
+ id="CV-PA"
110
+ />
111
+ <path
112
+ class="island barlavento"
113
+ transform="scale(0.4, 0.4)"
114
+ d="m 7.77917,39.582852 -0.18,-1.94 1.6,-0.27 0.79,-1.57 1.77,0 1.69,-1.1 1.86,-0.1 1.85,-1.28 1.07,-0.28 0.79,0.09 1.42,-1.56 0.89,0.46 0.53,-0.65 2.56,1.11 2.66,-0.65 0.09,-0.46 2.12,-1.38 0.44,-1.01 0.89,0.18 1.68,-0.55 0.44,-1.2 2.57,0.65 1.68,-0.09 2.3,-1.11 0.8,-1.29 0.97,0 1.24,-1.01 0,0 8.12,8.86 2.36,1.51 5.08,1.32 0.72,1.32 -0.18,3.21 0.73,0.94 1.45,0 7.62,-4.34 2.17,-0.38 9.43,0.57 3.63,-0.75 10.91,-6.45 0,0 1.61,1.17 0.36,1.32 1.63,0.75 3.08,-0.57 4.9,0 3.08,0.95 13.68,11.09 0,0 -0.09,0.56 -1.15,0.37 -0.62,1.29 -0.79,0.55 0,2.3 -3.63,1.47 -1.33,1.75 -3.1,1.47 -0.8,1.11 -3.63,2.2 -1.77,0.37 -1.06,0.83 -0.79,0.37 -0.8,-0.09 -1.33,2.11 -2.39,0.83 -2.21,0 -0.71,0.09 -2.21,-0.36 -2.31,0.36 -1.68,1.11 -1.59,0 -1.15,1.56 -1.15,0.64 -0.62,1.29 -1.06,0.56 -0.27,0.82 -2.83,1.48 -0.8,1.28 -0.35,0.74 -2.84,2.57 -1.68,2.58 -0.71,-0.09 -0.7,1.29 -1.42,0.82 -0.18,0.74 0.71,0.28 -0.44,0.82 -5.4,1.48 -0.98,1.93 -0.79,0.64 -0.36,1.66 -0.97,0.46 -1.86,3.4 -2.65,2.21 -0.36,1.19 -1.68,0.19 0.18,0.73 -0.36,0.37 -0.62,-0.55 -2.21,0.27 -0.62,0.74 -2.57,0.55 -0.53,1.56 -2.12,0.83 -0.09,-0.83 -0.97,0.28 -1.24,-1.29 -2.04,-0.18 -2.66,0.64 -1.32,-0.83 -0.71,0.19 -0.36,-0.74 -0.7,0.1 -0.62,-1.2 -0.89,0.18 -0.62,-0.46 -1.06,0 -0.35,0.83 -1.33,-0.09 -0.36,0.92 -0.79,0.09 0.17,-1.84 -1.06,-0.64 -0.35,0.46 -1.24,-0.19 -1.77,0.46 -0.53,1.38 -3.55,0.65 -1.23,1.38 -3.19,1.38 -2.57,-1.94 -1.06,-1.37 -0.09,-1.48 -0.44,-0.55 -1.77,-0.83 0.62,-1.37 -1.15,-0.92 -0.36,-0.92 0.36,-2.49 0.97,-1.38 0.8,-0.64 0.71,-0.46 0.44,-1.38 -0.8,-1.38 0,-1.56 -1.68,-2.03 -0.8,-1.1 -0.53,-1.47 0.62,-1.48 0.44,-3.4 -1.06,-5.79 -1.33,-2.4 -1.68,-1.29 -0.62,0.47 -1.94,-0.74 0.17,-0.46 -0.35,-0.19 -3.1,-0.55 -1.42,-1.84 -0.44,-1.65 -1.33,-1.11 -0.53,-1.84 0.09,-1.56 0.62,-0.37 -0.97,-1.29 0.08,-0.74 1.33,-0.82 -0.53,-1.11 1.24,-1.1 0.62,-2.21 2.92,-1.84 -0.44,-2.21 2.04,-0.46 z"
115
+ title="Porto Novo"
116
+ id="CV-PN"
117
+ />
118
+ <path
119
+ class="island sotavento"
120
+ transform="scale(0.4, 0.4)"
121
+ d="m 591.22917,756.95285 0.44,0.73 -0.18,0.64 -0.35,0 -0.27,-0.91 0.36,-0.46 z m 14.16,-20.85 1.15,2.55 0.53,0.36 1.06,-0.27 0.09,0.91 -0.62,0.18 0.18,0.73 -0.88,1 -2.21,1.37 -0.53,0 -0.35,-0.91 -0.71,-0.09 0.89,1.37 1.33,0 0.18,1 -1.06,1.37 0.09,0.55 -0.88,0.55 -0.44,-0.18 -0.44,0.64 -0.35,0.73 0.44,1 -0.27,1.28 -2.3,2.55 0,2.28 0.44,0.64 -1.06,2.55 -1.06,-0.09 -0.18,-1.64 -2.04,0.27 -0.53,0.64 -0.8,-0.82 -1.42,1 0.18,-0.73 -0.8,-0.55 -0.8,-1.82 -1.68,0.73 0,0.64 -0.62,0.27 0.44,1.91 -0.53,1.37 0.44,0.82 -0.97,-0.64 -0.09,-0.55 -1.06,-0.27 -0.53,0.55 -0.88,-0.55 -1.15,0.55 -1.68,-0.36 -1.15,0.46 -1.33,-0.55 -0.71,0.18 -1.42,-0.82 -1.16,0.82 0,0 -1.32,-2.78 -1.38,-1.24 -3.44,-5.66 -3.27,-3.89 -0.86,-3.01 -1.38,-2.12 -0.17,-3.01 -0.81,-2.22 0,0 1.14,0 0,0 1.91,-1.31 5.94,-2.18 6.36,-0.44 3.6,-1.31 4.03,-0.22 7.85,3.05 6.15,1.09 3.09,2.19 0,0 -0.19,0.08 z"
122
+ title="Praia"
123
+ id="CV-PR"
124
+ />
125
+ <path
126
+ class="island barlavento"
127
+ transform="scale(0.4, 0.4)"
128
+ d="m 321.49917,176.75285 0,0.12 0,0 0,0 0,0 0,-0.12 z m 3.54,-3.21 0.53,0.46 2.13,0.18 -0.09,1.38 0.53,0.83 1.42,-0.28 1.77,0.37 1.24,0.46 1.06,0.64 1.68,1.65 0.35,1.19 0.8,0.46 -0.09,0.92 1.42,0 0.89,1.47 0.44,1.93 1.33,0.64 1.24,-0.46 1.15,0.64 0.35,2.75 2.39,1.65 1.5,-0.55 2.3,-1.74 1.33,-0.73 3.72,1.29 0.18,-0.46 4.34,-0.37 1.42,-1.65 1.06,-0.28 -0.44,-1.01 2.48,0.92 2.13,-0.46 0.53,0.37 -0.09,0.55 3.19,2.02 1.42,0.09 0.35,-0.83 2.74,1.19 0.35,0.73 1.42,0.83 0.71,-0.18 1.06,0.46 0.53,-0.37 2.21,3.3 3.72,2.3 1.95,-0.09 1.95,1.01 2.57,-0.09 1.33,-2.02 1.5,-1.19 1.95,0.18 0.27,0.83 0.8,-0.09 2.21,1.28 3.81,0 0.97,-0.37 0.97,0.46 3.1,0.09 0.8,0.73 1.15,-0.27 1.77,0.55 0.8,-0.18 1.24,0.73 1.59,-0.18 0.62,0.83 1.06,0.55 0.97,0.09 1.33,0.92 1.15,-0.09 1.24,1.38 0.18,2.02 1.06,0.09 0.97,2.94 1.59,-0.55 1.24,0.46 1.06,-0.55 0.53,1.74 1.42,-0.37 0.71,0.64 0.62,1.28 0.8,0.09 0.18,0.73 0.8,0.55 -0.35,1.93 -2.12,2.75 0,1.38 -2.39,1.65 -1.86,-0.92 -1.51,-0.09 -1.24,0.64 -0.35,-1.56 -1.15,-0.82 -2.57,0.64 -1.15,-1.01 -0.71,0 -0.35,1.01 -1.15,0.64 -2.57,0.83 -3.36,0.09 -0.8,-0.28 -0.44,-1.01 -0.71,-0.37 -0.71,-0.18 -1.42,0 -0.71,1.38 -0.44,-0.46 -1.15,0.09 -0.71,-0.73 -0.89,0.18 -0.44,0.83 -1.33,-0.09 -0.27,-0.64 -1.33,0 -1.15,-0.64 0.62,-0.73 -1.77,-1.01 -1.33,-2.75 -0.88,-0.83 -1.24,0.64 -0.71,-0.18 -0.35,-0.73 -1.77,-0.92 -1.5,0 -2.3,-0.92 -0.35,-0.64 -1.06,-0.18 -0.62,-0.92 -2.39,-1.56 -0.62,-0.92 -2.57,0.18 -0.88,-0.09 -1.42,-0.27 -1.95,0.74 -0.35,-0.64 -0.8,-0.18 -1.77,0.73 -2.92,-1.47 -2.48,0.46 -1.86,-0.37 -2.12,0.55 -0.71,-0.64 -1.42,1.47 -1.59,0.73 -1.68,2.3 -3.72,0.28 -0.8,-0.37 -1.77,1.56 0.09,0.73 -2.04,2.85 -2.21,0.73 -0.71,1.1 0.09,1.1 -0.89,0.73 -0.18,2.3 0.35,1.38 -1.86,0.18 -0.62,0.83 -0.53,1.29 0.44,1.38 -0.71,0.55 -0.8,2.2 0.18,1.74 -1.24,1.93 -1.15,0.18 -0.53,0.92 0.35,1.84 -0.89,0.46 -0.8,2.75 0.18,0.83 0.97,0.46 -0.62,1.56 0.8,0.09 -0.97,0.46 -1.15,-0.37 -0.44,0.46 -1.15,0 0.26,1.47 -0.71,-0.27 -0.44,-1.24 0,0 0.73,-0.88 1.55,-7.13 0.86,-2.14 0,-3.21 2.58,-6.42 0.17,-10.52 -1.03,-2.85 -2.24,-1.96 -0.34,-4.46 -0.69,-1.78 -1.55,-1.78 -1.89,-1.78 -6.02,0 -2.41,-1.07 -1.03,-2.32 0,-1.61 0.52,-1.25 1.72,-1.61 0.34,-2.68 -2.41,-5.53 0,-1.12 0,0 0.96,-0.37 0.18,-0.92 2.38,-2.22 z"
129
+ title="Ribeira Brava"
130
+ id="CV-RB"
131
+ />
132
+ <path
133
+ class="island barlavento"
134
+ transform="scale(0.4, 0.4)"
135
+ d="m 83.99917,3.3028525 1.06,-0.92 0.8,-2.12 1.24,0.09 0.53,0.37 0.71,2.49 1.32,0.27 4.34,3.13 4.96,2.03 2.57,0.55 3.01,0 0.53,-1.01 0.97,1.01 2.3,0.37 0.8,1.5699995 0,0 -0.68,0.98 -1.09,4.53 -3.81,2.27 -5.26,6.22 -2.9,4.72 -1.06,0.53 0,0 -10.91,6.45 -3.63,0.75 -9.43,-0.57 -2.17,0.38 -7.62,4.34 -1.45,0 -0.73,-0.94 0.18,-3.21 -0.72,-1.32 -5.08,-1.32 -2.36,-1.51 -8.12,-8.86 0,0 0.89,-0.74 -0.09,-3.03 3.19,-0.19 0.97,-1.01 0.18,-2.21 2.3,0.74 0.18,0.46 0.62,-0.28 0.53,-1.01 -0.71,-0.74 1.5,-1.11 0,-0.46 0.89,1.02 2.04,0.46 4.86,-1.2 1.24,-0.64 0.27,-1.66 1.15,-0.83 -0.44,-1.01 1.5,-0.56 0.8,-0.9199995 5.22,0 2.13,-1.01 0.62,-1.01 0.88,-0.46 1.33,-0.09 1.42,-1.02 5.31,-2.21 1.15,0.28 z"
136
+ title="Ribeira Grande"
137
+ id="CV-RG"
138
+ />
139
+ <path
140
+ class="island sotavento"
141
+ transform="scale(0.4, 0.4)"
142
+ d="m 565.49917,735.10285 0.81,2.23 0.18,3.01 1.37,2.12 0.86,3.01 3.27,3.89 3.44,5.66 1.38,1.24 1.31,2.78 0,0 -2.21,0 -0.88,-1.82 -0.89,0.46 -0.97,-0.19 -0.27,-0.63 -0.88,0.63 -0.62,-0.54 -0.09,0.73 -0.88,0.36 -0.27,-1 -1.77,-0.36 -0.62,0.45 -1.24,0 -0.26,0.73 -1.69,0 -0.17,-1 -2.66,-0.82 -1.24,0.27 -1.5,-1.37 -0.89,0.73 -1.68,-0.27 -0.44,0.45 -0.98,0 -0.35,1.01 -1.06,-0.09 -0.98,-1.37 0.45,-0.55 -0.27,-1.09 -3.54,-0.54 -1.42,-0.64 -2.92,-1.73 -2.65,-2.92 -0.8,-0.09 -0.89,0.55 -0.08,-0.64 -0.45,-0.09 -0.71,0.46 -0.26,-0.64 -0.8,0 -0.71,-1.09 -0.79,-0.18 -2.48,-2.83 -1.95,-0.45 0.09,-0.55 -0.71,-0.09 -0.18,-1.37 -0.44,0 -0.35,-0.72 -0.98,-0.1 -1.32,-1.27 -0.62,-2.19 -1.86,-1.54 0,-1.19 0,0 4.19,-5.57 1.9,-0.43 0.64,-0.88 -1.7,-2.18 0.21,-2.4 1.7,-3.05 -0.21,-2.18 1.27,-1.75 1.27,-0.66 5.52,0 1.06,-5.89 1.91,-1.31 0,0 1.69,0 0,0 1.06,0.66 1.67,0.23 0,0 3.42,5.44 1.47,0.5 0,0 0.44,1.47 1.91,1.74 0.85,2.4 -0.43,5.46 -1.69,2.61 0.63,1.97 6.79,4.14 2.54,0.87 0,0 z"
143
+ title="Ribeira Grande de Santiago"
144
+ id="CV-RS"
145
+ />
146
+ <path
147
+ class="island sotavento"
148
+ transform="scale(0.4, 0.4)"
149
+ d="m 596.26917,696.75285 0.45,0.27 -0.36,1.28 1.95,0 0.44,0.73 -0.17,0.91 1.32,0.82 -0.35,1.82 0.62,0.09 -0.27,0.64 1.33,0 -0.09,1 0.53,0 0,0.82 0.8,0.55 -0.97,1 0.62,0.73 0.79,-0.09 -0.26,0.82 0.53,0 0.26,-1.37 0.71,1.46 0.71,0.18 -0.62,-0.82 1.24,0.18 0,1.37 -0.62,1 1.77,-0.46 1.51,1.1 1.24,-0.09 0.88,1 0.27,1.64 -0.8,-0.46 -0.62,0.37 -1.42,-0.18 0.18,0.54 -0.62,0.46 1.24,0 -0.18,1.46 1.33,-1.37 1.15,0.09 0.62,-0.73 0.62,0.27 -0.53,1.01 0.18,0.36 0.79,-0.18 -0.44,0.91 0.36,1.55 -0.27,1 0.62,0.91 -0.62,1.46 0.97,0.27 0.62,-1.09 0.71,-0.09 0.71,0.73 -0.09,0.82 0.89,0.63 -0.36,0.19 0.45,0.72 -0.18,0.64 -0.62,0.18 -0.8,-0.45 -0.53,2 0.44,0.46 1.42,0 0.62,0.82 -3.1,0.27 1.24,0.27 0.44,0.82 1.15,-0.36 -0.97,2.09 0.89,2.1 -1.42,1.55 0.09,0.54 -0.89,-1 -0.62,-0.09 -0.71,-1.18 -0.08,0.36 -1.07,0 -0.53,1.55 -0.88,0.91 -1.42,0.36 -0.89,1.37 -2.02,-0.2 0,0 -3.1,-2.19 -6.14,-1.09 -7.85,-3.06 -4.03,0.22 -3.6,1.31 -6.37,0.44 -5.93,2.18 -1.91,1.3 0,0 -2.55,0 0,0 -2.54,-0.87 -6.79,-4.14 -0.63,-1.97 1.69,-2.61 0.43,-5.46 -0.85,-2.4 -1.91,-1.74 -0.44,-1.47 0,0 4.68,0.59 4.45,-0.87 8.06,-5.02 1.91,-3.27 0.85,-0.87 1.48,-0.22 0,0 1.28,1.31 0,0 0.84,1.52 3.61,1.75 1.27,2.84 2.55,0.22 2.54,-0.88 4.03,-3.27 2.12,-3.71 2.33,-6.11 z"
150
+ title="São Domingos"
151
+ id="CV-SD"
152
+ />
153
+ <path
154
+ class="island sotavento"
155
+ transform="scale(0.4, 0.4)"
156
+ d="m 324.00917,740.76285 -2.6,2.69 -5.29,4.25 -1.93,2.38 -0.13,3.85 1.16,4.11 4.77,4.25 4,0.93 4,-0.27 5.94,-1.33 3.48,-2.52 4.13,-6.76 2.09,-2.12 0,0 0.8,1.36 -0.09,2.55 0.53,1.82 -0.44,1.91 0.8,1.45 0,3.83 0.62,1.45 -1.42,6.1 -0.71,1.28 -2.3,1.91 -0.18,1.27 -2.56,2.73 -3.63,3.1 -1.6,-0.19 -0.97,0.46 -1.86,1.91 -0.09,1 -0.97,-0.27 -3.72,1.82 -1.86,1.55 -2.12,0.09 -2.04,0.91 -2.92,0.54 -1.51,-0.36 -1.06,0.27 -0.97,-0.64 -0.53,0.28 -0.71,0 -0.27,-0.46 -5.31,0.55 -0.26,-0.64 -1.33,-0.73 -2.57,0.28 -1.15,-1.55 -1.68,-0.18 -1.06,-1.37 -1.24,-0.27 -0.98,-1.91 -1.24,-1.28 -1.32,-0.36 -3.01,-4 -2.04,-0.28 -3.19,-1.91 -1.32,-3.09 -3.72,-3.19 -4.61,-2 -1.59,-3.1 0.44,-4.73 -0.44,-1.55 0.18,-2.27 -0.27,-0.73 -0.7,0.18 -0.09,-0.73 1.06,-2.09 -0.09,-1.37 0.53,-1 -0.18,-1.73 0.8,-2 -0.26,-0.55 2.3,-3.64 0.09,-1.55 0.35,-0.18 -0.35,-0.73 1.23,-1 -0.08,-1.27 -0.45,-0.37 0.62,-0.45 0.18,-1.28 0.71,0.09 1.33,-0.82 0.44,-0.54 -0.09,-0.82 2.21,-1.55 -0.35,-0.82 0.8,-0.09 0.53,-1 2.39,-0.82 0.35,-1.01 1.6,-0.81 0.53,-1.74 1.59,-0.54 0.35,-0.55 2.57,-0.54 1.33,-1.01 0.09,-1.54 0.79,0.36 1.24,-0.36 0.98,-0.73 0.26,-0.82 3.72,0.91 3.94,-1.73 0,0 8.89,11.66 4.02,1.94 0.24,4.38 2.84,3.9 0,0 z"
157
+ title="São Filipe"
158
+ id="CV-SF"
159
+ />
160
+ <path
161
+ class="island barlavento"
162
+ transform="scale(0.4, 0.4)"
163
+ d="m 778.71917,116.20285 2.3,1.56 0.53,2.85 0.88,-0.37 1.15,0.18 0.18,1.38 2.39,0.92 0.27,-0.46 0.71,0 1.06,0.83 -0.27,0.92 -0.44,0.09 0.44,1.1 -0.53,0.92 0.18,1.01 -0.44,0.64 -1.15,0.28 -0.27,2.57 -1.24,1.19 -0.44,1.1 0.62,1.01 1.86,0.92 0,1.29 0.97,2.57 1.33,1.19 0,1.56 0.97,0.28 1.42,1.65 0.41,-0.05 0.21,-0.5 0.18,0.46 -1.5,1.38 -0.44,2.02 0.27,0.55 -0.53,0.55 -1.24,-0.18 -0.35,-0.46 -1.51,0 -0.35,1.93 -0.8,1.1 -0.8,0.28 0.09,0.37 1.06,-0.18 0.27,0.37 -0.27,0.64 0.53,0.18 0.44,1.56 -0.44,0.83 0.35,0.37 -0.27,1.1 -0.53,0 -0.88,1.1 0.71,0.09 0.53,0.64 -0.18,1.19 0.71,0.37 0.35,0.92 -0.35,1.01 1.5,4.32 3.54,3.77 -0.71,2.3 0.53,0.64 0.53,3.03 1.24,1.47 0.27,1.19 -0.53,0.73 -0.8,0 -1.33,1.1 -1.06,2.2 -0.8,0.64 -0.62,4.04 -1.95,0.46 -1.68,2.02 0.27,5.6 2.04,4.68 1.42,1.01 0,1.1 0.71,0.83 -0.18,1.19 -0.8,0.27 -3.01,-1.65 -3.89,-0.46 -1.33,1.29 -0.53,-0.37 -1.24,2.29 -0.62,0.74 -0.62,0 -1.06,-0.46 -0.53,-0.92 0.09,-1.93 0.97,-1.75 0,-0.55 -1.5,-0.64 0.09,-1.19 0.71,-0.18 0.35,-1.01 -0.44,-0.09 0,-1.56 -0.44,-0.37 -0.44,-2.39 -1.59,-2.66 -3.01,-2.11 0.18,-1.1 -1.15,-0.09 0.53,-0.55 -0.53,-1.47 0.71,0.46 0,-0.55 -0.18,-0.73 -0.8,0 -0.09,-0.64 2.57,-1.65 0.88,-1.38 0.44,-2.02 0.09,-3.03 -0.88,-3.4 -2.39,-2.2 -2.3,-0.83 -4.96,-0.92 -0.53,1.01 -3.19,1.1 -1.86,-0.46 -0.18,-1.1 -0.53,-0.28 2.04,-3.49 2.04,-0.73 -0.62,-1.65 -1.68,-1.1 -0.35,-1.75 -1.06,-1.75 1.77,-2.94 1.24,0 -1.06,-1.47 1.33,-1.19 0,-1.93 -0.35,-0.55 -0.53,0.28 -0.53,0.37 -1.5,-0.74 -0.8,-1.01 -0.44,-3.12 1.15,-1.19 -0.71,-0.37 -0.09,-1.19 -0.71,-1.1 0.18,-1.65 -0.53,-1.01 -0.35,-2.94 0.53,-1.29 -0.18,-3.49 1.77,-1.93 0.62,-2.85 1.5,-0.74 0.44,-1.1 2.39,0 3.98,-1.65 0.27,-0.64 1.86,-1.29 0.44,-0.92 1.86,1.1 1.68,0.09 0.53,-0.74 0.71,0.09 0.53,-0.64 3.19,-1.1 1.24,-2.11 0.67,-0.18 z"
164
+ title="Sal"
165
+ id="CV-SL"
166
+ />
167
+ <path
168
+ class="island sotavento"
169
+ transform="scale(0.4, 0.4)"
170
+ d="m 542.84917,645.71285 0.22,0.36 0.71,0 0.09,-0.36 2.83,0.36 0.98,0.82 1.32,-0.27 0.36,0.45 -0.27,1.19 1.77,0.55 -0.71,1.09 1.33,0.73 0.53,0.37 0.53,0.72 1.33,-0.45 1.42,1.18 1.59,0 0.18,0.82 0.97,1.01 0.18,2.09 1.24,0 0.09,0.46 0.97,0.36 0.8,2.1 -0.27,1.19 0.44,0.54 0.62,-0.54 0.54,0.18 0.17,1.55 0.89,0.36 -0.27,2.28 0.89,-0.09 0.09,0.55 0.7,-0.37 0.09,0.46 1.15,0.55 -0.44,0.73 0.02,1.36 0,0 -8.82,7.71 -1.49,0.43 -3.18,0 -0.3,0.44 0,0 -4.79,6.11 -3.39,0.88 -1.91,0 -0.42,-0.88 0.21,-1.09 2.33,-3.71 0.43,-1.96 -1.49,-2.63 -3.82,-3.49 -1.48,-0.44 -4.24,0 -1.06,-0.87 -0.64,-5.68 0,0 2.76,-3.27 0.1,-2.47 5.94,-6.29 z"
171
+ title="São Miguel"
172
+ id="CV-SM"
173
+ />
174
+ <path
175
+ class="island sotavento"
176
+ transform="scale(0.4, 0.4)"
177
+ d="m 574.91917,705.21285 -0.43,-0.43 0,0 -1.48,0.22 -2.76,4.14 -8.06,5.02 -4.45,0.87 -4.68,-0.59 0,0 -1.47,-0.5 -3.42,-5.44 0,0 6.39,-4.81 1.06,-1.97 0,-2.18 1.49,-3.93 2.96,-1.75 0,0 1.06,-0.6 0,0 0.71,0.42 0.69,1.78 1.2,0.53 0.35,1.41 2.06,0.71 0.69,0 2.41,-1.77 0.86,-0.18 1.89,0 1.38,0.89 1.2,4.6 z"
178
+ title="São Lourenço dos Órgãos"
179
+ id="CV-SO"
180
+ />
181
+ <path
182
+ class="island sotavento"
183
+ transform="scale(0.4, 0.4)"
184
+ d="m 544.33917,707.61285 0.13,-3.3 -0.69,-3.01 1.55,-2.3 0,-1.42 -1.03,-1.42 0.17,-2.3 4.47,-1.59 3.46,-3.03 0,0 0.25,0.26 0,0 9.97,0 1.69,1.31 0,1.75 -2.33,0.21 0,0 -1.91,1.09 0,0 -2.96,1.75 -1.49,3.93 0,2.18 -1.06,1.97 -6.39,4.81 0,0 -1.67,-0.23 -1.06,-0.66 0,0 z"
185
+ title="São Salvador do Mundo"
186
+ id="CV-SS"
187
+ />
188
+ <path
189
+ class="island barlavento"
190
+ transform="scale(0.4, 0.4)"
191
+ d="m 248.55917,190.52285 1.06,1.29 1.68,0.18 0.71,1.19 -0.8,2.66 -1.33,1.1 -0.18,1.1 -2.13,0.28 -1.42,-0.64 -3.1,0.09 -0.35,-1.38 -1.15,-1.56 0.89,-2.3 0.53,-0.55 1.95,0.46 3.64,-1.92 z m -30.89,-13.4 2.57,2.39 2.48,1.56 2.75,4.59 -2.3,-1.19 -1.33,0.09 -2.92,-2.66 0,-0.55 -0.8,-0.37 -1.86,-2.2 0.62,-1.47 0.79,-0.19 z m -30.81,-44.84 1.86,1.47 1.15,-0.09 0.35,0.74 1.06,0.46 4.34,1.29 0.44,0.46 -0.27,1.65 0.97,1.38 0.35,1.84 2.83,1.01 1.15,2.66 0.71,0.55 -0.44,0.83 0.53,1.01 2.13,2.39 1.86,0.74 1.95,0 3.36,-1.65 4.51,-0.09 0.89,0.83 0,1.47 -0.53,0.92 -1.86,1.84 -0.09,0.73 -2.3,-0.37 -1.24,1.1 -3.81,-0.64 -0.62,0.83 -1.5,-0.09 -0.09,0.46 -3.19,-0.55 -2.66,0 -0.89,0.46 -0.97,-0.28 -0.35,-3.58 -0.8,-1.29 -2.57,-1.93 -0.62,-1.01 -5.05,-2.57 -1.68,0.46 -2.04,-0.92 -1.68,-5.05 1.06,-0.46 0.97,-1.84 0.18,-2.02 0.97,-0.37 1.33,-2.02 -0.18,-0.64 0.48,-0.12 z m -45.41,-38.419998 3.36,2.3 1.33,2.39 0.09,1.749998 -0.71,-0.549998 -0.62,0.739998 0.35,1.29 -0.71,-0.19 -0.18,-0.64 -1.33,0.64 1.33,1.38 -0.71,0.09 -0.8,1.38 0.09,1.84 1.77,2.76 4.07,3.31 3.54,1.65 2.74,0.37 0.89,-1.1 2.21,-0.37 1.95,1.1 0.35,1.19 -0.35,1.29 -1.06,0.18 -1.68,1.29 0.44,1.75 0.89,0.74 -0.53,0.83 0.62,1.1 0.97,-0.18 0.71,0.46 -0.8,1.29 -0.18,4.87 -0.71,1.2 -2.21,0.55 -0.97,1.01 -2.04,-0.73 -2.21,0.55 -1.86,-0.55 -2.03,0.73 -0.35,0.74 -1.42,0.55 0,0.46 -3.19,1.75 -0.18,0.64 -1.33,-0.09 -0.71,0.64 -2.74,0.09 -0.44,0.46 -1.42,-0.09 -1.42,0.64 -2.12,-0.46 -0.62,0.64 -1.68,0.46 -0.27,1.19 -4.96,0.09 -0.8,0.73 0,1.65 -0.44,0.37 -2.75,0.28 -1.5,-0.92 -0.62,-0.37 -1.95,-1.19 -1.5,-0.46 -1.06,-1.1 -0.97,-0.74 -0.53,-0.74 -1.77,0.18 -2.12,-2.02 -1.86,-0.09 -1.86,-1.38 -1.86,0.55 -0.09,-0.64 -1.59,-1.01 -0.09,-0.46 -2.3,1.56 -1.42,-1.93 -1.33,-0.83 -0.18,-4.14 -0.97,-1.29 -1.86,-0.46 -5.05,1.01 0.09,-0.74 1.59,-2.02 -0.09,-0.64 0.89,-0.46 -0.09,-0.64 -1.77,-0.92 -0.09,-0.92 1.24,-0.74 0.97,0 0.53,-1.29 1.15,-0.55 0.09,-2.57 0.27,-0.37 1.15,0.18 0.35,-1.38 0.97,1.01 1.24,-0.18 1.15,-0.83 0.09,-1.1 -0.62,-1.01 0.88,-0.92 -0.09,-0.64 1.68,-0.09 -0.88,-2.21 2.66,1.29 0,-1.56 1.86,0.74 1.68,-1.66 2.21,0.09 0.62,0.92 0.18,1.65 0.44,-0.09 0.53,0.83 3.54,1.75 0.35,-0.92 1.95,-0.64 1.06,0.18 2.83,-2.94 -0.18,-1.29 -0.62,0.18 0.09,0.55 -0.89,-0.18 -0.35,-0.83 -0.62,0.64 -0.44,-0.37 -0.35,0.28 0,-0.74 0.71,-0.74 1.15,0.37 0.71,-0.74 -0.18,-1.47 -1.77,-0.83 0.09,-0.83 -0.35,-0.919998 2.57,0 0.44,-0.83 -0.27,-1.01 1.33,0.46 2.92,0 0.97,-2.57 1.33,-0.55 0.97,0.18 1.24,-1.29 0.71,0.74 -1.68,1.75 0.09,0.64 1.33,-0.55 0.62,1.75 3.01,1.47 1.59,0.18 2.92,-1.47 -0.35,-0.83 -0.44,0 0,-0.64 1.5,-0.55 0.44,-0.83 0.62,0.09 0.18,-0.74 -0.62,0.09 -0.18,-0.64 2.57,0 0.53,-0.46 1.36,-0.06 z"
192
+ title="São Vicente"
193
+ id="CV-SV"
194
+ />
195
+ <path
196
+ class="island sotavento"
197
+ transform="scale(0.4, 0.4)"
198
+ d="m 509.07917,622.09285 0.89,1 1.06,-0.45 0,-0.83 -0.62,-0.64 1.68,-0.27 -0.89,-1.28 0.18,-1.64 0.62,-0.18 0.35,0.46 0.63,-0.28 0,-0.55 0.79,0.64 1.06,-0.45 0.71,0.18 -0.26,-0.73 0.44,-0.46 -0.09,-1 1.68,0.36 0.8,1.47 1.24,-0.46 0.09,0.82 2.65,0.46 0.27,1.18 0.62,0.28 0.62,-0.83 0.8,0.28 -0.27,-1.37 0.62,-0.46 1.59,0.64 1.33,-0.09 0.09,0.46 0.71,-0.28 0,0.92 -0.45,0.27 0.71,0.46 1.06,0 0.62,-1.19 0.54,0 0.7,0.64 -0.26,0.64 1.24,0.73 0.09,0.64 1.59,0.82 -0.09,0.45 0.97,1.28 -0.26,0.91 0.8,0.46 -0.98,2.73 -1.59,-0.27 -0.62,0.55 0.35,1 1.06,0.18 -1.15,4.11 0.18,1.82 0.71,0.46 -0.09,1.91 0.89,2.1 2.56,3.19 1.07,0 0.61,0.91 1.42,0.27 -0.09,0.74 1.15,-1.01 1.64,1.92 0,0 -2.18,5.12 -5.94,6.29 -0.1,2.47 -2.76,3.27 0,0 -4.24,0 -1.27,-1.31 -0.64,-1.52 -1.91,-0.66 -1.06,4.15 -0.63,0.22 -1.27,-0.22 -1.49,-1.53 -1.7,-0.87 -2.33,1.09 -3.95,-0.06 0,0 0.53,-2.77 0.53,-0.73 -0.35,-1.09 0.35,-3.74 0.45,-0.73 1.24,-0.36 2.03,-1.83 0.36,-0.63 -0.18,-2.1 0.53,-1.1 -0.09,-1.27 -1.24,-2.01 -2.3,-1.55 -1.5,0.27 0.17,-0.82 -0.97,-2.09 0.09,-2.92 -0.36,-0.73 1.95,-0.82 0.09,-0.82 -1.06,-1 -0.53,0.18 -0.09,-0.55 -0.53,0 -0.45,-1.19 -3.01,-0.36 -0.35,-0.37 0.18,-1.36 -0.89,-0.46 1.77,-2.37 2.48,0.46 0.44,-0.64 -0.17,-0.92 0.7,-0.91 -0.08,-0.64 -1.15,-0.63 -1.07,0.18 -0.44,-1.37 z"
199
+ title="Tarrafal"
200
+ id="CV-TA"
201
+ />
202
+ <path
203
+ class="island barlavento"
204
+ transform="scale(0.4, 0.4)"
205
+ d="m 321.40917,176.66285 0.09,0.21 0,0 0,0 0,0 0.01,0.16 0,0 0,1.11 2.41,5.53 -0.34,2.68 -1.72,1.61 -0.52,1.24 0,1.61 1.03,2.32 2.41,1.07 6.02,0 1.89,1.78 1.55,1.79 0.69,1.78 0.34,4.46 2.24,1.96 1.03,2.86 -0.17,10.52 -2.58,6.42 0,3.21 -0.86,2.14 -1.55,7.13 -0.72,0.87 0,0 -1.33,-0.59 -0.98,1.56 -0.44,-0.19 -0.26,-2.11 0.7,-0.27 -0.44,-1.56 0.89,-0.74 -0.09,-1.37 -1.15,-1.29 -0.8,-2.29 -0.18,-2.3 -0.97,-2.11 -2.21,-0.91 -0.71,-1.38 -0.71,-0.18 -0.18,-1.75 -0.17,-1.28 -0.71,-0.83 0.18,-1.1 -0.54,-1.28 -2.03,-0.37 -0.8,-0.92 -0.09,-0.92 0.45,-0.18 -0.36,-1.56 0.44,-0.83 -0.88,-0.64 0.62,-0.37 -0.09,-0.82 -0.8,-0.55 -0.53,-1.56 -2.21,-1.38 -4.43,-0.28 -1.5,-1.37 -6.55,-3.49 -0.18,-0.83 -1.15,-1.1 -1.15,-0.18 -0.71,-0.65 0.62,-1.92 -1.77,-0.37 -1.06,-0.92 -0.36,-4.41 0.71,-1.19 0,-0.92 -0.71,-1.93 0.62,-2.48 1.24,-1.74 0.98,0.55 0.44,-0.18 -0.89,-1.29 1.07,-0.55 2.12,0.18 1.06,-1.1 2.04,0.19 2.04,-1.66 0.79,0.19 0.62,-1.47 2.39,-0.28 0.62,-0.82 0.44,0.55 1.69,-0.46 1.77,1.37 1.15,-0.36 0.44,0.36 z"
206
+ title="Tarrafal de São Nicolau"
207
+ id="CV-TS"
208
+ />
209
+ </g>
210
+ </svg>
211
+ <script>
212
+ const tooltip = document.getElementById("tooltip");
213
+ const paths = document.querySelectorAll("svg path");
214
+
215
+ paths.forEach((path) => {
216
+ path.addEventListener("mousemove", (e) => {
217
+ tooltip.style.left = e.pageX + 10 + "px";
218
+ tooltip.style.top = e.pageY + 10 + "px";
219
+ tooltip.innerText = path.getAttribute("title");
220
+ tooltip.style.opacity = 1;
221
+ tooltip.style.position = "absolute";
222
+ tooltip.style.zIndex = 1000;
223
+ });
224
+ path.addEventListener("mouseleave", () => {
225
+ tooltip.style.opacity = 0;
226
+ });
227
+ });
228
+ </script>
229
+ </body>
230
+ </html>
src/cape-verde.svg ADDED