/* >>> banners.css (10070 bytes) */
/* Main header for web-site-optimization.html */
.mainHeader {
    width: 100%;
    max-width: 100vw;
    aspect-ratio: 990 / 240;
    position: relative;
    margin: 0 auto 0.6rem auto;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #c00;
    border-top-left-radius: 18px;
    border-top-right-radius: 18px;
}

.desktop-header {
    display: block;
    background: #e53935;
}

.mobile-header {
    display: none;
}

/* Show mobile header and hide desktop header on small screens (iPhone, Galaxy, etc.) */
@media (max-width: 767px) {
    .desktop-header {
        display: none !important;
    }

    .mobile-header {
        display: block !important;
        position: fixed;
        width: 100vw;
        max-width: 100vw;
        min-width: 100vw;
        height: auto;
        display: block;
        object-fit: cover;
        background: #e53935;
        margin: 0 !important;
        padding: 0 !important;
        border-radius: 0 !important;
        position: relative;
        left: 0;
        right: 0;
        top: 0;
        transform: none;
    }

    html,
    body {
        margin: 0 !important;
        padding: 0 !important;
        width: 100vw !important;
        overflow-x: hidden !important;
    }
}

/* Store banner image */
.storeBannerImage {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    z-index: 1;
}

/* Store logo link */
.storeLogoLink {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

/* Store logo image */
.storeLogoImage {
    width: 100%;
    height: 100%;
    max-width: none;
    min-width: 0;
    object-fit: contain;
    object-position: left;
}

/*
    banners.css - Styling for all banner elements throughout the site
    Last commented: 2025-08-23
    Structure: Banner classes for different sections/pages
*/

/* Post banner image - full-width, height scales proportionally with content area */
.post-banner {
    display: block;
    width: 100%;
    max-width: 950px;
    max-height: 200px;
    object-fit: cover;
    margin: 0 0 20px 0;
    border-radius: 0;
}

/* Shared banner element helpers (extracted from repeated inline styles) */
.banner-bg-cover {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    z-index: 1;
}

.banner-logo-link {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

.banner-logo-img {
    width: 100%;
    height: 100%;
    max-width: none;
    min-width: 0;
    object-fit: contain;
    object-position: left;
}

/* === end of banners.css === */

/* >>> bloggrid.css (6289 bytes) */
/* Ensure block titles and descriptions align vertically */
.blockCaption h4,
.blockCaption h4 {
    padding-left: 0 !important;
    margin-left: 0 !important;
    text-indent: 0 !important;
    padding-bottom: 6px !important;
    color: #000 !important;
}

.blockCaption .postDescription {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box;
    padding-bottom: 0px;
}

/* Ensure post description paragraphs in blog grid do not inherit .postSection p width */
.postSection .gridBlock .blockCaption .postDescription {
    font-size: 13px !important;
    max-width: 100% !important;
    min-width: 0 !important;
    width: auto !important;
    overflow-wrap: break-word;
    word-break: break-word;
    padding-left: 0px;
}

/* Prevent inherited width from .postSection p affecting blog grid post descriptions */
.postSection .gridBlock .postDescription p {
    max-width: 100% !important;
    min-width: 0 !important;
    width: auto !important;
    overflow-wrap: break-word;
    word-break: break-word;
}

/* Ensure post description paragraphs do not inherit .postSection p width */
.postSection .gridBlock .postDescription p {
    overflow-wrap: break-word;
    word-break: break-word;
}

/*
    bloggrid.css - Blog grid and block styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Blog Grid, Grid Block, Block Caption, Buttons
*/

/*
This document contains the styling for ALL blog grids
Used in Blog Layout and 'Advertorials' post
*/

/* Blog Grid: Main grid layout for blog blocks */
.threeBlocks {
    display: grid;
    grid-template-columns: repeat(3, minmax(220px, 1fr));
    gap: 24px 18px;
    max-width: 100%;
    min-width: 0;
    margin-top: 0;
    margin-bottom: 0;
    margin-left: 0;
    margin-right: 0;
    padding: 0;
    box-sizing: border-box;
    justify-content: center;
}

@media (max-width: 980px) {
    .threeBlocks {
        grid-template-columns: repeat(2, minmax(220px, 1fr));
    }
}

@media (max-width: 640px) {
    .threeBlocks {
        grid-template-columns: 1fr;
    }
}

/* Grid Block: Individual blog block */
.gridBlock {
    max-width: 100%;
    min-width: 0;
}

/* Grid Block Image: Image inside blog block */
.threeBlocks .gridBlock img {
    background-color: white;
    max-width: 100%;
    min-width: 0;
    width: 100%;
    height: 140px;
    max-height: 140px;
    min-height: 140px;
    object-fit: cover;
    margin-bottom: 6px;
    padding: 4px;
    text-align: center;
    border: 2px solid lightgrey;
    box-sizing: border-box;
    overflow: hidden;
}

/* Utility: unified border-radius for blog grid images */
.blog-grid-images {
    border-radius: 10px;
}

/* Blue shimmer for educational/course entries (mirrors gold-shimmer with darker blue tones) */
.threeBlocks .gridBlock img.blue-shimmer {
    position: relative;
    border: 2px solid #1a3a6b;
    padding: 4px;
    background: linear-gradient(120deg, #0f2440, #1a3a6b, #2a5a9e, #1a3a6b, #0f2440);
    background-size: 300% 300%;
    animation: bluePaddingShimmer 3.5s linear infinite;
    box-shadow: 0 0 4px rgba(26, 58, 107, 0.6), 0 0 12px rgba(42, 90, 158, 0.35);
    background-clip: padding-box;
    border-radius: 10px;
}

@keyframes bluePaddingShimmer {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}

@media (prefers-reduced-motion: reduce) {
    .threeBlocks .gridBlock img.blue-shimmer {
        animation: none;
        background: #1a3a6b;
    }
}

/* Special shimmering gold effect: shimmer appears only in padding between image and border */
.threeBlocks .gridBlock img.gold-shimmer {
    position: relative;
    border: 2px solid #d4af37;
    /* static gold border */
    padding: 4px;
    /* a little more space to see shimmer */
    background: linear-gradient(120deg, #8b6b08, #c9a227, #ffd700, #c9a227, #8b6b08);
    background-size: 300% 300%;
    animation: goldPaddingShimmer 3.5s linear infinite;
    box-shadow: 0 0 4px rgba(212, 175, 55, 0.6), 0 0 12px rgba(255, 223, 128, 0.35);
    background-clip: padding-box;
    /* ensure shimmer shows in padding */
    border-radius: 10px;
    /* match updated utility radius */
}

@keyframes goldPaddingShimmer {
    0% {
        background-position: 0% 50%;
    }

    50% {
        background-position: 100% 50%;
    }

    100% {
        background-position: 0% 50%;
    }
}

/* Respect user reduced motion preferences */
@media (prefers-reduced-motion: reduce) {
    .threeBlocks .gridBlock img.gold-shimmer {
        animation: none;
        background: #d4af37;
        /* static gold */
    }
}

/* Block Caption: Caption area below image */
.blockCaption {
    background-color: white;
    max-width: 100%;
    min-width: 0;
    padding-top: 0;
    padding-left: 5px;
    padding-right: 5px;
    padding-bottom: 10px;
    margin-bottom: 8px;
    /* Added per request */
    box-sizing: border-box;
}

/* Block Caption Title: Heading in caption */
.blockCaption h4 {
    max-width: 276px !important;
    min-width: 0 !important;

    /* Prevent inherited width from postSection affecting block description paragraphs */
    .blockCaption p {
        max-width: 100% !important;
        min-width: 0 !important;
        overflow-wrap: break-word;
        word-break: break-word;
    }

    margin: 0;
    padding-left: 3px;
    font-family: "Poppins",
    "Segoe UI Emoji",
    "Segoe UI Symbol",
    "Apple Color Emoji",
    sans-serif;
    font-weight: 700;
    font-style: normal;
    font-size: 16px;
}

/* Block Description: Description in blog block */
.blockCaption .postDescription {
    max-width: 100% !important;
    min-width: 0 !important;
    overflow-wrap: break-word;
    word-break: break-word;
    margin: 0;
    padding-top: 5px;
    padding-bottom: 5px;
    padding-left: 3px;
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 14px;
    color: black;
}

.gridBlock .postDescription p {
    max-width: 100% !important;
    min-width: 0 !important;
    overflow-wrap: break-word;
    word-break: break-word;
    margin: 0;
    padding-top: 5px;
    padding-bottom: 5px;
    padding-left: 3px;
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 14px;
    color: black;
}

/* Block Button: Button or link in caption */
.blockCaption button,
.blockCaption a {
    background-color: white;
    margin-top: 0;
    padding-top: 0;
    padding-bottom: 3px;
    padding-left: 4px;
    padding-right: 3px;
    border: none;
    font-size: 0.70rem;
    color: black;
    text-align: center;
    border-radius: 6px;
    box-shadow: 3px 3px 0px 1px rgba(0, 0, 0, 0.2);
}

/* Block Button Hover: Hover effect for button/link */
.blockCaption button:hover,
.blockCaption a:hover {
    background-color: rgb(201, 216, 240);
}

/* Pagination: centered square page number buttons */
.pagination {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 10px;
    margin: 32px 0 24px;
    flex-wrap: wrap;
}

.pagination-item {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    width: 44px;
    height: 44px;
    min-width: 44px;
    text-decoration: none;
    color: #111;
    background: #fff;
    border: 1px solid #aaa;
    border-radius: 12px;
    font-weight: 700;
    font-size: 0.95rem;
    transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}

.pagination-item:hover,
.pagination-item:focus-visible {
    background: #f4f4f4;
    border-color: #888;
    transform: translateY(-1px);
}

.pagination-item.current,
.pagination-item[aria-current="page"] {
    background: #c8102e;
    color: #fff;
    border-color: #c8102e;
    cursor: default;
    transform: none;
}

.pagination-item.current:hover,
.pagination-item[aria-current="page"]:hover {
    background: #c8102e;
}

.pagination-item.disabled {
    opacity: 0.5;
    pointer-events: none;
}

@media (max-width: 420px) {
    .pagination {
        gap: 8px;
    }
    .pagination-item {
        width: 38px;
        height: 38px;
    }
}

/* === end of bloggrid.css === */

/* >>> buttons.css (2490 bytes) */
/* BUTTONS & BUTTON EFFECTS
  Styles for all button elements
  https://www.w3schools.com/csS/css3_buttons.asp
  https://csspro.com/css-3d-buttons
  https://getcssscan.com/css-buttons-examples
  https://uiverse.io/buttons
  https://freefrontend.com/css-button-hover-effects/
  https://prismic.io/blog/css-button-animations
*/

/* Golden Button */
.buttonGolden {
  touch-action: manipulation;
  display: inline-block;
  outline: none;
  font-family: inherit;
  font-size: 1em;
  box-sizing: border-box;
  border: none;
  border-radius: .3em;
  height: 2.75em;
  line-height: 2.5em;
  text-transform: uppercase;
  padding: 0 1em;
  box-shadow: 0 3px 6px rgba(0, 0, 0, .16), 0 3px 6px rgba(110, 80, 20, .4),
    inset 0 -2px 5px 1px rgba(139, 66, 8, 1),
    inset 0 -1px 1px 3px rgba(250, 227, 133, 1);
  background-image: linear-gradient(160deg, #a54e07, #b47e11, #fef1a2, #bc881b, #a54e07);
  border: 1px solid #a55d07;
  color: rgb(120, 50, 5);
  text-shadow: 0 2px 2px rgba(250, 227, 133, 1);
  cursor: pointer;
  transition: all .2s ease-in-out;
  background-size: 100% 100%;
  background-position: center;
}

.button-18:focus,
.button-18:hover {
  background-size: 150% 150%;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23),
    inset 0 -2px 5px 1px #b17d10,
    inset 0 -1px 1px 3px rgba(250, 227, 133, 1);
  border: 1px solid rgba(165, 93, 7, .6);
  color: rgba(120, 50, 5, .8);
}

.button-18:active {
  box-shadow: 0 3px 6px rgba(0, 0, 0, .16), 0 3px 6px rgba(110, 80, 20, .4),
    inset 0 -2px 5px 1px #b17d10,
    inset 0 -1px 1px 3px rgba(250, 227, 133, 1);
}

/* Back to Top button */
#backToTopBtn {
  position: fixed;
  bottom: 104px;
  /* 50px (chatbot bottom) + 56px (chatbot height) + -2px gap */
  right: 50px;
  /* match chatbot button's right offset */
  z-index: 100001;
  /* ensure it's above the consent banner (z-index: 100000) */
  color: #fff;
  border: none;
  border-radius: 50%;
  width: 56px;
  height: 56px;
  font-size: 2em;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
  cursor: pointer;
  transition: background 0.2s, box-shadow 0.2s, transform 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #ED150A;
  font-family: "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
}

#backToTopBtn:hover {
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.22);
  transform: scale(1.08);
  background: #B71C1C;
}

/* === end of buttons.css === */

/* >>> chatbot.css (2284 bytes) */
/* chatbot.css - Styles for SOHO Chatbot popup and floating button */

#chatbotIcon {
  display: flex;
  position: fixed;
  bottom: 40px;
  right: 50px;
  z-index: 10001;
  background: #fff;
  border-radius: 50%;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
  width: 56px;
  height: 56px;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  opacity: 0.85;
  transition: opacity 0.3s;
}

#chatbotIcon::after {
  content: '';
  position: absolute;
  inset: -2px;
  border-radius: 50%;
  background: linear-gradient(
    105deg,
    transparent 30%,
    rgba(255,255,255,0.55) 45%,
    rgba(255,255,255,0.7) 50%,
    rgba(255,255,255,0.55) 55%,
    transparent 70%
  );
  background-size: 300% 100%;
  background-position: 100% 0;
  animation: chatbotShimmer 4s ease-in-out infinite;
  pointer-events: none;
  z-index: 1;
}

#chatbotIcon:focus,
#chatbotIcon:hover {
  opacity: 1;
  outline: 2px solid #fff;
}

@keyframes chatbotShimmer {
  0% { background-position: 150% 0; }
  40% { background-position: -50% 0; }
  100% { background-position: -50% 0; }
}

@media (prefers-reduced-motion: reduce) {
  #chatbotIcon::after { animation: none; display: none; }
}

#chatbotIcon img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 50%;
  transform: scale(1.08);
}

@media (max-width: 767px) {
  #backToTopBtn,
  #chatbotIcon {
    display: none !important;
  }
}

#chatbot-popup {
  display: none;
  position: fixed;
  bottom: 110px;
  right: 40px;
  z-index: 10002;
  width: 340px;
  max-width: 95vw;
  height: 420px;
  box-shadow: 0 2px 16px rgba(0, 0, 0, 0.25);
  background: #fff;
  border-radius: 16px;
  flex-direction: column;
  overflow: hidden;
}

#chatbot-popup .chatbot-header {
  background: #ED150A;
  color: #fff;
  padding: 12px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

#chatbot-popup .chatbot-title {
  font-weight: bold;
  font-size: 1.3rem;
}

#chatbot-close {
  background: none;
  border: none;
  color: #fff;
  font-size: 1.2rem;
  cursor: pointer;
}

#chatbot-messages {
  flex: 1;
  overflow-y: auto;
  padding: 16px 12px 8px 12px;
  font-size: 1em;
}

#chatbot-form {
  display: flex;
  padding: 8px 12px 12px 12px;
  background: #f7f7f7;
  gap: 0.5em;
}

#chatbot-input {
  flex: 1;
  padding: 0.5em 0.7em;
  border-radius: 6px;
  border: 1px solid #ccc;
}

/* Floating Back to Top Button Styles */

.liquid-glass-btn {
  background: #ED150A;
  color: #fff;
  border: 1.5px solid #ED150A;
  border-radius: 8px;
  box-shadow: 0 2px 12px rgba(237, 21, 10, 0.10), 0 1.5px 0 rgba(255, 255, 255, 0.18) inset;
  font-weight: 600;
  font-size: 1.08em;
  padding: 0.5em 1.3em;
  transition: background 0.18s, color 0.18s, box-shadow 0.18s;
  cursor: pointer;
}

.liquid-glass-btn:hover,
.liquid-glass-btn:focus {
  background: #e53935;
  color: #fff;
  box-shadow: 0 4px 18px rgba(237, 21, 10, 0.18), 0 1.5px 0 rgba(255, 255, 255, 0.22) inset;
  outline: none;
}

/* === end of chatbot.css === */

/* >>> credits.css (3600 bytes) */
/*
    credits.css - Credits scroller and acknowledgements styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Credit Container, Credit Screen, Credit Scroller, Credit Units, Types, Names, Logos, Quotes
*/

/* This document contains ALL styling pertaining to the INSERTED CREDIT SCROLLER */

/* Container */
/* Credit Container: Main credit box */
.creditContainer {
    max-width: var(--container-max);
    width: 100%;
    margin: 40px auto 40px;
    padding: 0 var(--container-padding);
    padding-bottom: 0;
    border-radius: 18px;
    overflow: hidden;
    box-sizing: border-box;
    position: relative;
    z-index: 1;
    box-shadow:
        -10px -10px 30px 15px rgba(0, 0, 0, 0.40),
        8px 8px 20px 10px rgba(92, 0, 0, 0.10),
        0 0 80px 40px rgba(92, 0, 0, 0.45);
    /* background color of whole website container */
    background-color: white;
}

.creditContainer .creditSpacer,
.creditContainer .creditScreen {
    margin-left: calc(-1 * var(--container-padding));
    margin-right: calc(-1 * var(--container-padding));
    width: calc(100% + 2 * var(--container-padding));
}

/* Audio Off Button */
.audio-off-btn {
    position: absolute;
    top: 0;
    right: 28px;
    z-index: 10;
    background: transparent;
    border: none;
    cursor: pointer;
    opacity: 0.8;
    animation: pulseAudio 1.5s ease-in-out infinite;
}

.audio-off-btn:hover {
    opacity: 1;
}

.audio-off-btn.audio-playing {
    animation: none;
}

.expand-credits-btn {
    position: absolute;
    bottom: 0;
    right: 28px;
    z-index: 10;
    background: transparent;
    border: none;
    cursor: pointer;
    opacity: 0.6;
    padding: 8px;
}

.expand-credits-btn:hover {
    opacity: 1;
}

.creditScreen:fullscreen,
.creditScreen:-webkit-full-screen {
    display: flex;
    align-items: center;
    justify-content: center;
}

.creditScreen:fullscreen .expand-credits-btn,
.creditScreen:-webkit-full-screen .expand-credits-btn {
    bottom: 20px;
}

.creditScreen:fullscreen .audio-off-btn,
.creditScreen:-webkit-full-screen .audio-off-btn {
    top: 30px;
}

.creditScreen:fullscreen .creditScroller,
.creditScreen:-webkit-full-screen .creditScroller {
    margin: 0 auto;
}

@keyframes pulseAudio {
    0%, 100% { transform: scale(1); opacity: 0.7; }
    50% { transform: scale(1.15); opacity: 1; }
}

.creditScreen {
    background: linear-gradient(to right,
        transparent 0%,
        transparent calc((100% - 990px) / 2),
        black calc((100% - 990px) / 2),
        black calc((100% + 990px) / 2),
        transparent calc((100% + 990px) / 2),
        transparent 100%
    );
    color: white;
    width: 100%;
    position: relative;
    margin: 0;
    padding: 0;
    overflow: hidden;
    height: 630px;
    min-height: 630px;
    max-height: 630px;
}

.creditSpacer {
    height: 50px;
    background: linear-gradient(to right,
        transparent 0%,
        transparent calc((100% - 990px) / 2),
        black calc((100% - 990px) / 2),
        black calc((100% + 990px) / 2),
        transparent calc((100% + 990px) / 2),
        transparent 100%
    );
}

/* Ensure all links in the credit scroller are white, including visited and active */
.creditScreen a,
.creditScreen a:visited,
.creditScreen a:active {
    color: white !important;
    text-decoration: underline;
}

/* Credit Scroller: Animated scrolling credits */
.creditScroller {
    max-width: 990px;
    min-width: 990px;
    margin: 0 auto;
    padding: 0;
    background-color: black;
    /* Center all text horizontally */
    text-align: center;
    /* Set the speed at which the credit scroller scrolls */
    animation: scrollCredits 60s linear infinite;
}
/* Animation: Keyframes for scrolling credits */
@keyframes scrollCredits {
    0% {
        transform: translateY(0);
    }
    100% {
        transform: translateY(-50%);
    }
}

/* Credit Unit: Individual credit entry */
.creditUnit {
    max-width: 990px;
    min-width: 990px;
    background-color: black;
}

/* Credit Type: Category title for credits */
.creditType {
    max-width: 990px;
    min-width: 990px;
    /* Add space above credit category title */
    margin-top: 30px;
    /* Add space below credit category title */
    margin-bottom: 30px;
    padding: 0;
    background-color: black;
    color: white;
    font-family: "Caveat", cursive;
    font-style: normal;
    font-weight: 200;
    font-size: 30px;
    font-optical-sizing: auto;
}

/* Credit Name: Name or link in credits */
.creditName, .creditName a {
    color: white;
    margin: 0;
    padding: 2px;
    font-family: "Roboto", sans-serif;
    font-weight: 700;
    font-style: normal;
    font-size: 30px;
    text-decoration: none;
    text-transform: uppercase;
}

/* Credit Logos: Logo row in credits */
.creditLogos {
    display: flex;
    height: 60px;
    max-width: 100%;
    margin: auto;
    margin-bottom: 40px;
}

/* Credit Quote: Quotation in credits */
.creditQuote {
    margin-top: 30px;
    padding: 0;
    font-family: "Poppins", sans-serif;
    font-weight: 200;
    font-style: normal;
    font-size: 20px;
    color: white;
}

/* Not On TV: Special image in credits */
.notOnTV {
    width: 128px;
    padding-top: 20px;
    padding-left: 20px;
    margin-left: auto;
    margin-right: auto;
    border: 0;
}

/* === end of credits.css === */

/* >>> effects.css (63090 bytes) */
/*
    effects.css - Special effects classes for SOHO Systems
    Last updated: 2025-01-10
    Purpose: Centralized repository for all visual effects and animations
    Contents:
    - Music beat animations
    - Rainbow glow effects
    - Shimmer and sparkle effects
    - Bounce, shake, and transition animations
    - Pseudo-element styling for visual enhancements
    - Keyframe definitions for all animations
    Organization: All special effects should be stored here, not in structure.css
*/

/* Music Beat Pulse Effect */
.music-beat {
    animation: musicBeat 0.35s cubic-bezier(0.42, 0, 0.58, 1);
}

/* Continuous looping variant while audio is playing */
.music-beat-looping {
    animation: musicBeat 0.8s cubic-bezier(0.42, 0, 0.58, 1) infinite;
}


@keyframes musicBeat {
    0% {
        transform: scale(1) rotate(0deg);
        filter: brightness(1.1);
    }

    30% {
        transform: scale(1.18) rotate(-2deg);
        filter: brightness(1.25);
    }

    60% {
        transform: scale(0.96) rotate(2deg);
        filter: brightness(1.1);
    }

    100% {
        transform: scale(1) rotate(0deg);
        filter: brightness(1);
    }
}

/* Glassy effect for chatbot send button */
.liquid-glass-btn {
    background: #ED150A;
    color: #fff;
    border: 1.5px solid #ED150A;
    border-radius: 8px;
    box-shadow: 0 2px 12px rgba(237, 21, 10, 0.10), 0 1.5px 0 rgba(255, 255, 255, 0.18) inset;
    font-weight: 600;
    font-size: 1.08em;
    padding: 0.5em 1.3em;
    transition: background 0.18s, color 0.18s, box-shadow 0.18s;
    cursor: pointer;
}

.liquid-glass-btn:hover,
.liquid-glass-btn:focus {
    background: #e53935;
    color: #fff;
    box-shadow: 0 4px 18px rgba(237, 21, 10, 0.18), 0 1.5px 0 rgba(255, 255, 255, 0.22) inset;
    outline: none;
}

/*
    effects.css - Special effects classes for SOHO Systems
    Last commented: 2025-08-23
    Structure: Animated backgrounds, shimmer, transitions, and more
*/

/* Animated Rainbow Gradient Background */

