feat: per-theme accent + Activity WhatsApp(en)/GitHub cards, softer icon borders
- theme: store accent separately for light/dark (theme-core/controls) - en contacts: WhatsApp card instead of VK (wa.me link) - Activity: add GitHub card (logo webp) in both locales - mp-card__image border uses --line to match card (less contrast)
This commit is contained in:
1 parent
302855efcf
commit
97ea48bc6f
25 files changed
+235
-47
No files matched your search
+4
-3
@@ -20,9 +20,10 @@ function apply(patch) {
|
||||
if (state.radius) root.dataset.radius = state.radius;
|
||||
if (state.font) root.dataset.font = state.font;
|
||||
|
||||
root.style.setProperty("--theme-h", String(state.h));
|
||||
root.style.setProperty("--theme-s", String(state.s));
|
||||
root.style.setProperty("--theme-l", String(state.l));
|
||||
const labAcc = state[state.mode] || state.light || { h: 210, s: 90, l: 40 };
|
||||
root.style.setProperty("--theme-h", String(labAcc.h));
|
||||
root.style.setProperty("--theme-s", String(labAcc.s));
|
||||
root.style.setProperty("--theme-l", String(labAcc.l));
|
||||
|
||||
ensureThemeFontLoaded(state.font);
|
||||
syncButtons();
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.656 6.34316C14.5318 3.21897 9.46648 3.21897 6.34232 6.34316C3.74758 8.93789 3.30781 12.8715 5.02309 15.92L4.24314 19.8354L8.2061 19.046C11.2362 20.6787 15.0971 20.2157 17.656 17.6569C20.7802 14.5326 20.7802 9.46742 17.656 6.34316Z" fill="#3FC352"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.5679 13.3968C15.171 13.1597 14.6549 12.8947 14.1879 13.0859C13.8292 13.2327 13.6002 13.7937 13.3682 14.0802C13.2488 14.2273 13.1068 14.2502 12.9236 14.1764C11.5779 13.6404 10.5468 12.7422 9.80433 11.5046C9.67863 11.312 9.70099 11.1605 9.85281 10.9821C10.0772 10.7182 10.3588 10.4182 10.4196 10.0622C10.4799 9.70616 10.3133 9.29018 10.1658 8.97322C9.97778 8.56833 9.76779 7.99077 9.36195 7.76164C8.98897 7.55093 8.49821 7.66875 8.16553 7.93941C7.59239 8.40645 7.31553 9.13798 7.32392 9.86342C7.32638 10.0694 7.35168 10.2751 7.39979 10.4739C7.51539 10.9524 7.73658 11.3991 7.98526 11.8237C8.17293 12.144 8.37673 12.4545 8.59682 12.7534C9.31644 13.7312 10.212 14.5808 11.2487 15.2158C11.7669 15.5332 12.3247 15.8114 12.9026 16.0023C13.5506 16.2163 14.1279 16.4393 14.8275 16.3063C15.5602 16.1672 16.2827 15.7138 16.5733 15.008C16.6592 14.7987 16.7027 14.566 16.6543 14.3452C16.5549 13.889 15.9368 13.6177 15.5679 13.3968Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
+5
-1
@@ -3383,7 +3383,7 @@ html[data-theme="light"] .hero__portrait-shell {
|
||||
height: auto;
|
||||
object-fit: cover;
|
||||
object-position: center;
|
||||
border: 1px solid color-mix(in srgb, var(--line) 84%, var(--text) 16%);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: calc(var(--radius-card) - 4px);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
@@ -4400,6 +4400,10 @@ html[data-radius="strong"] .skill-task-card__solution {
|
||||
--contact-brand: #0077ff;
|
||||
}
|
||||
|
||||
.contact-card--brand-whatsapp {
|
||||
--contact-brand: #25D366;
|
||||
}
|
||||
|
||||
.contact-card--brand-ya {
|
||||
--contact-brand: #f8604a;
|
||||
}
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -1008,7 +1008,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -1138,7 +1138,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -1172,7 +1172,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -758,7 +758,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -960,7 +960,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -702,7 +702,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -702,7 +702,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -736,7 +736,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -841,7 +841,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -702,7 +702,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -1170,7 +1170,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -1095,7 +1095,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../../../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
+31
-1
@@ -1265,6 +1265,36 @@
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--horizontal mp-card--hor-image"
|
||||
href="https://github.com/mamadaevv"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="GitHub — open profile"
|
||||
>
|
||||
<div class="mp-card__media" aria-hidden="true">
|
||||
<img
|
||||
class="mp-card__image"
|
||||
src="../assets/misc/github_logo.webp"
|
||||
alt=""
|
||||
width="800"
|
||||
height="800"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
<div class="mp-card__body">
|
||||
<h3 class="mp-card__title">
|
||||
GitHub
|
||||
<span class="mp-card__ext" aria-hidden="true"></span>
|
||||
</h3>
|
||||
<p class="mp-card__desc">
|
||||
My projects and code experiments.
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--compact"
|
||||
@@ -1320,7 +1350,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="../assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -1287,6 +1287,36 @@
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--horizontal mp-card--hor-image"
|
||||
href="https://github.com/mamadaevv"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="GitHub — открыть профиль"
|
||||
>
|
||||
<div class="mp-card__media" aria-hidden="true">
|
||||
<img
|
||||
class="mp-card__image"
|
||||
src="assets/misc/github_logo.webp"
|
||||
alt=""
|
||||
width="800"
|
||||
height="800"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
<div class="mp-card__body">
|
||||
<h3 class="mp-card__title">
|
||||
GitHub
|
||||
<span class="mp-card__ext" aria-hidden="true"></span>
|
||||
</h3>
|
||||
<p class="mp-card__desc">
|
||||
Мои проекты и эксперименты с кодом.
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--compact"
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
L_RANGE,
|
||||
RADIUS_IDS,
|
||||
THEME_MODE_IDS,
|
||||
effectiveThemeMode,
|
||||
FONT_IDS,
|
||||
MESH_BG_IDS,
|
||||
applyThemeState,
|
||||
@@ -40,9 +41,13 @@ export function initThemeControls() {
|
||||
applyThemeState(state);
|
||||
ensureThemeFontLoaded(state.font);
|
||||
|
||||
function acc() {
|
||||
return state[effectiveThemeMode(state)] || state.light;
|
||||
}
|
||||
|
||||
function syncHueSlider() {
|
||||
hueSlider.value = String(Math.round(state.h));
|
||||
hueSlider.setAttribute("aria-valuenow", String(Math.round(state.h)));
|
||||
hueSlider.value = String(Math.round(acc().h));
|
||||
hueSlider.setAttribute("aria-valuenow", String(Math.round(acc().h)));
|
||||
}
|
||||
|
||||
function persistAndApply() {
|
||||
@@ -65,8 +70,8 @@ export function initThemeControls() {
|
||||
}
|
||||
|
||||
syncHueSlider();
|
||||
drawSLPlane(canvas, state.h);
|
||||
updateKnob(knob, state.s, state.l);
|
||||
drawSLPlane(canvas, acc().h);
|
||||
updateKnob(knob, acc().s, acc().l);
|
||||
syncAriaRadioGroup(radiusBtns, "data-radius-option", state.radius);
|
||||
syncAriaRadioGroup(themeModeBtns, "data-theme-mode", state.mode);
|
||||
syncAriaRadioGroup(fontBtns, "data-font-option", state.font);
|
||||
@@ -75,6 +80,15 @@ export function initThemeControls() {
|
||||
bindOptionButtons(radiusBtns, "data-radius-option", RADIUS_IDS, "radius");
|
||||
bindOptionButtons(fontBtns, "data-font-option", FONT_IDS, "font");
|
||||
bindOptionButtons(themeModeBtns, "data-theme-mode", THEME_MODE_IDS, "mode");
|
||||
themeModeBtns.forEach((btn) =>
|
||||
btn.addEventListener("click", () => {
|
||||
if (!panel.hidden) {
|
||||
syncHueSlider();
|
||||
drawSLPlane(canvas, acc().h);
|
||||
updateKnob(knob, acc().s, acc().l);
|
||||
}
|
||||
}),
|
||||
);
|
||||
if (meshBgBtns.length >= 2) bindOptionButtons(meshBgBtns, "data-mesh-bg-option", MESH_BG_IDS, "meshBg");
|
||||
|
||||
function setPanelOpen(open) {
|
||||
@@ -84,8 +98,8 @@ export function initThemeControls() {
|
||||
btn.setAttribute("aria-label", open ? "Закрыть настройки стиля" : "Настройки стиля");
|
||||
});
|
||||
if (open) {
|
||||
drawSLPlane(canvas, state.h);
|
||||
updateKnob(knob, state.s, state.l);
|
||||
drawSLPlane(canvas, acc().h);
|
||||
updateKnob(knob, acc().s, acc().l);
|
||||
syncAriaRadioGroup(themeModeBtns, "data-theme-mode", state.mode);
|
||||
syncAriaRadioGroup(fontBtns, "data-font-option", state.font);
|
||||
if (meshBgBtns.length >= 2) syncAriaRadioGroup(meshBgBtns, "data-mesh-bg-option", state.meshBg);
|
||||
@@ -95,6 +109,11 @@ export function initThemeControls() {
|
||||
subscribePrefersColorSchemeChange(() => {
|
||||
if (state.mode !== "system") return;
|
||||
applyThemeState(state);
|
||||
if (!panel.hidden) {
|
||||
syncHueSlider();
|
||||
drawSLPlane(canvas, acc().h);
|
||||
updateKnob(knob, acc().s, acc().l);
|
||||
}
|
||||
});
|
||||
|
||||
panelBtns.forEach((btn) => {
|
||||
@@ -143,9 +162,10 @@ export function initThemeControls() {
|
||||
if (r.width <= 0 || r.height <= 0) return;
|
||||
const x = clampNum(((clientX - r.left) / r.width) * 100, 0, 100, 0) / 100;
|
||||
const y = clampNum(((clientY - r.top) / r.height) * 100, 0, 100, 0) / 100;
|
||||
state.s = Math.round(PICK.sMin + x * S_RANGE);
|
||||
state.l = Math.round(PICK.lMin + (1 - y) * L_RANGE);
|
||||
updateKnob(knob, state.s, state.l);
|
||||
const a = acc();
|
||||
a.s = Math.round(PICK.sMin + x * S_RANGE);
|
||||
a.l = Math.round(PICK.lMin + (1 - y) * L_RANGE);
|
||||
updateKnob(knob, a.s, a.l);
|
||||
persistAndApply();
|
||||
}
|
||||
|
||||
@@ -168,10 +188,11 @@ export function initThemeControls() {
|
||||
});
|
||||
|
||||
hueSlider.addEventListener("input", () => {
|
||||
state.h = clampNum(hueSlider.value, 0, 360, state.h);
|
||||
const a = acc();
|
||||
a.h = clampNum(hueSlider.value, 0, 360, a.h);
|
||||
syncHueSlider();
|
||||
drawSLPlane(canvas, state.h);
|
||||
updateKnob(knob, state.s, state.l);
|
||||
drawSLPlane(canvas, a.h);
|
||||
updateKnob(knob, a.s, a.l);
|
||||
persistAndApply();
|
||||
});
|
||||
}
|
||||
@@ -27,7 +27,14 @@ export const S_RANGE = PICK.sMax - PICK.sMin;
|
||||
export const L_RANGE = PICK.lMax - PICK.lMin;
|
||||
|
||||
export function defaultThemeState() {
|
||||
return { mode: "system", h: 210, s: 90, l: 40, radius: "medium", font: "geologica", meshBg: "on" };
|
||||
return {
|
||||
mode: "system",
|
||||
light: { h: 210, s: 90, l: 40 },
|
||||
dark: { h: 210, s: 90, l: 40 },
|
||||
radius: "medium",
|
||||
font: "geologica",
|
||||
meshBg: "on",
|
||||
};
|
||||
}
|
||||
|
||||
export function effectiveThemeMode(state) {
|
||||
@@ -35,23 +42,53 @@ export function effectiveThemeMode(state) {
|
||||
return state.mode;
|
||||
}
|
||||
|
||||
export function activeAccent(state) {
|
||||
const key = effectiveThemeMode(state);
|
||||
return state[key] || state.light || { h: 210, s: 90, l: 40 };
|
||||
}
|
||||
|
||||
function parseAccent(obj, base) {
|
||||
if (!obj) return { ...base };
|
||||
return {
|
||||
h: clampNum(obj.h ?? obj.hue, 0, 360, base.h),
|
||||
s: clampNum(obj.s ?? obj.sat, PICK.sMin, PICK.sMax, base.s),
|
||||
l: clampNum(obj.l ?? obj.light, PICK.lMin, PICK.lMax, base.l),
|
||||
};
|
||||
}
|
||||
|
||||
export function readThemeState() {
|
||||
try {
|
||||
const raw = localStorage.getItem(STORAGE_KEY);
|
||||
if (!raw) return defaultThemeState();
|
||||
const o = JSON.parse(raw);
|
||||
const base = defaultThemeState();
|
||||
const hRaw = o.h ?? o.hue;
|
||||
const h = clampNum(hRaw, 0, 360, base.h);
|
||||
const s = clampNum(o.s ?? o.sat, PICK.sMin, PICK.sMax, base.s);
|
||||
const lRaw = o.l ?? o.light;
|
||||
const l = clampNum(lRaw, PICK.lMin, PICK.lMax, base.l);
|
||||
const mode =
|
||||
o.mode === "light" || o.mode === "dark" || o.mode === "system" ? o.mode : base.mode;
|
||||
const radius = RADIUS_IDS.includes(o.radius) ? o.radius : base.radius;
|
||||
const font = normalizeFontId(o.font ?? base.font);
|
||||
const meshBg = MESH_BG_IDS.includes(o.meshBg) ? o.meshBg : base.meshBg;
|
||||
return { mode, h, s, l, radius, font, meshBg };
|
||||
|
||||
let light = base.light;
|
||||
let dark = base.dark;
|
||||
if (o.light || o.dark) {
|
||||
light = parseAccent(o.light, base.light);
|
||||
dark = parseAccent(o.dark, base.dark);
|
||||
} else if (
|
||||
o.h !== undefined ||
|
||||
o.hue !== undefined ||
|
||||
o.s !== undefined ||
|
||||
o.sat !== undefined ||
|
||||
o.l !== undefined ||
|
||||
o.light !== undefined
|
||||
) {
|
||||
// legacy: единый акцент → копируем в обе темы
|
||||
const h = clampNum(o.h ?? o.hue, 0, 360, base.light.h);
|
||||
const s = clampNum(o.s ?? o.sat, PICK.sMin, PICK.sMax, base.light.s);
|
||||
const l = clampNum(o.l ?? o.light, PICK.lMin, PICK.lMax, base.light.l);
|
||||
light = { h, s, l };
|
||||
dark = { h, s, l };
|
||||
}
|
||||
return { mode, light, dark, radius, font, meshBg };
|
||||
} catch {
|
||||
return defaultThemeState();
|
||||
}
|
||||
@@ -62,9 +99,8 @@ export function writeThemeState(state) {
|
||||
STORAGE_KEY,
|
||||
JSON.stringify({
|
||||
mode: state.mode,
|
||||
h: state.h,
|
||||
s: state.s,
|
||||
l: state.l,
|
||||
light: state.light,
|
||||
dark: state.dark,
|
||||
radius: state.radius,
|
||||
font: state.font,
|
||||
meshBg: state.meshBg,
|
||||
@@ -110,14 +146,16 @@ export function relativeLuminance(rgb) {
|
||||
|
||||
export function applyThemeState(state) {
|
||||
const root = document.documentElement;
|
||||
root.dataset.theme = effectiveThemeMode(state);
|
||||
const mode = effectiveThemeMode(state);
|
||||
root.dataset.theme = mode;
|
||||
root.dataset.radius = state.radius;
|
||||
root.dataset.font = state.font;
|
||||
root.dataset.meshBg = state.meshBg === "off" ? "off" : "on";
|
||||
root.style.setProperty("--theme-h", String(state.h));
|
||||
root.style.setProperty("--theme-s", String(state.s));
|
||||
root.style.setProperty("--theme-l", String(state.l));
|
||||
const rgb = hslToRgb(state.h, state.s, state.l);
|
||||
const acc = activeAccent(state);
|
||||
root.style.setProperty("--theme-h", String(acc.h));
|
||||
root.style.setProperty("--theme-s", String(acc.s));
|
||||
root.style.setProperty("--theme-l", String(acc.l));
|
||||
const rgb = hslToRgb(acc.h, acc.s, acc.l);
|
||||
const lum = relativeLuminance(rgb);
|
||||
root.style.setProperty("--on-accent", lum > 0.58 ? "hsl(220 14% 12%)" : "hsl(0 0% 98%)");
|
||||
window.dispatchEvent(new CustomEvent("site-theme-applied", { bubbles: true }));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<h2 class="section__title">Contact</h2>
|
||||
<ul class="contact-grid">
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-tg" href="https://t.me/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="{{assetPrefix}}assets/shared/icons/tg.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">Telegram</span><span class="contact-card__hint">I'll reply today</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-vk" href="https://vk.com/mamadaevv" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="{{assetPrefix}}assets/shared/icons/vk.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">VK</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
<li><a class="contact-card contact-card--link contact-card--brand-whatsapp" href="https://wa.me/qr/E2AWW5ZHE3ANJ1" rel="noopener noreferrer"><span class="contact-card__corner" aria-hidden="true"></span><span class="contact-card__icon" aria-hidden="true"><img src="{{assetPrefix}}assets/shared/icons/whatsapp.svg" alt="" width="24" height="24" loading="eager" decoding="async" /></span><span class="contact-card__body"><span class="contact-card__name">WhatsApp</span><span class="contact-card__hint">Stable connection</span></span></a></li>
|
||||
|
||||
<li><button type="button" class="contact-card contact-card--action contact-card--brand-email" data-contact-copy data-email-b64="bmlrQG1hbWFkYWV2di5zaXRl" data-hint-default="Copy address" aria-label="Copy email address to clipboard"><span class="contact-card__corner contact-card__corner--copy" aria-hidden="true"></span><span class="contact-card__icon contact-card__icon--accent" aria-hidden="true"></span><span class="contact-card__body"><span class="contact-card__name">Email</span><span class="contact-card__hint" data-contact-copy-hint>Copy address</span></span></button></li>
|
||||
</ul>
|
||||
|
||||
@@ -108,6 +108,36 @@
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--horizontal mp-card--hor-image"
|
||||
href="https://github.com/mamadaevv"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="GitHub — open profile"
|
||||
>
|
||||
<div class="mp-card__media" aria-hidden="true">
|
||||
<img
|
||||
class="mp-card__image"
|
||||
src="{{assetPrefix}}assets/misc/github_logo.webp"
|
||||
alt=""
|
||||
width="800"
|
||||
height="800"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
<div class="mp-card__body">
|
||||
<h3 class="mp-card__title">
|
||||
GitHub
|
||||
<span class="mp-card__ext" aria-hidden="true"></span>
|
||||
</h3>
|
||||
<p class="mp-card__desc">
|
||||
My projects and code experiments.
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--compact"
|
||||
|
||||
@@ -108,6 +108,36 @@
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--horizontal mp-card--hor-image"
|
||||
href="https://github.com/mamadaevv"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="GitHub — открыть профиль"
|
||||
>
|
||||
<div class="mp-card__media" aria-hidden="true">
|
||||
<img
|
||||
class="mp-card__image"
|
||||
src="{{assetPrefix}}assets/misc/github_logo.webp"
|
||||
alt=""
|
||||
width="800"
|
||||
height="800"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
<div class="mp-card__body">
|
||||
<h3 class="mp-card__title">
|
||||
GitHub
|
||||
<span class="mp-card__ext" aria-hidden="true"></span>
|
||||
</h3>
|
||||
<p class="mp-card__desc">
|
||||
Мои проекты и эксперименты с кодом.
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="mini-projects-grid__item" data-mp-cells="2">
|
||||
<a
|
||||
class="mp-card mp-card--link mp-card--compact"
|
||||
|
||||
Reference in new issue
Block a user