/* ============================================================
   app.css — stylesheet orchestrator.

   The @layer declaration is the single source of truth for CSS
   cascade order in this project. Anything added later to a higher
   layer wins over everything in a lower layer, regardless of
   selector specificity. That is how we stop fighting !important.

   Order (lowest priority → highest):
     legacy    — Webflow export, normalize, jev-and-matt.webflow,
                 the style.css monolith. Frozen. Do not add to.
     base      — Our design tokens, shared utilities, resets on top
                 of legacy.
     blocks    — One file per SilverStripe elemental block.
                 All new styling lives here.
     page      — Page-level styling when a block isn't the right home.
                 Should be rare.
     overrides — Last-resort patches. Should stay tiny.

   See themes/JM/css/README.md for conventions.

   NOTE on cache busting: SilverStripe's Requirements framework only
   cache-busts the orchestrator file. When you change an @import'd
   file, bump the ?v= query string on its line below (or on the
   `<% require themedCSS('app') %>` call in _HeadCode.ss). Acceptable
   tradeoff until a build pipeline lands.
   ============================================================ */

@layer legacy, base, blocks, page, overrides;

/* Legacy — frozen. */
@import url('normalize.css') layer(legacy);
@import url('webflow.css') layer(legacy);
@import url('fa-all.min.css') layer(legacy);
@import url('jev-and-matt.webflow.css') layer(legacy);
@import url('magnific-popup.css') layer(legacy);
@import url('style.css?v=4') layer(legacy);

/* Base — tokens and shared primitives. */
@import url('base/tokens.css?v=4') layer(base);
@import url('base/typography.css?v=5') layer(base);
@import url('base/card.css?v=3') layer(base);
@import url('base/buttons.css?v=2') layer(base);

/* Blocks — one file per elemental block. */
@import url('blocks/videobanner.css?v=3') layer(blocks);
@import url('blocks/appraisal.css?v=5') layer(blocks);
@import url('blocks/property-specs.css?v=11') layer(blocks);
@import url('blocks/content.css?v=3') layer(blocks);
@import url('blocks/long-form.css?v=14') layer(blocks);
@import url('blocks/cta.css?v=1') layer(blocks);
@import url('blocks/faq.css?v=1') layer(blocks);
@import url('blocks/values.css?v=7') layer(blocks);
@import url('blocks/stats.css?v=6') layer(blocks);
@import url('blocks/case-studies.css?v=1') layer(blocks);
@import url('blocks/footer.css?v=4') layer(blocks);
@import url('blocks/image-and-text.css?v=13') layer(blocks);
@import url('blocks/video-carousel.css?v=2') layer(blocks);

/* Pages — page-level styling when a block isn't the right home. */
@import url('pages/blog.css?v=4') layer(page);
@import url('pages/listings.css?v=9') layer(page);
@import url('pages/header.css?v=1') layer(page);
@import url('pages/blog-post.css?v=60') layer(page);
@import url('pages/blog-aos.css?v=1') layer(page);

/* Overrides — last-resort patches. */
@import url('overrides/no-aos.css?v=1') layer(overrides);

/* SilverStripe's development stylesheet adds an unlayered global h2
   margin. Keep the listing detail stack's rhythm identical in dev and
   production by resetting that one scoped heading. */
.blog-post__listing-ad-details .listing-tile-heading {
    margin: 0;
}