.rainbow {
    background: linear-gradient(124deg, #150035, #580033);
    background-size: 1800% 1800%;
    -webkit-animation: rainbow 18s ease infinite;
    -z-animation: rainbow 18s ease infinite;
    -o-animation: rainbow 18s ease infinite;
    animation: rainbow 18s ease infinite;
}

@-webkit-keyframes rainbow {
    0% {
        background-position: 0% 82%
    }

    50% {
        background-position: 100% 19%
    }

    100% {
        background-position: 0% 82%
    }
}

@-moz-keyframes rainbow {
    0% {
        background-position: 0% 82%
    }

    50% {
        background-position: 100% 19%
    }

    100% {
        background-position: 0% 82%
    }
}

@-o-keyframes rainbow {
    0% {
        background-position: 0% 82%
    }

    50% {
        background-position: 100% 19%
    }

    100% {
        background-position: 0% 82%
    }
}

@keyframes rainbow {
    0% {
        background-position: 0% 82%
    }

    50% {
        background-position: 100% 19%
    }

    100% {
        background-position: 0% 82%
    }
}

/* Scroll */

.scroll {
    animation: scroll 20s infinite;
}

@keyframes scroll {
    0% {
        transform: translateX(100%);
    }

    100% {
        transform: translateX(-100%);
    }
}

/* Drop-in Effect */
.drop-in {
    animation: drop-in 0.7s cubic-bezier(0.23, 1, 0.32, 1) both;
    transform: translateY(-100px);
    opacity: 0;
}

@keyframes drop-in {
    0% {
        transform: translateY(-100px);
        opacity: 0;
    }

    80% {
        transform: translateY(10px);
        opacity: 1;
    }

    100% {
        transform: translateY(0);
        opacity: 1;
    }
}

/* Shimmer */

.shimmer {
    /* Shimmer effect for text and icons */
    color: grey;
    -webkit-mask: linear-gradient(-60deg, #000 30%, #0005, #000 70%) right/300% 100%;
    mask: linear-gradient(-60deg, #000 30%, #0005, #000 70%) right/300% 100%;
    /* Standard property for compatibility */
    background-repeat: no-repeat;
    animation: shimmer 2.5s infinite;
}

@keyframes shimmer {
    0% {
        -webkit-mask-position: 100% 0;
    }

    100% {
        -webkit-mask-position: 0 0;
    }
}

/* Spin */

.spin {
    animation: spin 15s linear infinite;
}

@keyframes spin {
    0% {
        transform: rotate(360deg);
    }

    100% {
        transform: rotate(0deg);
    }
}

/* Shake */

.shake {
    /* Start the shake animation and make it last for 0.5 seconds */
    animation: shake 0.5s;
    animation-iteration-count: 1;
}

@keyframes shake {
    0% {
        transform: translate(1px, 1px) rotate(0deg);
    }

    10% {
        transform: translate(-1px, -2px) rotate(-1deg);
    }

    20% {
        transform: translate(-3px, 0px) rotate(1deg);
    }

    /* ... (continue with other keyframes) ... */
    100% {
        transform: translate(1px, -2px) rotate(-1deg);
    }
}

/* Wobble */

.wobble {
    animation: wobble 1s;
    animation-iteration-count: 1;
}

@keyframes wobble {
    0% {
        transform: translateX(0);
    }

    15% {
        transform: translateX(-8px);
    }

    30% {
        transform: translateX(6px);
    }

    45% {
        transform: translateX(-4px);
    }

    60% {
        transform: translateX(4px);
    }

    75% {
        transform: translateX(-2px);
    }

    100% {
        transform: translateX(0);
    }
}

/* ========================= */
/* Bounce (vertical bounce)  */
/* ========================= */
.bounce {
    animation: bounce 1s;
    animation-iteration-count: 1;
}

@keyframes bounce {
    0% {
        transform: translateY(0);
    }

    20% {
        transform: translateY(-18px);
    }

    40% {
        transform: translateY(0);
    }

    60% {
        transform: translateY(-12px);
    }

    80% {
        transform: translateY(0);
    }

    100% {
        transform: translateY(0);
    }
}

/* ========================= */
/* Pop-in (scale in effect)  */
/* ========================= */
.pop-in {
    animation: popIn 0.5s cubic-bezier(.42, 0, .58, 1);
    animation-iteration-count: 1;
}

@keyframes popIn {
    0% {
        opacity: 0;
        transform: scale(0.6);
    }

    60% {
        opacity: 1;
        transform: scale(1.08);
    }

    80% {
        transform: scale(0.96);
    }

    100% {
        opacity: 1;
        transform: scale(1);
    }
}

/* ========================= */
/* Hop (quick jump effect)   */
/* ========================= */
.hop {
    animation: hop 0.6s cubic-bezier(.42, 0, .58, 1);
    animation-iteration-count: 1;
}

@keyframes hop {
    0% {
        transform: translateY(0);
    }

    30% {
        transform: translateY(-24px);
    }

    50% {
        transform: translateY(0);
    }

    70% {
        transform: translateY(-12px);
    }

    100% {
        transform: translateY(0);
    }
}

/* ========================= */
/* Flip (horizontal flip)    */
/* ========================= */
.flip {
    animation: flip 0.7s cubic-bezier(.42, 0, .58, 1);
    animation-iteration-count: 1;
    backface-visibility: hidden;
}

@keyframes flip {
    0% {
        transform: rotateY(0deg);
    }

    40% {
        transform: rotateY(90deg);
    }

    60% {
        transform: rotateY(270deg);
    }

    100% {
        transform: rotateY(360deg);
    }
}

/* ========================= */
/* Flashing Red Tint Effect  */
/* ========================= */
.flash-red {
    animation: flashRed 1s linear;
    animation-iteration-count: 1;
}

@keyframes flashRed {
    0% {
        box-shadow: 0 0 0 0 rgba(237, 21, 10, 0);
        background: inherit;
    }

    10% {
        box-shadow: 0 0 16px 8px rgba(237, 21, 10, 0.6);
        background: #ED150A22;
    }

    30% {
        box-shadow: 0 0 24px 12px rgba(237, 21, 10, 0.8);
        background: #ED150A44;
    }

    50% {
        box-shadow: 0 0 32px 16px rgba(237, 21, 10, 0.6);
        background: #ED150A22;
    }

    70% {
        box-shadow: 0 0 16px 8px rgba(237, 21, 10, 0.4);
        background: #ED150A11;
    }

    100% {
        box-shadow: 0 0 0 0 rgba(237, 21, 10, 0);
        background: inherit;
    }
}

/* Stamp Effect */
.stamp-effect {
    display: inline-block;
    animation: stampEffect 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
    transform: scale(0.7) rotate(-8deg);
    opacity: 0.7;
    /* box-shadow and border removed */
    background: #fff8f6;
}

/* ===================== */
/* Fly-in (subtle glide) */
/* ===================== */
/* Usage: add class "fly-in" to an element (e.g., postStamp). It glides up & fades in. */
.fly-in {
    animation: flyIn 0.9s cubic-bezier(.22, 1, .36, 1) both;
    will-change: transform, opacity;
}

@keyframes flyIn {
    0% {
        transform: translateY(40px) scale(.92) rotate(-2deg);
        opacity: 0;
        filter: blur(2px);
    }

    55% {
        transform: translateY(-6px) scale(1.03) rotate(1deg);
        opacity: 1;
        filter: blur(.3px);
    }

    75% {
        transform: translateY(3px) scale(.995) rotate(-0.5deg);
        opacity: 1;
        filter: blur(0);
    }

    100% {
        transform: translateY(0) scale(1) rotate(0deg);
        opacity: 1;
        filter: blur(0);
    }
}

@media (prefers-reduced-motion: reduce) {
    .fly-in {
        animation: none !important;
        transform: none !important;
        opacity: 1 !important;
        filter: none !important;
    }
}

@keyframes stampEffect {
    0% {
        transform: scale(0.7) rotate(-8deg);
        opacity: 0.7;
        /* box-shadow removed */
    }

    60% {
        transform: scale(1.08) rotate(3deg);
        opacity: 1;
        /* box-shadow removed */
    }

    80% {
        transform: scale(0.98) rotate(-2deg);
        opacity: 0.95;
        /* box-shadow removed */
    }

    100% {
        transform: scale(1) rotate(0deg);
        opacity: 1;
        /* box-shadow removed */
    }
}

/* ========================= */
/* Roll-in from right effect */
/* ========================= */
/* Usage: add class "roll-in-right" to element you want to animate. */
.roll-in-right {
    animation: rollInFromRight 0.8s cubic-bezier(0.23, 1, 0.32, 1) both;
    backface-visibility: hidden;
    transform-origin: center;
}

@keyframes rollInFromRight {
    0% {
        transform: translateX(140px) rotate(35deg) scale(0.85);
        opacity: 0;
        filter: blur(2px);
    }

    55% {
        transform: translateX(-12px) rotate(-6deg) scale(1.02);
        opacity: 1;
        filter: blur(0.4px);
    }

    75% {
        transform: translateX(6px) rotate(3deg) scale(0.99);
        opacity: 1;
        filter: blur(0);
    }

    100% {
        transform: translateX(0) rotate(0deg) scale(1);
        opacity: 1;
        filter: blur(0);
    }
}

/* Respect user preference to reduce motion */
@media (prefers-reduced-motion: reduce) {
    .roll-in-right {
        animation: none !important;
        transform: none !important;
        opacity: 1 !important;
        filter: none !important;
    }
}

/* ========================= */
/* Materialize (progressive reveal) */
/* ========================= */
/* Usage: add class "materialize" (can combine with postStamp). Provides a smooth scale/blur fade-in. */
.materialize {
    animation: materializeIn 0.9s cubic-bezier(.22, 1, .36, 1) both;
    will-change: transform, opacity, filter;
}

@keyframes materializeIn {
    0% {
        opacity: 0;
        transform: scale(.6) rotate(-4deg);
        filter: blur(4px) brightness(0.85);
    }

    55% {
        opacity: 1;
        transform: scale(1.04) rotate(2deg);
        filter: blur(.8px) brightness(1.05);
    }

    75% {
        transform: scale(.97) rotate(-1deg);
        filter: blur(0) brightness(1.02);
    }

    100% {
        opacity: 1;
        transform: scale(1) rotate(0deg);
        filter: blur(0) brightness(1);
    }
}

@media (prefers-reduced-motion: reduce) {
    .materialize {
        animation: none !important;
        opacity: 1 !important;
        transform: none !important;
        filter: none !important;
    }
}

/* ========================= */
/* Smooth Spin In Effect     */
/* ========================= */
/* Usage: add class "smooth-spin-in" to post stamps for elegant entrance */
.smooth-spin-in {
    animation: smoothSpinIn 2s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
    will-change: transform, opacity;
    transform-origin: center;
}

@keyframes smoothSpinIn {
    0% {
        transform: scale(0.1) rotate(0deg);
        opacity: 0;
    }

    50% {
        transform: scale(0.8) rotate(180deg);
        opacity: 0.7;
    }

    100% {
        transform: scale(1) rotate(360deg);
        opacity: 1;
    }
}

/* Respect user preference to reduce motion */
@media (prefers-reduced-motion: reduce) {
    .smooth-spin-in {
        animation: none !important;
        transform: scale(1) rotate(0deg) !important;
        opacity: 1 !important;
    }
}

/* ========================= */
/* Square Scan Effect        */
/* ========================= */
/* Usage: add class "scan-square" to post stamps for searching/looking glass motion */
.scan-square {
    animation: squareScan 3s ease-in-out 1;
    will-change: transform;
    transform-origin: center;
}

@keyframes squareScan {
    0% {
        transform: translate(0, 0) rotate(0deg);
    }

    12.5% {
        transform: translate(30px, 0) rotate(0deg);
    }

    25% {
        transform: translate(30px, 30px) rotate(-90deg);
    }

    37.5% {
        transform: translate(0, 30px) rotate(-180deg);
    }

    50% {
        transform: translate(-30px, 30px) rotate(-270deg);
    }

    62.5% {
        transform: translate(-30px, 0) rotate(0deg);
    }

    75% {
        transform: translate(-30px, -30px) rotate(-90deg);
    }

    87.5% {
        transform: translate(0, -30px) rotate(-180deg);
    }

    100% {
        transform: translate(0, 0) rotate(0deg);
    }
}

/* Respect user preference to reduce motion */
@media (prefers-reduced-motion: reduce) {
    .scan-square {
        animation: none !important;
        transform: none !important;
    }
}

/* ========================= */
/* Glitch effect for postStamp */
/* Usage: add class "glitch" to the image element (e.g., <img class="postStamp glitch" />) */
.postStamp.glitch {
    position: relative;
    display: inline-block;
    transform-origin: center;
    /* subtle base animation: tiny jitter + color shift */
    animation: glitch-base 3s infinite linear;
}

.postStamp.glitch::before,
.postStamp.glitch::after {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    mix-blend-mode: screen;
    opacity: 0.9;
}

/* colored band that shifts left/right */
.postStamp.glitch::before {
    background: linear-gradient(90deg, rgba(255, 0, 40, 0.12), rgba(0, 230, 255, 0.08), rgba(255, 255, 255, 0));
    transform: translateX(0);
    animation: glitch-band 2.4s infinite linear;
}

/* thin scanlines / slices flicker */
.postStamp.glitch::after {
    background-image: repeating-linear-gradient(to bottom,
            rgba(0, 0, 0, 0) 0px,
            rgba(0, 0, 0, 0) 2px,
            rgba(0, 0, 0, 0.03) 3px,
            rgba(0, 0, 0, 0) 4px);
    animation: glitch-scan 1.6s infinite steps(2);
    mix-blend-mode: multiply;
}

@keyframes glitch-base {
    0% {
        transform: translateY(0) scale(1) skewX(0deg);
        filter: none;
    }

    7% {
        transform: translateY(-1px) scale(1.002) skewX(-0.3deg);
        filter: hue-rotate(-2deg) saturate(1.02);
    }

    14% {
        transform: translateY(0) scale(1) skewX(0deg);
        filter: hue-rotate(2deg) saturate(1.03);
    }

    21% {
        transform: translateY(1px) scale(0.998) skewX(0.2deg);
        filter: hue-rotate(-1deg) saturate(0.98);
    }

    100% {
        transform: translateY(0) scale(1) skewX(0deg);
        filter: none;
    }
}

@keyframes glitch-band {
    0% {
        transform: translateX(-6%);
        opacity: 0.9
    }

    25% {
        transform: translateX(8%);
        opacity: 0.6
    }

    50% {
        transform: translateX(-4%);
        opacity: 0.85
    }

    75% {
        transform: translateX(6%);
        opacity: 0.65
    }

    100% {
        transform: translateX(-6%);
        opacity: 0.9
    }
}

@keyframes glitch-scan {
    0% {
        opacity: 0.02
    }

    30% {
        opacity: 0.2
    }

    31% {
        transform: translateY(-2px);
    }

    40% {
        opacity: 0.03
    }

    60% {
        opacity: 0.18
    }

    61% {
        transform: translateY(1px);
    }

    100% {
        opacity: 0.02
    }
}

@media (prefers-reduced-motion: reduce) {

    .postStamp.glitch,
    .postStamp.glitch::before,
    .postStamp.glitch::after {
        animation: none !important;
        transform: none !important;
        opacity: 1 !important;
    }
}

/* ========================= */
/* ========================= */
/* Forward Flip In Effect    */
/* ========================= */
.forward-flip-in {
    animation: forwardFlipIn 1.5s ease-out both !important;
    transform-origin: center;
    display: block;
}

@keyframes forwardFlipIn {
    0% {
        transform: perspective(1200px) translateZ(-2000px) rotateX(-720deg);
        opacity: 0;
    }
    100% {
        transform: perspective(1200px) translateZ(0) rotateX(0deg);
        opacity: 1;
    }
}

/* ========================= */
/* Envelope Unfold Effect    */
/* ========================= */
.envelope-unfold {
    animation: envelopeUnfold 1.5s cubic-bezier(0.23, 1, 0.32, 1) both !important;
    transform-origin: top center;
    display: block;
}

@keyframes envelopeUnfold {
    0% {
        transform: perspective(1200px) rotateX(-90deg);
        opacity: 0;
    }
    100% {
        transform: perspective(1200px) rotateX(0deg);
        opacity: 1;
    }
}

/* ========================= */
/* Carpet Unroll Effect      */
/* ========================= */
.carpet-unroll {
    animation: carpetUnroll 1.5s cubic-bezier(0.25, 1, 0.5, 1) both !important;
    transform-origin: top center;
    display: block;
}

@keyframes carpetUnroll {
    0% {
        transform: scaleY(0);
        opacity: 0;
    }
    100% {
        transform: scaleY(1);
        opacity: 1;
    }
}

/* ========================= */
/* Unroll Left to Right Effect */
/* ========================= */
.unroll-left-right {
    animation: unrollLeftRight 1.5s cubic-bezier(0.25, 1, 0.5, 1) both !important;
    transform-origin: left center;
    display: block;
}

@keyframes unrollLeftRight {
    0% {
        transform: scaleX(0);
        opacity: 0;
    }
    100% {
        transform: scaleX(1);
        opacity: 1;
    }
}

/* ========================= */
/* Elastic Wobble Effect     */
/* ========================= */
.elastic-wobble {
    animation: elasticWobble 1s cubic-bezier(0.36, 0.07, 0.19, 0.97) both !important;
    transform-origin: center;
    display: block;
}

@keyframes elasticWobble {
    0% {
        transform: scale3d(1, 1, 1);
    }
    15% {
        transform: scale3d(1.25, 0.75, 1);
    }
    30% {
        transform: scale3d(0.75, 1.25, 1);
    }
    45% {
        transform: scale3d(1.15, 0.85, 1);
    }
    60% {
        transform: scale3d(0.95, 1.05, 1);
    }
    75% {
        transform: scale3d(1.05, 0.95, 1);
    }
    100% {
        transform: scale3d(1, 1, 1);
    }
}

/* ========================= */
/* Search Light Scan Effect  */
/* ========================= */
.search-light-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin: 0 0 20px 0;
    border-radius: 0;
}

.search-light-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.search-light-wrapper::after {
    content: '';
    position: absolute;
    width: 300%;
    height: 300%;
    top: -100%;
    left: -100%;
    pointer-events: none;
    background: radial-gradient(circle at center, transparent 0%, transparent 4%, rgba(0,0,0,0.85) 12%, rgba(0,0,0,1) 100%);
    animation: searchLightMove 4s ease-in-out both !important;
    z-index: 10;
}

@keyframes searchLightMove {
    0% {
        transform: translate(-35%, 10%);
        opacity: 1;
    }
    20% {
        transform: translate(-10%, -15%);
        opacity: 1;
    }
    40% {
        transform: translate(15%, 20%);
        opacity: 1;
    }
    65% {
        transform: translate(35%, -10%);
        opacity: 1;
    }
    85% {
        transform: translate(0, 0) scale(15);
        opacity: 0;
    }
    100% {
        transform: translate(0, 0) scale(15);
        opacity: 0;
    }
}

/* ========================= */
/* Responsive Unfurl Effect  */
/* ========================= */
.responsive-unfurl {
    animation: responsiveUnfurl 2.5s cubic-bezier(0.2, 0.8, 0.2, 1.2) both !important;
    display: block;
}

@keyframes responsiveUnfurl {
    0% {
        clip-path: inset(25% 40% 25% 40%);
        filter: drop-shadow(0 0 10px rgba(0,0,0,0.5));
    }
    20% {
        clip-path: inset(25% 40% 25% 40%);
        filter: drop-shadow(0 0 10px rgba(0,0,0,0.5));
    }
    40% {
        clip-path: inset(10% 20% 10% 20%);
    }
    60% {
        clip-path: inset(10% 20% 10% 20%);
    }
    80% {
        clip-path: inset(0 0 0 0);
    }
    100% {
        clip-path: inset(0 0 0 0);
    }
}

/* ========================= */
/* Materialize Triangles     */
/* ========================= */
.materialize-triangles {
    animation: materializeTriangles 2.2s cubic-bezier(0.25, 1, 0.5, 1) both !important;
    display: block;
}

@keyframes materializeTriangles {
    0% {
        clip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%);
        opacity: 0;
        transform: scale(0.8) rotate(15deg);
        filter: blur(5px);
    }
    30% {
        /* A triangle pointing up */
        clip-path: polygon(50% 0%, 0% 100%, 100% 100%, 100% 100%);
        opacity: 0.8;
        transform: scale(1.05) rotate(-5deg);
        filter: blur(2px);
    }
    70% {
        /* A triangle pointing down */
        clip-path: polygon(0% 0%, 100% 0%, 50% 100%, 50% 100%);
        opacity: 0.9;
        transform: scale(0.98) rotate(2deg);
        filter: blur(0px);
    }
    100% {
        /* Full rectangle */
        clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
        opacity: 1;
        transform: scale(1) rotate(0deg);
        filter: blur(0px);
    }
}

/* ========================= */
/* Git Commit Reveal Effect  */
/* ========================= */
.git-commit-reveal {
    animation: gitCommitReveal 1.8s steps(25, end) both !important;
    display: block;
}

@keyframes gitCommitReveal {
    0% {
        clip-path: inset(0 0 100% 0);
        filter: sepia(1) hue-rotate(90deg) saturate(3) brightness(0.8);
    }
    70% {
        clip-path: inset(0 0 0 0);
        filter: sepia(1) hue-rotate(90deg) saturate(3) brightness(0.8);
    }
    85% {
        clip-path: inset(0 0 0 0);
        filter: sepia(1) hue-rotate(90deg) saturate(5) brightness(1.5);
    }
    95% {
        clip-path: inset(0 0 0 0);
        filter: brightness(2) contrast(1.5);
    }
    100% {
        clip-path: inset(0 0 0 0);
        filter: none;
    }
}

/* ========================= */
/* Vibe Coding Sparkle Reveal*/
/* ========================= */
.vibe-coding-reveal {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #0d1117;
}

.vibe-coding-reveal .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: vibeImageMaterialize 2.5s ease-out both !important;
}

.vibe-coding-reveal::before,
.vibe-coding-reveal::after {
    content: "async function vibe() { \A  yield 'sparkles'; \A} \A const ai = true; \A // materializing...";
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    color: #2ea043;
    font-family: 'Courier New', Courier, monospace;
    font-size: 1.1rem;
    line-height: 1.5;
    white-space: pre-wrap;
    padding: 20px;
    pointer-events: none;
    z-index: 10;
    animation: vibeCodeScramble 2s steps(20, end) both;
}

.vibe-coding-reveal::after {
    content: "âœ¨ * âœ¨ \A  <System> \A   Online... \A </System>";
    color: #fff;
    text-shadow: 0 0 10px #58a6ff, 0 0 20px #bc8cff, 0 0 30px #ff7b72;
    animation: vibeSparkles 2.5s ease-out both;
    font-size: 1.5rem;
    text-align: right;
    mix-blend-mode: screen;
}

@keyframes vibeImageMaterialize {
    0% {
        opacity: 0;
        transform: scale(1.1);
        filter: blur(10px) brightness(0) hue-rotate(90deg);
    }
    50% {
        opacity: 0.6;
        filter: blur(4px) brightness(0.8) hue-rotate(45deg);
    }
    100% {
        opacity: 1;
        transform: scale(1);
        filter: blur(0) brightness(1) hue-rotate(0deg);
    }
}

@keyframes vibeCodeScramble {
    0% {
        opacity: 1;
        transform: translateY(20px);
    }
    80% {
        opacity: 0.9;
        transform: translateY(-10px);
    }
    100% {
        opacity: 0;
        transform: translateY(-30px);
    }
}

@keyframes vibeSparkles {
    0% {
        opacity: 0;
        transform: scale(0.8) rotate(-10deg);
    }
    40% {
        opacity: 1;
        transform: scale(1.1) rotate(5deg);
    }
    80% {
        opacity: 0.5;
        transform: scale(1) rotate(10deg);
    }
    100% {
        opacity: 0;
        transform: scale(1.2) rotate(15deg);
    }
}

/* ========================= */
/* Beatbox Pulse Effect      */
/* ========================= */
.beatbox-pulse {
    animation: beatboxPulse 1.2s ease-in-out 2 both !important;
    transform-origin: center;
    display: block;
}

@keyframes beatboxPulse {
    0% {
        transform: scale(1);
        filter: brightness(1);
    }
    15% {
        transform: scale(1.08);
        filter: brightness(1.2);
    }
    30% {
        transform: scale(0.98);
        filter: brightness(0.9);
    }
    45% {
        transform: scale(1);
        filter: brightness(1);
    }
    60% {
        transform: scale(1.15) rotate(1deg);
        filter: brightness(1.3) contrast(1.2);
    }
    75% {
        transform: scale(0.95) rotate(-1deg);
        filter: brightness(0.8);
    }
    100% {
        transform: scale(1) rotate(0deg);
        filter: brightness(1);
    }
}

/* ========================= */
/* Defrag Reveal Effect      */
/* ========================= */
.defrag-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000080; /* Classic defrag blue */
}

.defrag-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    -webkit-mask-image: linear-gradient(to right, black 50%, transparent 50%);
    mask-image: linear-gradient(to right, black 50%, transparent 50%);
    -webkit-mask-size: 200% 100%;
    mask-size: 200% 100%;
    animation: defragSweep 3s steps(30, end) both !important;
}

.defrag-wrapper::after {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    pointer-events: none;
    /* Grid overlay to create squares */
    background-image: 
        repeating-linear-gradient(to right, rgba(255,255,255,0.3) 0, rgba(255,255,255,0.3) 1px, transparent 1px, transparent 3.33%),
        repeating-linear-gradient(to bottom, rgba(255,255,255,0.3) 0, rgba(255,255,255,0.3) 1px, transparent 1px, transparent 10%);
    z-index: 10;
    animation: defragGridFade 3.5s both;
}

@keyframes defragSweep {
    0% { 
        -webkit-mask-position: 100% 0; 
        mask-position: 100% 0;
        filter: grayscale(1) sepia(1) hue-rotate(180deg) brightness(1.5);
    }
    75% { 
        -webkit-mask-position: 0 0; 
        mask-position: 0 0;
        filter: grayscale(1) sepia(1) hue-rotate(180deg) brightness(1.5);
    }
    85% {
        -webkit-mask-position: 0 0; 
        mask-position: 0 0;
        filter: brightness(2);
    }
    100% {
        -webkit-mask-position: 0 0; 
        mask-position: 0 0;
        filter: none;
    }
}

@keyframes defragGridFade {
    0% { opacity: 1; }
    85% { opacity: 1; }
    100% { opacity: 0; }
}

/* ========================= */
/* Radiowave Reveal Effect   */
/* ========================= */
.radiowave-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #111;
}

.radiowave-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: radiowaveReveal 2.5s cubic-bezier(0.1, 0.8, 0.2, 1) both !important;
}

.radiowave-wrapper::before,
.radiowave-wrapper::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 50%;
    width: 200%;
    aspect-ratio: 1;
    border: 15px solid rgba(0, 255, 255, 0.8);
    border-radius: 50%;
    pointer-events: none;
    z-index: 10;
}

.radiowave-wrapper::before {
    animation: radiowaveRings 2s cubic-bezier(0.1, 0.8, 0.2, 1) both;
}

.radiowave-wrapper::after {
    animation: radiowaveRings 2s cubic-bezier(0.1, 0.8, 0.2, 1) 0.4s both;
}

@keyframes radiowaveReveal {
    0% {
        clip-path: circle(0% at 50% 100%);
        filter: hue-rotate(180deg) brightness(2) blur(10px);
        opacity: 0;
    }
    30% {
        opacity: 1;
    }
    80% {
        clip-path: circle(120% at 50% 100%);
        filter: hue-rotate(90deg) brightness(1.2) blur(2px);
    }
    100% {
        clip-path: circle(150% at 50% 100%);
        filter: none;
        opacity: 1;
    }
}

@keyframes radiowaveRings {
    0% {
        transform: translate(-50%, 50%) scale(0);
        opacity: 1;
        border-width: 30px;
    }
    100% {
        transform: translate(-50%, 50%) scale(1.5);
        opacity: 0;
        border-width: 2px;
    }
}

/* ========================= */
/* Slow Pulse Effect         */
/* ========================= */
.music-slow-pulse {
    animation: musicSlowPulse 3s ease-in-out infinite !important;
}
@keyframes musicSlowPulse {
    0% { transform: scale(1); filter: brightness(1); }
    50% { transform: scale(1.03); filter: brightness(1.15); }
    100% { transform: scale(1); filter: brightness(1); }
}

/* ========================= */
/* RSS Ripple Reveal Effect  */
/* ========================= */
.rss-ripple-reveal {
    animation: rssRippleReveal 2.2s cubic-bezier(0.1, 0.9, 0.2, 1) both !important;
    display: block;
    transform-origin: bottom left;
}

@keyframes rssRippleReveal {
    0% {
        clip-path: circle(0% at 0% 100%);
        filter: sepia(1) hue-rotate(330deg) saturate(5) brightness(1.5);
        opacity: 0;
    }
    15% {
        clip-path: circle(15% at 0% 100%);
        filter: sepia(1) hue-rotate(330deg) saturate(5) brightness(1.5);
        opacity: 1;
    }
    20% {
        clip-path: circle(15% at 0% 100%);
        filter: brightness(1) saturate(1);
    }
    40% {
        clip-path: circle(45% at 0% 100%);
        filter: sepia(1) hue-rotate(330deg) saturate(5) brightness(1.5);
    }
    45% {
        clip-path: circle(45% at 0% 100%);
        filter: brightness(1) saturate(1);
    }
    65% {
        clip-path: circle(80% at 0% 100%);
        filter: sepia(1) hue-rotate(330deg) saturate(5) brightness(1.5);
    }
    70% {
        clip-path: circle(80% at 0% 100%);
        filter: brightness(1) saturate(1);
    }
    90% {
        clip-path: circle(150% at 0% 100%);
        filter: sepia(1) hue-rotate(330deg) saturate(5) brightness(1.5);
    }
    100% {
        clip-path: circle(150% at 0% 100%);
        filter: none;
    }
}

/* ========================= */
/* POS Touch Block Reveal    */
/* ========================= */
.pos-touch-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #111;
}

.pos-touch-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: posTouchReveal 1.2s steps(15, end) 0.3s both !important;
}

/* Grid overlay for blocky effect */
.pos-touch-wrapper::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    pointer-events: none;
    background-image: 
        repeating-linear-gradient(to right, rgba(17,17,17,1) 0, rgba(17,17,17,1) 3px, transparent 3px, transparent 8%),
        repeating-linear-gradient(to bottom, rgba(17,17,17,1) 0, rgba(17,17,17,1) 3px, transparent 3px, transparent 15%);
    z-index: 10;
    animation: posTouchGridFade 2s 1.5s both;
}

/* Touch indicator */
.pos-touch-wrapper::after {
    content: '';
    position: absolute;
    top: 50%; left: 50%;
    width: 80px; height: 80px;
    margin-top: -40px; margin-left: -40px;
    background: rgba(255, 255, 255, 0.9);
    border-radius: 50%;
    pointer-events: none;
    z-index: 20;
    box-shadow: 0 0 20px rgba(255,255,255,1), 0 0 40px rgba(0, 150, 255, 1);
    animation: posTouchFlash 0.6s ease-out both;
}

@keyframes posTouchFlash {
    0% { transform: scale(1.5); opacity: 0; }
    20% { transform: scale(0.6); opacity: 1; }
    80% { transform: scale(2); opacity: 0.8; }
    100% { transform: scale(4); opacity: 0; }
}

@keyframes posTouchReveal {
    0% {
        clip-path: circle(0% at 50% 50%);
        filter: brightness(2) saturate(1.5);
    }
    100% {
        clip-path: circle(150% at 50% 50%);
        filter: none;
    }
}

@keyframes posTouchGridFade {
    0% { opacity: 1; }
    100% { opacity: 0; }
}

