/* ==========================================================================
   Homepage - Hero & Performance Overview Dashboard
   ========================================================================== */

.hero{position:relative;color:var(--white);overflow:hidden;min-height:640px;display:flex;align-items:center;}
.hero-bg{position:absolute;top:0;left:0;right:0;bottom:0;background-size:cover;background-position:center;z-index:0;}
.hero--dusk .hero-bg{background-image:url('/images/storage-facility-hero-sunset.jpg');}
.hero--dawn .hero-bg{background-image:url('/images/storage-facility-hero-dawn.jpg');}
.hero-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;
    background:linear-gradient(100deg, rgba(0,31,49,.94) 0%, rgba(0,31,49,.82) 32%, rgba(0,31,49,.35) 60%, rgba(0,31,49,.1) 100%);}

/* Dust motes - faint drifting particles over the photo */
.hero-dust{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;pointer-events:none;overflow:hidden;}
.dust-mote{position:absolute;border-radius:50%;background:#fff;opacity:0;}
.dust-mote:nth-child(1){width:3px;height:3px;left:22%;top:35%;animation-duration:22s;animation-delay:0s;}
.dust-mote:nth-child(2){width:2px;height:2px;left:68%;top:50%;animation-duration:26s;animation-delay:5s;}
.dust-mote:nth-child(3){width:2.5px;height:2.5px;left:45%;top:28%;animation-duration:19s;animation-delay:11s;}
.dust-mote:nth-child(4){width:2px;height:2px;left:80%;top:60%;animation-duration:24s;animation-delay:8s;}

.hero-inner{position:relative;z-index:2;display:grid;grid-template-columns:minmax(0,560px) minmax(0,460px);gap:48px;align-items:center;padding:90px 0;}
.hero-content{max-width:560px;}
.hero-eyebrow{color:var(--teal-300);text-transform:uppercase;letter-spacing:2px;font-size:.85rem;font-weight:700;margin-bottom:18px;}
.hero-content h1{font-size:2.85rem;font-weight:800;line-height:1.15;margin-bottom:18px;}
.hero-tagline{font-size:1.25rem;font-weight:600;margin-bottom:20px;color:var(--gray-300);}
.hero-tagline .accent{color:var(--amber-500);}
.hero-content p.hero-desc{font-size:1.05rem;color:var(--gray-300);margin-bottom:34px;max-width:500px;}
.hero-actions{display:flex;gap:16px;flex-wrap:wrap;}

/* ===== Entrance sequence (guarded by prefers-reduced-motion) =====
   Eyebrow -> headline -> tagline -> desc -> buttons -> dashboard -> KPI cards.
   Wrapped entirely in the no-preference media query so that anyone with
   reduced motion enabled just sees the final state immediately - no
   opacity:0 leaks outside this guard. */
@media (prefers-reduced-motion: no-preference){
    @keyframes heroFadeUp{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:translateY(0);}}
    @keyframes dashIn{from{opacity:0;transform:translateY(20px) scale(.97);}to{opacity:1;transform:translateY(0) scale(1);}}
    @keyframes cardIn{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
    @keyframes drawLine{to{stroke-dashoffset:0;}}
    /* (removed: pulseRing) */

    .hero-eyebrow{opacity:0;animation:heroFadeUp .6s ease-out .05s both;}
    .hero-content h1{opacity:0;animation:heroFadeUp .7s ease-out .18s both;}
    .hero-tagline{opacity:0;animation:heroFadeUp .6s ease-out .32s both;}
    .hero-content p.hero-desc{opacity:0;animation:heroFadeUp .6s ease-out .44s both;}
    .hero-actions{opacity:0;animation:heroFadeUp .6s ease-out .58s both;}

    /* Dashboard enters after a ~1.6s storytelling pause (content settles at ~0.58s,
       dashboard appears at 2.2s). Visitors see the hero image and illuminated
       SELF STORAGE sign during this window. */
    .dashboard{opacity:0;animation:dashIn .65s ease-out 2.2s both;}

    /* KPI cards stagger in after the dashboard settles (~2.85s in).
       Note: dash-head is the 1st div sibling inside .dashboard, so the
       three .dash-row elements are the 2nd/3rd/4th div children - nth-of-type
       counts by tag, not by class, so the offsets below are +1 from what
       you'd expect just counting dash-rows alone. */
    .dash-row:nth-of-type(2) .dash-card:nth-child(1){opacity:0;animation:cardIn .5s ease-out 2.85s both;}
    .dash-row:nth-of-type(2) .dash-card:nth-child(2){opacity:0;animation:cardIn .5s ease-out 2.93s both;}
    .dash-row:nth-of-type(3) .dash-card:nth-child(1){opacity:0;animation:cardIn .5s ease-out 3.01s both;}
    .dash-row:nth-of-type(3) .dash-card:nth-child(2){opacity:0;animation:cardIn .5s ease-out 3.09s both;}
    .dash-row:nth-of-type(3) .dash-card:nth-child(3){opacity:0;animation:cardIn .5s ease-out 3.17s both;}
    .dash-row:nth-of-type(3) .dash-card:nth-child(4){opacity:0;animation:cardIn .5s ease-out 3.25s both;}
    /* Chart line "draw-in" */
    .chart-draw{stroke-dashoffset:300;animation:drawLine 1.2s ease-out 2.9s forwards;}

    /* Live indicator - subtle opacity breathe only */

    /* ===== Ambient "living hero" layer (all four run continuously, none alone
       is meant to be consciously noticed) ===== */

    /* 1. Dashboard glow breathing. First version animated scale alone at
       1 -> 1.04, which I tested directly and it produced a measured ZERO
       visible pixel change on a heavily-blurred element - scaling something
       already soft-edged by 4% doesn't move its edge enough to see.
       Combining opacity with a bigger scale range instead - verified this
       combination produces a real, substantial pixel difference before
       shipping it again. */
    @keyframes dashGlowBreathe{0%,100%{transform:scale(1);opacity:.5;}50%{transform:scale(1.22);opacity:1;}}
    .dashboard::before{animation:dashGlowBreathe 8s ease-in-out infinite;}

    /* 3. Floating dust motes - faint, slow, staggered */
    @keyframes moteDrift{
        0%{transform:translateY(0) translateX(0);opacity:0;}
        15%{opacity:.14;}
        50%{transform:translateY(-26px) translateX(6px);opacity:.16;}
        85%{opacity:.05;}
        100%{transform:translateY(-46px) translateX(-4px);opacity:0;}
    }
    .dust-mote{animation:moteDrift linear infinite;}
}
/* Solid dot renders regardless of motion preference; only the animated ring above is guarded.
   Sized up and vertical-align fixed after Ron reported not being able to see it - at 7px with
   default baseline alignment it was genuinely too easy to miss next to bold title text. */
.live-dot{position:relative;display:inline-block;width:7px;height:7px;border-radius:50%;background:#4ADE80;margin-right:6px;vertical-align:middle;animation:liveBreathe 3s ease-in-out infinite;}
@keyframes liveBreathe{0%,100%{opacity:1;}50%{opacity:.55;}}

/* ===== Dashboard bloom - soft teal glow separating the glass panel from the photo ===== */
.dashboard{position:relative;}
.dashboard::before{
    content:'';position:absolute;top:-34px;right:-34px;bottom:-34px;left:-34px;z-index:-1;border-radius:30px;
    background:radial-gradient(ellipse at center, rgba(19,167,179,.75) 0%, rgba(19,167,179,.25) 45%, rgba(19,167,179,0) 75%);
    filter:blur(16px);pointer-events:none;
}

/* ===== Performance Overview Dashboard ===== */
/* Illustrative product-concept UI - figures are not a specific client's live data */
.dashboard{
    background:linear-gradient(160deg, rgba(11,48,73,.62) 0%, rgba(2,26,42,.68) 100%);
    backdrop-filter:blur(18px) saturate(160%);
    -webkit-backdrop-filter:blur(18px) saturate(160%);
    border:1px solid rgba(159,214,224,.18);
    border-radius:14px;padding:22px;
    box-shadow:0 24px 60px rgba(0,10,20,.5), inset 0 1px 0 rgba(255,255,255,.08);
}
.dash-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;}
.dash-head h2{font-size:1rem;font-weight:700;color:var(--white);display:flex;align-items:center;}
.dash-live{display:flex;align-items:center;font-size:.65rem;font-weight:700;color:rgba(255,255,255,.6);letter-spacing:1px;text-transform:uppercase;}
.dash-head .dash-icons{display:flex;gap:10px;color:rgba(255,255,255,.5);}
.dash-row{display:grid;gap:12px;margin-bottom:12px;}
.dash-row.cols-2{grid-template-columns:1fr 1fr;}
.dash-row.cols-4{grid-template-columns:repeat(4,1fr);}
.dash-card{background:rgba(20,70,100,.22);border:1px solid rgba(159,214,224,.14);border-radius:8px;padding:12px 14px;}
.dash-card .label{font-size:.68rem;color:rgba(255,255,255,.55);margin-bottom:6px;}
.dash-card .value{font-size:1.3rem;font-weight:800;color:var(--teal-300);display:flex;align-items:center;gap:4px;}
.dash-card .value.big{font-size:1.05rem;}
.dash-card .sub{font-size:.65rem;color:rgba(255,255,255,.4);margin-top:4px;}
.dash-card svg.sparkline{display:block;margin-top:6px;}
.dash-card svg[viewBox="0 0 220 90"]{display:block;margin-top:2px;}
.dash-map svg{display:block;}
.dash-card.small .value{font-size:1.1rem;color:var(--white);}
.dash-card.small .value .arrow{color:var(--teal-300);font-size:.85rem;}
.dash-map{background:rgba(20,70,100,.22);border:1px solid rgba(159,214,224,.14);border-radius:8px;padding:12px 14px;}
.dash-map .label{font-size:.68rem;color:rgba(255,255,255,.55);margin-bottom:8px;}

@media (max-width:900px){
    .hero-inner{grid-template-columns:1fr;padding:60px 0 50px;}
    .dashboard{max-width:520px;}
}
@media (max-width:768px){
    .hero{min-height:auto;}
    .hero-content h1{font-size:2.1rem;}
    .hero-overlay{background:linear-gradient(180deg, rgba(0,31,49,.55) 0%, rgba(0,31,49,.94) 55%, rgba(0,31,49,.98) 100%);}
}
@media (max-width:480px){
    .dash-row.cols-4{grid-template-columns:1fr 1fr;}
}

/* Placeholder body content marker (white space to fill in a future round) */
.content-placeholder{padding:80px 0;text-align:center;color:#9aa8ae;background:var(--gray-100);border-top:1px dashed var(--gray-300);border-bottom:1px dashed var(--gray-300);}

/* ==========================================================================
   Hero Transition Panel - Floating Executive Summary
   ========================================================================== */
.hero-curve{display:none;}

.value-props{
    position:relative;z-index:4;
    background:radial-gradient(ellipse 80% 100% at 50% 45%, #0E4F6A 0%, #0A3B54 40%, #08293A 100%);
    padding:58px 0;margin-top:-52px;
    max-width:76%;margin-left:auto;margin-right:auto;
    border-radius:22px;
    border:1px solid rgba(19,167,179,.12);
    box-shadow:0 20px 60px rgba(0,31,49,.30), 0 6px 20px rgba(0,31,49,.15);
}
.value-props-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0;position:relative;z-index:1;}
.value-prop{display:flex;align-items:flex-start;gap:24px;padding:16px 36px;position:relative;border-radius:10px;transition:background .22s ease;}
.value-prop:hover{background:rgba(255,255,255,.04);}
.value-prop:not(:last-child)::after{
    content:'';position:absolute;top:4px;bottom:4px;right:0;width:1px;
    background:rgba(255,255,255,.12);
}
.value-prop::before{
    content:'';position:absolute;top:0;left:16px;right:16px;height:2px;
    background:var(--teal-500);border-radius:2px;transform:scaleX(0);
    transition:transform .25s ease;transform-origin:center;
}
.value-prop:hover::before{transform:scaleX(1);}
.value-prop:first-child{padding-left:20px;}
.value-prop:last-child{padding-right:20px;}
.vp-icon{flex-shrink:0;margin-top:2px;transition:transform .22s ease,filter .22s ease;}
.value-prop:hover .vp-icon{transform:scale(1.08);filter:drop-shadow(0 0 6px rgba(111,217,224,.5));}
.vp-text h3{color:var(--white);font-size:1.2rem;font-weight:800;letter-spacing:.5px;text-transform:uppercase;margin-bottom:8px;transition:color .22s ease;}
.value-prop:hover .vp-text h3{color:var(--teal-300);}
.vp-text h3.vp-heading-amber{color:var(--amber-500);}
.value-prop:hover .vp-text h3.vp-heading-amber{color:#FFB84D;}
.vp-text p{color:var(--gray-300);font-size:.92rem;line-height:1.5;margin:0;}
.vp-readmore{color:var(--amber-500);font-weight:700;text-decoration:none;white-space:nowrap;transition:color .2s,padding-left .22s ease;}
.vp-readmore:hover{color:var(--teal-300);}
.value-prop:hover .vp-readmore{padding-left:5px;}

@media (max-width:900px){
    .value-props{max-width:100%;border-radius:0;margin-top:-32px;border:none;}
    .value-props-grid{grid-template-columns:1fr;gap:28px;}
    .value-prop{padding:0 20px;gap:20px;}
    .value-prop:not(:last-child)::after{display:none;}
    .value-prop:not(:last-child){padding-bottom:24px;border-bottom:1px solid rgba(255,255,255,.14);}
    .value-prop::before{display:none;}
}

@media (prefers-reduced-motion: no-preference){
    /* Panel entrance: fades up after dashboard settles */
    @keyframes panelEnter{from{opacity:0;transform:translateY(20px);}to{opacity:1;transform:translateY(0);}}
    .value-props{opacity:0;animation:panelEnter .7s ease-out 3.5s both;}

    /* Idle icon animations: independent, unsynchronized, subtle. Panel stays still. */
    @keyframes iconFloat{0%,90%,100%{transform:translateY(0);}95%{transform:translateY(-2px);}}
    @keyframes iconSettle{0%,88%,100%{transform:translateY(0);}92%{transform:translateY(-1.5px);}}
    @keyframes iconBars{0%,85%,100%{transform:translateY(0);}90%{transform:translateY(-1px);}95%{transform:translateY(0);}}

    .vp-icon--rankings{animation:iconFloat 13s ease-in-out infinite;}
    .vp-icon--rentals{animation:iconSettle 15s ease-in-out 3s infinite;}
    .vp-icon--revenue{animation:iconBars 12s ease-in-out 7s infinite;}

    .value-prop:hover .vp-icon--rankings,
    .value-prop:hover .vp-icon--rentals,
    .value-prop:hover .vp-icon--revenue{animation:none;}
}
