PageSourceSearch

https://luxexpose.com/

html luxexpose.com collected 2026-10-02 05:03:46 UTC 11,687 bytes, 166 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <meta charset="UTF-8" />
5    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6    
6<script>
7      // Canonical-host guard: the default Lovable hostname is used by Cloudflare
8      // as an internal origin, so send direct visitors to the canonical domain.
9      // Exact hostname match only — preview hosts are never redirected.
10      (function () {
11        if (window.location.hostname === 'lux-expose.lovable.app') {
12          window.location.replace(
13            'https://luxexpose.com' +
14              window.location.pathname +
15              window.location.search +
16              window.location.hash
17          );
18        }
19      })();
20    </script>
20
21    
21<script>
22      // Recovery links may be configured to return to the site root. Move a
23      // credential-bearing recovery callback before the auth client boots so
24      // it can only be consumed by the dedicated reset page.
25      (function () {
26        if (window.location.pathname === '/reset-password') return;
27        var search = new URLSearchParams(window.location.search);
28        var hash = new URLSearchParams(window.location.hash.replace(/^#/, ''));
29        var hasPkceRecovery = search.get('type') === 'recovery' && !!search.get('code');
30        var hasImplicitRecovery = hash.get('type') === 'recovery' && !!hash.get('access_token');
31        if (!hasPkceRecovery && !hasImplicitRecovery) return;
32        window.location.replace('/reset-password' + window.location.search + window.location.hash);
33      })();
34    </script>
34
35    <meta name="theme-color" content="#000000" />
36    <meta name="apple-mobile-web-app-capable" content="yes" />
37    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
38    <meta name="mobile-web-app-capable" content="yes" />
39    
40    <!-- CRITICAL: Resource Hints for LCP Performance.
41         Only genuinely critical origins are preconnected (max 4). Fonts are
42         self-hosted from this origin, so no Google Fonts origins are needed.
43         SEOHead must never add more hints at runtime. -->
44    <link rel="preconnect" href="https://ppmdgygupuzthqxfippv.supabase.co" crossorigin>
45    <link rel="preconnect" href="https://www.googletagmanager.com">
46
47    <!-- Exactly the two above-the-fold faces: Inter 400 (body/meta) and
48         Cormorant Garamond 600 (article + category H1). Every other weight is
49         loaded lazily after first paint, so no duplicate weight competes with
50         the LCP text. -->
51    <link rel="preload" as="font" type="font/woff2" href="/fonts/inter-latin-400-normal.woff2" crossorigin>
52    <link rel="preload" as="font" type="font/woff2" href="/fonts/cormorant-garamond-latin-600-normal.woff2" crossorigin>
53    
54    <!-- PWA Manifest -->
55    <link rel="manifest" href="/manifest.webmanifest" />
56    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
57    <link rel="icon" type="image/png" sizes="192x192" href="/favicon-192.png" />
58    <link rel="icon" type="image/png" sizes="512x512" href="/favicon.png" />
59    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
60    
61    <title>Lux Exposé | Private Concierge &amp; Luxury Experiences</title>
62    <meta name="description" content="Private concierge for luxury travel, villas, aviation, dining, events and rare experiences, personally reviewed and coordinated by Lux Exposé." />
63    <meta name="author" content="Lux Exposé" />
64    <!-- No hard-coded canonical here. This SPA shell is served for EVERY route,
65         so a static canonical would self-canonicalize all article/hub URLs to "/".
66         Google's guidance for client-rendered apps is to omit the source canonical
67         and let the runtime (SEOHead/Helmet) emit the correct self-canonical. -->
68
69    <!-- Google Search Console verification -->
70    <meta name="google-site-verification" content="8X8o0BSZBBY4koehU7oArvZG5rHX6b4M5jkefCMGmek" />
71
72    <!-- Open Graph / Facebook -->
73    <meta property="og:type" content="website" />
74    <meta property="og:site_name" content="Lux Exposé" />
75    <!-- og:url dedupes by property, so SEOHead replaces it per route. -->
76    <meta property="og:url" content="https://luxexpose.com/" />
77    <meta property="og:title" content="Lux Exposé | Private Concierge &amp; Luxury Experiences" />
78    <meta property="og:description" content="Private concierge for luxury travel, villas, aviation, dining, events and rare experiences, personally reviewed and coordinated by Lux Exposé." />
79    <!-- No static og:image*/twitter:image* here. This SPA shell is served for
80         EVERY route, so a hard-coded homepage social image was advertised on
81         article URLs before React mounted (Apple/iMessage previews captured it
82         and produced a split two-image collage). The homepage image now comes
83         from its runtime SEOHead; known crawlers get it from the prerender. -->
84
85    <!-- Twitter -->
86    <meta name="twitter:card" content="summary_large_image" />
87    <meta name="twitter:site" content="@luxexpose" />
88    <meta name="twitter:url" content="https://luxexpose.com/" />
89    <meta name="twitter:title" content="Lux Exposé | Private Concierge &amp; Luxury Experiences" />
90    <meta name="twitter:description" content="Private concierge for luxury travel, villas, aviation, dining, events and rare experiences, personally reviewed and coordinated by Lux Exposé." />
91    
92    <!-- CRITICAL: inline above-the-fold CSS for the shared article and category
93         templates. Keep this small: background, header space, breadcrumb,
94         metadata, H1 and the 16:9 hero reservation only. The full generated
95         stylesheet is loaded non-blockingly (see vite.config.ts) with a
96         <noscript> fallback, so this block is what prevents an unstyled flash. -->
97    <style>
98      @font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/inter-latin-400-normal.woff2') format('woff2');
98unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
99      @font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/cormorant-garamond-latin-600-normal.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
100      :root{--background:0 0% 0%;--foreground:0 0% 98%;--muted-foreground:0 0% 65%;--luxury-gold:43 74% 52%}
101      *,::before,::after{box-sizing:border-box}
102      html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:Inter,system-ui,sans-serif}
103      body{margin:0;background:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,system-ui,sans-serif}
104      img,svg{display:block;max-width:100%}
105      #root{min-height:100vh}
106      /* Pre-paint shell: emitted by the prerender edge function inside #root so
107         the real article/category H1 exists in the initial HTML. React replaces
108         it in its first commit; the geometry below matches the mounted layout. */
109      .lux-pp{padding-top:76px}
110      @media(max-width:767px){.lux-pp{padding-top:62px}}
111      .lux-pp-wrap{max-width:820px;margin:0 auto;padding:2.5rem 1.25rem 0}
112      .lux-pp-crumbs{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:hsl(var(--muted-foreground));margin:0 0 1.25rem}
113      .lux-pp-h1{font-family:'Cormorant Garamond',Georgia,serif;font-weight:600;line-height:1.08;letter-spacing:-.01em;margin:0 0 1rem;font-size:clamp(2rem,6vw,3.5rem)}
114      .lux-pp-meta{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:hsl(var(--muted-foreground));margin:0 0 2rem}
115      .lux-pp-hero{width:100%;aspect-ratio:16/9;background:hsl(0 0% 7%)}
116      /* Homepage pre-paint hero. Injected into #root at build time with the
117         content-hashed AVIF of the first cinematic slide so the LCP element
118         exists before the React bundle executes. Geometry matches the mounted
119         ImmersiveHero (full-viewport, object-cover) so React's first commit
120         swaps it without any layout shift. */
121      .lux-hero-pp{position:absolute;inset:0;height:100vh;overflow:hidden;background:hsl(0 0% 0%)}
122      .lux-hero-pp img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}
123    </style>
124
125    <!-- Consent Mode v2 - Must load BEFORE GTM -->
126    
126<script>
127      (function(w,d){
128        w.dataLayer=w.dataLayer||[];
129        w.gtag=function(){w.dataLayer.push(arguments);}
130        w.gtag('consent','default',{
131          'ad_storage':'denied',
132          'analytics_storage':'denied',
133          'ad_user_data':'denied',
134          'ad_personalization':'denied',
135          'wait_for_update':500
136        });
137      })(window,document);
138    </script>
138
139    
140    <!-- Google Tag Manager — single authoritative analytics loader.
141         Loaded immediately (no idle-callback / 2s deferral) so short visits
142         are measured. Consent Mode v2 defaults above remain "denied"; GTM runs
143         cookieless until ConsentBanner grants consent. -->
144    
144<script>
vendor: 358 bytes, lines 144-149
144
145      (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
146      new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
147      j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
148      'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
149      })(window,document,'script','dataLayer','
149GTM-M7Q344VJ
vendor: 8 bytes, lines 149-150
149');
150    
150</script>
150
151    
151<script type="module" crossorigin src="/assets/index-DqL6WUeV.js"></script>
151
152    <link rel="modulepreload" crossorigin href="/assets/vendor-core-CQ8qaKpM.js">
153    <link rel="modulepreload" crossorigin href="/assets/vendor-ui-4fpAmGSB.js">
154    <link rel="modulepreload" crossorigin href="/assets/vendor-db-CAUBq_ny.js">
155    <link rel="preload" as="style" href="/assets/index-BQT9Ryho.css" crossorigin  onload="this.onload=null;this.rel='stylesheet'">
156  <noscript><link rel="stylesheet" href="/assets/index-BQT9Ryho.css"></noscript><link rel="preload" as="image" type="image/avif" imagesrcset="/assets/hero-private-jet-640-CfrdhOHZ.avif 640w, /assets/hero-private-jet-1280-CBbeumpp.avif 1280w, /assets/hero-private-jet-1920-C9wsoF1Y.avif 1920w" imagesizes="100vw" fetchpriority="high"><meta property="og:image" content="https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/lovp_63ewpmnxqz9x48r44bacnvh85w/08e9834fd4a744ee7d755d1922cc2da8_1790875599293.png"><meta name="twitter:image" content="https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/lovp_63ewpmnxqz9x48r44bacnvh85w/08e9834fd4a744ee7d755d1922cc2da8_1790875599293.png"></head>
157
158  <body>
159    <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 159-160
159
160    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
160GTM-M7Q344VJ
vendor: 96 bytes, lines 160-163
160"
161    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
162    
163    
163<div id="root"><div class="lux-hero-pp" aria-hidden="true"><img src="/assets/hero-private-jet-1280-CBbeumpp.avif" srcset="/assets/hero-private-jet-640-CfrdhOHZ.avif 640w, /assets/hero-private-jet-1280-CBbeumpp.avif 1280w, /assets/hero-private-jet-1920-C9wsoF1Y.avif 1920w" sizes="100vw" alt="" width="1920" height="1080" fetchpriority="high" decoding="async"></div></div>
164  
164<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"4cbf81dfbcbb440b921b572c9f13ee8c","r":1,"spa":2}' crossorigin="anonymous"></script>
164
165</body>
166</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.