/* ========================= */
/* Spin Blur Materialize     */
/* ========================= */
.spin-blur-materialize {
    animation: spinBlurMaterialize 1.8s cubic-bezier(0.15, 0.85, 0.3, 1) both !important;
    display: block;
    transform-origin: center;
}

@keyframes spinBlurMaterialize {
    0% {
        transform: perspective(1000px) rotateX(-2160deg);
        filter: blur(30px) drop-shadow(0 0 50px rgba(255,255,255,0.8));
        opacity: 0;
    }
    50% {
        transform: perspective(1000px) rotateX(-360deg);
        filter: blur(10px);
        opacity: 0.7;
    }
    100% {
        transform: perspective(1000px) rotateX(0deg);
        filter: blur(0px) drop-shadow(0 0 0 rgba(255,255,255,0));
        opacity: 1;
    }
}


/* ========================= */
/* Handkerchief Unfold       */
/* ========================= */
.handkerchief-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    perspective: 1500px;
}

.handkerchief-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: handkerchiefUnfold 2.5s cubic-bezier(0.2, 0.8, 0.2, 1) both !important;
    transform-origin: center;
}

@keyframes handkerchiefUnfold {
    0% {
        clip-path: inset(45% 45% 45% 45%);
        transform: rotateX(60deg) rotateY(45deg) scale(0.5);
        filter: brightness(0.3) drop-shadow(0 0 10px rgba(0,0,0,1));
        opacity: 0;
    }
    15% {
        clip-path: inset(45% 45% 45% 45%);
        transform: rotateX(60deg) rotateY(45deg) scale(0.6);
        filter: brightness(0.6) drop-shadow(0 0 10px rgba(0,0,0,1));
        opacity: 1;
    }
    45% {
        clip-path: inset(45% 0% 45% 0%); /* Unfold horizontally */
        transform: rotateX(30deg) rotateY(0deg) scale(0.8);
        filter: brightness(0.8) drop-shadow(0 0 10px rgba(0,0,0,0.5));
    }
    80% {
        clip-path: inset(0% 0% 0% 0%); /* Unfold vertically */
        transform: rotateX(0deg) rotateY(0deg) scale(1.05);
        filter: brightness(1.2) drop-shadow(0 0 0 rgba(0,0,0,0));
    }
    100% {
        clip-path: inset(0% 0% 0% 0%);
        transform: rotateX(0deg) rotateY(0deg) scale(1);
        filter: none;
    }
}


/* ========================= */
/* Banner Wobble Effect      */
/* ========================= */
.banner-wobble {
    animation: bannerWobble 1.2s cubic-bezier(0.36, 0.07, 0.19, 0.97) both !important;
    display: block;
    transform-origin: bottom center;
}

@keyframes bannerWobble {
    0% { transform: translateX(0%) rotate(0deg); }
    15% { transform: translateX(-4%) rotate(-4deg); }
    30% { transform: translateX(3%) rotate(3deg); }
    45% { transform: translateX(-2%) rotate(-2deg); }
    60% { transform: translateX(1%) rotate(1deg); }
    75% { transform: translateX(-0.5%) rotate(-0.5deg); }
    100% { transform: translateX(0%) rotate(0deg); }
}


/* ========================= */
/* Transfer Slide Reveal     */
/* ========================= */
.transfer-slide-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.transfer-slide-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: transferSlide 2.5s cubic-bezier(0.2, 0.8, 0.2, 1) both !important;
}

@keyframes transferSlide {
    0% { transform: translateX(-105%); opacity: 0.5; }
    50% { transform: translateX(105%); opacity: 0.8; }
    51% { transform: translateX(-105%); opacity: 0; }
    100% { transform: translateX(0%); opacity: 1; }
}


/* ========================= */
/* Peel and Stick Reveal     */
/* ========================= */
.peel-stick-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    perspective: 1500px;
}

.peel-stick-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: bottom left;
    animation: peelStick 1.6s cubic-bezier(0.25, 0.8, 0.25, 1) both !important;
}

@keyframes peelStick {
    0% {
        transform: rotate3d(1, 1, 0, -70deg) translate(-5%, 5%) scale(1.1);
        opacity: 0;
        filter: drop-shadow(40px 40px 30px rgba(0,0,0,0.6));
    }
    20% {
        opacity: 1;
    }
    100% {
        transform: rotate3d(1, 1, 0, 0deg) translate(0%, 0%) scale(1);
        opacity: 1;
        filter: drop-shadow(0px 0px 0px rgba(0,0,0,0));
    }
}


/* ========================= */
/* Staircase Drop Reveal     */
/* ========================= */
.staircase-drop-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.staircase-drop-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: staircaseDrop 1.5s cubic-bezier(0.1, 0.8, 0.2, 1) both !important;
}

@keyframes staircaseDrop {
    0% {
        clip-path: polygon(0 0, 100% 0, 100% 0, 80% 0, 80% 0, 60% 0, 60% 0, 40% 0, 40% 0, 20% 0, 20% 0, 0 0);
        transform: translateY(-20px);
        filter: brightness(2);
    }
    20% {
        clip-path: polygon(0 0, 100% 0, 100% 0, 80% 0, 80% 0, 60% 0, 60% 0, 40% 0, 40% 0, 20% 0, 20% 100%, 0 100%);
        transform: translateY(-15px);
        filter: brightness(1.6);
    }
    40% {
        clip-path: polygon(0 0, 100% 0, 100% 0, 80% 0, 80% 0, 60% 0, 60% 0, 40% 0, 40% 100%, 20% 100%, 20% 100%, 0 100%);
        transform: translateY(-10px);
        filter: brightness(1.4);
    }
    60% {
        clip-path: polygon(0 0, 100% 0, 100% 0, 80% 0, 80% 0, 60% 0, 60% 100%, 40% 100%, 40% 100%, 20% 100%, 20% 100%, 0 100%);
        transform: translateY(-5px);
        filter: brightness(1.2);
    }
    80% {
        clip-path: polygon(0 0, 100% 0, 100% 0, 80% 0, 80% 100%, 60% 100%, 60% 100%, 40% 100%, 40% 100%, 20% 100%, 20% 100%, 0 100%);
        transform: translateY(0px);
        filter: brightness(1.1);
    }
    100% {
        clip-path: polygon(0 0, 100% 0, 100% 100%, 80% 100%, 80% 100%, 60% 100%, 60% 100%, 40% 100%, 40% 100%, 20% 100%, 20% 100%, 0 100%);
        transform: translateY(0px);
        filter: none;
    }
}


/* ========================= */
/* Wring and Unfurl Reveal   */
/* ========================= */
.wring-unfurl-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    perspective: 1000px;
}

.wring-unfurl-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: center;
    animation: wringUnfurl 2s cubic-bezier(0.2, 0.9, 0.3, 1) both !important;
}

@keyframes wringUnfurl {
    0% {
        /* Mangled, twisted ball */
        transform: rotateX(1080deg) rotateY(720deg) rotateZ(360deg) scaleX(0.1) scaleY(0.1);
        filter: brightness(0.2) saturate(0) drop-shadow(0 0 20px rgba(0,0,0,1));
        opacity: 0;
    }
    40% {
        /* Pulled tight horizontally, still twisted vertically like a towel */
        transform: rotateX(360deg) rotateY(0deg) rotateZ(0deg) scaleX(1) scaleY(0.05);
        filter: brightness(0.5) saturate(0.5) drop-shadow(0 20px 10px rgba(0,0,0,0.8));
        opacity: 1;
    }
    75% {
        /* Unfurling vertically */
        transform: rotateX(180deg) rotateY(0deg) rotateZ(0deg) scaleX(1) scaleY(0.5);
        filter: brightness(0.8) saturate(0.8) drop-shadow(0 10px 5px rgba(0,0,0,0.5));
    }
    100% {
        /* Flat and perfect */
        transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) scaleX(1) scaleY(1);
        filter: none;
        opacity: 1;
    }
}


/* ========================= */
/* Gallery Blink-in Effect   */
/* ========================= */
.gallery-row.blink-trigger [class*="-collage"],
.certificates.blink-trigger .certificate,
.clientShowcase.blink-trigger .clientLogo {
    animation: blinkIn 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards !important;
}

@keyframes blinkIn {
    0% { opacity: 0; transform: scale(0.5) translateY(20px); filter: brightness(2) contrast(1.5); }
    50% { opacity: 0.8; filter: brightness(1.5) contrast(1.2); }
    100% { opacity: 1; transform: scale(1) translateY(0); filter: none; }
}

/* ========================= */
/* Diagonal Peel and Stick   */
/* ========================= */
.peel-stick-container {
    position: relative;
    overflow: hidden;
    transform-origin: center;
    background: transparent;
}

.peel-stick-container .post-banner {
    display: block;
    width: 100%;
    height: auto;
    clip-path: polygon(0 0, 0 0, 0 0, 0 0);
    opacity: 0;
    transition: none; /* Controlled by animation */
}

.peel-stick-container.peel-active .post-banner {
    animation: peelReveal 1.2s cubic-bezier(0.19, 1, 0.22, 1) forwards;
}

/* The moving highlight/curl edge */
.peel-stick-container::after {
    content: '';
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background: linear-gradient(135deg, 
        rgba(255,255,255,0) 48%, 
        rgba(255,255,255,0.4) 50%, 
        rgba(0,0,0,0.05) 52%, 
        rgba(0,0,0,0) 54%);
    transform: rotate(45deg) translate(-100%, -100%);
    pointer-events: none;
    z-index: 2;
}

.peel-stick-container.peel-active::after {
    animation: peelShine 1.2s cubic-bezier(0.19, 1, 0.22, 1) forwards;
}

/* The physical "stick" settling effect */
.peel-stick-container.stuck {
    animation: stickSettle 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

@keyframes peelReveal {
    0% { clip-path: polygon(0 0, 0 0, 0 100%, 0 100%); opacity: 1; transform: scale(1.05) rotate(-1deg); }
    100% { clip-path: polygon(0 0, 200% 0, 0 200%, 0 100%); opacity: 1; transform: scale(1) rotate(0); }
}

@keyframes peelShine {
    0% { transform: rotate(45deg) translate(-100%, -100%); }
    100% { transform: rotate(45deg) translate(100%, 100%); }
}

@keyframes stickSettle {
    0% { transform: scale(1); }
    40% { transform: scale(0.985); }
    70% { transform: scale(1.01); }
    100% { transform: scale(1); }
}

/* ========================= */
/* Sci-Fi Smoke Container    */
/* ========================= */
.smoke-container {
    position: relative;
    overflow: hidden;
    margin-bottom: 20px;
}

.smoke-container canvas {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}

.rain-container {
    position: relative;
    overflow: hidden;
    margin-bottom: 20px;
}

.rain-container canvas {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}

.smoke-container canvas {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 1;
}

/* ========================= */
/* Shrink to Fit Reveal      */
/* ========================= */
.shrink-fit-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.shrink-fit-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: shrinkFitReveal 2s cubic-bezier(0.25, 0.8, 0.25, 1) both !important;
    transform-origin: center;
}

@keyframes shrinkFitReveal {
    0% {
        /* Extreme crop to force portrait document ratio on wide banners */
        clip-path: inset(0% 45% 0% 45%);
        transform: scale(0.6);
        filter: drop-shadow(0 0 20px rgba(0,0,0,0.8)) sepia(0.5) contrast(1.5);
    }
    30% {
        /* Pauses momentarily as a tall, narrow document */
        clip-path: inset(0% 45% 0% 45%);
        transform: scale(0.7);
        filter: drop-shadow(0 0 10px rgba(0,0,0,0.5)) sepia(0.5) contrast(1.5);
    }
    75% {
        /* Expands rapidly to full size */
        clip-path: inset(0% 0% 0% 0%);
        transform: scale(1.02);
        filter: sepia(0) contrast(1);
    }
    100% {
        clip-path: inset(0% 0% 0% 0%);
        transform: scale(1);
        filter: none;
    }
}


/* ========================= */
/* Strip Reveal Effect       */
/* ========================= */
.strip-reveal-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #111;
}

.strip-reveal-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: stripReveal 1.2s steps(10, end) both !important;
}

@keyframes stripReveal {
    0% {
        clip-path: inset(0 0 100% 0);
        filter: brightness(2.5) saturate(1.5);
    }
    100% {
        clip-path: inset(0 0 0% 0);
        filter: none;
    }
}


/* ========================= */
/* Blue Flash Reveal         */
/* ========================= */
.blue-flash-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.blue-flash-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: blueFlashReveal 1.2s cubic-bezier(0.1, 0.9, 0.2, 1) both !important;
}

@keyframes blueFlashReveal {
    0% {
        opacity: 0;
        filter: sepia(1) hue-rotate(190deg) saturate(5) brightness(3);
        transform: scale(1.05);
    }
    10% {
        opacity: 1;
        filter: sepia(1) hue-rotate(190deg) saturate(5) brightness(2.5);
        transform: scale(1.02);
    }
    100% {
        filter: sepia(0) hue-rotate(0deg) saturate(1) brightness(1);
        transform: scale(1);
    }
}


/* ========================= */
/* Strobe Sparkle Reveal     */
/* ========================= */
.strobe-sparkle-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.strobe-sparkle-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: strobeIn 2s linear both !important;
}

/* Sparkle elements overlay */
.strobe-sparkle-wrapper::before,
.strobe-sparkle-wrapper::after {
    content: '';
    position: absolute;
    top: -50%; left: -50%; right: -50%; bottom: -50%;
    pointer-events: none;
    z-index: 10;
    background-image: 
        radial-gradient(circle at 20% 30%, rgba(255,255,255,1) 2px, transparent 4px),
        radial-gradient(circle at 80% 40%, rgba(255,255,255,1) 3px, transparent 6px),
        radial-gradient(circle at 40% 70%, rgba(255,255,255,1) 2px, transparent 5px),
        radial-gradient(circle at 70% 80%, rgba(255,255,255,1) 1.5px, transparent 3px),
        radial-gradient(circle at 50% 50%, rgba(255,255,255,1) 3px, transparent 7px),
        radial-gradient(circle at 10% 80%, rgba(255,255,255,1) 1.5px, transparent 3px),
        radial-gradient(circle at 90% 20%, rgba(255,255,255,1) 3px, transparent 5px);
    background-size: 100% 100%;
    animation: sparkleFlash 2s ease-in-out both;
    mix-blend-mode: color-dodge;
}

.strobe-sparkle-wrapper::after {
    background-image: 
        radial-gradient(circle at 30% 20%, rgba(200,255,255,1) 3px, transparent 6px),
        radial-gradient(circle at 60% 80%, rgba(255,200,255,1) 2px, transparent 5px),
        radial-gradient(circle at 80% 10%, rgba(255,255,200,1) 1.5px, transparent 3px),
        radial-gradient(circle at 20% 70%, rgba(200,200,255,1) 3px, transparent 7px);
    animation: sparkleFlash 2s ease-in-out 0.1s both reverse;
}

@keyframes strobeIn {
    0% { opacity: 0; filter: brightness(3); }
    3% { opacity: 1; filter: brightness(2); }
    6% { opacity: 0; filter: brightness(3); }
    9% { opacity: 1; filter: brightness(2); }
    12% { opacity: 0; filter: brightness(3); }
    15% { opacity: 1; filter: brightness(2); }
    18% { opacity: 0; filter: brightness(3); }
    21% { opacity: 1; filter: brightness(1.5); }
    25% { opacity: 0; filter: brightness(2); }
    30% { opacity: 1; filter: brightness(1.5); }
    100% { opacity: 1; filter: none; }
}

@keyframes sparkleFlash {
    0% { opacity: 0; transform: scale(0.8) rotate(0deg); }
    15% { opacity: 1; transform: scale(1.1) rotate(5deg); }
    30% { opacity: 0.2; transform: scale(0.9) rotate(-5deg); }
    45% { opacity: 1; transform: scale(1.2) rotate(10deg); }
    60% { opacity: 0.5; transform: scale(1) rotate(-10deg); }
    100% { opacity: 0; transform: scale(1.5) rotate(20deg); }
}


/* ========================= */
/* Sparkler Explode Reveal   */
/* ========================= */
.sparkler-explode-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.sparkler-explode-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: sparklerReveal 2.2s cubic-bezier(0.2, 0.9, 0.3, 1) both !important;
}

.sparkler-explode-wrapper::before {
    content: '';
    position: absolute;
    inset: -50%;
    z-index: 2;
    pointer-events: none;
    background: radial-gradient(circle 8px at 50% 50%, rgba(255,255,200,1), rgba(255,200,50,0.6) 40%, transparent 70%);
    animation: sparklerBurst 2.2s ease-out forwards;
}

.sparkler-explode-wrapper::after {
    content: '';
    position: absolute;
    inset: -100%;
    z-index: 3;
    pointer-events: none;
    animation: sparklerParticles 2.2s ease-out forwards;
}

@keyframes sparklerReveal {
    0% { opacity: 0; filter: brightness(0) saturate(0); }
    18% { opacity: 1; filter: brightness(0.4) saturate(0.6); }
    40% { filter: brightness(1.6) saturate(1.4) contrast(1.1); }
    65% { filter: brightness(0.9) saturate(1.1); }
    100% { filter: brightness(1) saturate(1) contrast(1); }
}

@keyframes sparklerBurst {
    0% {
        transform: scale(0.01);
        opacity: 1;
        background: radial-gradient(circle 8px at 50% 50%, rgba(255,255,200,1), rgba(255,200,50,0.8) 30%, transparent 60%);
    }
    8% {
        transform: scale(1);
        background: radial-gradient(circle 120px at 50% 50%, rgba(255,255,220,0.9), rgba(255,200,50,0.5) 35%, transparent 65%);
    }
    20% {
        transform: scale(2);
        background: radial-gradient(circle 250px at 50% 50%, rgba(255,255,220,0.5), rgba(255,200,50,0.2) 45%, transparent 75%);
        opacity: 0.8;
    }
    50% {
        transform: scale(4);
        background: radial-gradient(circle 400px at 50% 50%, rgba(255,255,220,0.15), transparent 70%);
        opacity: 0.2;
    }
    100% {
        transform: scale(6);
        background: transparent;
        opacity: 0;
    }
}

@keyframes sparklerParticles {
    0% {
        box-shadow:
            0 0 0 0 #fff;
        opacity: 1;
    }
    12% {
        box-shadow:
            -40px -60px 0 3px rgba(255,255,150,0.95),
            50px -45px 0 2px rgba(255,200,50,0.85),
            70px 30px 0 3px rgba(255,255,200,0.9),
            -55px 55px 0 2px rgba(255,200,50,0.75),
            -75px -20px 0 3px rgba(255,255,150,0.85),
            25px 75px 0 2px rgba(255,200,50,0.65),
            90px -5px 0 3px rgba(255,255,200,0.7),
            -30px -85px 0 2px rgba(255,200,50,0.8),
            5px 90px 0 3px rgba(255,255,150,0.6),
            -85px 15px 0 2px rgba(255,200,50,0.7);
        opacity: 1;
    }
    30% {
        box-shadow:
            -80px -110px 0 2px rgba(255,255,150,0.5),
            90px -80px 0 1px rgba(255,200,50,0.4),
            120px 55px 0 2px rgba(255,255,200,0.35),
            -95px 100px 0 1px rgba(255,200,50,0.3),
            -120px -40px 0 2px rgba(255,255,150,0.4),
            45px 120px 0 1px rgba(255,200,50,0.25),
            140px -10px 0 2px rgba(255,255,200,0.2),
            -50px -130px 0 1px rgba(255,200,50,0.35);
        opacity: 0.6;
    }
    60% {
        box-shadow:
            -100px -140px 0 1px rgba(255,255,150,0.2),
            110px -100px 0 0 rgba(255,200,50,0.1),
            150px 70px 0 1px rgba(255,255,200,0.1),
            -120px 130px 0 0 rgba(255,200,50,0.05);
        opacity: 0.2;
    }
    100% {
        box-shadow: 0 0 0 0 transparent;
        opacity: 0;
    }
}


/* ========================= */
/* Red Warning Flash         */
/* ========================= */
.red-warning-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.red-warning-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: warningImage 2s ease-in-out 2 both;
}

.red-warning-wrapper::after {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    pointer-events: none;
    z-index: 10;
    background: radial-gradient(circle at center, transparent 10%, rgba(255, 0, 0, 0.8) 100%);
    box-shadow: inset 0 0 60px rgba(255,0,0,1);
    mix-blend-mode: multiply;
    animation: warningOverlay 2s ease-in-out 2 both;
}

@keyframes warningOverlay {
    0% { opacity: 0; }
    10% { opacity: 1; }
    20% { opacity: 0.2; }
    30% { opacity: 1; }
    50%, 100% { opacity: 0; }
}

@keyframes warningImage {
    0% { filter: brightness(1) contrast(1); transform: scale(1); }
    10% { filter: brightness(1.2) contrast(1.2); transform: scale(1.02); }
    20% { filter: brightness(1) contrast(1); transform: scale(1.01); }
    30% { filter: brightness(1.3) contrast(1.2); transform: scale(1.03); }
    50%, 100% { filter: brightness(1) contrast(1); transform: scale(1); }
}


/* ========================= */
/* Building Blocks Reveal    */
/* ========================= */
.building-blocks-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.building-blocks-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.building-block {
    position: absolute;
    z-index: 2;
    background-color: #16162a;
    box-sizing: border-box;
    border: 1px solid rgba(255,255,255,0.08);
    transition: opacity 0.45s cubic-bezier(0.4, 0, 0.2, 1),
                transform 0.45s cubic-bezier(0.4, 0, 0.2, 1);
    opacity: 1;
    transform: scale(1);
}

.building-block.revealed {
    opacity: 0;
    transform: scale(1.12) translateY(-14px);
}


/* ========================= */
/* Up Arrow Reveal           */
/* ========================= */
.up-arrow-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.up-arrow-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.up-arrow-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    pointer-events: none;
    background: #16162a;
    clip-path: polygon(
        0% 0%, 100% 0%,
        100% 100%, 50% 100%, 50% 100%, 50% 100%, 0% 100%
    );
    animation: arrowReveal 2.8s cubic-bezier(0.15, 0.85, 0.25, 1) forwards;
}

@keyframes arrowReveal {
    0% {
        clip-path: polygon(
            0% 0%, 100% 0%,
            100% 100%, 50% 100%, 50% 100%, 50% 100%, 0% 100%
        );
    }
    28% {
        clip-path: polygon(
            0% 0%, 100% 0%,
            100% 100%, 53% 100%, 50% 90%, 47% 100%, 0% 100%
        );
    }
    52% {
        clip-path: polygon(
            0% 0%, 100% 0%,
            100% 100%, 70% 100%, 50% 50%, 30% 100%, 0% 100%
        );
    }
    72% {
        clip-path: polygon(
            0% 0%, 100% 0%,
            100% 100%, 90% 100%, 50% 10%, 10% 100%, 0% 100%
        );
    }
    86% {
        clip-path: polygon(
            0% 0%, 100% 0%,
            100% 100%, 115% 100%, 50% -30%, -15% 100%, 0% 100%
        );
    }
    100% {
        clip-path: polygon(
            0% 0%, 100% 0%,
            100% -50%, 150% -50%, 50% -100%, -50% -50%, 0% -50%
        );
    }
}


/* ========================= */
/* Starburst Reveal          */
/* ========================= */
.starburst-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.starburst-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.starburst-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    pointer-events: none;
    background: #16162a;
    clip-path: polygon(
        250% 50%, 119% 90%, 150% 223%,
        50% 130%, -50% 223%, -19% 90%,
        -150% 50%, -19% 10%, -50% -123%,
        50% -30%, 150% -123%, 119% 10%
    );
    animation: starburstReveal 2.6s cubic-bezier(0.2, 0.8, 0.25, 1) forwards;
}

@keyframes starburstReveal {
    0% {
        clip-path: polygon(
            250% 50%, 119% 90%, 150% 223%,
            50% 130%, -50% 223%, -19% 90%,
            -150% 50%, -19% 10%, -50% -123%,
            50% -30%, 150% -123%, 119% 10%
        );
    }
    30% {
        clip-path: polygon(
            190% 50%, 93% 75%, 120% 171%,
            50% 100%, -20% 171%, 7% 75%,
            -90% 50%, 7% 25%, -20% -71%,
            50% 0%, 120% -71%, 93% 25%
        );
    }
    60% {
        clip-path: polygon(
            120% 50%, 72% 63%, 85% 111%,
            50% 75%, 15% 111%, 28% 63%,
            -20% 50%, 28% 37%, 15% -11%,
            50% 25%, 85% -11%, 72% 37%
        );
    }
    100% {
        clip-path: polygon(
            50% 50%, 50% 50%, 50% 50%,
            50% 50%, 50% 50%, 50% 50%,
            50% 50%, 50% 50%, 50% 50%,
            50% 50%, 50% 50%, 50% 50%
        );
    }
}


/* ========================= */
/* Shimmer Sweep Effect      */
/* ========================= */
.shimmer-sweep-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.shimmer-sweep-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.shimmer-sweep-wrapper::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 30%;
    height: 100%;
    background: linear-gradient(
        to right, 
        rgba(255, 255, 255, 0) 0%, 
        rgba(255, 255, 255, 0.8) 50%, 
        rgba(255, 255, 255, 0) 100%
    );
    transform: skewX(-25deg);
    animation: shimmerSweep 5s cubic-bezier(0.2, 0.8, 0.2, 1) 2 forwards;
    pointer-events: none;
    z-index: 10;
    mix-blend-mode: overlay;
}

@keyframes shimmerSweep {
    0% { left: -100%; }
    50%, 100% { left: 200%; }
}

/* Green glimmer sweep for Walkerbay banner */
.glimmer-green-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.glimmer-green-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.glimmer-green-wrapper::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 30%;
    height: 100%;
    background: linear-gradient(
        to right, 
        rgba(0, 255, 0, 0) 0%, 
        rgba(0, 255, 0, 0.4) 50%, 
        rgba(0, 255, 0, 0) 100%
    );
    transform: skewX(-25deg);
    animation: shimmerSweep 5s cubic-bezier(0.2, 0.8, 0.2, 1) 3 forwards;
    pointer-events: none;
    z-index: 10;
    mix-blend-mode: overlay;
}


/* Golden glimmer sweep for advertorial banner */
.glimmer-gold-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin-top: 15px;
    margin-bottom: 10px;
}

.glimmer-gold-wrapper img {
    display: block;
}

.glimmer-gold-wrapper::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 30%;
    height: 100%;
    background: linear-gradient(
        to right,
        rgba(255, 215, 0, 0) 0%,
        rgba(255, 215, 0, 0.5) 50%,
        rgba(255, 215, 0, 0) 100%
    );
    transform: skewX(-25deg);
    animation: shimmerSweep 5s cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
    pointer-events: none;
    z-index: 10;
    mix-blend-mode: overlay;
}

/* ========================= */
/* Snake Border & Blue Flash */
/* ========================= */
.snake-border-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.snake-border-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: bluePulse 6s ease-out forwards;
}

.snake-svg {
    position: absolute;
    top: 0; left: 0;
    width: 100%; height: 100%;
    pointer-events: none;
    z-index: 10;
}

.snake-rect {
    fill: none;
    stroke: #00BFFF;
    stroke-width: 10px; /* 5px visible inner border */
    stroke-dasharray: 25 75;
    animation: snakeDash 6s linear forwards;
    filter: drop-shadow(0 0 8px #00BFFF) drop-shadow(0 0 15px #00BFFF);
}

@keyframes snakeDash {
    0% { stroke-dashoffset: 0; opacity: 1; }
    98% { stroke-dashoffset: -200; opacity: 1; } /* -200 offset equals exactly two full laps */
    100% { stroke-dashoffset: -200; opacity: 0; } /* Fade out cleanly at the end */
}

@keyframes bluePulse {
    0% { filter: brightness(1) sepia(0) hue-rotate(0deg) saturate(1); }
    25% { filter: brightness(1.2) sepia(0.8) hue-rotate(190deg) saturate(3); }
    50% { filter: brightness(1) sepia(0) hue-rotate(0deg) saturate(1); }
    75% { filter: brightness(1.2) sepia(0.8) hue-rotate(190deg) saturate(3); }
    100% { filter: brightness(1) sepia(0) hue-rotate(0deg) saturate(1); }
}


/* ========================= */
/* Swing & Flash Reveal      */
/* ========================= */
.pop-flash-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
}

