diff --git a/plugin/contents/ui/dancer.html b/plugin/contents/ui/dancer.html
index ed8919e..53e5f14 100644
--- a/plugin/contents/ui/dancer.html
+++ b/plugin/contents/ui/dancer.html
@@ -1302,15 +1302,44 @@ function mwColor(dl) {
return [mix(255, 236, 186), mix(226, 224, 205), mix(188, 214, 242)];
}
-/* Faixas de poeira (Grande Fenda + secundária): 1 = livre, ~0.1 = dentro da poeira */
+/* Nuvens escuras discretas em posições reais aproximadas
+ (Saco de Carvão junto ao Cruzeiro, região do Cachimbo em Ofiúco...) */
+const MW_DARKS = [
+ { l: 303, b: -1.5, rl: 3.5, rb: 3.0, s: 0.85 }, // Saco de Carvão
+ { l: 357, b: 4.5, rl: 5.0, rb: 2.2, s: 0.80 }, // Cachimbo (Ofiúco)
+ { l: 31, b: -1.0, rl: 4.0, rb: 1.8, s: 0.75 },
+ { l: 16, b: 2.5, rl: 3.0, rb: 1.6, s: 0.70 },
+ { l: 344, b: -2.5, rl: 3.2, rb: 1.8, s: 0.70 },
+];
+
+/* Contribuição de uma faixa de poeira com borda suave (0 = fora, s = centro) */
+function laneDark(b, center, halfw, strength) {
+ const d = Math.abs(b - center) / Math.max(halfw, 0.3);
+ return d >= 1 ? 0 : strength * (1 - d * d) ** 2;
+}
+
+/* Poeira: 1 = céu livre, ->0.08 = poeira densa. Caminhos e larguras
+ irregulares (senos incomensuráveis) + escuridão em manchas, não uniforme */
function mwDust(l, b, dl) {
- if (dl > 100) return 1;
- const fade = dl > 70 ? (100 - dl) / 30 : 1; // fenda some longe do centro
- const lane1 = Math.abs(b - 1.6 * Math.sin(l * DEG * 2.2)) <
- (2.2 + 1.2 * Math.sin(l * 0.7)) * fade;
- const lane2 = Math.abs(b + 2.6 - 1.2 * Math.sin(l * DEG * 1.4 + 1.7)) <
- (1.3 + 0.8 * Math.sin(l * 1.3 + 0.5)) * fade;
- return (lane1 || lane2) ? 0.1 : 1;
+ if (dl > 105) return 1;
+ const fade = Math.min(1, (105 - dl) / 35); // fenda some longe do centro
+ const x = l * DEG;
+ const wob1 = Math.sin(x * 2.2) + 0.6 * Math.sin(x * 4.9 + 1.7) +
+ 0.35 * Math.sin(x * 9.3 + 0.6);
+ const wob2 = Math.sin(x * 1.4 + 1.7) + 0.6 * Math.sin(x * 3.7 + 4.2);
+ const patch1 = 0.62 + 0.38 * Math.sin(x * 1.1 + 2.9) * Math.sin(x * 2.6 + 0.4);
+ const patch2 = 0.55 + 0.45 * Math.sin(x * 0.9 + 5.1);
+ let dark = laneDark(b, 0.9 * wob1, 2.1 + 0.9 * Math.sin(x * 3.3 + 2.2),
+ 0.9 * patch1);
+ dark = Math.max(dark, laneDark(b, -2.4 + 0.7 * wob2,
+ 1.4 + 0.7 * Math.sin(x * 2.8 + 1.1),
+ 0.8 * patch2));
+ for (const d of MW_DARKS) {
+ const dlc = Math.min(Math.abs(l - d.l), 360 - Math.abs(l - d.l));
+ const dd = (dlc / d.rl) ** 2 + ((b - d.b) / d.rb) ** 2;
+ if (dd < 1) dark = Math.max(dark, d.s * (1 - dd));
+ }
+ return 1 - Math.min(0.92, dark * fade);
}
/* Nuvens estelares (Scutum, Sagitário, Carina...) — adensamentos fixos na banda */