Skip to content

Commit 707971e

Browse files
Bikram GoleBikram Gole
authored andcommitted
Tweak name audio button placement and reliability
1 parent 809582f commit 707971e

2 files changed

Lines changed: 55 additions & 17 deletions

File tree

script.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,13 +1614,22 @@ function initNamePronounce() {
16141614

16151615
const synth = window.speechSynthesis;
16161616
let currentUtterance = null;
1617+
let cachedVoices = [];
1618+
1619+
const syncVoices = () => {
1620+
cachedVoices = synth.getVoices?.() || [];
1621+
};
1622+
1623+
syncVoices();
1624+
if (typeof synth.addEventListener === "function") {
1625+
synth.addEventListener("voiceschanged", syncVoices);
1626+
}
16171627

16181628
const pickVoice = () => {
1619-
const voices = synth.getVoices?.() || [];
1620-
if (!voices.length) return null;
1629+
if (!cachedVoices.length) return null;
16211630
return (
1622-
voices.find((voice) => voice.lang?.toLowerCase() === "en-us") ||
1623-
voices.find((voice) => voice.lang?.toLowerCase().startsWith("en")) ||
1631+
cachedVoices.find((voice) => voice.lang?.toLowerCase() === "en-us") ||
1632+
cachedVoices.find((voice) => voice.lang?.toLowerCase().startsWith("en")) ||
16241633
null
16251634
);
16261635
};
@@ -1640,6 +1649,13 @@ function initNamePronounce() {
16401649

16411650
const speakName = () => {
16421651
stopSpeech();
1652+
if (synth.paused) {
1653+
try {
1654+
synth.resume();
1655+
} catch (error) {
1656+
// ignore
1657+
}
1658+
}
16431659
const text = heroName?.dataset.name || heroName?.textContent || "Bikram Gole";
16441660
const utterance = new SpeechSynthesisUtterance(text);
16451661
utterance.lang = "en-US";
@@ -1660,6 +1676,9 @@ function initNamePronounce() {
16601676
stopSpeech();
16611677
return;
16621678
}
1679+
if (!cachedVoices.length) {
1680+
syncVoices();
1681+
}
16631682
speakName();
16641683
});
16651684

styles.css

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,26 +1359,31 @@ h1 {
13591359
}
13601360

13611361
.hero-name-row {
1362-
display: flex;
1363-
align-items: baseline;
1362+
display: inline-flex;
1363+
align-items: flex-end;
13641364
flex-wrap: wrap;
1365-
gap: 0.5rem;
1365+
gap: 0.35rem;
1366+
position: relative;
13661367
}
13671368

13681369
.name-speak {
13691370
display: inline-flex;
13701371
align-items: center;
13711372
justify-content: center;
1372-
width: clamp(1.5rem, 2.4vw, 2rem);
1373-
height: clamp(1.5rem, 2.4vw, 2rem);
1374-
border-radius: 999px;
1375-
border: 1px solid var(--border);
1373+
width: clamp(1.25rem, 2vw, 1.6rem);
1374+
height: clamp(1.25rem, 2vw, 1.6rem);
1375+
border-radius: 6px;
1376+
border: 1px solid rgba(120, 190, 255, 0.55);
13761377
background:
1377-
radial-gradient(60% 60% at 30% 30%, rgba(120, 200, 255, 0.25), transparent 70%),
1378+
linear-gradient(160deg, rgba(105, 190, 255, 0.32), rgba(12, 16, 28, 0.9)),
13781379
var(--card);
13791380
color: var(--blue-2);
1380-
box-shadow: 0 10px 22px rgba(10, 20, 40, 0.25);
1381+
box-shadow: 0 8px 18px rgba(8, 16, 32, 0.3);
13811382
cursor: pointer;
1383+
margin-left: -0.12rem;
1384+
transform: translateY(-0.52em) rotate(-12deg);
1385+
transform-origin: left bottom;
1386+
z-index: 3;
13821387
transition: transform var(--motion-fast) var(--ease-out), box-shadow var(--motion-base) var(--ease-out),
13831388
border-color var(--motion-fast) var(--ease-out), color var(--motion-fast) var(--ease-out),
13841389
background var(--motion-fast) var(--ease-out);
@@ -1391,10 +1396,10 @@ h1 {
13911396
}
13921397

13931398
.name-speak:hover {
1394-
transform: translateY(-1px) scale(1.03);
1395-
border-color: rgba(143, 204, 255, 0.7);
1399+
transform: translateY(-0.6em) rotate(-12deg) scale(1.04);
1400+
border-color: rgba(143, 204, 255, 0.85);
13961401
color: var(--orange-2);
1397-
box-shadow: 0 12px 26px rgba(64, 150, 255, 0.22), 0 0 18px rgba(110, 186, 255, 0.32);
1402+
box-shadow: 0 12px 22px rgba(64, 150, 255, 0.22), 0 0 18px rgba(110, 186, 255, 0.32);
13981403
}
13991404

14001405
.name-speak:focus-visible {
@@ -1403,7 +1408,7 @@ h1 {
14031408
}
14041409

14051410
.name-speak:active {
1406-
transform: translateY(0) scale(0.98);
1411+
transform: translateY(-0.46em) rotate(-12deg) scale(0.98);
14071412
}
14081413

14091414
.name-speak.speaking {
@@ -1430,6 +1435,20 @@ h1 {
14301435
}
14311436
}
14321437

1438+
@media (max-width: 520px) {
1439+
.name-speak {
1440+
transform: translateY(-0.4em) rotate(-10deg);
1441+
}
1442+
1443+
.name-speak:hover {
1444+
transform: translateY(-0.45em) rotate(-10deg) scale(1.03);
1445+
}
1446+
1447+
.name-speak:active {
1448+
transform: translateY(-0.34em) rotate(-10deg) scale(0.98);
1449+
}
1450+
}
1451+
14331452
@media (prefers-reduced-motion: reduce) {
14341453
.name-speak {
14351454
transition: none;

0 commit comments

Comments
 (0)