.pop-flash-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: center center;
    animation: popAndFlash 2.5s cubic-bezier(0.25, 0.8, 0.25, 1) both !important;
}

@keyframes popAndFlash {
    0% { transform: scale(0.6); opacity: 0; filter: brightness(2); }
    30% { transform: scale(1.05); opacity: 1; filter: brightness(1); }
    50% { transform: scale(0.98); }
    65% { transform: scale(1); filter: brightness(1); }
    75% { transform: scale(1); filter: sepia(1) hue-rotate(320deg) saturate(10) brightness(2) drop-shadow(0 0 20px red); }
    100% { transform: scale(1); filter: none; }
}


/* ========================= */
/* Double Bounce Reveal      */
/* ========================= */
.bounce-twice-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
}

.bounce-twice-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: bottom center;
    animation: bounceTwice 1.8s cubic-bezier(0.28, 0.84, 0.42, 1) both !important;
}

@keyframes bounceTwice {
    0% { transform: translateY(-150%) scaleY(1.1); opacity: 0; }
    25% { transform: translateY(0%) scaleY(0.85); opacity: 1; }
    45% { transform: translateY(-25%) scaleY(1.05); }
    65% { transform: translateY(0%) scaleY(0.95); }
    80% { transform: translateY(-8%) scaleY(1.02); }
    100% { transform: translateY(0%) scaleY(1); }
}


/* ========================= */
/* Zoom Bounce Reveal        */
/* ========================= */
.zoom-bounce-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
}

.zoom-bounce-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: center center;
    animation: zoomBounce 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) both !important;
}

@keyframes zoomBounce {
    0% { transform: scale(0); opacity: 0; }
    50% { transform: scale(1.15); opacity: 1; filter: drop-shadow(0 20px 20px rgba(0,0,0,0.4)); }
    100% { transform: scale(1); filter: drop-shadow(0 0 0 rgba(0,0,0,0)); }
}


/* ========================= */
/* Unfold Reveal             */
/* ========================= */
.unfold-reveal-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    perspective: 2000px;
}

.unfold-reveal-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: top;
    animation: unfoldBanner 1.2s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
}

@keyframes unfoldBanner {
    0% { transform: rotateX(-90deg); opacity: 0; filter: brightness(0.4); }
    100% { transform: rotateX(0deg); opacity: 1; filter: brightness(1); }
}


/* ========================= */
/* Sink and Bounce Reveal    */
/* ========================= */
.sink-bounce-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    perspective: 1500px;
    background: transparent;
}

.sink-bounce-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-style: preserve-3d;
    animation: sinkAndBounce 1.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
}

@keyframes sinkAndBounce {
    0% { 
        transform: translateZ(0) scale(1); 
        filter: drop-shadow(0 0 0 rgba(0,0,0,0)); 
        opacity: 0;
    }
    10% {
        opacity: 1;
    }
    30% { 
        transform: translateZ(-150px) scale(0.85); 
        filter: drop-shadow(0 30px 50px rgba(0,0,0,0.6)); 
    }
    100% { 
        transform: translateZ(0) scale(1); 
        filter: drop-shadow(0 5px 15px rgba(0,0,0,0.2)); 
        opacity: 1;
    }
}


/* ========================= */
/* Windows 11 Fluent Reveal  */
/* ========================= */
.windows-reveal-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    border-radius: 8px; /* Signature Windows 11 rounded corners */
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); /* Soft acrylic drop shadow */
}

.windows-reveal-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    border-radius: 8px;
    animation: fluentSlideUp 1.8s cubic-bezier(0, 0.55, 0.45, 1) both !important;
}

.windows-reveal-wrapper::after {
    content: '';
    position: absolute;
    top: -50%; left: -50%;
    width: 200%; height: 200%;
    /* Swirling blue light emulating the Windows 11 'Bloom' wallpaper */
    background: conic-gradient(from 180deg at 50% 50%, rgba(0, 120, 212, 0) 0%, rgba(0, 120, 212, 0.9) 50%, rgba(0, 120, 212, 0) 100%);
    mix-blend-mode: screen;
    animation: windowsBloom 2.5s cubic-bezier(0.1, 0.9, 0.2, 1) forwards;
    pointer-events: none;
    z-index: 10;
}

@keyframes fluentSlideUp {
    0% { transform: translateY(60px) scale(0.9); filter: blur(30px) saturate(1.5); opacity: 0; }
    100% { transform: translateY(0) scale(1); filter: blur(0px) saturate(1); opacity: 1; }
}

@keyframes windowsBloom {
    0% { transform: scale(0) rotate(0deg); opacity: 1; }
    100% { transform: scale(1.5) rotate(180deg); opacity: 0; }
}


/* ========================= */
/* Privacy Decrypt Reveal    */
/* ========================= */
.privacy-reveal-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #111; /* Dark background to sell the scan effect */
    border-radius: 4px;
}

.privacy-reveal-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    /* Start clipped to 0 height, reveal downwards while heavily filtered */
    animation: decryptReveal 2.5s cubic-bezier(0.2, 0.8, 0.2, 1) forwards !important;
}

.privacy-reveal-wrapper::after {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: #00FF41; /* Matrix/Hacker Green */
    box-shadow: 0 0 10px #00FF41, 0 5px 20px #00FF41;
    /* Scanner sweeps down synchronously with the clip-path */
    animation: decryptScanner 2.5s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
    z-index: 10;
}

@keyframes decryptReveal {
    0% { clip-path: inset(0 0 100% 0); filter: grayscale(1) contrast(2) brightness(0.5); }
    80% { filter: grayscale(0.8) contrast(1.5) brightness(0.8); }
    100% { clip-path: inset(0 0 0 0); filter: grayscale(0) contrast(1) brightness(1); }
}

@keyframes decryptScanner {
    0% { top: 0%; opacity: 1; }
    90% { top: 100%; opacity: 1; }
    100% { top: 100%; opacity: 0; }
}

/* Matrix Digital Rain Effect Overlay */
.matrix-container {
    position: relative;
    width: 100%;
    overflow: hidden;
    line-height: 0;
    margin-bottom: 20px;
}

.matrix-container .post-banner.banner-darken {
    filter: brightness(0.45) contrast(1.2) saturate(0.85); /* Adjusted night look for better visibility */
    transition: filter 1s ease;
}

#matrixCanvas {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 2;
    opacity: 0.65; /* Balanced for the darker night-time banner */
}

/* Darkened Digital Glitch Effect for Banners - Aggressive & Frequent */
.banner-glitch {
    filter: brightness(0.35) contrast(1.3);
    animation: bannerGlitch 2s infinite linear;
}

@keyframes bannerGlitch {
    0%, 15%, 35%, 55%, 75%, 95%, 100% { 
        transform: translate(0) skew(0); 
        filter: brightness(0.35) contrast(1.3);
    }
    16% { 
        transform: translate(-6px, 3px) skewX(5deg); 
        filter: brightness(0.9) hue-rotate(180deg) invert(0.2);
    }
    17% { 
        transform: translate(6px, -3px) skewX(-5deg); 
        filter: brightness(0.3) hue-rotate(-180deg);
    }
    56% { 
        transform: translate(-3px, -3px) scaleY(1.1); 
        filter: brightness(0.8) saturate(5);
        box-shadow: 5px 0 0 rgba(255,0,0,0.5), -5px 0 0 rgba(0,255,255,0.5);
    }
    57% { 
        transform: translate(0); 
        filter: brightness(0.35) contrast(1.3);
        box-shadow: none;
    }
    96% { 
        transform: translate(0, 4px) scaleX(1.1); 
        filter: brightness(1.1) contrast(2) grayscale(1);
    }
    97% { 
        transform: translate(0);
    }
}


/* === end of effects.css === */

/* >>> footer.css (6947 bytes) */
/* Add 10px left padding to the second footer section (desktop only) */
.footerHours {
    padding-left: 10px;
}
@media (max-width: 900px) {
    .footerHours {
        padding-left: 0;
    }
}
/* Flexbox-based sizing for footer sections: first 300px (Follow Us), second 280px (Office Hours), third 370px (Copyright) */
.responsive-footer .footerSection.footerFollow { /* 300px wide (Follow Us) */
    flex-basis: 300px;
    max-width: 300px;
    min-width: 220px;
}
.responsive-footer .footerSection.footerHours { /* 280px wide (Office Hours) */
    flex-basis: 280px;
    max-width: 280px;
    min-width: 180px;
}
.responsive-footer .footerSection.footerCopyright { /* 370px wide (Copyright) */
    flex-basis: 370px;
    max-width: 370px;
    min-width: 220px;
}

@media (max-width: 900px) {
    .responsive-footer .footerSection {
        flex-basis: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
    }
}
/* Depress social icons on click */
.footerSocialIconLink:active {
    transform: scale(0.92);
    box-shadow: 0 1px 4px rgba(0,0,0,0.18) inset;
}
/* Reduce glassy overlay on hover to make icon colors pop */
.footerSocialIconLink:hover::after {
    background: linear-gradient(120deg, rgba(255,255,255,0.10) 10%, rgba(255,255,255,0.03) 60%, rgba(255,255,255,0.08) 100%);
    box-shadow: none;
}
/* Liquid glassy overlay for social icon links */
.footerSocialIconLink {
    position: relative;
    z-index: 1;
    display: inline-block;
    border-radius: 50%;
    overflow: hidden;
}
.footerSocialIconLink::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    pointer-events: none;
    background: linear-gradient(120deg, rgba(255,255,255,0.35) 10%, rgba(255,255,255,0.10) 60%, rgba(255,255,255,0.25) 100%);
    box-shadow: 0 2px 8px 0 rgba(255,255,255,0.10) inset, 0 1.5px 0 0 rgba(255,255,255,0.18);
    z-index: 2;
}
/* Liquid glassy overlay for social icons */
.footerSocialIconImg {
    position: relative;
    z-index: 1;
}
.footerSocialIconImg::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    pointer-events: none;
    background: linear-gradient(120deg, rgba(255,255,255,0.35) 10%, rgba(255,255,255,0.10) 60%, rgba(255,255,255,0.25) 100%);
    box-shadow: 0 2px 8px 0 rgba(255,255,255,0.10) inset, 0 1.5px 0 0 rgba(255,255,255,0.18);
    z-index: 2;
}
/* Move the social icons in footer section 1 (FOLLOW US) 10px to the left */
.footerSection.footerFollow .footerSocialIcons {
    margin-left: -10px;
    margin-top: 20px;
}
/* Move the h3 title in footer section 1 (FOLLOW US) 20px to the right */
.footerSection.footerFollow h3 {
    padding-left: 20px;
}
/* Social icon images in the footer */
.footerSocialIconImg {
    display: inline-block;
    width: 45px;
    height: 45px;
    border-radius: 50%;
    background: transparent;
    box-shadow: none;
    object-fit: contain;
    border: none;
    transition: none;
}
.footerSocialIcons,
.footerHoursList {
    list-style: none;
    padding-left: 0;
    margin-left: 0;
}
/* Add 10px left padding to the first footer section (desktop only) */
.footerFollow {
    padding-left: 10px;
}
@media (max-width: 900px) {
    .footerFollow {
        padding-left: 0;
    }
}
/* Make all footer text except headings white on desktop and mobile */
.responsive-footer,
.responsive-footer p,
.responsive-footer ul,
.responsive-footer li,
.responsive-footer .footerChicklets {
    color: #fff;
}
.responsive-footer a,
.responsive-footer a:visited,
.responsive-footer a:active {
    color: #fff !important;
    text-decoration: underline;
}
.responsive-footer h3 {
    color: #fff;
}
/* Responsive footer layout for three sections: Follow Us, Office Hours, Copyright */
.responsive-footer {
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-between;
    align-items: stretch;
    gap: 32px;
    padding: 32px 16px 16px 16px;
    background: #222;
    color: #fff;
    border-top: 4px solid #0556AF; /* Updated footer line color */
}
.footerSection {
    flex: 0 0 auto;
    min-width: 0;
    margin-bottom: 16px;
}
/* Ensure each footer section has a minimum width for layout stability */
.responsive-footer .footerSection.footerFollow,
.responsive-footer .footerSection.footerCopyright {
    min-width: 220px;
}
.responsive-footer .footerSection.footerHours {
    min-width: 180px;
}
.footerSection h3 {
    font-size: 1.1em;
    letter-spacing: 0.05em;
    margin-bottom: 12px;
    color: #fff;
    text-transform: uppercase;
}
.footerSocialIcons {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 4px;
    max-width: 100%;
    justify-content: center;
}
.footerSocialIcons a {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 54px;
    height: 54px;
    background: transparent;
    border-radius: 50%;
    text-decoration: none;
    padding: 0;
    border: none;
    box-shadow: none;
    transition: none;
}
.footerSocialIcons a:hover {
    background: transparent;
}
.footerSocialIcons i {
    /* removed, not used */
}
.footerSocialIcons a:hover i {
    /* removed, not used */
}
.footerSocialIcons .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}
.footerHoursList {
    list-style: none;
    padding: 0;
    margin: 0;
    font-size: 1em;
    line-height: 1.7;
}
.footerCopyright p {
    margin: 0 0 10px 0;
}
.footerChicklets {
    margin-top: 8px;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}
.footerChicklets img {
    background: #fff;
    border-radius: 3px;
    box-shadow: 0 1px 4px rgba(0,0,0,0.10);
}
@media (max-width: 900px) {
    .responsive-footer {
        flex-direction: column;
        align-items: stretch;
        gap: 20px;
        padding: 24px 8px 8px 8px;
    }
    .footerSection {
        min-width: 0;
        margin-bottom: 0;
    }
}
/*
    footer.css - Footer styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Footer Container, Footer Text, Footer Chicklets
*/

/* This document contains all the styling pertaining to the FOOTER SECTION of the website */

/* Footer Container: Main footer box */
.footerContainer {
    background-color: #890402;
    margin-top: 0;
    /* Push footer container off bottom of browser */
    margin-bottom: 20px;
    /* Add some space inside the bottom of the footer container */
    padding-bottom: 15px;
    border-bottom-left-radius: 18px;
    border-bottom-right-radius: 18px;
    overflow: hidden;
    position: relative;
    z-index: 2;
    transform: translate3d(0, -3px, 0) !important;
    box-shadow:
        0 -10px 22px rgba(70, 18, 8, 0.16),
        0 -2px 8px rgba(255, 100, 40, 0.12);
    will-change: transform, box-shadow;
}

/* Footer Text: Copyright and links */


/* === end of footer.css === */

/* >>> formatting.css (7839 bytes) */
/* Footer copyright text */
.footerCopyright p {
    font-size: 0.95em;
    line-height: 1.5;
}

/*
    formatting.css - Blog post and content formatting styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Post Section, Paragraphs, Highlights, Alignments
*/

/* Post Section: Main content area for posts */
.postSection {
    max-width: 100%;
    min-width: 100%;
    margin-top: 30px;
    margin-right: auto;
    margin-bottom: 10px;
    margin-left: auto;
    padding-top: 4px;
    padding-right: 14px;
    padding-bottom: 0;
    padding-left: 8px;
    box-sizing: border-box;
}

/* Notification Box Styles */
.notification-box {
    width: 100%;
    color: #222;
    border: 5px solid transparent;
    background: linear-gradient(#fff9c4, #fff9c4) padding-box, 
                repeating-linear-gradient(45deg, #FFA000, #FFA000 10px, #fff9c4 10px, #fff9c4 20px) border-box;
    border-radius: 6px;
    padding: 1em 1.5em;
    margin: 1.2em auto 1.4em auto;
    font-size: 1rem;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.07);
    display: block;
    box-sizing: border-box;
}

.notification-box.success {
    color: #0F8B00;
    background: linear-gradient(#fff9c4, #fff9c4) padding-box, 
                repeating-linear-gradient(45deg, #0F8B00, #0F8B00 10px, #fff9c4 10px, #fff9c4 20px) border-box;
}

.notification-box.error {
    color: #B30000;
    background: linear-gradient(#fff9c4, #fff9c4) padding-box, 
                repeating-linear-gradient(45deg, #B30000, #B30000 10px, #fff9c4 10px, #fff9c4 20px) border-box;
}

.notification-box.info {
    color: #004080;
    background: linear-gradient(#fff9c4, #fff9c4) padding-box, 
                repeating-linear-gradient(45deg, #004080, #004080 10px, #fff9c4 10px, #fff9c4 20px) border-box;
}

/* Notification box span text */
.notification-box-text {
    display: inline;
    white-space: normal;
    line-height: inherit;
    font: inherit;
}

/* Consent Banner */
#consent-banner {
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100vw;
    background: #ed150a;
    color: #fff;
    text-align: center;
    padding: 0.3em 0 0.5em 0;
    z-index: 100000;
    font-size: 0.9em;
    box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15);
    /* Initially hidden, shown via JavaScript */
    display: none;
}

#consent-banner-content {
    max-width: 990px;
    margin: 0 auto;
    padding: 0 20px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.consent-banner-text {
    text-align: center;
    display: block;
    margin: 0;
    padding: 0.3em 0;
}

.consent-banner-privacy-link {
    text-decoration: underline;
    color: #fff !important;
}

.consent-banner-privacy-link:hover {
    color: #fff !important;
}

#consent-banner-buttons {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin: 5px 0 10px 0;
    width: 100%;
}

.consent-button {
    padding: 0.4em 1.2em;
    border: none;
    border-radius: 4px;
    color: #fff;
    font-weight: bold;
    cursor: pointer;
    margin: 0;
    min-width: 80px;
}

#consent-accept {
    background: #0F8B00;
}

#consent-decline {
    background: #0074d9;
}

/* Remove bottom margin from the last paragraph in postSection */
.postSection p:last-child {
    margin-bottom: 0;
}

@media (max-width: 767px) {
    #consent-banner-content {
        padding: 0 10px;
    }

    #consent-banner-buttons {
        display: flex;
        flex-direction: row;
        gap: 5px;
        margin: 5px 0 15px 0;
        justify-content: center;
        width: 100%;
    }

    .consent-button {
        display: inline-block;
        margin: 0 2px;
        padding: 0.3em 1em;
    }

    .postSection {
        max-width: 100% !important;
        min-width: 0 !important;
        width: 100% !important;
        margin: 0 0 10px 0 !important;
        padding: 12px 15px 0 15px !important;
        box-sizing: border-box;
        word-break: break-word;
        overflow-wrap: break-word;
        text-align: left !important;
    }

    .postSection p {
        margin-top: 0;
        margin-bottom: 18px;
        margin-left: 0;
        margin-right: 0;
        font-size: 16px;
        padding: 0;
        box-sizing: border-box;
        word-break: break-word;
        overflow-wrap: break-word;
    }

    h1,
    .headingH1 {
        font-size: clamp(1.4rem, 6vw, 2.1rem) !important;
        line-height: 1.15;
        margin-top: 0.5em;
        margin-bottom: 0.5em;
        text-align: center;
    }
}

/* Paragraphs */
/* Paragraphs: Styling for paragraphs in posts */
.postSection p {

    /* cap width */
    width: 100%;
    /* allow fluid shrink */
    /* removed min-width to allow fluid behavior */
    margin-top: 0;
    margin-bottom: 20px;
    margin-left: auto;
    /* center horizontally */
    margin-right: auto;
    /* center horizontally */
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 1.05rem;
    color: rgb(24, 23, 23);
    line-height: 1.7;
    text-indent: 0;
    box-sizing: border-box;
}

/* Paragraph indentation under H1 / H2 / H3 / H4 headings
    JS will add classes .indent-h1, .indent-h2, .indent-h3 or .indent-h4 to paragraphs that follow an H1, H2, H3 or H4
    until another heading level (H1-H4) resets the state. This avoids broad sibling selectors
    that would otherwise over-apply indentation past the next heading.
    
    IMPORTANT: These padding-left values MUST match the heading padding-left values in headings.css:
    - p.indent-h1 padding-left → H1 padding-left
    - p.indent-h2 padding-left → H2 padding-left
    - p.indent-h3 padding-left → H3 padding-left
    - p.indent-h4 padding-left → H4 padding-left
    Always update both files together to maintain paragraph-to-heading alignment.
*/
.postSection p.indent-h1 {
    /* Indent content under H1 while keeping overall centering */
    text-indent: 0;
    margin-left: 0;
    margin-right: auto;
    padding-left: 0;
}

.postSection p.indent-h2 {
    /* Indent content under H2 while keeping overall centering */
    text-indent: 0;
    margin-left: 0;
    margin-right: auto;
    padding-left: 0;
}

.postSection p.indent-h3 {
    /* Indent content under H3 while keeping overall centering */
    text-indent: 0;
    margin-left: 0;
    margin-right: auto;
    padding-left: 40px;
}

.postSection p.indent-h4 {
    /* Indent content under H4 while keeping overall centering */
    text-indent: 0;
    margin-left: 0;
    margin-right: auto;
    padding-left: 60px;
}

/* Ensure nested lists or other block elements right after headings can align if needed */
/* Lists immediately following indented H3 paragraphs: align with paragraph content */
.postSection .indent-h3+ul,
.postSection .indent-h3+ol {
    padding-left: 40px;
}

/* Lists immediately following indented H4 paragraphs: align with paragraph content */
.postSection .indent-h4+ul,
.postSection .indent-h4+ol {
    padding-left: 60px;
}

/* Code block styling for copy-enabled code blocks */
.code-block-wrapper {
    position: relative;
    background: #000;
    border-radius: 6px;
    border: 1px solid #333;
    margin: 0 0 20px 0;
}

.code-block-wrapper pre {
    margin: 0;
    padding: 18px 50px 18px 18px;
    white-space: pre-wrap;
    word-wrap: break-word;
    font-family: 'Consolas', 'Courier New', monospace;
    font-size: 1.05rem;
    line-height: 1.6;
    color: #fff;
    position: relative;
    z-index: 1;
}

.code-block-wrapper code {
    font-family: inherit;
    font-size: inherit;
    color: inherit;
    background: none;
    padding: 0;
}

.copy-btn {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    width: 36px;
    background: #333;
    color: #fff;
    border: none;
    border-left: 1px solid #555;
    padding: 0;
    cursor: pointer;
    font-size: 0.85em;
    z-index: 11;
    font-family: 'Poppins', sans-serif;
    writing-mode: vertical-rl;
    text-orientation: mixed;
    letter-spacing: 2px;
    border-radius: 0 6px 6px 0;
    display: flex;
    align-items: center;
    justify-content: center;
}

.copy-btn:hover {
    background: #555;
}

.copy-flash {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: #000;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 6em;
    font-weight: bold;
    border-radius: 6px;
    z-index: 10;
    opacity: 1;
    transition: opacity 1s ease;
    pointer-events: none;
}

/* Highlighting */

/* Highlight: Yellow background for highlights */
.highLight {
    background-color: yellow;
}

/* Menu path: Styling for Settings > Accounts > Add account breadcrumbs */
.menu-path {
    background: #f0f0f0;
    border: 1px solid #ccc;
    border-radius: 3px;
    padding: 1px 5px;
    font-family: Consolas, "Courier New", monospace;
    font-size: 0.9em;
    color: #c7254e;
    white-space: nowrap;
}

/* ALIGNMENTS */

/* Center Alignment: Centered block elements */
.center {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

/* Footnotes styling */
.postSection sup a {
    text-decoration: none;
    color: inherit;
    padding: 0 2px;
}

.postSection .fn-back {
    text-decoration: none;
    margin-right: 0.4em;
    color: #007E7D;
    font-weight: 600;
}

/* === end of formatting.css === */

/* >>> headings.css (2308 bytes) */
/*
    headings.css - Heading styles for SOHO Systems
    Last commented: 2025-08-23
    Structure: H1, H2, H3, H4 heading classes
    
    IMPORTANT: When updating heading padding-left values, you MUST also update
    the corresponding paragraph indentation in formatting.css:
    - H1 padding-left → p.indent-h1 padding-left
    - H2 padding-left → p.indent-h2 padding-left
    - H3 padding-left → p.indent-h3 padding-left
    - H4 padding-left → p.indent-h4 padding-left
    This ensures paragraphs remain aligned with their parent headings.
*/

/* Level 1 Headings */
.postSection h1 {
    margin: 0;
    padding-top: 0;
    padding-bottom: 10px;
    padding-left: 0;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-weight: 700;
    font-style: normal;
    font-size: 24px;
    color: rgb(24, 23, 23);
    text-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}

/* Level 2 Headings */
.postSection h2 {
    margin: 0;
    padding-top: 0;
    padding-bottom: 20px;
    padding-left: 0;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-weight: 700;
    font-style: normal;
    font-size: 20px;
    color: rgb(24, 23, 23);
    text-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}

/* H2 heading after table: add top spacing to prevent sticking */
.postSection table + h2,
.postSection table + * + h2 {
    padding-top: 20px;
}

/* Level 3 Headings */
.postSection h3 {
    margin: 0;
    padding-top: 0;
    padding-bottom: 20px;
    padding-left: 40px;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-weight: 700;
    font-size: 18px;
    color: rgb(24, 23, 23);
    text-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}

/* Level 4 Headings */
.postSection h4 {
    margin: 0;
    padding-top: 0;
    padding-bottom: 20px;
    padding-left: 60px;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-weight: 700;
    font-style: normal;
    font-size: 16px;
    color: rgb(24, 23, 23);
    font-style: italic;
    text-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}

/* === end of headings.css === */

/* >>> imagegrid.css (1546 bytes) */
/*
    imagegrid.css - Image grid layout styles for SOHO Systems
    Last updated: 2025-08-29
    Structure:
        - Collage images
        - Image grid container
        - Grid items
        - Grid images
*/

/* ===================== */
/* Collage Images        */
/* ===================== */

/* LLB Sport collage image (used in sport section) */
.llb-sport-collage {
    height: 215px;
    width: auto;
    border: 0;
}

/* Onrus Driving School collage image (used in driving school section) */
.onrus-driving-school-collage {
    height: 215px;
    width: auto;
    border: 0;
}

/* Icon collage image (used in icons section) */
.icon-collage {
    border: 0;
}

.gallery-row .icon-collage {
    display: inline-block;
    width: 128px;
    height: 128px;
    object-fit: contain;
}


/* ===================== */
/* Image Grid Container  */
/* ===================== */

/* Grid container for web site portfolio — 4 equal columns */
.webSitePortfolio {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
    align-items: center;
    max-width: 100%;
    margin-top: 0;
    margin-bottom: 20px;
    padding: 0;
}

.gridImage {
    max-width: 100%;
}

/* Flex container for image grid layouts */
.imageGrid {
    display: flex;
    justify-content: space-between;
    gap: 10px;
    align-items: center;
    max-width: 880px;
    margin: 0 auto;
    padding: 0;
}

/* ===================== */
/* Grid Images           */
/* ===================== */

/* Styling for images inside grid items */
.gridImage img {
    max-width: 100% !important;
    height: auto !important;
    width: 100%;
    margin: 0;
    padding: 0;
    cursor: pointer;
    border: 1px solid black;
    box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.3);
}

/* === end of imagegrid.css === */

/* >>> images.css (6741 bytes) */
/* ==========================================================
     images.css  (SOHO Systems)
     Purpose: Centralised image, logo, stamp, avatar and screenshot styles.
     Last updated: 2025-09-04

     Sections:
         1. Animation helpers
         2. Logo overlays
         3. Post avatars
         4. Post stamps & icons
         5. Full‑width images & alerts
         6. Screenshots (percentage width utility classes)
         7. Certificates

     Conventions:
         - .screenShotNN classes (25–90) set both min/max width for predictable scaling.
         - Avoid renaming existing classes; they are referenced across legacy pages.
         - Prefer adding new utility classes instead of modifying semantics of existing ones.
         - Consider future refactor: consolidate .screenShotXX via a single class + custom property.

     NOTE: This file intentionally contains no layout (flex/grid) rules—only image presentation.
========================================================== */

/* 1. Animation helpers ----------------------------------- */
/* One-time subtle zoom pulse (apply .zoom-in-once + add .zoom-in-once-animate via JS) */
.zoom-in-once {
    transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

.zoom-in-once-animate {
    animation: zoomInOnce 0.8s cubic-bezier(0.4, 0, 0.2, 1) 1;
}

@keyframes zoomInOnce {
    0% {
        transform: scale(1);
    }

    60% {
        transform: scale(1.18);
    }

    100% {
        transform: scale(1);
    }
}

/* 2. Logo overlays --------------------------------------- */

/* SOHO logo overlay for all banners */
.sohoLogo {
    margin: 0;
    padding: 0;
    max-width: 990px;
    min-width: 990px;
}

/* Client logo overlay for all banners */
.clientLogo {
    height: 80px;
    width: auto;
    margin-left: 5px;
    margin-right: 5px;
}

/* 3. Post avatars ---------------------------------------- */

/* Avatar photo for author/about sections */
.postAvatar {
    float: right;
    width: 200px;
    height: auto;
    margin: 0;
    padding-top: 0px;
    padding-bottom: 20px;
    padding-left: 20px;
    padding-right: 20px;
    border: 0;
}

/* 4. Post stamps & icons -------------------------------- */

/* Stamp icon at top right of posts */
.postStamp {
    float: right;
    width: 120px;
    height: auto;
    margin-top: 0;
    margin-bottom: 20px;
    margin-left: 20px;
    margin-right: 20px;
    padding: 0;
    border: 0;
}

/* Circular stamp icon for posts */
.postStampCircle {
    float: right;
    width: 120px;
    height: auto;
    margin-top: 0;
    margin-bottom: 20px;
    margin-left: 20px;
    margin-right: 20px;
    padding: 0;
    border: 0;
    clip-path: circle(48% at center);
    overflow: hidden;
}

/* Small icon for post sections (e.g. Web Site Development) */
.postIcon {
    float: right;
    width: 90px;
    padding-top: 0px;
    padding-bottom: 20px;
    padding-left: 10px;
    padding-right: 20px;
    border: 0;
}

/* OS-compatibility badges */
.compatibilityBadge {

    width: 70px;
    padding-top: 0px;
    padding-bottom: 8px;
    padding-left: 0;
    padding-right: 5px;
    border: 0;
}

/* 5. Full-width images & alerts ------------------------- */

/* Image spanning the full width of the container */
.imgFullWidth {
    width: 100%;
}

/* Yellow Alert Icon for notification boxes */
.yellow-alerts {
    height: 56px;
    width: 56px;
    margin-right: 0.7em;
    flex-shrink: 0;
    display: inline-block;
    vertical-align: middle;
    align-self: center;
    min-width: 32px;
    min-height: 32px;
    max-width: 56px;
    max-height: 56px;
}

/* 6. Screenshot width utilities ------------------------- */

.screenShot90 {
    display: block;
    max-width: 90%;
    min-width: 90%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot80 {
    display: block;
    max-width: 80%;
    min-width: 80%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot70 {
    display: block;
    max-width: 70%;
    min-width: 70%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot60 {
    display: block;
    max-width: 60%;
    min-width: 60%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot50 {
    display: block;
    max-width: 50%;
    min-width: 50%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot45 {
    display: block;
    max-width: 45%;
    min-width: 45%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot40 {
    display: block;
    max-width: 40%;
    min-width: 40%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot35 {
    display: block;
    max-width: 35%;
    min-width: 35%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot30 {
    display: block;
    max-width: 30%;
    min-width: 30%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

.screenShot25 {
    display: block;
    max-width: 25%;
    min-width: 25%;
    height: auto;
    padding-top: 0;
    padding-bottom: 20px;
    margin: auto;
    border: 0;
}

/* 7. Certificates ---------------------------------------- */
.certificate {
    min-height: 220px;
    max-height: 220px;
    padding-top: 10px;
    padding-bottom: 0;
    padding-left: 0;
    padding-right: 0;
    margin: 0;
    border: 1px solid #0556AF;
}

/* Gallery container: full width */
.gallery-row {
    width: 100%;
    max-width: 100%;
    padding: 0;
    margin-bottom: 1em;
}

/* Gallery images: fixed height - width auto for proportional scaling */
[class$="-collage"] {
height: 215px;
    width: auto;
    border: 2px solid transparent;
}

/* Ensure gallery contents stay inside the post column and wrap neatly */
.gallery-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0;
    justify-content: flex-start;
    align-items: center;
    box-sizing: border-box;
    width: 100%;
    margin: 0 0 1em 0;
}

.gallery-row img {
    display: block;
    height: 215px; /* keep consistent row height */
    width: auto;
    max-width: 100%; /* never exceed container width */
    object-fit: cover;
}


/* Embedded content images: never wider than 950px */
.postSection img:not(.blog-grid-images):not(.post-banner):not(.clientLogo):not([class$="-collage"]) {
    max-width: 950px;
    height: auto;
}

/* === end of images.css === */

/* >>> labels.css (762 bytes) */
/* FREE and PAID labels */
.label-effect {
    display: inline-block;
    padding: 0.18em 1.1em;
    font-size: 0.75em;
    font-weight: 700;
    border-radius: 999px;
    background: linear-gradient(90deg, #f8fafc 60%, #e9ecef 100%);
    color: #1a1a1a;
    box-shadow: 0 2px 8px rgba(60, 60, 60, 0.08);
    border: 1.5px solid #e0e0e0;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    vertical-align: middle;
    margin: 0 0.2em;
}

.label-effect.label-free {
    background: linear-gradient(90deg, #e6f9e6 60%, #c8f7c5 100%);
    color: #1a7f1a;
    border-color: #b2e6b2;
}

.label-effect.label-paid {
    background: linear-gradient(90deg, #fff3e6 60%, #ffe0c2 100%);
    color: #b85c00;
    border-color: #ffd6a0;
}

/* === end of labels.css === */

/* >>> links.css (4255 bytes) */
/* --- Extra specificity for notification-box links: forcibly reset all box/flex/inline/block/white-space properties --- */


/* --- Notification Box Link Override: must be last for maximum specificity --- */
.notification-box a,
.notification-box a:link,
.notification-box a:visited,
.notification-box a:active,
.notification-box a:hover {
    display: inline !important;
    color: #294DAF !important;
    text-decoration: none !important;
    background: none !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin: 0 !important;
    font: inherit !important;
    line-height: inherit !important;
    white-space: normal !important;
    word-break: normal !important;
    vertical-align: baseline !important;
    float: none !important;
    clear: none !important;
    position: static !important;
    flex: none !important;
    align-self: auto !important;
    min-width: 0 !important;
    min-height: 0 !important;
    max-width: none !important;
    max-height: none !important;
    overflow: visible !important;
    z-index: auto !important;
}

.notification-box a::after,
.notification-box a::before {
    display: none !important;
    content: none !important;
    width: 0 !important;
    height: 0 !important;
    background: none !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
}

/* REMOVED: Global link override that was conflicting with rule compliance */

/*
    links.css - Link styles for SOHO Systems
    Last commented: 2025-08-23
    Structure: Post links, external links, footer links
*/

/* Links rule compliance: All links in postSection, tables, and notification-box must be #294DAF */

/* The default presentation of all links in posts */
.postSection a:link {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* When the cursor hovers over the link */
.postSection a:hover {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* At the moment of being clicked */
.postSection a:active {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* After a link was visited */
.postSection a:visited {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* All links within tables must be #294DAF */
.table a:link,
.table a:visited,
.table a:active,
.table a:hover {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* All links within notification boxes must be #294DAF */
.notification-box a:link,
.notification-box a:visited,
.notification-box a:active,
.notification-box a:hover {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* Links in the contact page table */
.myContact a:link,
.myContact a:visited,
.myContact a:active,
.myContact a:hover {
    color: #294DAF !important;
    text-decoration: none !important;
}

/* External links within postSection paragraphs only */
.postSection p a[href*="//"]:not([href*="sohosystems.co.za"])::after {
    text-decoration: none;
    content: "";
    width: 8px;
    height: 8px;
    background: no-repeat url('gfx/external-link-arrow.png');
    margin-left: 2px;
    padding-right: 3px;
    display: inline-block;
    vertical-align: middle;
}

/* External links within tables only */
.table a[href*="//"]:not([href*="sohosystems.co.za"])::after {
    text-decoration: none;
    content: "";
    width: 8px;
    height: 8px;
    background: no-repeat url('gfx/external-link-arrow.png');
    margin-left: 2px;
    padding-right: 3px;
    display: inline-block;
    vertical-align: middle;
}

/* FOOTER LINKS */

/* Footer links styled via .responsive-footer a (see responsive.css) */

/* === end of links.css === */

/* >>> lists.css (509 bytes) */
/*
    lists.css - List styles for SOHO Systems
    Last commented: 2025-08-23
    Structure: Unordered lists, ordered lists, list items
*/
.postSection ul {
    margin-top: 5px;
    margin-left: 20px;
    padding: 0;
    font-size: 15px;
}

.postSection ul li {
    margin-bottom: 10px;
}

/* Ordered Lists: Used for References */
.postSection ol {
    margin-top: -20px;
    margin-left: 16px;
    padding: 0;
    font-size: 15px;
}

.postSection ol li {
    margin-bottom: 10px;
}

/* === end of lists.css === */

/* >>> maps.css (666 bytes) */
/* --------------------------------------------------------- */
/* Responsive Google Maps iframe embed (use on <iframe> only)    */
/* --------------------------------------------------------- */
.embedGoogleMaps {
    display: block;              /* Makes iframe a block element */
    width: 99%;                  /* Responsive width */
    max-width: 99%;
    min-width: 99%;
    aspect-ratio: 16 / 9;        /* Maintains 16:9 aspect ratio */
    margin: 30px 0 26px 0;       /* Vertical spacing: bottom now 26px */
    border: 0;                   /* Removes default border */
    box-sizing: border-box;      /* Includes border/padding in width */
}

/* === end of maps.css === */

/* >>> menu.css (3009 bytes) */
/*
    menu.css - Main navigation menu styles for SOHO Systems
    Last updated: 2026-04-26
    Updated to work with new grid layout structure
*/

/* Mobile: Navbar below header, full width, flex column, grid menu */
@media (max-width: 767px) {
    .top-menu-bar {
        position: static;
        width: 100%;
        margin: 0 !important;
        padding: 0 !important;
        border-radius: 0 !important;
        box-shadow: none !important;
        background-color: #0556AF;
        display: block !important;
        z-index: 900 !important;
    }

    .top-menu-bar .menu {
        display: none;
        flex-direction: column;
        width: 100% !important;
        margin: 0 auto !important;
        padding: 0 !important;
        gap: 0;
        box-sizing: border-box;
    }
    
    .top-menu-bar .menu.mobile-active {
        display: flex !important;
    }

    .top-menu-bar .menu li {
        width: 100%;
        box-sizing: border-box;
        text-align: center;
        margin: 0;
    }

    .top-menu-bar .menu li a {
        display: block;
        width: 100%;
        box-sizing: border-box;
        margin: 0;
        border-radius: 0 !important;
        font-size: 18px;
        padding: 8px 0;
    }

    .top-menu-bar .menu li a.active {
        padding: 8px 0;
        width: 100%;
        box-sizing: border-box;
    }
}

/* Always render menu items in white, regardless of global link color */
.top-menu-bar a,
.top-menu-bar a:visited,
.top-menu-bar a:active,
.top-menu-bar a:hover {
    color: #FFFFFF !important;
}

/* Active page indicator: white text on fixed red background */
.top-menu-bar a.active {
    color: #FFFFFF !important;
    background-color: #e53935 !important;
    border-radius: 0;
    padding: 6px 12px;
    font-weight: 600;
}

/* Add pulse effect to buttons on hover */
.top-menu-bar a:hover {
    color: #FFFFFF;
    border-radius: 0 !important;
    border-top-left-radius: 0 !important;
    border-top-right-radius: 0 !important;
    border-bottom-left-radius: 0 !important;
    border-bottom-right-radius: 0 !important;
    box-shadow: inset 0 5px 8px rgba(0, 0, 0, 0.2);
    background: linear-gradient(183deg, red, blue);
    background-size: 400% 400%;
    -webkit-animation: AnimationName 2s ease infinite;
    -moz-animation: AnimationName 2s ease infinite;
    animation: AnimationName 2s ease infinite;
}

/* Animation: Pulse effect for menu links */
@-webkit-keyframes AnimationName {
    0% {
        background-position: 54% 0%
    }

    50% {
        background-position: 47% 100%
    }

    100% {
        background-position: 54% 0%
    }
}

@-moz-keyframes AnimationName {
    0% {
        background-position: 54% 0%
    }

    50% {
        background-position: 47% 100%
    }

    100% {
        background-position: 54% 0%
    }
}

@keyframes AnimationName {
    0% {
        background-position: 54% 0%
    }

    50% {
        background-position: 47% 100%
    }

    100% {
        background-position: 54% 0%
    }
}

/* === end of menu.css === */

/* >>> mobile.css (1602 bytes) */
/* =====================
   MOBILE NAVIGATION STYLES
   ===================== */
/* Styles for mobile navigation */
.mobile-header {
	display: none;
	/* Hidden on desktop by default */
}

/* Adjustments for mobile view */
@media (max-width: 768px) {
	.desktop-header {
		display: none;
	}

	/* Hide desktop header */
	.mobile-header {
		display: block;
		/* Show mobile header */
		position: static;
		/* Ensure header scrolls with the page, preventing content from sliding under it */
	}

	.postSection {
		margin-top: 0;
	}

	/* Responsive adjustments for the post section */
	.postSection .headingH1 {
		font-size: 2rem;
		/* Adjust heading size for mobile */
		text-align: center;
		margin-top: 24px;
		/* Adjust spacing below the menu */
	}

	.postSection .postAvatar {
		float: none;
		display: block;
		margin: 0 auto 1.5em;
		/* Center image and add space below */
		max-width: 250px;
		/* Control image size */
	}

	/* Store-specific mobile adjustments */
	.productGrid {
		grid-template-columns: 1fr !important;
		gap: 15px !important;
		padding: 5px !important;
	}

	.product-card {
		min-width: unset !important;
	}

	.myContainer {
		margin: 0 !important;
		border-radius: 0 !important;
		box-shadow: none !important;
	}

	.postSection {
		padding: 15px 10px !important;
  }
}

/* Video embeds - responsive aspect ratio */
.embedYouTube {
  aspect-ratio: 16 / 9;
  width: 100%;
  max-width: 100%;
  border: 0;
}

@media (max-width: 480px) {
	.product-title {
		font-size: 0.7rem !important;
	}

	.view-details-button {
		font-size: 16px !important;
		height: 40px !important;
		padding-left: 10px !important;
		padding-right: 10px !important;
	}
}

/* === end of mobile.css === */

/* >>> popups.css (1186 bytes) */
/* New consent banner class styles for external use */
.popup-banner {
    position: fixed;
    left: 0;
    bottom: 0;
    width: 100vw;
    background: #ED150A;
    color: #fff;
    text-align: center;
    padding: 0.3em 0;
    z-index: 100000;
    font-size: 0.9em;
    box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15);
    display: none;
    font-family: 'Poppins', Arial, sans-serif;
}

.popup-banner-message {
    text-align: left;
    display: block;
    font-size: 0.95em;
}

.popup-banner-buttons {
    display: flex;
    gap: 0.5em;
    margin-left: 2em;
}

.popup-banner-btn {
    padding: 0.4em 1.2em;
    border: none;
    border-radius: 4px;
    font-weight: bold;
    cursor: pointer;
    font-family: 'Poppins', Arial, sans-serif;
}

.popup-banner-btn#consent-accept {
    background: #1BC900;
    color: #fff;
}

.popup-banner-btn#consent-decline {
    background: #0074D9;
    color: #fff;
}

/* Removed conflicting consent banner styles that were overriding formatting.css */
/* The styles below were causing the consent banner to break because they conflicted */
/* with the correct styles defined in css/formatting.css */

/* === end of popups.css === */

/* >>> radio.css (2331 bytes) */
/* radio.css - Styles for custom streaming radio station buttons and hidden player */

.radio-player-embed {
    /* Margins: top 40px, bottom original 1.5em + extra 10px */
    margin: 40px 0 calc(1.5em + 10px) 0;
    text-align: center;
}

#radioGrid {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    justify-content: space-evenly;
    /* spread icons across full width */
    margin-bottom: 1em;
    width: 100%;
}

.radio-station {
    width: 96px;
    height: 96px;
    padding: 0;
    border: 1px solid #ccc;
    border-radius: 14px;
    background: #fff;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}

.radio-station img {
    width: 96px;
    height: 96px;
    object-fit: cover;
    display: block;
    pointer-events: none;
    user-select: none;
}

.radio-station:hover,
.radio-station:focus {
    outline: none;
    transform: scale(1.06);
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
    border-color: #999;
}

.active-station {
    outline: 3px solid #ED150A !important;
    box-shadow: 0 0 0 0 rgba(237, 21, 10, 0.0);
    transform: scale(1.05);
    animation: stationFlash 0.9s steps(2, jump-none) infinite;
}

@keyframes stationFlash {
    0% {
        outline-color: #ED150A;
        box-shadow: 0 0 0 0 rgba(237, 21, 10, 0);
        filter: none;
    }

    50% {
        outline-color: #ffffff;
        box-shadow: 0 0 10px 2px rgba(237, 21, 10, 0.85), 0 0 18px 6px rgba(237, 21, 10, 0.45);
        filter: brightness(1.05) saturate(1.15);
    }

    100% {
        outline-color: #ED150A;
        box-shadow: 0 0 0 0 rgba(237, 21, 10, 0);
        filter: none;
    }
}

/* Accessible focus visible state */
.radio-station:focus-visible {
    outline: 3px solid #007E7D;
    outline-offset: 2px;
}

/* Hidden audio element */
#radioPlayer {
    display: none !important;
}

/* Responsive tweaks */
@media (max-width: 480px) {
    .radio-station {
        width: 84px;
        height: 84px;
    }

    .radio-station img {
        width: 84px;
        height: 84px;
    }

    #radioGrid {
        gap: 10px;
    }
}

/* === end of radio.css === */

/* >>> responsive-store.css (7075 bytes) */
/*
    responsive-store.css - Additional responsive styles for the store page
    Last updated: 2025-09-30
*/

/* Ensure proper sizing */
* {
    box-sizing: border-box;
}

/* Product grid responsive adjustments */
.productGrid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 20px;
    padding: 10px;
    width: 100%;
    margin: 0 auto;
    /* Ensure proper grid behavior */
    grid-auto-rows: auto;
    /* Prevent grid items from stretching unevenly */
    grid-auto-flow: row;
}

.product-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 350px;
    /* Ensure consistent sizing */
    box-sizing: border-box;
}

.product-image {
    aspect-ratio: 1 / 1;
}

/* Product title styling for consistent spacing */
.product-title {
    font-family: "Poppins", sans-serif;
    font-size: 0.8rem;
    margin: 0 0 0.2rem 0;
    color: #5F5F60 !important;
    font-weight: 600;
    text-align: left;
    align-self: flex-start;
    width: 100%;
    padding-left: 0 !important;
    line-height: 1.2;
    height: 2rem;
    flex-shrink: 0;
    flex-grow: 0;
    box-sizing: border-box;
    /* Ensure consistent styling */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Product brand styling */
.product-brand {
    font-family: "Poppins", sans-serif;
    font-size: 0.7rem;
    margin: 0 0 0.3rem 0;
    color: #294DAF;
    font-weight: 600;
    text-align: left;
    width: 100%;
    padding-left: 0 !important;
    line-height: 1.2;
    flex-shrink: 0;
    flex-grow: 0;
    box-sizing: border-box;
    text-transform: uppercase;
}

/* Product price styling for consistent spacing */
.product-price {
    margin: 0 0 0.3rem 0;
    font-size: 1rem;
    font-weight: normal;
    color: #294DAF;
    text-align: left;
    width: 100%;
    align-self: stretch;
    min-height: 1.5rem;
    flex-shrink: 0;
    padding: 3px;
    box-sizing: border-box;
    /* Ensure consistent styling */
    display: block;
}

/* Product actions styling for consistent spacing */
.product-actions {
    margin-top: auto;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    flex-grow: 0;
    height: auto;
    box-sizing: border-box;
}

/* Product info styling for consistent spacing */
.product-info {
    padding: 1rem;
    display: flex;
    flex-direction: column;
    flex-grow: 1;
    height: auto;
    justify-content: flex-start;
    flex-grow: 1;
    box-sizing: border-box;
    /* Ensure consistent flex behavior */
    min-height: 0;
    /* Add consistent spacing */
    gap: 0;
    /* Ensure consistent alignment */
    align-items: stretch;
}

/* Tablet adjustments */
@media (max-width: 1024px) {
    .productGrid {
        grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
        gap: 15px;
        padding: 8px;
    }

    .product-card {
        min-height: 320px;
    }
}

/* Mobile adjustments */
@media (max-width: 768px) {
    .productGrid {
        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
        gap: 15px;
        padding: 10px;
    }

    .product-card {
        min-height: 300px;
    }

    .product-title {
        font-size: 0.85rem;
        height: auto;
        min-height: 2.5rem;
    }

    .view-details-button {
        font-size: 16px;
        height: 45px;
    }
}

@media (max-width: 480px) {
    .productGrid {
        grid-template-columns: 1fr;
        gap: 20px;
        padding: 5px;
    }

    .product-card {
        min-height: 280px;
    }

    .product-title {
        font-size: 0.9rem;
        text-align: center;
        height: auto;
        min-height: 2.5rem;
    }

    .product-price {
        font-size: 1.1rem;
        text-align: center;
    }

    .view-details-button {
        font-size: 18px;
        height: 50px;
    }
}

/* Ensure images scale properly */
.product-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Modern Button-29 style for product Read More buttons */
.view-details-button {
    align-items: center;
    appearance: none;
    background-image: radial-gradient(100% 100% at 100% 0, #5adaff 0, #5468ff 100%);
    border: 0;
    border-radius: 6px;
    box-shadow: rgba(45, 35, 66, .4) 0 2px 4px, rgba(45, 35, 66, .3) 0 7px 13px -3px, rgba(58, 65, 111, .5) 0 -3px 0 inset;
    box-sizing: border-box;
    color: #fff;
    cursor: pointer;
    display: inline-flex;
    font-family: 'Poppins', Arial, Helvetica, sans-serif;
    height: 48px;
    justify-content: center;
    line-height: 1;
    list-style: none;
    overflow: hidden;
    padding-left: 16px;
    padding-right: 16px;
    position: relative;
    text-align: left;
    text-decoration: none;
    transition: box-shadow .15s, transform .15s;
    user-select: none;
    -webkit-user-select: none;
    touch-action: manipulation;
    white-space: nowrap;
    will-change: box-shadow, transform;
    font-size: 18px;
    width: 100%;
    margin: 5px 0 0 0;
    align-self: stretch;
}

.view-details-button:focus {
    box-shadow: #3c4fe0 0 0 0 1.5px inset, rgba(45, 35, 66, .4) 0 2px 4px, rgba(45, 35, 66, .3) 0 7px 13px -3px, #3c4fe0 0 -3px 0 inset;
}

.view-details-button:hover {
    box-shadow: rgba(45, 35, 66, .4) 0 4px 8px, rgba(45, 35, 66, .3) 0 7px 13px -3px, #3c4fe0 0 -3px 0 inset;
    transform: translateY(-2px);
    /* Add glimmer effect on hover */
    position: relative;
    overflow: hidden;
}

.view-details-button:hover::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 50%;
    height: 100%;
    background: rgba(255, 255, 255, 0.3);
    transform: skewX(-25deg);
    animation: glimmer 1.5s infinite;
    z-index: 1;
}

.view-details-button:active {
    box-shadow: #3c4fe0 0 3px 7px inset;
    transform: translateY(2px);
}

/* Glimmer animation */
@keyframes glimmer {
    0% {
        left: -100%;
    }

    100% {
        left: 150%;
    }
}

/* Fix for notification box on small screens */
.notification-box {
    display: block;
    /* Removed min/max 98% width caps so it matches fluid paragraph widths */
}

/* Adjust footer for small screens */
@media (max-width: 768px) {
    .footerContainer {
        flex-direction: column;
        gap: 20px;
        padding: 20px 10px;
    }

    .footerSection {
        width: 100%;
        text-align: center;
    }

    .footerSocialIcons {
        justify-content: center;
    }
}

/* Fix for menu on mobile */
@media (max-width: 768px) {
    .menu {
        flex-wrap: wrap;
        justify-content: center;
    }

    .menu li {
        margin: 5px 10px;
    }
}

/* Ensure proper spacing on all devices */
.postSection {
    padding: 20px 15px;
}

@media (min-width: 769px) {
    .postSection {
        padding: 30px 40px;
    }
}

/* === end of responsive-store.css === */

/* >>> scrollbars.css (1031 bytes) */
/*
  scrollbars.css - Custom scrollbar styles for SOHO Systems
  Last commented: 2025-08-23
  Structure: Scrollbar width, track, thumb, button
*/

/* Cross-browser custom scrollbars: Chrome, Edge, Safari, Opera, Vivaldi, Firefox */

/* Webkit browsers (Chrome, Edge, Safari, Opera, Vivaldi) */
::-webkit-scrollbar {
  width: 16px;
  height: 16px;
}
::-webkit-scrollbar-track {
  background: #fff;
  box-shadow: inset 0 0 3px rgba(0,0,0,0.15);
  border-radius: 10px;
}
::-webkit-scrollbar-thumb {
  background: var(--scrollbar-thumb-color, #ED150A);
  background-clip: content-box;
  border: 3px solid #fff;
  border-radius: 10px;
  min-height: 40px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.08);
}
::-webkit-scrollbar-thumb:hover {
  background: var(--scrollbar-thumb-hover, #e53935);
}

/* Firefox */
html {
  scrollbar-width: thin;
  scrollbar-color: var(--scrollbar-thumb-color, #ED150A) #fff;
}

body {
  scrollbar-width: thin;
  scrollbar-color: var(--scrollbar-thumb-color, #ED150A) #fff;
}

/* === end of scrollbars.css === */

/* >>> search.css (3562 bytes) */
.search-result-summary {
    color: #545454;
    font-size: 0.8em;
    /* reduced from 1em */
    font-family: Arial, sans-serif;
    line-height: 1.4;
    margin-bottom: 2px;
    display: block;
}

/*
    search.css - Search box and results styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Search Box, Search Results
*/

/* This document contains the styling of the Search Box and Results Page */

/* Search Box: Container for search input */
.searchBoxDIV {
    background-color: white;
    margin-top: 40px;
    margin-left: 50px;
    margin-right: 55px;
}

/* Style search input like .myForm input */


/* Style search button red like .myForm button */
.search-container button[type="submit"] {
    background-color: #e53935 !important;
    color: #fff !important;
}

/* Search Results: Container for search results */
.searchResultsDIV {
    background-color: #fff;
    margin-top: 40px;
    margin-left: 50px;
    margin-right: 55px;
    border-radius: 0;
    box-shadow: none;
    padding: 24px 24px 8px 24px;
    min-height: 120px;
    border: none;
}

/* Google-like search result item */
.search-result {
    margin-bottom: 32px;
    padding-bottom: 16px;
    border-bottom: none;
    display: flex;
    align-items: flex-start;
    gap: 16px;
}

.search-result-thumb {
    flex: 0 0 150px;
    width: 150px;
    height: auto;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    border-radius: 6px;
    background: #f5f5f5;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
}

.search-result-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.search-result-body {
    flex: 1 1 auto;
    min-width: 0;
}

.search-result:last-child {
    border-bottom: none;
}

.search-result-title {
    font-size: 1.25em;
    color: #1a0dab;
    text-decoration: none;
    font-weight: 500;
    line-height: 1.2;
    display: inline-block;
    margin-bottom: 4px;
}

.search-result-title:hover {
    text-decoration: underline;
}

.search-result-url {
    color: #0b6e2b;
    /* tweaked green */
    font-size: 0.9em;
    /* adjusted from 0.95em */
    margin-bottom: 4px;
    display: block;
    word-break: break-all;
}

.search-result-snippet {
    color: #4d5156;
    font-size: 0.8em;
    /* reduced from 1em */
    line-height: 1.5;
}

/* Highlighted query terms */
.search-result mark {
    background: #fff59d;
    color: inherit;
    padding: 0 2px;
    border-radius: 2px;
}

/* In-page highlight marks (destination pages) */
mark.inpage-search-highlight {
    background: #ffe082;
    padding: 0 2px;
    border-radius: 2px;
    box-shadow: 0 0 0 1px #fdd36b inset;
}

/* Shimmer skeleton + blur-up for search thumbnails */
.thumb-skeleton {
    position: absolute;
    inset: 0;
    background: linear-gradient(110deg, #ececec 8%, #f5f5f5 18%, #ececec 33%);
    background-size: 200% 100%;
    animation: thumbShimmer 1.2s linear infinite;
    border-radius: 6px;
}

.search-result-thumb {
    position: relative;
}

@keyframes thumbShimmer {
    to {
        background-position: -200% 0;
    }
}

/* Blur-up transition */
img.thumb-blur {
    filter: blur(12px) brightness(0.95);
    transform: scale(1.05);
    transition: filter .5s ease, transform .5s ease;
}

img.thumb-blur.thumb-loaded {
    filter: blur(0) brightness(1);
    transform: scale(1);
}

/* Responsive: Stack search results vertically on mobile */
@media (max-width: 640px) {
    .searchResultsDIV {
        margin-left: 0;
        margin-right: 0;
        padding: 12px 10px 8px 10px;
    }

    .searchBoxDIV {
        margin-left: 0;
        margin-right: 0;
    }

    .search-result {
        flex-direction: column;
        gap: 8px;
    }

    .search-result-thumb {
        flex: 0 0 auto;
        width: 100%;
        max-width: 100%;
    }

    .search-result-thumb img {
        width: 100%;
        height: auto;
        aspect-ratio: 16 / 9;
    }

    .search-result-title {
        font-size: 1.1em;
    }

    .search-result-snippet {
        font-size: 0.85em;
    }
}

/* === end of search.css === */

/* >>> store.css (12276 bytes) */
/*
    store.css - Product grid and card styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Product Grid, Product Card, Buttons
*/

/* Store Info Section */
.store-info {
    display: flex;
    flex-wrap: wrap;
    gap: 2rem;
    margin: 3rem 1rem;
    justify-content: center;
    width: 95%;
}

.info-card {
    background: #f8f9fa;
    border-radius: 10px;
    padding: 1.5rem;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    flex: 1;
    min-width: 300px;
    max-width: none;
    width: 100%;
}

.info-card h2 {
    color: #294DAF;
    margin-top: 0;
    border-bottom: 2px solid #294DAF;
    padding-bottom: 0.5rem;
}

.info-card ul {
    list-style: none;
    padding: 0;
}

.info-card li {
    padding: 0.5rem 0;
    border-bottom: 1px solid #eee;
}

.info-card li:last-child {
    border-bottom: none;
}

@media (min-width: 768px) {
    .store-info {
        margin: 3rem;
    }
}

/* Products HTML */

/* Product Grid: Layout for product cards - responsive grid */
.productGrid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 20px;
    justify-items: center;
    justify-content: center;
    align-items: stretch;
    padding: 10px;
    box-sizing: border-box;
    width: 100%;
    /* Ensure proper grid behavior */
    grid-auto-rows: auto;
    /* Prevent grid items from stretching unevenly */
    grid-auto-flow: row;
}

/* New Product Card Layout */
.product-card {
    display: flex;
    flex-direction: column;
    border: 1px solid #e1e1e1;
    border-radius: 10px;
    overflow: hidden;
    background: white;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    max-width: 100%;
    width: 100%;
    height: 100%;
    min-width: 250px;
    /* Ensure consistent sizing */
    box-sizing: border-box;
}

.product-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.product-image {
    width: 100%;
    aspect-ratio: 1 / 1;
    overflow: hidden;
    background: white;
    padding: 0;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 13px solid white;
    height: auto;
}

.product-image img {
    max-width: 100%;
    max-height: 100%;
    object-fit: cover;
    transition: transform 0.3s ease;
    width: 100%;
    height: 100%;
}

.product-card:hover .product-image img {
    transform: scale(1.05);
}

.product-info {
    padding: 1rem;
    display: flex;
    flex-direction: column;
    flex-grow: 1;
    height: auto;
    justify-content: flex-start;
    flex-grow: 1;
    box-sizing: border-box;
    /* Ensure consistent flex behavior */
    min-height: 0;
    /* Add consistent spacing */
    gap: 0;
    /* Ensure consistent alignment */
    align-items: stretch;
}

.product-title {
    font-family: "Poppins", sans-serif;
    font-size: 0.8rem;
    margin: 0 0 0.2rem 0;
    color: #5F5F60 !important;
    font-weight: 600;
    text-align: left;
    align-self: flex-start;
    width: 100%;
    padding-left: 0 !important;
    line-height: 1.2;
    height: 2rem;
    flex-shrink: 0;
    flex-grow: 0;
    box-sizing: border-box;
    /* Ensure consistent styling */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.product-brand {
    font-family: "Poppins", sans-serif;
    font-size: 0.7rem;
    margin: 0 0 0.3rem 0;
    color: #294DAF;
    font-weight: 600;
    text-align: left;
    width: 100%;
    padding-left: 0 !important;
    line-height: 1.2;
    flex-shrink: 0;
    flex-grow: 0;
    box-sizing: border-box;
    text-transform: uppercase;
}

.product-price {
    margin: 0 0 0.3rem 0;
    /* Removed 4px top margin */
    font-size: 1rem;
    font-weight: normal;
    color: #294DAF;
    text-align: left;
    width: 100%;
    align-self: stretch;
    min-height: 1.5rem;
    flex-shrink: 0;
    padding: 3px;
    box-sizing: border-box;
    /* Ensure consistent styling */
    display: block;
}

.product-actions {
    margin-top: auto;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    flex-grow: 0;
    height: auto;
    box-sizing: border-box;
}

/* Product Categories: Layout for category cards */
.product-categories {
    display: flex;
    flex-direction: column;
    /* Default: stack cards vertically on mobile */
    gap: 30px;
    /* Increased space between the cards */
    width: 100%;
    padding: 0 20px;
    box-sizing: border-box;
}

/* Category Card Link: Makes entire card clickable */
.category-card-link {
    text-decoration: none;
    color: inherit;
    display: block;
    width: 100%;
}

.category-card-link:hover {
    text-decoration: none;
}

/* Shop Button Styling */
.shop-button {
    position: absolute;
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
    /* Center the button horizontally */

    /* Button appearance */
    background-color: white;
    color: #000000 !important;
    text-decoration: none;
    font-size: 14px;
    font-weight: bold;
    padding: 15px 25px;
    border: 1px solid #ccc;
    letter-spacing: 1px;
    white-space: nowrap;
    text-align: center;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15);
    z-index: 10;
    text-transform: uppercase;
}

.shop-button:hover {
    background-color: #f0f0f0;
    border-color: #aaa;
    color: #000000 !important;
}

.shop-button:visited {
    color: #000000 !important;
}

.shop-button:active {
    color: #000000 !important;
}

/* Individual Category Card Styles */
.category-card {
    position: relative;
    border-radius: 1.5rem;
    overflow: hidden;
    min-height: 250px;
    width: 100%;

    /* Glassmorphism effect */
    background-color: hsl(260 25% 95% / 45%);
    backdrop-filter: blur(1rem);
    -webkit-backdrop-filter: blur(1rem);

    /* Glass shadow effect */
    box-shadow:
        0 0 0.5rem 2px hsl(260 25% 25% / 35%),
        inset 0 0 0.1rem hsl(260 75% 40% / 20%),
        inset 0 0 0.2rem 0.1rem hsl(260 75% 40% / 15%),
        inset 0 0 0.3rem 0.2rem hsl(260 75% 40% / 10%);
}

.category-card:hover img {
    transform: scale(1.03);
    /* Slight zoom on hover */
}

/* Image Styling */
.category-image-container {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}

.category-card img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Ensures the image covers the card without stretching */
    transition: transform 0.3s ease;
}

/* Responsiveness (Desktop/Tablet Layout) */
@media (min-width: 768px) {
    .product-categories {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 30px;
        justify-items: center;
    }

    .category-card-link {
        width: 100%;
        height: 100%;
    }

    .category-card {
        min-height: 350px;
        width: 100%;
    }
}

/* Mobile responsiveness - adjust grid for smaller screens */
@media (max-width: 1200px) {
    .productGrid {
        grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    }
}

@media (max-width: 900px) {
    .productGrid {
        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    }
}

@media (max-width: 600px) {
    .productGrid {
        grid-template-columns: 1fr;
    }
}

/* Product Card: Individual product box */
.product {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
    width: 100%;
    max-width: 248px;
    padding: 20px;
    border: 1px solid #294DAF;
    background-color: rgb(201, 216, 240);
    text-align: center;
    position: relative;
    box-sizing: border-box;
}

/* Button wrapper to push button to bottom */
.product .button-bottom {
    margin-top: 10px;
    width: 100%;
    display: flex;
    justify-content: center;
}

/* Product Image: Image inside product card */
.product img {
    max-width: 100%;
    height: auto;
}

/* Product Title: Product name heading */
.product h3 {
    font-family: "Poppins", sans-serif;
    font-size: 16px;
    text-align: center;
    padding-top: 25px;
    margin: 0;
}

/* Product Description: Product details */
.product p {
    max-width: 100% !important;
    min-width: 0 !important;
    max-width: 100%;
    white-space: normal;
    margin-bottom: 20px;
    font-family: "Poppins", sans-serif;
    font-size: 13px;
    text-align: center;
    word-break: break-word;
    overflow-wrap: break-word;
}

/* Product Button: Action button for product */
.productButton {
    position: absolute;
    bottom: 0;
    left: 0;
    /* Set button's width */
    width: 90%;
    /* Center button horizontally within product div */
    margin-left: 5%;
    margin-right: 5%;
    /* Push button off bottom of product div */
    margin-bottom: 20px;
    /* Add some inline padding to button */
    padding: 10px 30px;
    font-family: "Poppins", sans-serif;
    font-weight: 500;
    font-size: 1em;
    letter-spacing: 0.1em;
    text-align: center;
    text-transform: uppercase;
    background: #007bff;
    color: #FFFFFF;
    border: 2px solid #007bff;
    border-radius: 40px;
    cursor: pointer;
    transition: 1s;
    overflow: hidden;
}

/* Product Button Hover: Hover effect for button */
.productButton:hover {
    background: #007bff;
    box-shadow: 0 0 25px #007bff, 0 0 100px #007bff, 0 0 150px #007bff;
}

/* Align product price to bottom of product card */
.product span[class^="price"] {
    margin-top: auto;
    display: block;
}

/* Modern Button-29 style for product Read More buttons */
.view-details-button {
    align-items: center;
    appearance: none;
    background-image: radial-gradient(100% 100% at 100% 0, #5adaff 0, #5468ff 100%);
    border: 0;
    border-radius: 6px;
    box-shadow: rgba(45, 35, 66, .4) 0 2px 4px, rgba(45, 35, 66, .3) 0 7px 13px -3px, rgba(58, 65, 111, .5) 0 -3px 0 inset;
    box-sizing: border-box;
    color: #fff;
    cursor: pointer;
    display: inline-flex;
    font-family: 'Poppins', Arial, Helvetica, sans-serif;
    height: 48px;
    justify-content: center;
    line-height: 1;
    list-style: none;
    overflow: hidden;
    padding-left: 16px;
    padding-right: 16px;
    position: relative;
    text-align: left;
    text-decoration: none;
    transition: box-shadow .15s, transform .15s;
    user-select: none;
    -webkit-user-select: none;
    touch-action: manipulation;
    white-space: nowrap;
    will-change: box-shadow, transform;
    font-size: 18px;
    width: 100%;
    margin: 5px 0 0 0;
    align-self: stretch;
}

.view-details-button:focus {
    box-shadow: #3c4fe0 0 0 0 1.5px inset, rgba(45, 35, 66, .4) 0 2px 4px, rgba(45, 35, 66, .3) 0 7px 13px -3px, #3c4fe0 0 -3px 0 inset;
}

.view-details-button:hover {
    box-shadow: rgba(45, 35, 66, .4) 0 4px 8px, rgba(45, 35, 66, .3) 0 7px 13px -3px, #3c4fe0 0 -3px 0 inset;
    transform: translateY(-2px);
    /* Add glimmer effect on hover */
    position: relative;
    overflow: hidden;
}

.view-details-button:hover::before {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 50%;
    height: 100%;
    background: rgba(255, 255, 255, 0.3);
    transform: skewX(-25deg);
    transition: left 0.5s;
    z-index: 1;
}

.view-details-button:hover::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 50%;
    height: 100%;
    background: rgba(255, 255, 255, 0.3);
    transform: skewX(-25deg);
    animation: glimmer 1.5s infinite;
    z-index: 1;
}

.view-details-button:active {
    box-shadow: #3c4fe0 0 3px 7px inset;
    transform: translateY(2px);
}

/* Glimmer animation */
@keyframes glimmer {
    0% {
        left: -100%;
    }

    100% {
        left: 150%;
    }
}

/* === end of store.css === */

/* >>> structure.css (13344 bytes) */
@media (max-width: 767px) {
    .clientShowcase {
        margin-left: 0 !important;
        margin-right: 0 !important;
        margin-top: 0 !important;
        padding-left: 0 !important;
        padding-right: 0 !important;
        padding-bottom: 0 !important;
        padding-top: 0 !important;
        width: 100vw !important;
        box-sizing: border-box;
    }
}

/*
    structure.css - Main layout and structure styles for SOHO Systems
    Last commented: 2025-08-23
    Sections: Resets, Containers, Contact, Forms, Buttons
*/

/* RESETS */

/* Reseting browser defaults for focussed elements */
*:focus {
    outline: 2px solid #c8102e;
    outline-offset: 2px;
}

*:focus:not(:focus-visible) {
    outline: none;
}

*:focus-visible {
    outline: 2px solid #c8102e;
    outline-offset: 2px;
}

html {
    min-height: 100%;
    background: #000 url(gfx/background.png) center center / cover fixed;
}

html::before {
    content: '0 1 1 0  1 0 0 1  1 0 0 1  0 1 1 0';
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: -1;
    font-family: 'Consolas', 'Courier New', monospace;
    font-size: 12px;
    line-height: 4;
    letter-spacing: 8em;
    color: transparent;
    text-shadow:
        40px  80px  0 rgba(200, 200, 210, 0.18),
        180px 320px 0 rgba(200, 200, 210, 0.12),
        350px 150px 0 rgba(200, 200, 210, 0.22),
        520px 420px 0 rgba(200, 200, 210, 0.10),
        700px 280px 0 rgba(200, 200, 210, 0.16),
        120px 550px 0 rgba(200, 200, 210, 0.14),
        450px 620px 0 rgba(200, 200, 210, 0.17),
        680px 520px 0 rgba(200, 200, 210, 0.11),
        250px 750px 0 rgba(200, 200, 210, 0.20),
        580px 80px  0 rgba(200, 200, 210, 0.08);
    pointer-events: none;
    white-space: pre-wrap;
    overflow: hidden;
    animation: codeDrift 45s linear infinite;
}

html::after {
    content: 'A F 3 C  9 E 7 B  2 D 5 A  8 F 1 E';
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: -1;
    font-family: 'Consolas', 'Courier New', monospace;
    font-size: 11px;
    line-height: 5;
    letter-spacing: 7em;
    color: transparent;
    text-shadow:
        90px  200px  0 rgba(200, 200, 210, 0.11),
        310px 100px  0 rgba(200, 200, 210, 0.17),
        480px 380px  0 rgba(200, 200, 210, 0.09),
        650px 190px  0 rgba(200, 200, 210, 0.15),
        200px 600px  0 rgba(200, 200, 210, 0.12),
        560px 480px  0 rgba(200, 200, 210, 0.18),
        750px 650px  0 rgba(200, 200, 210, 0.08),
        380px 50px   0 rgba(200, 200, 210, 0.14),
        600px 720px  0 rgba(200, 200, 210, 0.11),
        150px 450px  0 rgba(200, 200, 210, 0.17);
    pointer-events: none;
    white-space: pre-wrap;
    overflow: hidden;
    animation: codeDrift 55s linear infinite reverse;
}

body::before {
    content: '';
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background-image:
        radial-gradient(1.5px 1.5px at 12% 18%, rgba(210, 210, 220, 0.7) 0%, transparent 100%),
        radial-gradient(1px 1px at 28% 72%, rgba(230, 230, 240, 0.5) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 55% 35%, rgba(190, 190, 210, 0.6) 0%, transparent 100%),
        radial-gradient(1px 1px at 78% 60%, rgba(240, 240, 250, 0.4) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 92% 20%, rgba(200, 200, 220, 0.7) 0%, transparent 100%),
        radial-gradient(1px 1px at 40% 88%, rgba(220, 220, 230, 0.5) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 65% 50%, rgba(235, 235, 245, 0.6) 0%, transparent 100%),
        radial-gradient(1px 1px at 85% 82%, rgba(210, 210, 220, 0.4) 0%, transparent 100%);
    animation: sparkle1 4s ease-in-out infinite alternate;
}

body::after {
    content: '';
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background-image:
        radial-gradient(1px 1px at 18% 45%, rgba(230, 230, 240, 0.6) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 72% 15%, rgba(210, 210, 220, 0.5) 0%, transparent 100%),
        radial-gradient(1px 1px at 45% 55%, rgba(240, 240, 250, 0.4) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 88% 75%, rgba(190, 190, 210, 0.7) 0%, transparent 100%),
        radial-gradient(1px 1px at 22% 90%, rgba(220, 220, 230, 0.5) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 60% 10%, rgba(235, 235, 245, 0.6) 0%, transparent 100%),
        radial-gradient(1px 1px at 35% 32%, rgba(210, 210, 220, 0.4) 0%, transparent 100%),
        radial-gradient(1.5px 1.5px at 75% 92%, rgba(230, 230, 240, 0.6) 0%, transparent 100%);
    animation: sparkle2 3s ease-in-out infinite alternate-reverse;
}

body {
    margin: 0;
    padding: 0;
    position: relative;
    min-height: 100vh;
    overflow-x: hidden;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
}

@keyframes codeDrift {
    0%   { transform: translateY(-20%); }
    100% { transform: translateY(20%); }
}

@keyframes sparkle1 {
    0%   { opacity: 0.3; }
    100% { opacity: 1; }
}

@keyframes sparkle2 {
    0%   { opacity: 0.2; }
    100% { opacity: 0.9; }
}

/* CONTAINERS */
/* Layout containers for site sections */

/* Site Container - Updated for grid layout compatibility */
.myContainer {
    max-width: 1000px;
    min-width: 320px;
    width: 100%;
    /* Center container horizontally */
    margin: 0 auto;
    /* background color of whole website container */
    background-color: white;
    border-radius: 18px 18px 18px 18px;
    overflow: hidden;
    box-shadow:
        inset 4px 0 16px rgba(0, 0, 0, 0.3),
        inset -4px 0 16px rgba(0, 0, 0, 0.3),
        0 8px 32px rgba(0, 0, 0, 0.15),
        0 4px 16px rgba(0, 0, 0, 0.1);
    box-sizing: border-box;
}

/* Standardize all postSection containers across the site */
.postSection {
    padding-top: 30px;
    padding-right: 25px;

    padding-bottom: 10px;
    padding-left: 25px;
    margin: 0 0 0 0;
    background: #fff;
    box-shadow: none;
    min-width: 320px;
    width: 100%;
    box-sizing: border-box;
}

@media (min-width: 768px) {
    .postSection {
        padding-right: 25px;
        padding-left: 25px;
        max-width: 100%;
        min-width: 0;
        margin: 0 auto;
    }
}

@media (max-width: 767px) {
    .myContainer {
        border-radius: 0 !important;
        margin-top: 0 !important;
        box-shadow: none !important;
    }

    .mobile-header {
        margin-top: 0 !important;
    }
}

/*
Container for Client Showcase on 'About' (Index) page
*/
.clientShowcase {
    background-color: white;
    margin-top: 0;
    margin-right: 0;
    margin-bottom: 0;
    margin-left: 0;
    padding-left: 0;
    padding-top: 10px;
    padding-right: 0;
    padding-bottom: 20px;
    text-align: center;
    width: 100%;
    display: block;
    box-sizing: border-box;
}

.clientShowcase img {
    /* Dimensions are controlled by the .clientLogo class in images.css */
    vertical-align: middle;
}

/* CONTACT LIST */

.myContact {
    width: 40%;
    /* Must be the same as .myForm */
    height: auto;
    /* Align contact box to the left */
    float: left;
    margin-top: 0px;
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 16px;
}

/* Table inside Contact Box */
.myContact table {
    /* Push table off left margin of Contact box */
    margin-top: 0px;
    margin-left: 50px;
}

.myContact td {
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 16px;
    /* Push table off left margin of Contact box */
    padding-bottom: 10px;
}

.myContact img {
    width: 48px;
    height: 48px;
    margin-top: 10px;
    margin-right: 20px;
    border: 0;
}

/* Response Form */

.myForm {
    width: 60%;
    /* Must be the same as myContact */
    height: auto;
    /* Align response form box to the left */
    float: right;
    margin-top: 20px;
    margin-bottom: 20px;
}

.myForm input {
    width: 90%;
    padding-top: 15px;
    padding-bottom: 15px;
    padding-left: 15px;
    padding-right: 15px;
    box-sizing: border-box;
    /* Add box shadow with blur around the input fields */
    box-shadow: inset 0 4px 8px 0 rgba(0, 0, 0, 0.2);
    /* Add solid border around input fields */
    border: 1px solid gray;
    /* Add rounded corners to input fields */
    border-radius: 10px;
    /* Set font for menu items */
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 16px;
    color: #000000;
}

.myForm textarea {
    width: 90%;
    max-height: 150px;
    min-height: 150px;
    padding-top: 15px;
    padding-bottom: 15px;
    padding-left: 15px;
    padding-right: 15px;
    box-sizing: border-box;
    /* Add box shadow with blur around the input fields */
    box-shadow: inset 0 4px 8px 0 rgba(0, 0, 0, 0.2);
    /* Add solid border around input fields */
    border: 1px solid gray;
    /* Add rounded corners to input fields */
    border-radius: 10px;
    /* Set font for menu items */
    font-family: "Poppins", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 16px;
    color: #000000;
}

.myForm input:focus,
.myForm textarea:focus {
    border: 1px solid goldenrod;
    background-color: lightyellow;
    box-shadow: inset 0 4px 8px 0 rgba(0, 0, 0, 0.2);
}

/* Response form button */
.myForm button {
    display: block;
    width: 100%;
    max-width: 90%;
    margin: 0;
    background-color: rgb(255, 18, 1);
    border: none;
    color: #FFFFFF;
    padding: 10px 0px;
    font-weight: 700;
    font-size: 17px;
    text-decoration: none;
    border-radius: 15px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2), 0 6px 20px rgba(0, 0, 0, 0.19), inset 0 0 10px rgba(255, 255, 255, 0.2);
    transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
    cursor: pointer;
}

.myForm button:hover {
    background-color: rgb(255, 18, 1);
    color: #FFFFFF;
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3), 0 12px 32px rgba(0, 0, 0, 0.3), inset 0 0 15px rgba(255, 255, 255, 0.3);
}

.certificates {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    justify-content: center;
    align-items: flex-start;
    margin-bottom: 0px;
}

.certificate,
.certificate img {
    width: 290px !important;
    max-width: 100%;
    height: auto;
    display: block;
    margin-left: auto;
    margin-right: auto;
}

.certificate {
    display: inline-block;
    margin: 0;
}

/* H1 to date label spacing: Reduce vertical space for cohesive header layout */
.postSection h1 {
    padding-bottom: 10px;
}

/* @@POST-PANEL-START@@ */
/* POST PANEL RECTANGULAR GLASS DESIGN */
/* Rectangular glass design with #0094FF blue theme - appears sunken into the page */

/* Rectangular glass design - appears sunken into the page */
#postPanel {
    /* Semi-transparent gradient background - #0094FF blue theme */
    background: linear-gradient(135deg,
            rgba(0, 148, 255, 0.15) 0%,
            rgba(0, 148, 255, 0.25) 50%,
            rgba(0, 148, 255, 0.15) 100%);
    /* Sharp rectangular corners */
    border-radius: 0;
    /* Inset shadows for depth - creates sunken effect */
    box-shadow:
        inset 0 4px 8px rgba(0, 0, 0, 0.15),
        inset 0 -2px 4px rgba(255, 255, 255, 0.1),
        0 2px 8px rgba(0, 148, 255, 0.2);
    /* Backdrop blur for glass effect */
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    /* Subtle border for glass definition */
    border: 1px solid rgba(0, 148, 255, 0.2);
    padding: 12px 20px;
    margin: 30px auto 20px auto; /* bottom: 20px + 10px postSection padding = 30px, matching top */
    display: block;
    width: auto;
    max-width: 100%;
    box-sizing: border-box;
    font-size: 0.9em;
    color: #333333;
    text-shadow: 0 1px 2px rgba(255, 255, 255, 0.8), 0 -1px 1px rgba(0, 0, 0, 0.3);
    font-weight: 500;
    position: relative;
    overflow: hidden;
    /* Transition for hover effects */
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Inner glow effect via ::before pseudo-element */
#postPanel::before {
    content: '';
    position: absolute;
    top: 1px;
    left: 1px;
    right: 1px;
    height: 50%;
    background: linear-gradient(180deg,
            rgba(255, 255, 255, 0.4) 0%,
            rgba(255, 255, 255, 0.1) 100%);
    border-radius: 0;
    pointer-events: none;
    z-index: 0;
}

/* Reflection effect via ::after pseudo-element */
#postPanel::after {
    content: '';
    position: absolute;
    top: 3px;
    left: 8px;
    right: 60%;
    height: 20%;
    background: linear-gradient(135deg,
            rgba(255, 255, 255, 0.6) 0%,
            rgba(255, 255, 255, 0.2) 50%,
            transparent 100%);
    border-radius: 0;
    pointer-events: none;
    z-index: 0;
    opacity: 0.8;
}

/* Enhanced hover effects */
#postPanel:hover {
    /* Subtle lift animation */
    transform: translateY(-2px);
    /* Enhanced glow with #0094FF blue theme */
    box-shadow:
        inset 0 4px 12px rgba(0, 0, 0, 0.2),
        inset 0 -2px 6px rgba(255, 255, 255, 0.15),
        0 4px 16px rgba(0, 148, 255, 0.3),
        0 0 20px rgba(0, 148, 255, 0.1);
    /* Slightly brighter background */
    background: linear-gradient(135deg,
            rgba(0, 148, 255, 0.2) 0%,
            rgba(0, 148, 255, 0.3) 50%,
            rgba(0, 148, 255, 0.2) 100%);
}

/* Style individual elements within postPanel */
#postPanel #dateModified,
#postPanel #author,
#postPanel #hashtags {
    color: inherit;
    font-weight: inherit;
    position: relative;
    z-index: 1;
}

/* New layout: postPanel as block container with post-panel-row (flex) + hashtags (block) */
#postPanel:has(.post-panel-row) {
    display: block !important;
    overflow: visible !important;
}

.post-panel-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.75em;
    margin-top: 4px;
}

.post-panel-row .inline-social-share {
    margin-left: auto;
    flex-shrink: 0;
}

/* Fallback for pages without the inline-social-share wrapper */
.post-panel-row > a img {
    width: 20px;
    height: 20px;
    vertical-align: middle;
}
.post-panel-row > a:has(img):first-of-type {
    margin-left: auto;
}

/* Hashtags on their own line, wrapping naturally */
#postPanel:has(.post-panel-row) #hashtags {
    display: block;
}

/* Spacing between hashtags */
#postPanel #hashtags a {
    margin-right: 3px;
}

/* Style links within postPanel */
#postPanel a {
    color: #333333;
    text-decoration: none;
    transition: all 0.3s ease;
    position: relative;
    z-index: 1;
    text-shadow: 0 1px 2px rgba(255, 255, 255, 0.8), 0 -1px 1px rgba(0, 0, 0, 0.3);
}

/* Enhanced hover effects with text glow */
#postPanel a:hover {
    color: #555555;
    text-shadow: 0 1px 3px rgba(255, 255, 255, 0.9), 0 -1px 2px rgba(0, 0, 0, 0.4);
    transform: translateY(-1px);
}

/* Back to top button styling */
.back-to-top-button {
    display: none;
    /* from inline in index.html */
    /* show/hide toggled by JS */
}

/* @@POST-PANEL-END@@ */

/* HEADER IMAGE STYLES */
/* Header background and logo positioning styles */

.header-background {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    z-index: 1;
}

.header-logo-link {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

.header-logo-image {
    width: 100%;
    height: 100%;
    max-width: none;
    min-width: 0;
    object-fit: contain;
    object-position: left;
}

/* SERVICE WORKER UPDATE NOTIFICATION */
.sw-update-notification {
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100vw;
    background: #ed150a;
    color: #fff;
    text-align: center;
    padding: 1em 0;
    z-index: 99999;
    font-size: 1.1em;
    box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15);
}

.sw-update-refresh {
    margin-left: 1em;
    padding: 0.4em 1.2em;
    border: none;
    border-radius: 4px;
    background: #fff;
    color: #ed150a;
    font-weight: bold;
    cursor: pointer;
}

/* FOOTER STYLES */
/* Footer copyright text styling */

.footer-copyright-text {
    font-size: 0.95em;
    line-height: 1.5;
}

/* Hashtag Cloud */
#hashtag-cloud {
    font-size: 0.9rem;
    line-height: 1.6;
    text-align: justify;
    margin: 0;
    padding: 0;
    width: 100%;
    box-sizing: border-box;
}

#hashtag-cloud a {
    margin: 0 5px;
    text-decoration: none;
    display: inline-block;
}

/* === end of structure.css === */

/* >>> tables.css (7745 bytes) */
/*
    tables.css - Table styles for SOHO Systems
    Last commented: 2025-08-23
    Structure: Comparative tables, feature tables, expandable tables
*/

/* Tables span full width of postSection content area */
.postSection table {
    width: 100%;
    margin-left: auto;
    margin-right: auto;
}

/* Table indentation under H1 / H2 / H3 / H4 headings (left-aligned tables) */
.postSection table.indent-h1 {
    margin-left: 0;
    margin-right: auto;
    padding-left: 0;
    padding-right: 10px;
}

.postSection table.indent-h2 {
    margin-left: 0;
    margin-right: auto;
    padding-left: 0;
    padding-right: 10px;
}

.postSection table.indent-h3 {
    margin-left: 0;
    margin-right: auto;
    padding-left: 0;
    padding-right: 10px;
}

.postSection table.indent-h4 {
    margin-left: 0;
    margin-right: auto;
    padding-left: 0;
    padding-right: 10px;
}

/* Comparative table for Windows Media Player vs VLC */
.comparative-table {
    width: 100%;
    border-collapse: collapse;
    text-align: left;
    margin-bottom: 1.5em;
    margin-left: auto;
    margin-right: auto;
}

.comparative-table th,
.comparative-table td {
    padding: 7px;
    border: 1px solid #ccc;
    /* ensure readable text and consistent site font */
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-size: 0.98rem;
}

/* Guard: explicit small rule to ensure tables use Poppins when available.
   This keeps table typography consistent across pages. */
.postSection table,
.postSection .table,
.postSection .comparative-table {
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
}

.comparative-table th {
    background: #f0f0f0;
}

/* Table cell styles for Aronium tables */
.table-cell {
    border: 1px solid #ccc;
    padding: 0.5em;
}

/* Table styles moved from mail-server-settings.html */
.table {

    width: 100%;
    margin-top: 0;
    margin-bottom: 20px;
    margin-left: auto;
    margin-right: auto;
    border-collapse: collapse;
}

.table th,
.table td {
    border: 1px solid black;
    padding: 8px;
    text-align: left;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-size: 1rem;
}

.table th {
    background-color: #f2f2f2;
}

/* Table note styling for informational cells */
.table-note {
    font-size: 0.95em;
    color: #555;
    background: #f9f9f9;
}

.trTitle {
    background-color: #000000;
    color: #ffffff;
}

.trTitle th {
    background-color: #000000;
    color: #ffffff;
}

/* =============================
   Fullscreen / Expandable Tables
   ============================= */
.table-expand-actions {
    text-align: right;
    margin: 0 0 0.4em 0;
}

.table-expand-btn {
    background: #ed150a;
    color: #fff;
    border: none;
    padding: 0.45em 0.9em;
    font-size: 0.85em;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    border-radius: 4px;
    cursor: pointer;
    letter-spacing: 0.5px;
}

.table-expand-btn:hover,
.table-expand-btn:focus {
    background: #c31208;
    outline: none;
}

/* Compact maximize/minimize icon trigger */
.table-max-trigger {
    position: absolute;
    top: 4px;
    right: 4px;
    width: 26px;
    height: 26px;
    padding: 0;
    border: none;
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    border-radius: 4px;
    font-size: 15px;
    line-height: 1;
}

.table-max-trigger:hover,
.table-max-trigger:focus {
    background: rgba(0, 0, 0, 0.75);
    outline: none;
}

.table-wrapper-rel {
    position: relative;
}

#table-fullscreen-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    display: none;
    background: rgba(0, 0, 0, 0.60);
    z-index: 100000;
    align-items: flex-start;
    justify-content: center;
    padding: 4vh 4vw;
    box-sizing: border-box;
}

#table-fullscreen-overlay.active {
    display: flex;
}

#table-fullscreen-overlay .table-fs-inner {
    background: #ffffff;
    border-radius: 10px;
    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.35);
    padding: 1.2em 1.2em 1.6em 1.2em;
    width: 100%;
    max-width: 1400px;
    max-height: 92vh;
    overflow: auto;
    position: relative;
}

#table-fullscreen-overlay .table-fs-close {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 30px;
    height: 30px;
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    border: none;
    padding: 0;
    cursor: pointer;
    border-radius: 4px;
    font-size: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
}

#table-fullscreen-overlay .table-fs-close:hover,
#table-fullscreen-overlay .table-fs-close:focus {
    background: rgba(0, 0, 0, 0.75);
    outline: none;
}

/* Make comparative table more readable fullscreen */
#table-fullscreen-overlay .comparative-table th,
#table-fullscreen-overlay .comparative-table td {
    font-size: 0.98em;
    /* a touch larger in fullscreen for readability */
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
}

@media (max-width: 900px) {
    #table-fullscreen-overlay .table-fs-inner {
        padding: 0.8em 0.8em 1.2em 0.8em;
    }

    .table-expand-btn {
        font-size: 0.75em;
    }
}

/* =============================
   Feature Table Styles
   ============================= */

/* Feature table for web-site-development.html */
.featureTable {
    width: 100%;
    border-collapse: collapse;
    margin: 1.5em 0;
    font-family: 'Poppins', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', Arial, Helvetica, sans-serif;
    font-size: 1rem;
}

.featureTable td {
    padding: 0.9em 1em;
    border-bottom: 1px solid #e0e0e0;
    vertical-align: middle;
    line-height: 1.5;
}

.featureTable td:first-child {
    width: 65%;
    color: #222;
    font-weight: 500;
    padding-left: 0;
}

.featureTable td:last-child {
    width: 35%;
    text-align: right;
    font-weight: 600;
    color: #32445A;
    padding-right: 0;
    white-space: nowrap;
}

.featureTable tr:last-child td {
    border-bottom: none;
}

.featureTable .priceMicrosoftClarity,
.featureTable .priceGoogleAnalytics {
    color: #1b8a1b;
    font-weight: 700;
}

/* Responsive design for feature table */
@media (max-width: 768px) {

    .featureTable td {
        display: block;
        width: 100%;
        padding: 0.7em 0;
    }

    .featureTable td:first-child {
        font-size: 0.95rem;
        padding-bottom: 0.1em;
    }

    .featureTable td:last-child {
        text-align: left;
        padding-top: 0.1em;
        padding-bottom: 0.8em;
        border-bottom: 1px solid #d0d0d0;
        padding-left: 0.6em;
        border-left: 3px solid #32445A;
    }

    .featureTable tr:last-child td:last-child {
        border-bottom: none;
    }
}

/* === end of tables.css === */

/* >>> videos.css (3047 bytes) */
/*
============================================================
 videos.css - Video embed and container styles for SOHO Systems
 Last updated: 2025-08-29
------------------------------------------------------------
 Structure:
     - YouTube iframe embeds (.embedYouTube)
    - Native <video> embeds (.embeddedVideo)
     - Responsive adjustments (media queries)
============================================================
*/

/* NOTE: Embedded YouTube iframes must use the .embedYouTube class directly.
    Do NOT wrap the iframe in an additional <div> (e.g., .videoCenter). The
    page-update routine and automation expect iframe.embedYouTube to be the
    primary element so transformations and CSS sizing remain deterministic.
*/

/* --------------------------------------------------------- */
/* Responsive YouTube iframe embed (use on <iframe> only)    */
/* --------------------------------------------------------- */
.embedYouTube {
    display: block;
    /* block element */
    width: 100%;
    /* responsive width within cap */
    min-width: 0;
    /* allow shrink on narrow viewports */
    aspect-ratio: 16 / 9;
    /* Maintain aspect ratio */
    margin: 18px auto 26px auto;
    /* center horizontally */
    border: 0;
    background-color: #000;
    box-sizing: border-box;
    box-shadow:
        0 4px 18px 0 rgba(0, 0, 0, 0.10),
        0 6px 24px 0 rgba(0, 0, 0, 0.18) inset,
        0 -2px 8px 0 rgba(255, 255, 255, 0.18) inset,
        0 0.5px 0 0 rgba(0, 0, 0, 0.10) inset;
}

/* Optional explicit centering utility if embed width changes */
.videoCenter,
.video-center {
    display: block;
    margin-left: auto !important;
    margin-right: auto !important;
    text-align: center;
}

/* Caption style for video embeds (used by pages that include a short caption)
   Keep this simple; visual adjustments should be done here rather than inline. */
.videoCaption {
    /* DEPRECATED: captions for embedded YouTube players are not allowed.
       The page-update routine should not inject captions. This class is
       retained only for compatibility with legacy pages and will be ignored
       by automation. */
    display: none !important;
}

/* --------------------------------------------------------- */
/* Responsive adjustments for YouTube embeds on small screens */
/* --------------------------------------------------------- */
@media (max-width: 950px) {
    .embedYouTube {
        max-width: 100%;
    }
}

/* --------------------------------------------------------- */
/* Responsive native <video> embed (use on <video> only)     */
/* --------------------------------------------------------- */
.embeddedVideo {
    width: 99%;
    /* Responsive width */
    height: auto;
    /* Height auto for aspect ratio */
    max-width: 99%;
    min-width: 99%;
    margin-top: 10px;
    /* Top spacing */
    margin-left: 0;
    margin-right: 0;
    padding: 0;
}

/* ==================== */
/* End of videos.css    */
/* ==================== */

/* === end of videos.css === */

/* >>> related-articles.css (1651 bytes) */
/* Related Articles Section - Similar to Guiding Tech style */

.related-articles {
  margin: 2em 0 3em 0;
  padding: 1.5em;
  background: #f8f9fa;
  border-radius: 8px;
  border: 1px solid #e9ecef;
}

.related-articles h3 {
  margin: 0 0 1.5em 0;
  font-size: 1.4em;
  font-weight: 700;
  color: #222;
  border-bottom: 2px solid #d32f2f;
  padding-bottom: 0.5em;
}

.related-articles-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 1.5em;
}

.related-article-card {
  background: #fff;
  border-radius: 6px;
  overflow: hidden;
  border: 1px solid #dee2e6;
  transition: all 0.2s ease;
  text-decoration: none;
  display: block;
}

.related-article-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
  border-color: #d32f2f;
}

.related-article-thumb {
  width: 100%;
  height: 150px;
  object-fit: cover;
  display: block;
}

.related-article-content {
  padding: 1em;
}

.related-article-title {
  font-size: 1em;
  font-weight: 600;
  color: #222;
  margin: 0 0 0.5em 0;
  line-height: 1.4;
}

.related-article-card:hover .related-article-title {
  color: #d32f2f;
}

.related-article-date {
  font-size: 0.85em;
  color: #666;
  margin: 0;
}

.related-article-excerpt {
  font-size: 0.9em;
  color: #555;
  margin: 0.5em 0 0 0;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Responsive adjustments */
@media (max-width: 768px) {
  .related-articles-grid {
    grid-template-columns: 1fr;
  }
}


/* === end of related-articles.css === */

/* >>> inline-social-share.css (918 bytes) */
/* Inline Social Share Buttons - Right-aligned inside postPanel */

/* Only apply flex to postPanels that have social sharing buttons */
#postPanel:has(.inline-social-share) {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  flex-wrap: wrap;
  gap: 8px;
}

.inline-social-share {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: auto; /* Push to right end */
  flex-shrink: 0;
}

.inline-social-share a {
  display: inline-block;
  width: 20px;
  height: 20px;
  opacity: 0.7;
  transition: opacity 0.2s ease;
}

.inline-social-share a:hover {
  opacity: 1;
}

.inline-social-share a img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

/* Mobile: stack below on small screens */
@media (max-width: 600px) {
  .inline-social-share {
    display: flex;
    margin-left: 0;
    margin-top: 6px;
    gap: 8px;
  }
}


/* === end of inline-social-share.css === */

/* >>> social-sharing.css (1802 bytes) */
/* Social Sharing Buttons - Positioned to the right inside postPanel */

/* When social buttons are inside postPanel */
#postPanel {
  display: flex !important;
  align-items: center;
  gap: 0.75em;
  flex-wrap: wrap;
  overflow: visible !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}

.post-panel-social {
  display: flex;
  align-items: center;
  gap: 0.4em;
  margin-left: auto; /* Push to the right */
  flex-shrink: 0; /* Prevent shrinking */
}

.post-panel-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: #fff;
  border: 1px solid #dee2e6;
  transition: all 0.2s ease;
  text-decoration: none;
  flex-shrink: 0; /* Prevent icon shrinking */
}

.post-panel-social a:hover {
  transform: translateY(-2px);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
}

.post-panel-social a img {
  width: 14px;
  height: 14px;
  object-fit: contain;
}

.post-panel-social a:hover img {
  filter: brightness(0) invert(1);
}

.post-panel-social a[href*="facebook.com"]:hover {
  background: #1877f2;
  border-color: #1877f2;
}

.post-panel-social a[href*="twitter.com"]:hover,
.post-panel-social a[href*="x.com"]:hover {
  background: #000;
  border-color: #000;
}

.post-panel-social a[href*="linkedin.com"]:hover {
  background: #0077b5;
  border-color: #0077b5;
}

.post-panel-social a[href*="wa.me"]:hover {
  background: #25d366;
  border-color: #25d366;
}

/* Responsive: Stack on mobile */
@media (max-width: 768px) {
  #postPanel {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5em;
  }
  
  .post-panel-social {
    margin-left: 0;
    margin-top: 0.25em;
  }
}


/* === end of social-sharing.css === */

/* >>> grid-layout.css (3791 bytes) */
/* Modern Grid Layout System for SOHO Systems */
/* Last updated: 2026-04-26 */

:root {
  --container-max: 1000px;
  --container-padding: 5px;
  --header-height: 80px;
  --menu-bg: #0556AF;
  --search-bg: #f5f5f5;
  --grid-gap: 24px;
}

/* Fly-in animation for first visit */
@keyframes flyInSlam {
  0% {
    transform: translateY(100vh);
    opacity: 0;
  }
  100% {
    transform: translateY(0);
    opacity: 1;
  }
}

/* Main Container - Flexible Grid */
.myContainer {
  max-width: var(--container-max);
  width: 100%;
    margin: 40px auto 40px;
  padding: 0 var(--container-padding);
  background-color: white;
  border-radius: 18px 18px 18px 18px;
  overflow: hidden;
  box-sizing: border-box;
  position: relative;
  z-index: 1;
  box-shadow:
    -10px -10px 30px 15px rgba(0, 0, 0, 0.40),
    8px 8px 20px 10px rgba(92, 0, 0, 0.10),
    0 0 80px 40px rgba(92, 0, 0, 0.45);
}

.myContainer.animate-fly-in {
  animation: flyInSlam 1.5s cubic-bezier(0.22, 1, 0.36, 1) forwards;
  transform-origin: center center;
}

.myContainer::after {
  content: '';
  position: absolute;
  bottom: -6px;
  left: 10%;
  right: 10%;
  height: 30px;
  border-radius: 50%;
  background: radial-gradient(ellipse at center, rgba(255, 100, 20, 0.15) 0%, transparent 70%);
  pointer-events: none;
  z-index: -1;
  filter: blur(8px);
}

/* Simplified Header */
.simple-header {
  display: flex;
  align-items: center;
  padding: 16px 6px;
  background: white;
  margin-top: 20px;
  border-top-left-radius: 18px;
  border-top-right-radius: 18px;
  position: relative;
  z-index: 2;
  transform: translateY(-1px);
  box-shadow:
    0 12px 24px rgba(70, 18, 8, 0.12),
    0 2px 8px rgba(255, 100, 40, 0.08);
  will-change: transform, box-shadow;
}

.simple-header {
  transform: translate3d(0, -3px, 0) !important;
  box-shadow:
    0 14px 28px rgba(70, 18, 8, 0.16),
    0 4px 12px rgba(255, 100, 40, 0.12) !important;
}

.creditContainer .footerContainer {
    margin-bottom: 0;
}

.myContainer .footerContainer {
    margin-bottom: 0;
}

.site-logo-link {
  display: inline-block;
  text-decoration: none;
  margin-left: 20px;
}

.site-logo {
  max-height: 60px;
  width: auto;
  display: block;
}

/* Top Menu Bar */
.top-menu-bar {
  background-color: var(--menu-bg);
  padding: 0;
  position: sticky;
  top: 0;
  z-index: 1000;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}

.top-menu-bar .menu {
  display: flex;
  list-style: none;
  margin: 0;
  padding: 0;
  justify-content: center;
  flex-wrap: wrap;
}

.top-menu-bar .menu li a {
  display: block;
  color: white;
  padding: 15px 20px;
  text-decoration: none;
  font-family: 'Poppins', sans-serif;
  font-weight: 500;
  transition: background-color 0.3s ease;
}

.top-menu-bar .menu li a:hover {
  background-color: rgba(255,255,255,0.1);
  border-radius: 8px;
}

/* Mobile Menu Toggle Button */
.mobile-menu-toggle {
  display: none;
  background: transparent;
  border: none;
  color: white;
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 0.1em;
  padding: 15px 20px;
  cursor: pointer;
  width: 100%;
  text-align: center;
}

/* Search Bar Below Menu */
.site-search-bar {
  background-color: var(--search-bg);
  padding: 15px 20px;
}

.search-container {
  width: 100%;
  margin: 0;
  display: flex;
  gap: 10px;
}

.search-container input {
  flex: 1;
  padding: 12px 16px;
  border: 1px solid #ddd;
  border-radius: 8px;
  font-size: 16px;
  font-family: 'Poppins', sans-serif;
  outline: none;
  transition: border-color 0.3s ease;
}

.search-container input:focus {
  border-color: #ff0000;
  box-shadow: inset 0 0 8px 3px rgba(255, 0, 0, 0.6);
}

.search-container button {
  padding: 12px 24px;
  background-color: #0556AF;
  color: white;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  font-weight: 500;
  font-family: 'Poppins', sans-serif;
  transition: background-color 0.3s ease;
}

.search-container button:hover {
  background-color: #044590;
}

/* Content Grid System */
.content-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: var(--grid-gap);
  padding: 40px 0;
}

/* Main Content Area */
.main-content {
  grid-column: 1 / -1;
  padding: 30px 0;
}

/* Responsive Breakpoints */
@media (max-width: 768px) {
  .simple-header {
    grid-template-columns: 1fr;
    text-align: center;
    gap: 10px;
  }
  
  .header-tagline {
    display: none;
  }
  
  .mobile-menu-toggle {
    display: block;
  }
  
  .top-menu-bar .menu {
    display: none;
    flex-direction: column;
  }
  
  .top-menu-bar .menu.mobile-active {
    display: flex;
  }
  
  .top-menu-bar .menu li a {
    border-bottom: 1px solid rgba(255,255,255,0.1);
  }

  .top-menu-bar .menu li a.active {
    width: 100%;
    box-sizing: border-box;
  }
  
  .content-grid {
    grid-template-columns: 1fr;
    gap: 16px;
    padding: 20px 0;
  }
}

@media (max-width: 767px) {
  .creditContainer {
    padding: 0 5px;
    border-radius: 0;
    overflow: visible;
    margin-top: 0;
    margin-bottom: 0;
  }
  .creditContainer .creditSpacer,
  .creditContainer .creditScreen {
    background: black;
    margin-left: -5px;
    margin-right: -5px;
    width: calc(100% + 10px);
  }
  .creditScreen {
    height: 400px;
    min-height: 400px;
    max-height: 400px;
  }
  .creditScroller,
  .creditUnit,
  .creditType {
    max-width: 100%;
    min-width: 0;
  }
  .gallery-row {
    justify-content: center;
  }
  .myContainer {
    padding: 0 5px;
    border-radius: 0;
    overflow: visible;
    margin-top: 0;
    margin-bottom: 0;
  }
  .footerContainer {
    width: 100vw;
    left: calc(-50vw + 50%);
    position: relative;
    border-radius: 0;
    margin-bottom: 0;
    padding-bottom: 0;
    transform: none !important;
  }
  .footerSection.footerFollow .footerSocialIcons {
    margin-left: 0;
  }
  .footerSection.footerFollow h3 {
    padding-left: 0;
  }
  .myContainer::after {
    display: none;
  }
  .simple-header {
    margin-top: 0;
    border-radius: 0;
    width: 100vw;
    left: calc(-50vw + 50%);
    position: relative;
  }
  .top-menu-bar {
    width: 100vw;
    left: calc(-50vw + 50%);
    position: relative;
  }
  .site-search-bar {
    width: 100vw;
    left: calc(-50vw + 50%);
    position: relative;
  }
}

@media (max-width: 480px) {
  .creditContainer {
    padding: 0 5px;
  }
  .myContainer {
    padding: 0 5px;
  }
  
  .simple-header {
    justify-content: center;
  }

  .site-logo-link {
    margin-left: 0;
  }

  .site-logo {
    max-height: 50px;
  }
  
  .search-container {
    flex-direction: column;
  }
  
  .search-container button {
    width: 100%;
  }
  
  .top-menu-bar .menu li a {
    box-sizing: border-box;
    padding: 8px 0;
    font-size: 14px;
  }

  .top-menu-bar .menu li a.active {
    padding: 8px 0;
    width: 100%;
    box-sizing: border-box;
  }
}


/* ========================= */
/* Origami Unfold Effect (Banner) */
/* =============================== */
.origami-unfold-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin: 0 0 20px 0;
    perspective: 1200px;
}

.origami-unfold-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: left center;
    backface-visibility: hidden;
    animation: origamiUnfold 2.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both !important;
    position: relative;
    z-index: 1;
}

.origami-unfold-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    animation: origamiShadow 2.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
    z-index: 2;
    pointer-events: none;
}

@keyframes origamiUnfold {
    0% {
        transform: perspective(1200px) rotateY(-87deg);
        filter: brightness(0.5);
    }
    40% {
        transform: perspective(1200px) rotateY(6deg);
        filter: brightness(0.9);
    }
    55% {
        transform: perspective(1200px) rotateY(-3deg);
        filter: brightness(0.98);
    }
    70% {
        transform: perspective(1200px) rotateY(1.5deg);
        filter: brightness(1);
    }
    85% {
        transform: perspective(1200px) rotateY(-0.5deg);
    }
    100% {
        transform: perspective(1200px) rotateY(0deg);
        filter: brightness(1);
    }
}

@keyframes origamiShadow {
    0% {
        opacity: 1;
        background: linear-gradient(90deg,
            transparent 5%,
            rgba(0,0,0,0.25) 25%,
            rgba(0,0,0,0.5) 55%,
            rgba(0,0,0,0.7) 100%
        );
    }
    40% {
        opacity: 0.85;
        background: linear-gradient(90deg,
            transparent 30%,
            rgba(0,0,0,0.1) 55%,
            rgba(0,0,0,0.2) 80%,
            rgba(0,0,0,0.3) 100%
        );
    }
    55% {
        opacity: 0.5;
        background: linear-gradient(90deg,
            transparent 55%,
            rgba(0,0,0,0.04) 75%,
            rgba(0,0,0,0.08) 90%,
            rgba(0,0,0,0.12) 100%
        );
    }
    70% {
        opacity: 0.2;
    }
    100% {
        opacity: 0;
    }
}
/* ========================= */
/* Spin In Effect (Banner)   */
/* ========================= */
.spin-in-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin: 0 0 20px 0;
}

.spin-in-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: spinIn 1.8s cubic-bezier(0.2, 0.8, 0.3, 1.1) both !important;
}

@keyframes spinIn {
    0% {
        transform: scale(0.3) rotate(-540deg);
        opacity: 0;
    }
    40% {
        transform: scale(1.05) rotate(-60deg);
        opacity: 0.8;
    }
    70% {
        transform: scale(0.98) rotate(10deg);
        opacity: 1;
    }
    100% {
        transform: scale(1) rotate(0deg);
        opacity: 1;
    }
}
/* ========================= */
/* Alert Flash Effect (Banner) */
/* ========================= */
.alert-flash-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin: 0 0 20px 0;
}

.alert-flash-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: alertPulse 4s ease-in-out both;
}

.alert-flash-wrapper::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    pointer-events: none;
    background: rgba(255, 0, 0, 0.5);
    box-shadow: inset 0 0 80px rgba(255,0,0,0.9);
    animation: alertOverlay 4s ease-in-out both;
}

@keyframes alertPulse {
    0%   { filter: brightness(1) saturate(1); }
    3%   { filter: brightness(1.8) saturate(3); }
    6%   { filter: brightness(0.8) saturate(4); }
    9%   { filter: brightness(1.6) saturate(3); }
    13%  { filter: brightness(0.9) saturate(3.5); }
    17%  { filter: brightness(1.4) saturate(2); }
    22%  { filter: brightness(1) saturate(1.5); }
    28%  { filter: brightness(1.3) saturate(2); }
    35%  { filter: brightness(1) saturate(1.2); }
    45%  { filter: brightness(1.15) saturate(1.5); }
    60%  { filter: brightness(1) saturate(1.1); }
    80%  { filter: brightness(1.05) saturate(1); }
    100% { filter: brightness(1) saturate(1); }
}

@keyframes alertOverlay {
    0%   { opacity: 0; }
    3%   { opacity: 1; }
    6%   { opacity: 1; }
    9%   { opacity: 0.9; }
    13%  { opacity: 0.8; }
    17%  { opacity: 0.6; }
    22%  { opacity: 0.4; }
    28%  { opacity: 0.5; }
    35%  { opacity: 0.3; }
    45%  { opacity: 0.35; }
    60%  { opacity: 0.15; }
    80%  { opacity: 0.05; }
    100% { opacity: 0; }
}
/* ========================= */
/* Unroll Effect (Banner)    */
/* ========================= */
.unroll-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin: 0 0 20px 0;
}

.unroll-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: unroll 4s cubic-bezier(0.25, 0.1, 0.25, 1) both !important;
}

@keyframes unroll {
    0% {
        clip-path: inset(0 100% 0 0);
    }
    100% {
        clip-path: inset(0 0 0 0);
    }
}

.banana-contort-wrapper {
    position: relative;
    display: block;
    overflow: visible;
    margin: 0 0 20px 0;
}

.banana-contort-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: bananaContort 3.5s cubic-bezier(0.34, 1.56, 0.64, 1) both !important;
}

/* Constrained banner — 200px height with object-fit cover to fill width without deformation */
.banner-constrained {
    height: 200px;
    object-fit: cover;
}

/* Word-cloud sparkle reveal for em-client-translate.html banner */
.wordcloud-sparkle-wrapper {
    position: relative;
    overflow: hidden;
    margin: 0 0 20px 0;
}

.wordcloud-sparkle-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    background: #0a0a0a;
    animation: sparkleOverlayFade 2.8s ease-out forwards;
    pointer-events: none;
}

.wordcloud-sparkle-wrapper::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 3;
    pointer-events: none;
    background-repeat: no-repeat;
    background-image:
        radial-gradient(3px 3px at 8% 15%, rgba(255,255,255,0.95) 50%, transparent),
        radial-gradient(2px 2px at 22% 40%, rgba(255,255,210,0.85) 50%, transparent),
        radial-gradient(4px 4px at 38% 12%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 52% 55%, rgba(255,255,210,0.8) 50%, transparent),
        radial-gradient(3px 3px at 68% 28%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 82% 50%, rgba(255,255,210,0.85) 50%, transparent),
        radial-gradient(3px 3px at 12% 65%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 32% 80%, rgba(255,255,210,0.8) 50%, transparent),
        radial-gradient(4px 4px at 48% 35%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 62% 70%, rgba(255,255,210,0.85) 50%, transparent),
        radial-gradient(3px 3px at 78% 8%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 90% 60%, rgba(255,255,210,0.8) 50%, transparent),
        radial-gradient(3px 3px at 5% 45%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 42% 88%, rgba(255,255,210,0.85) 50%, transparent),
        radial-gradient(4px 4px at 72% 40%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 15% 88%, rgba(255,255,210,0.8) 50%, transparent),
        radial-gradient(3px 3px at 55% 10%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 85% 78%, rgba(255,255,210,0.85) 50%, transparent),
        radial-gradient(3px 3px at 95% 30%, rgba(255,255,255,0.9) 50%, transparent),
        radial-gradient(2px 2px at 25% 62%, rgba(255,255,210,0.8) 50%, transparent);
    opacity: 0;
    animation: sparklePulse 2.8s ease-out forwards;
}

.wordcloud-sparkle-wrapper .post-banner {
    animation: sparkleBrighten 2.8s ease-out forwards;
    margin-bottom: 0;
}

@keyframes sparkleBrighten {
    0% { filter: brightness(0.12); }
    20% { filter: brightness(0.3); }
    45% { filter: brightness(0.65); }
    70% { filter: brightness(1.05); }
    100% { filter: brightness(1); }
}

@keyframes sparkleOverlayFade {
    0%, 12% { opacity: 1; }
    100% { opacity: 0; }
}

@keyframes sparklePulse {
    0%, 4% { opacity: 0; }
    12% { opacity: 1; }
    35% { opacity: 0.85; }
    60% { opacity: 0.35; }
    85% { opacity: 0.1; }
    100% { opacity: 0; }
}

@keyframes bananaContort {
    0% {
        transform: scaleX(1) scaleY(1) rotate(0deg);
        border-radius: 0;
        clip-path: inset(0);
    }
    30% {
        transform: scaleX(0.8) scaleY(1.3) rotate(10deg);
        clip-path: url(#bananaCurve);
        border-radius: 8px;
    }
    55% {
        transform: scaleX(0.65) scaleY(1.5) rotate(18deg);
        clip-path: url(#bananaCurve);
        border-radius: 8px;
    }
    75% {
        transform: scaleX(1.2) scaleY(0.9) rotate(-2deg);
        clip-path: inset(0);
        border-radius: 30% 8px 30% 8px;
    }
    90% {
        transform: scaleX(0.98) scaleY(1.02) rotate(1deg);
        clip-path: inset(0);
        border-radius: 8px;
    }
    100% {
        transform: scaleX(1) scaleY(1) rotate(0deg);
        clip-path: inset(0);
        border-radius: 8px;
    }
}
/* === end of grid-layout.css === */

/* Slam-down effect for deliva-panic-button.html banner */
.slam-down-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
    perspective: 800px;
}

.slam-down-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: top center;
    animation: slamDown 1.2s cubic-bezier(0.22, 1, 0.36, 1) both;
}

@keyframes slamDown {
    0% {
        transform: translateY(-120%) rotateX(40deg) scaleY(0.7);
        opacity: 0;
    }
    30% {
        transform: translateY(10%) rotateX(5deg) scaleY(1.02);
        opacity: 1;
    }
    40% {
        transform: translateY(-5%) rotateX(-2deg) scaleY(1);
    }
    50% {
        transform: translateY(3%) rotateX(1deg);
    }
    60% {
        transform: translateY(-1%);
    }
    70% {
        transform: translateY(0);
    }
    75% {
        transform: translateX(-3px);
    }
    80% {
        transform: translateX(3px);
    }
    85% {
        transform: translateX(-2px);
    }
    90% {
        transform: translateX(2px);
    }
    95% {
        transform: translateX(-1px);
    }
    100% {
        transform: translateY(0) rotateX(0) scaleY(1) translateX(0);
        opacity: 1;
    }
}

/* Old film glitch effect for youtube.html banner */
.glitch-film-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.glitch-film-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    animation: filmGlitchIn 2.5s ease-out both;
}

/* Scan lines overlay */
.glitch-film-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 10;
    background: repeating-linear-gradient(
        0deg,
        rgba(0,0,0,0.15) 0px,
        rgba(0,0,0,0.15) 1px,
        transparent 1px,
        transparent 3px
    );
    animation: scanLineFlicker 0.1s infinite step-end;
}

/* Film dust, scratches, vignette */
.glitch-film-wrapper::after {
    content: '';
    position: absolute;
    inset: -20%;
    pointer-events: none;
    z-index: 11;
    background:
        radial-gradient(ellipse at 50% 50%, transparent 60%, rgba(0,0,0,0.5) 100%),
        radial-gradient(1px 1px at 15% 25%, rgba(255,255,255,0.6) 50%, transparent),
        radial-gradient(1px 1px at 72% 58%, rgba(255,255,255,0.4) 50%, transparent),
        radial-gradient(1.5px 1.5px at 40% 80%, rgba(200,200,200,0.5) 50%, transparent),
        radial-gradient(0.5px 0.5px at 90% 15%, rgba(255,255,255,0.7) 50%, transparent);
    mix-blend-mode: overlay;
    opacity: 0.6;
    animation: dustScratch 4s infinite step-end;
}

@keyframes filmGlitchIn {
    0% { opacity: 0; filter: brightness(0); }
    2% { opacity: 1; filter: brightness(1.5); transform: translate(-2px, 0); }
    3% { opacity: 0; filter: brightness(0); }
    5% { opacity: 1; filter: brightness(1.3); transform: translate(3px, -1px); }
    6% { opacity: 0; }
    7% { opacity: 1; filter: brightness(1); transform: translate(0); }
    10% { filter: sepia(0.6) saturate(0.7); }
    14% { filter: sepia(0.3) saturate(0.85); }
    18% { transform: translate(1px, 0); }
    20% { transform: translate(0); }
    22% { filter: sepia(0.15) saturate(1); }
    25% { filter: none; }
    28% { transform: translateY(0); }
    30% { transform: translateY(-1px); }
    32% { transform: translateY(0); }
    35% { filter: none; transform: none; }
    100% { opacity: 1; filter: none; transform: none; }
}

/* Subtle ongoing film jitter after entrance */
@keyframes scanLineFlicker {
    0% { opacity: 0.7; }
    50% { opacity: 1; }
}

@keyframes dustScratch {
    0%, 95% { opacity: 0.5; }
    3% { opacity: 0.8; }
    7% { opacity: 0.4; }
    21% { opacity: 0.9; transform: translate(1px, 0); }
    22% { opacity: 0.5; transform: translate(0); }
    45% { opacity: 0.7; }
    46% { opacity: 0.3; }
    73% { opacity: 0.6; }
    74% { opacity: 0.9; transform: translate(-0.5px, 0); }
    75% { opacity: 0.5; transform: translate(0); }
}

/* Mosaic tiles drop-in effect for nano-banana.html banner */
.mosaic-tiles-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
}

.mosaic-tiles-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

/* Diagonal strips reveal for opengraph.html banner */
.diagonal-strip-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.diagonal-strip-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
    animation: diagonalStrips 1.5s steps(8, end) forwards;
}

@keyframes diagonalStrips {
    0%   { clip-path: polygon(0% 0%, 12.5% 0%, 5% 100%, 0% 100%); }
    12.5% { clip-path: polygon(0% 0%, 25% 0%, 17.5% 100%, 0% 100%); }
    25%  { clip-path: polygon(0% 0%, 37.5% 0%, 30% 100%, 0% 100%); }
    37.5% { clip-path: polygon(0% 0%, 50% 0%, 42.5% 100%, 0% 100%); }
    50%  { clip-path: polygon(0% 0%, 62.5% 0%, 55% 100%, 0% 100%); }
    62.5% { clip-path: polygon(0% 0%, 75% 0%, 67.5% 100%, 0% 100%); }
    75%  { clip-path: polygon(0% 0%, 87.5% 0%, 80% 100%, 0% 100%); }
    87.5% { clip-path: polygon(0% 0%, 100% 0%, 92.5% 100%, 0% 100%); }
    100% { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }
}

/* Red alert panic effect for deliva-panic-button.html */
.panic-alert-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.panic-alert-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.panic-alert-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    pointer-events: none;
    background: repeating-conic-gradient(
        from 0deg at 50% 50%,
        rgba(255, 20, 0, 0.9) 0deg, rgba(255, 20, 0, 0.9) 18deg,
        transparent 18deg, transparent 38deg
    );
    animation: sirenSpin 2s cubic-bezier(0.15, 0.9, 0.2, 1) forwards;
}

.panic-alert-wrapper::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 3;
    pointer-events: none;
    background: radial-gradient(
        circle at 50% 50%,
        rgba(255, 40, 0, 0.15) 0%,
        transparent 60%
    );
    animation: sirenFade 2s ease-out forwards;
}

@keyframes sirenSpin {
    0% { transform: rotate(0deg); opacity: 1; }
    30% { transform: rotate(720deg); opacity: 1; }
    55% { transform: rotate(1080deg); opacity: 0.7; }
    75% { transform: rotate(1260deg); opacity: 0.35; }
    90% { transform: rotate(1350deg); opacity: 0.1; }
    100% { transform: rotate(1440deg); opacity: 0; }
}

@keyframes sirenFade {
    0% { opacity: 1; }
    50% { opacity: 1; }
    70% { opacity: 0.4; }
    100% { opacity: 0; }
}

/* === search.css additions merged from original === */

/* Recommended label (sup badge) */
.recommended {
    background: red;
    color: #fff;
    font-weight: 700;
    font-size: .65em;
    padding: 0 4px;
    border-radius: 3px;
}

/* Color wheel search loader */
@property --cw-degree {
    syntax: '<angle>';
    initial-value: 0deg;
    inherits: false;
}
@property --cw-size {
    syntax: '<length>';
    initial-value: 30px;
    inherits: false;
}
@property --cw-blur {
    syntax: '<length>';
    initial-value: 0px;
    inherits: false;
}

.color-wheel-loader {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 40px 0 80px 0;
    width: 100%;
}
.color-wheel-loader .cw-dots {
    position: relative;
    width: 1px;
    height: 1px;
}
.color-wheel-loader .cw-dots span {
    display: block;
    animation: cw-colors 3s infinite cubic-bezier(.75,.25,.25,.75),
               cw-pulse 3s infinite cubic-bezier(.75,.25,.25,.75);
    border-radius: 100px;
    width: 8px;
    height: 8px;
    background-color: hsl(var(--cw-degree) 100% 50%);
    rotate: var(--cw-degree);
    filter: blur(var(--cw-blur));
    margin-left: 40px;
    transform-origin: -40px 50%;
    width: var(--cw-size);
    position: absolute;
    left: 0;
    top: 0;
}

@keyframes cw-colors {
    0% { --cw-degree: 0deg; }
    100% { --cw-degree: 360deg; }
}
@keyframes cw-pulse {
    0% { --cw-size: 30px; --cw-blur: 0px; }
    50% { --cw-size: 8px; --cw-blur: 3px; }
    100% { --cw-size: 30px; --cw-blur: 0px; }
}

.color-wheel-loader .cw-dots span:nth-child(10n + 1) { animation-delay: -0.3s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 2) { animation-delay: -0.6s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 3) { animation-delay: -0.9s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 4) { animation-delay: -1.2s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 5) { animation-delay: -1.5s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 6) { animation-delay: -1.8s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 7) { animation-delay: -2.1s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 8) { animation-delay: -2.4s; }
.color-wheel-loader .cw-dots span:nth-child(10n + 9) { animation-delay: -2.7s; }
.color-wheel-loader .cw-dots span:nth-child(10n) { animation-delay: -3s; }

/* Popping bubbles reveal for icons.html banner */
.bubbles-pop-wrapper {
    position: relative;
    overflow: hidden;
    margin: 0 0 20px 0;
}

.bubbles-pop-wrapper .post-banner {
    margin: 0;
}

.bubbles-pop-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    background: #1a1a2e;
    animation: bPopOverlayFade 4s ease-out forwards;
    pointer-events: none;
}

.b-pop {
    position: absolute;
    z-index: 3;
    border-radius: 50%;
    pointer-events: none;
    animation: bubblePop 0.6s ease-out forwards;
    opacity: 0;
}

.b1  { width: 28px; height: 28px; left: 4%; top: 18%; background: #ff6b6b; animation-delay: 0.1s; }
.b2  { width: 18px; height: 18px; left: 14%; top: 65%; background: #64b5f6; animation-delay: 0.3s; }
.b3  { width: 22px; height: 22px; left: 26%; top: 35%; background: #ffd54f; animation-delay: 0.5s; }
.b4  { width: 14px; height: 14px; left: 34%; top: 78%; background: #81c784; animation-delay: 0.7s; }
.b5  { width: 30px; height: 30px; left: 46%; top: 12%; background: #f06292; animation-delay: 0.9s; }
.b6  { width: 16px; height: 16px; left: 54%; top: 55%; background: #ce93d8; animation-delay: 1.1s; }
.b7  { width: 24px; height: 24px; left: 66%; top: 25%; background: #ff8a65; animation-delay: 1.3s; }
.b8  { width: 20px; height: 20px; left: 76%; top: 72%; background: #4dd0e1; animation-delay: 1.5s; }
.b9  { width: 26px; height: 26px; left: 86%; top: 42%; background: #e57373; animation-delay: 1.7s; }
.b10 { width: 14px; height: 14px; left: 94%; top: 15%; background: #aed581; animation-delay: 1.9s; }
.b11 { width: 20px; height: 20px; left: 8%; top: 45%; background: #ba68c8; animation-delay: 2.1s; }
.b12 { width: 16px; height: 16px; left: 40%; top: 88%; background: #4fc3f7; animation-delay: 2.3s; }
.b13 { width: 24px; height: 24px; left: 60%; top: 6%; background: #ffb74d; animation-delay: 2.5s; }
.b14 { width: 18px; height: 18px; left: 80%; top: 52%; background: #7986cb; animation-delay: 2.7s; }
.b15 { width: 22px; height: 22px; left: 22%; top: 22%; background: #ff8a80; animation-delay: 2.9s; }
.b16 { width: 14px; height: 14px; left: 70%; top: 82%; background: #80cbc4; animation-delay: 3.1s; }
.b17 { width: 20px; height: 20px; left: 48%; top: 48%; background: #ffcc80; animation-delay: 3.3s; }
.b18 { width: 16px; height: 16px; left: 88%; top: 6%; background: #b39ddb; animation-delay: 3.5s; }
.b19 { width: 18px; height: 18px; left: 18%; top: 6%; background: #80deea; animation-delay: 3.7s; }
.b20 { width: 22px; height: 22px; left: 58%; top: 38%; background: #ef9a9a; animation-delay: 3.9s; }

@keyframes bPopOverlayFade {
    0% { opacity: 1; }
    50% { opacity: 1; }
    80% { opacity: 0.3; }
    100% { opacity: 0; }
}

@keyframes bubblePop {
    0% { opacity: 0; transform: scale(0.2); }
    20% { opacity: 1; transform: scale(1.2); }
    40% { opacity: 0.9; transform: scale(1); }
    70% { opacity: 0.6; transform: scale(1.8); }
    100% { opacity: 0; transform: scale(2.5); }
}

@media (max-width: 767px) {
    .postSection .post-banner {
        max-height: none;
        height: auto;
        object-fit: initial;
    }

    .myContact {
        width: 100%;
        float: none;
        height: auto;
        margin-top: 20px;
    }

    .myContact table {
        display: block;
        margin-left: 0;
        width: 100%;
    }

    .myContact tbody {
        display: block;
        width: 100%;
    }

    .myContact tr {
        display: flex;
        align-items: center;
        gap: 10px;
        width: 100%;
        box-sizing: border-box;
        padding: 8px 0;
    }

    .myContact td {
        display: block;
        padding-bottom: 0;
    }

    .myContact td:first-child {
        flex-shrink: 0;
    }

    .myContact td:last-child {
        flex: 1;
        min-width: 0;
    }

    .myContact img {
        margin-top: 0;
        margin-right: 0;
        width: 40px;
        height: 40px;
    }

    .myForm {
        width: 100%;
        float: none;
        height: auto;
        margin-bottom: 20px;
    }

    .myForm input,
    .myForm textarea {
        width: 100%;
    }

    .myForm button {
        max-width: 100%;
    }

    .embedYouTube {
        margin-bottom: 12px;
    }
}

/* iPad Pro 13-inch (M4) — 1032x1376, iPad Air 13-inch (M2) — 1024x1366, Galaxy Tab S11 Ultra — 986x */
@media (min-width: 855px) and (max-width: 1032px) {
    .site-logo {
        max-height: 60px;
    }
}

/* Blackberry Priv (854x480), iPad Pro 11-inch (M4) — 834x1210, iPad Air 11-inch (M2) / iPad (10th Gen) — 820x1180, iPad mini (6th Gen) — 744x1133, Galaxy Tab S11 / S10+ / S10 FE+ — 800x */
@media (min-width: 535px) and (max-width: 854px) {
    .site-logo {
        max-height: 58px;
    }

    .top-menu-bar .menu li a {
        font-size: 14px;
        padding: 6px 9px;
    }

    .myContainer {
        padding: 0 11px;
    }

    .postSection {
        padding: 0 13px;
    }

    .footerSection {
        padding: 0 13px;
    }
}

/* Sony Xperia Z4 (534x854) */
@media (min-width: 505px) and (max-width: 534px) {
    .site-logo {
        max-height: 56px;
    }

    .top-menu-bar .menu li a {
        font-size: 14px;
        padding: 6px 8px;
    }

    .myContainer {
        padding: 0 10px;
    }

    .postSection {
        padding: 0 12px;
    }

    .footerSection {
        padding: 0 12px;
    }
}

/* Blackberry Passport (504x504) */
@media (min-width: 481px) and (max-width: 504px) {
    .site-logo {
        max-height: 54px;
    }

    .top-menu-bar .menu li a {
        font-size: 14px;
        padding: 6px 7px;
    }

    .myContainer {
        padding: 0 9px;
    }

    .postSection {
        padding: 0 11px;
    }

    .footerSection {
        padding: 0 11px;
    }
}

/* Samsung Galaxy S20/S20+/S20 Ultra (480x1067) */
@media (min-width: 433px) and (max-width: 480px) {
    .site-logo {
        max-height: 52px;
    }

    .top-menu-bar .menu li a {
        font-size: 14px;
        padding: 6px 6px;
    }

    .myContainer {
        padding: 0 8px;
    }

    .postSection {
        padding: 0 10px;
    }

    .footerSection {
        padding: 0 10px;
    }
}

/* Google Pixel, Pixel XL (411x731), Motorola Nexus 6 (412x690), Apple iPhone 6+/6s+/7+/8+ (414x736), Blackberry Classic Non Camera (427x240), Apple iPhone 12 Pro Max (428x926), Microsoft Lumia 1520 (432x768) */
@media (min-width: 401px) and (max-width: 432px) {
    .site-logo {
        max-height: 50px;
    }

    .top-menu-bar .menu li a {
        font-size: 14px;
        padding: 6px 5px;
    }

    .myContainer {
        padding: 0 7px;
    }

    .postSection {
        padding: 0 9px;
    }

    .footerSection {
        padding: 0 9px;
    }
}

/* Samsung Galaxy Note (400x640) */
@media (min-width: 394px) and (max-width: 400px) {
    .site-logo {
        max-height: 48px;
    }

    .top-menu-bar .menu li a {
        font-size: 13px;
        padding: 6px 4px;
    }

    .myContainer {
        padding: 0 6px;
    }

    .postSection {
        padding: 0 8px;
    }

    .footerSection {
        padding: 0 8px;
    }
}

/* Xiaomi Redmi Note 5 (393x786) */
@media (min-width: 391px) and (max-width: 393px) {
    .site-logo {
        max-height: 48px;
    }

    .top-menu-bar .menu li a {
        font-size: 13px;
        padding: 6px 4px;
    }

    .myContainer {
        padding: 0 6px;
    }

    .postSection {
        padding: 0 8px;
    }

    .footerSection {
        padding: 0 8px;
    }
}

/* Blackberry Classic (390x390) */
@media (min-width: 385px) and (max-width: 390px) {
    .site-logo {
        max-height: 48px;
    }

    .top-menu-bar .menu li a {
        font-size: 13px;
        padding: 6px 4px;
    }

    .myContainer {
        padding: 0 6px;
    }

    .postSection {
        padding: 0 8px;
    }

    .footerSection {
        padding: 0 8px;
    }
}

/* Blackberry Z10, LG Nexus 4, LG Optimus G (384x640) */
@media (min-width: 376px) and (max-width: 384px) {
    .site-logo {
        max-height: 46px;
    }

    .top-menu-bar .menu li a {
        font-size: 13px;
        padding: 6px 3px;
    }

    .myContainer {
        padding: 0 5px;
    }

    .postSection {
        padding: 0 7px;
    }

    .footerSection {
        padding: 0 7px;
    }
}

/* Apple iPhone 6/6s/7/8 (375x667), iPhone X/XS/11 Pro (375x812) */
@media (min-width: 361px) and (max-width: 375px) {
    .site-logo {
        max-height: 44px;
    }

    .top-menu-bar .menu li a {
        font-size: 13px;
        padding: 6px 2px;
    }

    .myContainer {
        padding: 0 4px;
    }

    .postSection {
        padding: 0 6px;
    }

    .footerSection {
        padding: 0 6px;
    }
}

/* Samsung Galaxy S8/S8+/S9/S9+/S10/S10+, Note 8/9/10, and other 360px-wide devices */
@media (max-width: 360px) {
    .site-logo {
        max-height: 40px;
    }

    .top-menu-bar .menu li a {
        font-size: 12px;
        padding: 6px 0;
    }

    .myContainer {
        padding: 0 3px;
    }

    .postSection {
        padding: 0 5px;
    }

    .footerSection {
        padding: 0 5px;
    }
}

/* Print styles — hide non-essential elements when printing */
#printCopyright { display: none; }

@media print {
    .simple-header,
    .top-menu-bar,
    .site-search-bar,
    .skip-link,
    #chatbotIcon,
    #chatbot-popup,
    #backToTopBtn,
    #consent-banner,
    .inline-social-share,
    .embedYouTube,
    .site-logo-link,
    #hashtag-cloud,
    #hashtag-panel,
    .post-panel-row,
    #hashtags,
    #postPanel,
    #postPanel:has(.post-panel-row) {
        display: none !important;
    }

    .myContainer {
        padding: 0 !important;
        margin: 0 !important;
        max-width: none !important;
        box-shadow: none !important;
        background: none !important;
        border-radius: 0 !important;
    }

    .myContainer::after {
        display: none !important;
    }

    .postSection {
        padding: 0 !important;
    }

    .footerContainer {
        display: none !important;
    }

    #printCopyright {
        display: block !important;
        text-align: center !important;
        font-size: 10pt !important;
        margin-top: 24px !important;
        padding-top: 8px !important;
        border-top: 1px solid #999 !important;
        color: #333 !important;
    }
}

/* Comment lines overlay animation for microsoft-access-commenting banner */
.commenting-banner-container {
    position: relative;
    display: inline-block;
    width: 100%;
    max-width: 950px;
}

.comment-overlay {
    position: absolute;
    top: 0;
    right: 0;
    width: 50%;
    height: 100%;
    pointer-events: none;
    overflow: hidden;
}

.comment-line {
    position: absolute;
    left: calc(12% + 30px);
    height: 3px;
    border-radius: 2px;
    background: rgba(255, 255, 255, 0.55);
}

.comment-line::before {
    content: "//";
    position: absolute;
    left: -24px;
    top: -7px;
    font-family: Consolas, "Courier New", monospace;
    font-size: 13px;
    color: rgba(255, 255, 255, 0.7);
    font-weight: bold;
}

.cl1 { top: 15%; width: 65%; animation: commentFade 3.2s ease-in-out infinite; }
.cl2 { top: 30%; width: 45%; animation: commentFade 2.7s ease-in-out infinite 0.8s; }
.cl3 { top: 45%; width: 70%; animation: commentFade 3.8s ease-in-out infinite 1.5s; }
.cl4 { top: 60%; width: 35%; animation: commentFade 2.4s ease-in-out infinite 2.1s; }
.cl5 { top: 75%; width: 55%; animation: commentFade 3.5s ease-in-out infinite 0.3s; }

@keyframes commentFade {
    0%, 100% { opacity: 0; }
    20%, 80% { opacity: 1; }
}

/* Black hole reveal effect for populate-database banner */
.blackhole-wrapper {
    position: relative;
    display: block;
    margin: 0 0 20px 0;
    overflow: hidden;
    background: #000;
}

.blackhole-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
}

.blackhole-wrapper::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 2;
    pointer-events: none;
    background: #000;
    mask: radial-gradient(circle at center, transparent 30%, #000 31%);
    mask-size: 0% 0%;
    mask-repeat: no-repeat;
    mask-position: center;
    animation: blackholeReveal 2.5s cubic-bezier(0.15, 0.85, 0.25, 1) forwards;
}

@keyframes blackholeReveal {
    0% { mask-size: 0% 0%; }
    100% { mask-size: 400% 400%; }
}

.flag-unfurl-wrapper {
    position: relative;
    display: block;
    overflow: hidden;
    margin: 0 0 20px 0;
}

.flag-unfurl-wrapper .post-banner {
    margin: 0 !important;
    display: block;
    width: 100%;
    transform-origin: left center;
    animation: flagUnfurl 3.5s cubic-bezier(0.22, 1, 0.36, 1) both !important;
}

@keyframes flagUnfurl {
    0% {
        clip-path: inset(0 100% 0 0);
        transform: scaleX(0.3) skewX(-8deg);
        filter: brightness(0.6);
    }
    15% {
        clip-path: inset(0 55% 0 0);
        transform: scaleX(1.15) skewX(4deg);
        filter: brightness(0.8);
    }
    30% {
        clip-path: inset(0 35% 0 0);
        transform: scaleX(0.9) skewX(-3deg);
        filter: brightness(0.9);
    }
    45% {
        clip-path: inset(0 20% 0 0);
        transform: scaleX(1.05) skewX(2deg);
        filter: brightness(0.95);
    }
    60% {
        clip-path: inset(0 10% 0 0);
        transform: scaleX(0.97) skewX(-1deg);
        filter: brightness(1);
    }
    75% {
        clip-path: inset(0 4% 0 0);
        transform: scaleX(1.02) skewX(0.5deg);
    }
    90% {
        clip-path: inset(0 1% 0 0);
        transform: scaleX(0.99) skewX(-0.2deg);
    }
    100% {
        clip-path: inset(0 0% 0 0);
        transform: scaleX(1) skewX(0deg);
        filter: brightness(1);
    }
}

