{"id":7457,"date":"2026-09-07T21:22:40","date_gmt":"2026-09-08T01:22:40","guid":{"rendered":"https:\/\/www.visionpros.com\/pro\/?p=7457"},"modified":"2026-09-07T21:22:42","modified_gmt":"2026-09-08T01:22:42","slug":"discover-your-eyewear-personality","status":"publish","type":"post","link":"https:\/\/www.visionpros.com\/pro\/discover-your-eyewear-personality\/","title":{"rendered":"Discover Your Eyewear Personality"},"content":{"rendered":"<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@100;200;300;400;500;600;700;800;900\" \/>\n<p class=\"has-text-align-center has-medium-font-size wp-block-paragraph\" style=\"font-family:&#039;Roboto&#039; !important\">Your everyday choices have a personality all their own. Choose the contact lens or sunglasses quiz, answer nine playful questions, and discover which character shares your vibe!<\/p>\n\n\n\n<!-- ============================================================\n     VisionPros: \"Find Your Eyewear Vibe\" Personality Quiz\n     Single-file widget for WP plain editor (style\/script allowed)\n     Scoped under #vpq-root, safe to paste alongside other widgets\n     Two paths: Sunglasses (\"Which Shade Are You?\") and\n     Contact Lenses (\"Which Lens Are You?\"). Shared engine below.\n     ============================================================ -->\n<div id=\"vpq-root\" class=\"vpq\">\n\n  <!-- SCREEN 1: FORK LANDING -->\n  <section class=\"vpq-screen vpq-fork\" data-screen=\"fork\">\n    <div class=\"vpq-fork-grid\">\n\n      <div class=\"vpq-fork-card\">\n        <div class=\"vpq-hero vpq-hero--sun\" style=\"background-image:url('https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Sunglasses-Cover.png');\" role=\"img\" aria-label=\"Eight illustrated animal characters, each wearing a different style of sunglasses\">\n          <div class=\"vpq-hero-content\">\n            <h2 class=\"vpq-fork-title\">Which Frame Are You?<\/h2>\n            <button type=\"button\" class=\"vpq-btn vpq-btn-primary vpq-btn--sun\" data-action=\"start\" data-quiz=\"sunglasses\">Start the Quiz<\/button>\n          <\/div>\n        <\/div>\n        <p class=\"vpq-fork-eyebrow\">Nine quick questions. One sunglasses soulmate.<\/p>\n        <p class=\"vpq-fork-intro\">Answer a handful of everyday scenarios and we&#8217;ll match you with the frame style and character that fit your vibe.<\/p>\n      <\/div>\n\n      <div class=\"vpq-fork-card\">\n        <div class=\"vpq-hero vpq-hero--con\" style=\"background-image:url('https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Contact-Lens-Cover.png');\" role=\"img\" aria-label=\"Eight illustrated animal characters representing contact lens personalities\">\n          <div class=\"vpq-hero-content\">\n            <h2 class=\"vpq-fork-title\">Which Lens Are You?<\/h2>\n            <button type=\"button\" class=\"vpq-btn vpq-btn-primary vpq-btn--con\" data-action=\"start\" data-quiz=\"contacts\">Start the Quiz<\/button>\n          <\/div>\n        <\/div>\n        <p class=\"vpq-fork-eyebrow\">Nine quick questions. One lens soulmate.<\/p>\n        <p class=\"vpq-fork-intro\">Answer a handful of everyday scenarios and we&#8217;ll match you with the lens type and character that fit your vibe.<\/p>\n      <\/div>\n\n    <\/div>\n  <\/section>\n\n  <!-- SCREEN 2: QUESTION (template, filled by JS) -->\n  <section class=\"vpq-screen vpq-question\" data-screen=\"question\" hidden=\"\">\n    <div class=\"vpq-card\">\n      <div class=\"vpq-trail\" role=\"progressbar\" aria-valuemin=\"1\" aria-valuemax=\"9\" aria-valuenow=\"1\" aria-label=\"Question 1 of 9\">\n        <span class=\"vpq-dot\"><\/span><span class=\"vpq-dot\"><\/span><span class=\"vpq-dot\"><\/span>\n        <span class=\"vpq-dot\"><\/span><span class=\"vpq-dot\"><\/span><span class=\"vpq-dot\"><\/span>\n        <span class=\"vpq-dot\"><\/span><span class=\"vpq-dot\"><\/span><span class=\"vpq-dot\"><\/span>\n      <\/div>\n      <div class=\"vpq-scenario-frame\">\n        <img decoding=\"async\" data-src=\"\" class=\"vpq-scenario-img lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\"   loading=\"lazy\"><noscript><img decoding=\"async\" class=\"vpq-scenario-img\" src=\"\" alt=\"\" width=\"800\" height=\"400\" loading=\"lazy\"><\/noscript>\n      <\/div>\n      <h3 class=\"vpq-question-text\"><\/h3>\n      <div class=\"vpq-options\"><\/div>\n    <\/div>\n  <\/section>\n\n  <!-- SCREEN 3: CALCULATING -->\n  <section class=\"vpq-screen vpq-loading\" data-screen=\"loading\" hidden=\"\">\n    <div class=\"vpq-card vpq-loading-card\">\n      <div class=\"vpq-spinner\" aria-hidden=\"true\"><\/div>\n      <p class=\"vpq-loading-text\"><\/p>\n    <\/div>\n  <\/section>\n\n  <!-- SCREEN 4: RESULT (template, filled by JS) -->\n  <section class=\"vpq-screen vpq-result\" data-screen=\"result\" hidden=\"\">\n    <div class=\"vpq-card vpq-result-card\">\n      <div class=\"vpq-portrait-frame\">\n        <img decoding=\"async\" data-src=\"\" class=\"vpq-portrait lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\"   loading=\"lazy\"><noscript><img decoding=\"async\" class=\"vpq-portrait\" src=\"\" alt=\"\" width=\"240\" height=\"240\" loading=\"lazy\"><\/noscript>\n      <\/div>\n      <p class=\"vpq-result-kicker\">Your vibe is the same as<\/p>\n      <h2 class=\"vpq-result-name\"><\/h2>\n      <p class=\"vpq-result-blurb\"><\/p>\n\n      <div class=\"vpq-products\">\n        <p class=\"vpq-products-label\">Your matches<\/p>\n        <div class=\"vpq-products-row\"><\/div>\n      <\/div>\n\n      <a class=\"vpq-btn vpq-btn-primary vpq-shop-btn\" href=\"#\" target=\"_blank\" rel=\"noopener\"><\/a>\n      <button type=\"button\" class=\"vpq-btn vpq-btn-ghost\" data-action=\"retake\">Retake this Quiz<\/button>\n      <button type=\"button\" class=\"vpq-btn vpq-btn-ghost\" data-action=\"other\">Try the Other Quiz<\/button>\n    <\/div>\n  <\/section>\n\n<\/div>\n\n<style>\n  \/* ---------- Design tokens (scoped to this widget only) ---------- *\/\n  #vpq-root {\n    --vpq-cream: #FBF3E3;\n    --vpq-card: #FFFFFF;\n    --vpq-navy: #0E4773;\n    --vpq-blue: #3176B4;\n    --vpq-sky: #7BA9D1;\n    --vpq-pale: #EBF4FD;\n    --vpq-ink: #22303C;\n    --vpq-line: #E4D9C2;\n    --vpq-shadow: 0 10px 30px rgba(14, 71, 115, 0.10);\n    \/* accent swaps based on active quiz, default sunglasses amber *\/\n    --vpq-accent: #E8A33D;\n    --vpq-accent-dark: #C9821F;\n    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    color: var(--vpq-ink);\n    box-sizing: border-box;\n    max-width: 1200px;\n    margin: 2.5rem auto;\n    padding: 0 1.5rem;\n  }\n  #vpq-root[data-active=\"contacts\"] { --vpq-accent: #3FB6A8; --vpq-accent-dark: #2C8F84; }\n  #vpq-root *, #vpq-root *::before, #vpq-root *::after { box-sizing: inherit; }\n\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Baloo+2:wght@500;600;700;800&family=Inter:wght@400;500;600;700&display=swap');\n\n  \/* ---------- Card shell ---------- *\/\n  .vpq-card {\n    background: var(--vpq-cream);\n    border: 1px solid var(--vpq-line);\n    border-radius: 28px;\n    padding: 2.75rem 2.5rem;\n    box-shadow: var(--vpq-shadow);\n    text-align: center;\n    animation: vpq-fade-in .45s ease both;\n    max-width: 800px;\n    margin: 0 auto;\n    font-size: 1.125rem;\n  }\n  @keyframes vpq-fade-in {\n    from { opacity: 0; transform: translateY(10px); }\n    to   { opacity: 1; transform: translateY(0); }\n  }\n  @media (prefers-reduced-motion: reduce) { .vpq-card { animation: none; } }\n\n  \/* ---------- Fork landing ---------- *\/\n  .vpq-fork-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1.5rem;\n    max-width: 1100px;\n    margin: 0 auto;\n  }\n  .vpq-fork-card {\n    background: var(--vpq-cream);\n    border: 1px solid var(--vpq-line);\n    border-radius: 24px;\n    overflow: hidden;\n    box-shadow: var(--vpq-shadow);\n  }\n  .vpq-hero {\n    width: 100%;\n    aspect-ratio: 3 \/ 2;\n    background-color: var(--vpq-cream);\n    background-size: contain;\n    background-position: center;\n    background-repeat: no-repeat;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n  .vpq-hero-content {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 0.9rem;\n    padding: 1rem 1.25rem;\n    border-radius: 18px;\n    background: radial-gradient(ellipse at center, rgba(251,243,227,0.92) 0%, rgba(251,243,227,0.78) 55%, rgba(251,243,227,0) 78%);\n    max-width: 86%;\n  }\n  .vpq-fork-title {\n    font-family: 'Baloo 2', sans-serif;\n    font-weight: 700;\n    font-size: 1.5rem;\n    color: var(--vpq-navy);\n    margin: 0;\n    line-height: 1.15;\n  }\n  .vpq-fork-eyebrow {\n    text-align: center;\n    color: var(--vpq-blue);\n    font-weight: 600;\n    font-size: 1rem;\n    margin: 1rem 0 0.4rem;\n    padding: 0 1.2rem;\n  }\n  .vpq-fork-intro {\n    text-align: center;\n    color: var(--vpq-ink);\n    font-size: 0.98rem;\n    line-height: 1.5;\n    margin: 0;\n    padding: 0 1.3rem 1.3rem;\n  }\n\n  \/* ---------- Buttons ---------- *\/\n  .vpq-btn {\n    display: inline-block;\n    font-family: 'Inter', sans-serif;\n    font-weight: 600;\n    font-size: 1.1rem;\n    padding: 0.9rem 2.1rem;\n    border-radius: 999px;\n    border: none;\n    cursor: pointer;\n    text-decoration: none;\n    transition: transform .15s ease, box-shadow .15s ease, background .15s ease;\n  }\n  .vpq-btn-primary {\n    background: var(--vpq-blue);\n    color: #fff;\n    box-shadow: 0 6px 16px rgba(49, 118, 180, 0.35);\n  }\n  .vpq-btn-primary:hover { background: var(--vpq-navy); transform: translateY(-2px); }\n  .vpq-btn-primary:focus-visible { outline: 3px solid var(--vpq-accent); outline-offset: 2px; }\n  .vpq-fork-card .vpq-btn-primary { padding: 0.65rem 1.3rem; font-size: 0.95rem; }\n  .vpq-btn-ghost {\n    display: block;\n    background: transparent;\n    border: none;\n    color: var(--vpq-blue);\n    margin: 0.6rem auto 0;\n    padding: 0.4rem 1rem;\n    font-size: 1rem;\n    text-decoration: underline;\n    text-underline-offset: 3px;\n    cursor: pointer;\n  }\n  .vpq-btn-ghost:hover { color: var(--vpq-navy); }\n  .vpq-btn-ghost:focus-visible { outline: 3px solid var(--vpq-accent); outline-offset: 2px; }\n\n  \/* ---------- Progress trail ---------- *\/\n  .vpq-trail { display: flex; justify-content: center; gap: 8px; margin-bottom: 1.5rem; }\n  .vpq-dot {\n    width: 9px; height: 9px; border-radius: 50%;\n    background: var(--vpq-line);\n    transition: background .25s ease, transform .25s ease;\n  }\n  .vpq-dot.vpq-is-filled { background: var(--vpq-accent); }\n  .vpq-dot.vpq-is-current { background: var(--vpq-blue); transform: scale(1.35); }\n\n  \/* ---------- Question screen ---------- *\/\n  .vpq-scenario-frame {\n    width: 100%;\n    aspect-ratio: 2 \/ 1;\n    border-radius: 18px;\n    overflow: hidden;\n    margin-bottom: 1.6rem;\n    border: 1px solid var(--vpq-line);\n    background: var(--vpq-pale);\n  }\n  .vpq-scenario-img { width: 100%; height: 100%; object-fit: cover; display: block; }\n  .vpq-question-text {\n    font-family: 'Baloo 2', sans-serif;\n    font-weight: 600;\n    font-size: 1.55rem;\n    color: var(--vpq-navy);\n    margin: 0 0 1.5rem;\n    line-height: 1.35;\n  }\n  .vpq-options { display: flex; flex-direction: column; gap: 0.8rem; }\n  .vpq-option {\n    display: block;\n    width: 100%;\n    text-align: left;\n    background: var(--vpq-card);\n    border: 2px solid var(--vpq-line);\n    border-radius: 14px;\n    padding: 1rem 1.3rem;\n    font-family: 'Inter', sans-serif;\n    font-size: 1.1rem;\n    color: var(--vpq-ink);\n    cursor: pointer;\n    transition: border-color .15s ease, background .15s ease, transform .1s ease;\n  }\n  .vpq-option:hover { border-color: var(--vpq-sky); background: var(--vpq-pale); }\n  .vpq-option:active { transform: scale(0.99); }\n  .vpq-option:focus-visible { outline: 3px solid var(--vpq-accent); outline-offset: 2px; }\n\n  \/* ---------- Loading ---------- *\/\n  .vpq-loading-card { padding: 3.5rem 2rem; }\n  .vpq-spinner {\n    width: 42px; height: 42px; margin: 0 auto 1.2rem;\n    border-radius: 50%;\n    border: 4px solid var(--vpq-line);\n    border-top-color: var(--vpq-blue);\n    animation: vpq-spin 0.8s linear infinite;\n  }\n  @keyframes vpq-spin { to { transform: rotate(360deg); } }\n  @media (prefers-reduced-motion: reduce) { .vpq-spinner { animation: none; border-top-color: var(--vpq-line); } }\n  .vpq-loading-text { font-family: 'Baloo 2', sans-serif; color: var(--vpq-navy); font-size: 1.3rem; margin: 0; }\n\n  \/* ---------- Result screen ---------- *\/\n  .vpq-portrait-frame {\n    width: 188px; height: 188px; margin: 0 auto 1.2rem;\n    border-radius: 50%;\n    overflow: hidden;\n    border: 4px solid var(--vpq-card);\n    box-shadow: 0 0 0 3px var(--vpq-accent);\n    background: var(--vpq-pale);\n  }\n  .vpq-portrait { width: 100%; height: 100%; object-fit: cover; display: block; }\n  .vpq-result-kicker { color: var(--vpq-blue); font-weight: 600; margin: 0 0 0.2rem; font-size: 1.1rem; }\n  .vpq-result-name {\n    font-family: 'Baloo 2', sans-serif;\n    font-weight: 800;\n    font-size: 2.7rem;\n    color: var(--vpq-navy);\n    margin: 0 0 1rem;\n    line-height: 1.1;\n  }\n  #vpq-root .vpq-result-card .vpq-result-blurb {\n    font-size: 1.125rem;\n    line-height: 1.65;\n    max-width: 34rem;\n    margin: 0 auto 1.9rem;\n    text-align: center !important;\n  }\n  .vpq-products { margin-bottom: 1.9rem; }\n  .vpq-products-label { font-weight: 600; color: var(--vpq-navy); margin: 0 0 1rem; font-size: 1.05rem; }\n  .vpq-products-row { display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap; }\n  .vpq-product {\n    background: var(--vpq-card);\n    border: 1px solid var(--vpq-line);\n    border-radius: 14px;\n    padding: 0.8rem;\n    width: 145px;\n  }\n  .vpq-product img { width: 100%; height: 80px; object-fit: contain; display: block; margin-bottom: 0.55rem; }\n  .vpq-product span { display: block; font-size: 0.86rem; line-height: 1.3; color: var(--vpq-ink); }\n  .vpq-shop-btn { display: block; margin: 0 auto; width: fit-content; }\n\n  \/* ---------- Utility ---------- *\/\n  .vpq-screen[hidden] { display: none; }\n\n  \/* ---------- Mobile ---------- *\/\n  @media (max-width: 560px) {\n    .vpq-fork-grid { grid-template-columns: 1fr; }\n    .vpq-fork-card { max-width: 520px; margin: 0 auto; }\n  }\n  @media (max-width: 480px) {\n    .vpq-card { padding: 1.6rem 1.2rem; border-radius: 20px; }\n    .vpq-question-text { font-size: 1.15rem; }\n    .vpq-result-name { font-size: 1.9rem; }\n    .vpq-product { width: 100px; }\n  }\n<\/style>\n\n<script>\n(function () {\n  var root = document.getElementById('vpq-root');\n  if (!root || root.dataset.vpqInit) return;\n  root.dataset.vpqInit = '1';\n\n  var SUN_IMG_BASE = 'https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/';\n  var CON_IMG_BASE = 'https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/';\n\n  \/* =================== SUNGLASSES QUIZ CONFIG =================== *\/\n  var SUN_QUIZ = {\n    key: 'sunglasses',\n    loadingText: 'Finding your shade\\u2026',\n    dimPairs: [['bold','subtle'], ['wild','curated'], ['classic','colorful']],\n    scoreKeys: ['bold','subtle','wild','curated','classic','colorful'],\n    questions: [\n      { img: SUN_IMG_BASE + 'Sunglasses-Question1.png',\n        text: \"A friend compliments your sunglasses out of nowhere. Your reply?\",\n        options: [\n          { t: '\"Thank you! I knew these were the pair.\"', v: { bold: 2, classic: 1 } },\n          { t: '\"Oh, thanks!\" Then I quietly change the subject.', v: { subtle: 2, classic: 1 } },\n          { t: '\"You noticed! Wait until you see the whole outfit.\"', v: { bold: 2, colorful: 1 } },\n          { t: '\"Thanks! I honestly forgot I was wearing them.\"', v: { subtle: 2, wild: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question2.png',\n        text: \"Picking an outfit for a night out, what's the deciding factor?\",\n        options: [\n          { t: 'One unforgettable piece, even if the rest stays simple', v: { bold: 2, curated: 1 } },\n          { t: 'Something polished that feels completely like me', v: { subtle: 1, curated: 2 } },\n          { t: 'Whatever lets me move, sit, and stay out without fussing', v: { subtle: 2, wild: 1 } },\n          { t: 'Whatever color or combination matches my mood that night', v: { colorful: 2, wild: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question3.png',\n        text: \"What impression do people usually get before they know you well?\",\n        options: [\n          { t: 'Confident and hard to overlook', v: { bold: 2, colorful: 1 } },\n          { t: 'Warm, calm, and easy to approach', v: { subtle: 2, colorful: 1 } },\n          { t: 'Reserved, serious, or a little intimidating', v: { bold: 1, subtle: 1, classic: 1 } },\n          { t: 'Independent and a little difficult to read', v: { subtle: 2, wild: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question4.png',\n        text: \"Free Saturday, zero plans. What actually happens?\",\n        options: [\n          { t: 'I choose a trail, beach, or day trip and head straight there', v: { wild: 2, classic: 1 } },\n          { t: 'I pick a caf\u00e9, gallery, or neighborhood I already want to explore', v: { curated: 2, colorful: 1 } },\n          { t: 'I stay close to home and decide what sounds good as the day unfolds', v: { wild: 1, curated: 1, subtle: 1 } },\n          { t: 'I finally tackle the errands, hobbies, or little plans I have been saving', v: { curated: 2, classic: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question5.png',\n        text: \"Dream vacation, pick one:\",\n        options: [\n          { t: 'Mountain air, long trails, and a cabin far from notifications', v: { wild: 2, classic: 1 } },\n          { t: 'A new city where I can experience the food, culture, and everyday rhythm', v: { wild: 1, curated: 1, colorful: 1 } },\n          { t: 'A beautiful resort with thoughtful details and absolutely no rushing', v: { curated: 2, classic: 1 } },\n          { t: 'A return to a favorite place where I already know what I love', v: { classic: 2, subtle: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question6.png',\n        text: \"Where do you feel most like yourself?\",\n        options: [\n          { t: 'Somewhere open and quiet, with more nature than people', v: { wild: 2, subtle: 1 } },\n          { t: 'In a lively neighborhood with places to discover around every corner', v: { curated: 2, bold: 1 } },\n          { t: 'In a familiar spot where I know the mood, the people, and what to expect', v: { curated: 1, classic: 2 } },\n          { t: 'At home with a few favorite people and no need to impress anyone', v: { subtle: 2, curated: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question7.png',\n        text: \"Choose the vacation photo you'd actually post:\",\n        options: [\n          { t: 'A clean, timeless portrait that could belong to any decade', v: { classic: 2, curated: 1 } },\n          { t: 'The brightest, happiest shot in the camera roll', v: { colorful: 2, bold: 1 } },\n          { t: 'A candid with imperfect framing but a story I want to remember', v: { colorful: 1, classic: 1, wild: 1 } },\n          { t: 'A wide landscape shot where the place gets all the attention', v: { classic: 2, subtle: 1, wild: 1 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question8.png',\n        text: \"A mystery gift box of sunglasses shows up. What are you hoping's inside?\",\n        options: [\n          { t: 'A timeless pair I can reach for without thinking', v: { classic: 2, subtle: 1 } },\n          { t: 'A color I would never buy for myself but secretly want to try', v: { colorful: 2, subtle: 1 } },\n          { t: 'An unusual shape that makes the whole outfit feel intentional', v: { colorful: 1, classic: 1, bold: 1 } },\n          { t: 'A durable pair made for road trips, water, or long days outside', v: { classic: 1, wild: 2 } }\n        ]},\n      { img: SUN_IMG_BASE + 'Sunglasses-Question9.png',\n        text: \"If your closet had a soundtrack, what's playing?\",\n        options: [\n          { t: 'A classic album that still sounds good from beginning to end', v: { classic: 2, curated: 1 } },\n          { t: 'A new release I have already sent to everyone I know', v: { colorful: 2, bold: 1 } },\n          { t: 'A very personal mix of old favorites, odd discoveries, and guilty pleasures', v: { classic: 1, colorful: 1, wild: 1 } },\n          { t: 'A carefully ordered playlist with a song for every mood', v: { curated: 2, colorful: 1 } }\n        ]}\n    ],\n    personas: {\n      'bold-wild-classic': {\n        name: 'Ridge', shopLabel: 'Aviator Frames',\n        blurb: \"Free Saturday? You're out the door before anyone else has finished their coffee: trailhead, coastline, doesn't matter, as long as there's dirt underfoot by noon. You don't dress to be noticed, but somehow you always are; it's less about the outfit and more about walking into a room like you already know how the day's going to go. Your style never chases a trend because it's never had to. It's been working for years, and you know it.\",\n        portrait: SUN_IMG_BASE + 'Ridge.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/aviator\/',\n        products: [\n          { name: 'Ray-Ban RB3362 - Cockpit', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/651128-angle.jpg' },\n          { name: 'John Varvatos V518', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/766472-angle.jpg' },\n          { name: 'Lucky Brand Campbell', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861223-angle.jpg' }\n        ]},\n      'bold-wild-colorful': {\n        name: 'Blaze', shopLabel: 'Oversize Frames',\n        blurb: \"You're the one who turns \\u201clet's grab coffee\\u201d into an actual adventure, usually with zero warning and a grin the whole way there. Loud colors, big frames, bigger energy. If there's a chance to make today more memorable than yesterday, you're already halfway out the door before anyone's finished the sentence. Your friends have learned to just say yes when you suggest something, because it's somehow always the best part of the week.\",\n        portrait: SUN_IMG_BASE + 'Blaze.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/oversize\/',\n        products: [\n          { name: 'Police SPL615', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861261-angle.jpg' },\n          { name: 'Chopard SCHC79', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861119-angle.jpg' },\n          { name: 'Chopard SCHC20S', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861113-angle.jpg' }\n        ]},\n      'bold-curated-classic': {\n        name: 'Onyx', shopLabel: 'Square Frames',\n        blurb: \"You don't end up at brunch by accident. Every outfit is a decision, and every decision says something. Sharp lines, clean color, zero fuss: you'd rather own a room quietly than shout your way into it, and it works every single time. People call you intimidating right up until they actually talk to you, and then they just call you the most put-together person they know.\",\n        portrait: SUN_IMG_BASE + 'Onyx.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/square\/',\n        products: [\n          { name: 'John Varvatos V601', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/327930-angle.jpg' },\n          { name: 'Converse SCO050', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861170-angle.jpg' },\n          { name: 'Coach HC8217', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861154-angle.jpg' }\n        ]},\n      'bold-curated-colorful': {\n        name: 'Vivid', shopLabel: 'Cat Eye Frames',\n        blurb: \"When a mystery gift box shows up, you're not hoping for \\u201csafe.\\u201d You want the pair that makes people stop mid-sentence and ask where you got them. Brunch, gallery opening, random Tuesday, doesn't matter: you dress like main-character energy is just your baseline setting. Subtlety was never really your language, and honestly, why would it be?\",\n        portrait: SUN_IMG_BASE + 'Vivid.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/cat+eye\/',\n        products: [\n          { name: 'Chopard SCHC82S', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861302-angle.jpg' },\n          { name: 'Versace VE4336', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861292-angle.jpg' },\n          { name: 'Carolina Herrera SHE648', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861088-angle.jpg' }\n        ]},\n      'subtle-wild-classic': {\n        name: 'Wren', shopLabel: 'Round Frames',\n        blurb: \"You've got a whole trail system memorized that most of your friends don't even know exists, and honestly, you kind of like it that way. Function over flash, always: comfortable over cute, muted tones over anything that'll clash with the woods. People might not notice when you walk into a room, but they absolutely notice when you're not there for the next hike.\",\n        portrait: SUN_IMG_BASE + 'Wren.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/round\/',\n        products: [\n          { name: 'Kate Spade KHRISTA\/S', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/806370-angle.jpg' },\n          { name: 'Versace VE4337', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/772848-angle.jpg' },\n          { name: 'Ray-Ban RB2447', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/651134-angle.jpg' }\n        ]},\n      'subtle-wild-colorful': {\n        name: 'Cove', shopLabel: 'Oval Frames',\n        blurb: \"Your dream vacation doesn't have an itinerary, just a coastline, decent weather, and zero urgency to be anywhere by a certain time. You're playful without trying and colorful without being loud about it, the kind of easygoing that makes everyone around you exhale a little. If a plan falls apart, you're already onto plan B before anyone else has noticed plan A failed.\",\n        portrait: SUN_IMG_BASE + 'Cove.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/oval\/',\n        products: [\n          { name: 'Candies CA1010', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/694804-angle.jpg' },\n          { name: 'Coach HC8215', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861151-angle.jpg' },\n          { name: 'Prada PR 63TS', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/764429-angle.jpg' }\n        ]},\n      'subtle-curated-classic': {\n        name: 'Sable', shopLabel: 'Rectangle Frames',\n        blurb: \"You've had the same coffee order for three years and you're not changing it. Why mess with something that already works. Quiet luxury isn't a phrase you'd ever actually use, it's just how you live: thin frames, clean lines, nothing that needs explaining. Less is more isn't a personality quirk for you, it's just common sense.\",\n        portrait: SUN_IMG_BASE + 'Sable.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/rectangle\/',\n        products: [\n          { name: 'John Varvatos V530', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861195-angle.jpg' },\n          { name: 'Carolina Herrera SHE752', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/861094-angle.jpg' }\n        ]},\n      'subtle-curated-colorful': {\n        name: 'Lumen', shopLabel: 'Geometric Frames',\n        blurb: \"You're the friend who notices the little things nobody else does: the good light in a coffee shop, the pastel in someone's outfit, the perfect playlist for a rainy afternoon. Your style is soft-spoken but never boring, warmth that's never had to raise its voice. People remember conversations with you long after they've forgotten who else was in the room.\",\n        portrait: SUN_IMG_BASE + 'Lumen.png',\n        link: 'https:\/\/www.visionpros.com\/sunglasses\/geometric\/',\n        products: [\n          { name: 'John Varvatos V526', img: 'https:\/\/res.cloudinary.com\/visionpros\/v3\/products\/frames\/795114-angle.jpg' }\n        ]}\n    }\n  };\n\n  \/* =================== CONTACT LENS QUIZ CONFIG =================== *\/\n  var CON_QUIZ = {\n    key: 'contacts',\n    loadingText: 'Finding your lens\\u2026',\n    dimPairs: [['daily','routine'], ['natural','transform'], ['active','chill']],\n    scoreKeys: ['daily','routine','natural','transform','active','chill'],\n    questions: [\n      { img: CON_IMG_BASE + 'Contacts-Question1.png',\n        text: \"Your fridge situation right now:\",\n        options: [\n          { t: 'A few fresh favorites that get replaced as soon as they run out', v: { daily: 2, active: 1 } },\n          { t: 'A dependable weekly shop with the same staples every time', v: { routine: 2, natural: 1 } },\n          { t: 'A mix of leftovers, snacks, and whatever sounded good that day', v: { daily: 1, routine: 1, chill: 1 } },\n          { t: 'Mostly drinks and condiments because I decide meals in the moment', v: { daily: 2, transform: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question2.png',\n        text: \"How do you feel when a plan changes last minute?\",\n        options: [\n          { t: 'Plot twist. Give me the new time and I will figure out the rest.', v: { daily: 2, active: 1 } },\n          { t: 'I can adjust, but I need the revised plan spelled out first.', v: { routine: 1, daily: 1, active: 1 } },\n          { t: 'Honestly, it throws me off. I had already arranged my day around it.', v: { routine: 2, natural: 1 } },\n          { t: 'Sometimes I am relieved. The new plan might be more fun or less work.', v: { daily: 2, chill: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question3.png',\n        text: \"Which approach sounds most like you?\",\n        options: [\n          { t: 'I like a fresh start and the freedom to choose again tomorrow.', v: { daily: 2, transform: 1 } },\n          { t: 'Once I find something that works, I stay loyal to it.', v: { routine: 2, natural: 1 } },\n          { t: 'I keep a basic routine, but I change it when life calls for it.', v: { daily: 1, routine: 1, chill: 1 } },\n          { t: 'It depends on my mood. Some days I want familiar, and some days I do not.', v: { daily: 1, routine: 1, transform: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question4.png',\n        text: \"Getting ready for a night out, what's your vibe?\",\n        options: [\n          { t: 'I want to look like myself on a particularly good day.', v: { natural: 2, routine: 1 } },\n          { t: 'I want a full transformation people notice immediately.', v: { transform: 2, active: 1 } },\n          { t: 'I change one detail for fun, but I do not want to feel disguised.', v: { natural: 1, transform: 1, chill: 1 } },\n          { t: 'I keep it comfortable and familiar so I can get ready quickly.', v: { natural: 2, chill: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question5.png',\n        text: \"Scrolling through a filter app, what do you gravitate toward?\",\n        options: [\n          { t: 'A barely-there filter that just softens the lighting', v: { natural: 2, chill: 1 } },\n          { t: 'The wildest one available because that is half the fun', v: { transform: 2, active: 1 } },\n          { t: 'Something playful for the photo, even if it is not my everyday look', v: { natural: 1, transform: 1, daily: 1 } },\n          { t: 'I usually skip filters because I prefer knowing what the photo really looks like', v: { natural: 2, routine: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question6.png',\n        text: \"Which compliment means more to you?\",\n        options: [\n          { t: '\"You look so rested and naturally put together.\"', v: { natural: 2, chill: 1 } },\n          { t: '\"Whoa, I almost did not recognize you at first.\"', v: { transform: 2, active: 1 } },\n          { t: '\"That little change really suits you.\"', v: { natural: 1, transform: 1, routine: 1 } },\n          { t: '\"You look confident. Whatever you did is working.\"', v: { transform: 1, natural: 1, active: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question7.png',\n        text: \"Your weekend plans, roughly:\",\n        options: [\n          { t: 'A workout, an outdoor plan, or anything that gets me moving', v: { active: 2, daily: 1 } },\n          { t: 'A slow morning, good food, and nowhere I have to rush to', v: { chill: 2, routine: 1 } },\n          { t: 'One planned activity, then plenty of time to recover afterward', v: { active: 1, chill: 1, routine: 1 } },\n          { t: 'Seeing people, trying somewhere new, and coming home with a story', v: { active: 2, transform: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question8.png',\n        text: \"How do you like your days to feel?\",\n        options: [\n          { t: 'Full and fast, with enough happening to keep me energized', v: { active: 2, transform: 1 } },\n          { t: 'Open and unhurried, with room to change my mind', v: { chill: 2, daily: 1 } },\n          { t: 'Structured enough to be productive, with protected downtime', v: { active: 1, chill: 1, routine: 1 } },\n          { t: 'Quiet and focused, with a familiar rhythm and few interruptions', v: { chill: 2, routine: 1 } }\n        ]},\n      { img: CON_IMG_BASE + 'Contacts-Question9.png',\n        text: \"Pick the phrase that fits you best:\",\n        options: [\n          { t: '\"I feel best when I have momentum.\"', v: { active: 2, daily: 1 } },\n          { t: '\"I do not need a packed schedule to have a good day.\"', v: { chill: 2, natural: 1 } },\n          { t: '\"I can be all-in today and completely offline tomorrow.\"', v: { active: 1, chill: 1, transform: 1 } },\n          { t: '\"A steady pace beats rushing and recovering.\"', v: { chill: 1, active: 1, routine: 2 } }\n        ]}\n    ],\n    personas: {\n      'daily-natural-active': {\n        name: 'Fresh', shopLabel: 'Daily Clear Lenses',\n        blurb: \"Your fridge is basically restocked on a loop, with fresh groceries coming in, disappearing by the weekend, and nothing sitting around long enough to go stale. Plans change at the last minute and you\u2019re already adjusting before anyone else has processed what happened. You\u2019re not chasing a dramatic transformation, and daily clear lenses match that fresh, grab-and-go energy as you head to the trail, the gym, or wherever the day takes you.\",\n        portrait: CON_IMG_BASE + 'Fresh.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/daily\/',\n        products: [\n          { name: 'ACUVUE OASYS 1-Day with Hydraluxe', img: 'https:\/\/www.visionpros.com\/product\/contacts\/acuvue-oasys-1-day-with-hydraluxe-90.png' },\n          { name: 'DAILIES TOTAL1', img: 'https:\/\/www.visionpros.com\/product\/contacts\/dailies-total1-90.png' },\n          { name: 'Biotrue Oneday', img: 'https:\/\/www.visionpros.com\/product\/contacts\/biotrue-oneday-90.png' }\n        ]},\n      'daily-natural-chill': {\n        name: 'Drift', shopLabel: 'Daily Clear Lenses',\n        blurb: \"You like knowing exactly what\u2019s coming, but you also don\u2019t love overthinking the small stuff. A simple routine with one less thing to manage is exactly why daily clear lenses feel right at home with your relaxed approach. \u201cYou look like yourself, just better\u201d is basically the highest compliment you can get because you were never trying to look like someone else. Your ideal day has room to breathe, with an easy, unstructured pace that honestly feels kind of perfect.\",\n        portrait: CON_IMG_BASE + 'Drift.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/daily\/',\n        products: [\n          { name: '1-Day Acuvue Moist', img: 'https:\/\/www.visionpros.com\/product\/contacts\/1-day-acuvue-moist-90.png' },\n          { name: 'Soflens Daily Disposable', img: 'https:\/\/www.visionpros.com\/product\/contacts\/soflens-daily-disposable-90.png' },\n          { name: 'Proclear 1 Day', img: 'https:\/\/www.visionpros.com\/product\/contacts\/proclear-1-day-90.png' }\n        ]},\n      'daily-transform-active': {\n        name: 'Flash', shopLabel: 'Daily Colored Lenses',\n        blurb: \"Scrolling through a filter app, you\u2019re not reaching for subtle. You want the one that changes everything, at least for the day. New setup, new look, and zero commitment are exactly why daily colored lenses match you so well. Today\u2019s version of you doesn\u2019t have to be tomorrow\u2019s, and your look keeps pace with your full schedule and fast-moving energy.\",\n        portrait: CON_IMG_BASE + 'Flash.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/colors\/',\n        products: [\n          { name: '1-Day Acuvue Define', img: 'https:\/\/www.visionpros.com\/product\/contacts\/1-day-acuvue-define-30.png' },\n          { name: 'Dailies Colors', img: 'https:\/\/www.visionpros.com\/product\/contacts\/dailies-colors-30.png' }\n        ]},\n      'daily-transform-chill': {\n        name: 'Muse', shopLabel: 'Dailies Colors',\n        blurb: \"You like switching things up, just not on a deadline. A new look on a low-key day feels perfect, with no pressure and no big reveal necessary. \u201cWhoa, did you do something different?\u201d is exactly the reaction you\u2019re going for, delivered with zero effort behind it. Daily colored lenses fit right into your easygoing philosophy, letting you play with colorful eyes whenever the mood strikes.\",\n        portrait: CON_IMG_BASE + 'Muse.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/dailies-colors\/',\n        products: [\n          { name: 'Dailies Colors - Mystic Hazel', img: 'https:\/\/www.visionpros.com\/siteimages\/colors\/166063\/4902eye.jpg' },\n          { name: 'Dailies Colors - Mystic Gray', img: 'https:\/\/www.visionpros.com\/siteimages\/colors\/166063\/4903eye.jpg' },\n          { name: 'Dailies Colors - Mystic Blue', img: 'https:\/\/www.visionpros.com\/siteimages\/colors\/166063\/4901eye.jpg' }\n        ]},\n      'routine-natural-active': {\n        name: 'Pulse', shopLabel: 'Monthly Clear Lenses',\n        blurb: \"Your days are full and busy, with something always happening, so you need everything, including your vision, to keep up without much thought. Productive but not frantic is your energy, with a system that works day after day and keeps your attention on what\u2019s in front of you. Reusable clear lenses fit naturally into that dependable rhythm. You didn\u2019t get here by accident because consistency is kind of your whole thing.\",\n        portrait: CON_IMG_BASE + 'Pulse.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/monthly\/',\n        products: [\n          { name: 'BIOFINITY ENERGYS', img: 'https:\/\/www.visionpros.com\/product\/contacts\/biofinity-energys-6.png' },\n          { name: 'ULTRA (Bausch + Lomb)', img: 'https:\/\/www.visionpros.com\/product\/contacts\/ultra-6.png' }\n        ]},\n      'routine-natural-chill': {\n        name: 'Steady', shopLabel: 'Monthly Clear Lenses',\n        blurb: \"If it ain\u2019t broke, don\u2019t fix it. That\u2019s basically your whole approach to, well, everything. You like knowing what to expect, and reusable clear lenses suit the kind of familiar, low-maintenance routine that works without a second thought. Relaxed, unstructured days are the goal, and you\u2019d rather not spend any of that energy fussing over your contacts.\",\n        portrait: CON_IMG_BASE + 'Steady.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/monthly\/',\n        products: [\n          { name: 'Total30', img: 'https:\/\/www.visionpros.com\/product\/contacts\/total30-6.png' },\n          { name: 'PUREVISION 2 HD', img: 'https:\/\/www.visionpros.com\/product\/contacts\/purevision-2-hd-6.png' },\n          { name: 'Acuvue Vita', img: 'https:\/\/www.visionpros.com\/product\/contacts\/acuvue-vita-6.png' }\n        ]},\n      'routine-transform-active': {\n        name: 'Nova', shopLabel: 'Monthly Colored Lenses',\n        blurb: \"Busy, full days and a signature colored look that doesn\u2019t quit on you. That\u2019s the combination you\u2019ve landed on, and reusable colored lenses fit right into it. You\u2019re not switching things up daily because you\u2019ve found the version of yourself that turns heads, and you\u2019re sticking with it through however hard the week gets. Go hard, then rest hard, but the look stays consistent either way.\",\n        portrait: CON_IMG_BASE + 'Nova.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/colors\/',\n        products: [\n          { name: 'Pure Colors HD', img: 'https:\/\/www.visionpros.com\/product\/contacts\/pure-colors-hd-2.png' },\n          { name: 'Air Optix Colors', img: 'https:\/\/www.visionpros.com\/product\/contacts\/air-optix-colors-2.png' }\n        ]},\n      'routine-transform-chill': {\n        name: 'Clover', shopLabel: 'Air Optix Colors',\n        blurb: \"You found a look you like and you\u2019re not messing with it. Same signature color, low effort, and no need to reinvent yourself every week. Taking it easy is the whole vibe, and reusable colored lenses fit naturally into the familiar eye routine you prefer. Loyal to your look isn\u2019t a compromise for you because it\u2019s simply what comfortable feels like.\",\n        portrait: CON_IMG_BASE + 'Clover.png',\n        link: 'https:\/\/www.visionpros.com\/contact-lenses\/air-optix-colors\/',\n        products: [\n          { name: 'Air Optix Colors - Honey', img: 'https:\/\/www.visionpros.com\/siteimages\/colors\/166455\/1641eye.jpg' },\n          { name: 'Air Optix Colors - Sterling Grey', img: 'https:\/\/www.visionpros.com\/siteimages\/colors\/166455\/3324eye.jpg' },\n          { name: 'Air Optix Colors - True Sapphire', img: 'https:\/\/www.visionpros.com\/siteimages\/colors\/166455\/1679eye.jpg' }\n        ]}\n    }\n  };\n\n  var QUIZZES = { sunglasses: SUN_QUIZ, contacts: CON_QUIZ };\n\n  var state = { quiz: null, index: 0, scores: {}, lastPreference: {} };\n\n  function resetState(quizKey) {\n    var q = QUIZZES[quizKey];\n    state.quiz = q;\n    state.index = 0;\n    state.scores = {};\n    state.lastPreference = {};\n    q.scoreKeys.forEach(function (k) { state.scores[k] = 0; });\n    root.setAttribute('data-active', quizKey);\n  }\n\n  function showScreen(name) {\n    root.querySelectorAll('.vpq-screen').forEach(function (s) {\n      s.hidden = s.dataset.screen !== name;\n    });\n  }\n\n  function renderQuestion() {\n    var q = state.quiz.questions[state.index];\n    var total = state.quiz.questions.length;\n    var screen = root.querySelector('[data-screen=\"question\"]');\n    var trail = screen.querySelectorAll('.vpq-dot');\n    trail.forEach(function (dot, i) {\n      dot.classList.toggle('vpq-is-filled', i < state.index);\n      dot.classList.toggle('vpq-is-current', i === state.index);\n    });\n    var trailWrap = screen.querySelector('.vpq-trail');\n    trailWrap.setAttribute('aria-valuenow', state.index + 1);\n    trailWrap.setAttribute('aria-label', 'Question ' + (state.index + 1) + ' of ' + total);\n\n    var img = screen.querySelector('.vpq-scenario-img');\n    img.src = q.img;\n    img.alt = 'Scenario illustration for question ' + (state.index + 1);\n\n    screen.querySelector('.vpq-question-text').textContent = q.text;\n\n    var optWrap = screen.querySelector('.vpq-options');\n    optWrap.innerHTML = '';\n    q.options.forEach(function (opt) {\n      var btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'vpq-option';\n      btn.textContent = opt.t;\n      btn.addEventListener('click', function () { answer(opt.v); });\n      optWrap.appendChild(btn);\n    });\n\n    showScreen('question');\n  }\n\n  function answer(value) {\n    var weights = typeof value === 'string' ? (function () {\n      var single = {};\n      single[value] = 1;\n      return single;\n    })() : value;\n\n    Object.keys(weights).forEach(function (trait) {\n      if (Object.prototype.hasOwnProperty.call(state.scores, trait)) {\n        state.scores[trait] += weights[trait];\n      }\n    });\n\n    state.quiz.dimPairs.forEach(function (pair) {\n      var firstWeight = weights[pair[0]] || 0;\n      var secondWeight = weights[pair[1]] || 0;\n      if (firstWeight !== secondWeight) {\n        state.lastPreference[pair.join('|')] = firstWeight > secondWeight ? pair[0] : pair[1];\n      }\n    });\n\n    state.index++;\n    if (state.index < state.quiz.questions.length) {\n      renderQuestion();\n    } else {\n      finish();\n    }\n  }\n\n  function finish() {\n    var loadingScreen = root.querySelector('[data-screen=\"loading\"]');\n    loadingScreen.querySelector('.vpq-loading-text').textContent = state.quiz.loadingText;\n    showScreen('loading');\n    setTimeout(renderResult, 900);\n  }\n\n  function renderResult() {\n    var key = state.quiz.dimPairs.map(function (pair) {\n      if (state.scores[pair[0]] === state.scores[pair[1]]) {\n        return state.lastPreference[pair.join('|')] || pair[0];\n      }\n      return state.scores[pair[0]] > state.scores[pair[1]] ? pair[0] : pair[1];\n    }).join('-');\n    var persona = state.quiz.personas[key];\n\n    var screen = root.querySelector('[data-screen=\"result\"]');\n    screen.querySelector('.vpq-portrait').src = persona.portrait;\n    screen.querySelector('.vpq-portrait').alt = persona.name + ' character illustration';\n    screen.querySelector('.vpq-result-name').textContent = persona.name + '!';\n    screen.querySelector('.vpq-result-blurb').textContent = persona.blurb;\n\n    var row = screen.querySelector('.vpq-products-row');\n    row.innerHTML = '';\n    persona.products.forEach(function (p) {\n      var card = document.createElement('div');\n      card.className = 'vpq-product';\n      var img = document.createElement('img');\n      img.src = p.img; img.alt = p.name; img.loading = 'lazy';\n      var span = document.createElement('span');\n      span.textContent = p.name;\n      card.appendChild(img); card.appendChild(span);\n      row.appendChild(card);\n    });\n\n    var shopBtn = screen.querySelector('.vpq-shop-btn');\n    shopBtn.href = persona.link;\n    shopBtn.textContent = 'Shop ' + persona.shopLabel;\n\n    var otherBtn = screen.querySelector('[data-action=\"other\"]');\n    var otherKey = state.quiz.key === 'sunglasses' ? 'contacts' : 'sunglasses';\n    otherBtn.textContent = otherKey === 'sunglasses' ? 'Try the Sunglasses Quiz' : 'Try the Contact Lens Quiz';\n    otherBtn.onclick = function () { resetState(otherKey); renderQuestion(); };\n\n    showScreen('result');\n  }\n\n  root.querySelectorAll('[data-action=\"start\"]').forEach(function (btn) {\n    btn.addEventListener('click', function () {\n      resetState(btn.getAttribute('data-quiz'));\n      renderQuestion();\n    });\n  });\n  root.querySelector('[data-action=\"retake\"]').addEventListener('click', function () {\n    resetState(state.quiz.key);\n    renderQuestion();\n  });\n\n})();\n<\/script>\n\n\n\n<center>\n\n\n\n<\/center>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-srcset=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1.png 899w, https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1-300x159.png 300w, https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1-767x406.png 767w\" decoding=\"async\"   data-src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1.png\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Meet the Characters\" class=\"wp-image-7486 lazyload\"  sizes=\"(max-width: 899px) 100vw, 899px\" \/><noscript><img decoding=\"async\" width=\"899\" height=\"476\" src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1.png\" alt=\"Meet the Characters\" class=\"wp-image-7486\" srcset=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1.png 899w, https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1-300x159.png 300w, https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/Meet-the-Cast-1-767x406.png 767w\" sizes=\"(max-width: 899px) 100vw, 899px\" \/><\/noscript><\/figure>\n<\/div>\n\n\n<div id=\"vpqc-root\" class=\"vpqc\">\n\n  <!-- TABS -->\n  <div class=\"vpqc-tabs\" role=\"tablist\" aria-label=\"Choose a cast\">\n    <button type=\"button\" class=\"vpqc-tab vpqc-is-active\" data-tab=\"sunglasses\" role=\"tab\" aria-selected=\"true\">\ud83d\udd76\ufe0f Sunglasses Cast<\/button>\n    <button type=\"button\" class=\"vpqc-tab\" data-tab=\"contacts\" role=\"tab\" aria-selected=\"false\">\ud83d\udc41\ufe0f Contact Lens Cast<\/button>\n  <\/div>\n\n  <!-- LEGEND -->\n  <div class=\"vpqc-legend\"><\/div>\n\n  <!-- GRID -->\n  <div class=\"vpqc-grid\"><\/div>\n\n  <!-- CTA -->\n  <div class=\"vpqc-cta\">\n    <p class=\"vpqc-cta-text\">Not sure who you are yet?<\/p>\n    <button type=\"button\" class=\"vpqc-cta-btn\" data-action=\"scroll-quiz\">Take the Quiz<\/button>\n  <\/div>\n\n<\/div>\n\n<style>\n  #vpqc-root {\n    --vpqc-cream: #FBF3E3;\n    --vpqc-card: #FFFFFF;\n    --vpqc-navy: #0E4773;\n    --vpqc-blue: #3176B4;\n    --vpqc-sky: #7BA9D1;\n    --vpqc-pale: #EBF4FD;\n    --vpqc-ink: #22303C;\n    --vpqc-line: #E4D9C2;\n    --vpqc-shadow: 0 10px 30px rgba(14, 71, 115, 0.10);\n    --vpqc-accent: #E8A33D;\n    --vpqc-accent-dark: #C9821F;\n    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    color: var(--vpqc-ink);\n    box-sizing: border-box;\n    max-width: 1200px;\n    margin: 0 auto 3rem;\n    padding: 0 1.5rem;\n  }\n  #vpqc-root[data-active=\"contacts\"] { --vpqc-accent: #3FB6A8; --vpqc-accent-dark: #2C8F84; }\n  #vpqc-root *, #vpqc-root *::before, #vpqc-root *::after { box-sizing: inherit; }\n\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Baloo+2:wght@500;600;700;800&family=Inter:wght@400;500;600;700&display=swap');\n\n  \/* ---------- Tabs ---------- *\/\n  .vpqc-tabs {\n    display: flex;\n    justify-content: center;\n    gap: 0.75rem;\n    margin-bottom: 1.5rem;\n    flex-wrap: wrap;\n  }\n  .vpqc-tab {\n    font-family: 'Baloo 2', sans-serif;\n    font-weight: 600;\n    font-size: 1.05rem;\n    padding: 0.7rem 1.5rem;\n    border-radius: 999px;\n    border: 2px solid var(--vpqc-line);\n    background: var(--vpqc-card);\n    color: var(--vpqc-ink);\n    cursor: pointer;\n    transition: border-color .15s ease, background .15s ease, color .15s ease, transform .15s ease;\n  }\n  .vpqc-tab:hover { transform: translateY(-1px); }\n  .vpqc-tab.vpqc-is-active {\n    background: var(--vpqc-accent);\n    border-color: var(--vpqc-accent);\n    color: #fff;\n  }\n  .vpqc-tab:focus-visible { outline: 3px solid var(--vpqc-accent); outline-offset: 2px; }\n\n  \/* ---------- Legend ---------- *\/\n  .vpqc-legend {\n    display: flex;\n    justify-content: center;\n    gap: 0.6rem;\n    flex-wrap: wrap;\n    margin-bottom: 2rem;\n    font-size: 0.85rem;\n  }\n  .vpqc-legend-chip {\n    background: var(--vpqc-pale);\n    color: var(--vpqc-navy);\n    border-radius: 999px;\n    padding: 0.35rem 0.9rem;\n    font-weight: 600;\n  }\n\n  \/* ---------- Grid ---------- *\/\n  .vpqc-grid {\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    gap: 1.5rem;\n  }\n  @media (max-width: 900px) { .vpqc-grid { grid-template-columns: repeat(2, 1fr); } }\n  @media (max-width: 520px) { .vpqc-grid { grid-template-columns: 1fr; } }\n\n  \/* ---------- Flip card ---------- *\/\n  .vpqc-card {\n    perspective: 1400px;\n    height: 340px;\n    cursor: pointer;\n  }\n  .vpqc-card-inner {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    transition: transform 0.55s cubic-bezier(.2,.8,.2,1);\n    transform-style: preserve-3d;\n  }\n  .vpqc-card.vpqc-is-flipped .vpqc-card-inner { transform: rotateY(180deg); }\n  @media (prefers-reduced-motion: reduce) {\n    .vpqc-card-inner { transition: none; }\n  }\n  .vpqc-card-front, .vpqc-card-back {\n    position: absolute;\n    inset: 0;\n    backface-visibility: hidden;\n    border-radius: 22px;\n    border: 1px solid var(--vpqc-line);\n    background: var(--vpqc-cream);\n    box-shadow: var(--vpqc-shadow);\n    padding: 1.4rem 1.2rem;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n  }\n  .vpqc-card-front { justify-content: center; }\n  .vpqc-card-back {\n    transform: rotateY(180deg);\n    justify-content: space-between;\n    background: var(--vpqc-card);\n  }\n\n  .vpqc-portrait-ring {\n    width: 96px; height: 96px;\n    border-radius: 50%;\n    overflow: hidden;\n    border: 3px solid var(--vpqc-card);\n    box-shadow: 0 0 0 3px var(--vpqc-accent);\n    margin-bottom: 0.8rem;\n    background: var(--vpqc-pale);\n  }\n  .vpqc-portrait-ring img { width: 100%; height: 100%; object-fit: cover; display: block; }\n\n  .vpqc-code {\n    font-family: 'Inter', sans-serif;\n    font-weight: 700;\n    font-size: 0.78rem;\n    letter-spacing: 0.06em;\n    color: var(--vpqc-accent-dark);\n    background: var(--vpqc-pale);\n    border-radius: 999px;\n    padding: 0.25rem 0.7rem;\n    margin-bottom: 0.6rem;\n  }\n  .vpqc-name {\n    font-family: 'Baloo 2', sans-serif;\n    font-weight: 700;\n    font-size: 1.4rem;\n    color: var(--vpqc-navy);\n    margin: 0 0 0.25rem;\n  }\n  .vpqc-epithet {\n    font-size: 0.92rem;\n    font-style: italic;\n    color: var(--vpqc-blue);\n    margin: 0 0 0.9rem;\n    line-height: 1.35;\n  }\n  .vpqc-flip-hint {\n    font-size: 0.8rem;\n    color: var(--vpqc-sky);\n    margin: 0;\n  }\n\n  .vpqc-name-back {\n    font-family: 'Baloo 2', sans-serif;\n    font-weight: 700;\n    font-size: 1.15rem;\n    color: var(--vpqc-navy);\n    margin: 0 0 0.6rem;\n  }\n  .vpqc-blurb {\n    font-size: 0.86rem;\n    line-height: 1.5;\n    text-align: left;\n    color: var(--vpqc-ink);\n    overflow-y: auto;\n    flex: 1;\n    margin: 0 0 0.8rem;\n  }\n  .vpqc-shop-link {\n    font-family: 'Inter', sans-serif;\n    font-weight: 600;\n    font-size: 0.85rem;\n    color: #fff !important;\n    background: var(--vpqc-blue);\n    border-radius: 999px;\n    padding: 0.55rem 1.1rem;\n    text-decoration: none;\n    display: inline-block;\n  }\n  #vpqc-root .vpqc-shop-link:link,\n  #vpqc-root .vpqc-shop-link:visited,\n  #vpqc-root .vpqc-shop-link:hover,\n  #vpqc-root .vpqc-shop-link:focus,\n  #vpqc-root .vpqc-shop-link:active {\n    color: #fff !important;\n    text-decoration: none !important;\n  }\n  #vpqc-root .vpqc-shop-link:hover,\n  #vpqc-root .vpqc-shop-link:focus {\n    background: var(--vpqc-navy);\n  }\n  #vpqc-root .vpqc-shop-link:focus-visible {\n    outline: 3px solid var(--vpqc-accent);\n    outline-offset: 2px;\n  }\n\n  \/* ---------- CTA ---------- *\/\n  .vpqc-cta {\n    text-align: center;\n    margin-top: 2.75rem;\n  }\n  .vpqc-cta-text {\n    font-family: 'Baloo 2', sans-serif;\n    color: var(--vpqc-navy);\n    font-size: 1.15rem;\n    margin: 0 0 0.9rem;\n  }\n  .vpqc-cta-btn {\n    font-family: 'Inter', sans-serif;\n    font-weight: 600;\n    font-size: 1.05rem;\n    padding: 0.85rem 2rem;\n    border-radius: 999px;\n    border: none;\n    background: var(--vpqc-blue);\n    color: #fff;\n    cursor: pointer;\n    box-shadow: 0 6px 16px rgba(49, 118, 180, 0.35);\n    transition: background .15s ease, transform .15s ease;\n  }\n  .vpqc-cta-btn:hover { background: var(--vpqc-navy); transform: translateY(-2px); }\n  .vpqc-cta-btn:focus-visible { outline: 3px solid var(--vpqc-accent); outline-offset: 2px; }\n<\/style>\n\n<script>\n(function () {\n  var root = document.getElementById('vpqc-root');\n  if (!root || root.dataset.vpqcInit) return;\n  root.dataset.vpqcInit = '1';\n\n  var IMG_BASE = 'https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/09\/';\n\n  var CASTS = {\n    sunglasses: {\n      legend: [\n        ['BO \/ SU', 'Bold or Subtle'],\n        ['WI \/ CU', 'Wild or Curated'],\n        ['CL \/ CO', 'Classic or Colorful']\n      ],\n      characters: [\n        { name: 'Ridge', code: 'BO-WI-CL', epithet: 'The Fearless Trailblazer', shopLabel: 'Aviator Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/aviator\/',\n          portrait: IMG_BASE + 'Ridge.png',\n          blurb: \"Ridge is usually gone before sunrise, boots already laced, coffee going cold in the truck. Doesn't own a single trendy thing, but somehow always looks like they know something the rest of us don't. Ask about the best trail nearby and be ready to actually go, because Ridge is already grabbing the keys.\" },\n        { name: 'Blaze', code: 'BO-WI-CO', epithet: 'The Spontaneous Adventurer', shopLabel: 'Oversize Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/oversize\/',\n          portrait: IMG_BASE + 'Blaze.png',\n          blurb: \"Blaze has never met a quiet Tuesday that couldn't become an adventure. Famous for turning a five-minute errand into a three-hour detour nobody regrets. Keeps a running list of nearby places nobody's tried yet, just in case today needs one.\" },\n        { name: 'Onyx', code: 'BO-CU-CL', epithet: 'The Quiet Powerhouse', shopLabel: 'Square Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/square\/',\n          portrait: IMG_BASE + 'Onyx.png',\n          blurb: \"Onyx has never once shown up underdressed and honestly doesn't understand the concept. Reads a room in under ten seconds and adjusts without seeming to try. Keeps a mental ranking of the best coffee shops in town, sorted strictly by lighting.\" },\n        { name: 'Vivid', code: 'BO-CU-CO', epithet: 'The Unapologetic Main Character', shopLabel: 'Cat Eye Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/cat+eye\/',\n          portrait: IMG_BASE + 'Vivid.png',\n          blurb: \"Vivid has a personal rule: if it doesn't get a compliment, it wasn't worth wearing. Collects statement pieces the way other people collect houseplants, with genuine enthusiasm and zero regret. Currently on the hunt for the boldest color VisionPros has ever made.\" },\n        { name: 'Wren', code: 'SU-WI-CL', epithet: 'The Low-Key Wanderer', shopLabel: 'Round Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/round\/',\n          portrait: IMG_BASE + 'Wren.png',\n          blurb: \"Wren has a trail for every mood and can identify at least a dozen bird calls by ear. Never posts the hike, just takes it. Keeps snacks in every jacket pocket and always shares, especially with whoever's falling a little behind.\" },\n        { name: 'Cove', code: 'SU-WI-CO', epithet: 'The Easygoing Drifter', shopLabel: 'Oval Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/oval\/',\n          portrait: IMG_BASE + 'Cove.png',\n          blurb: \"Cove has never rushed anywhere in their whole life and somehow still gets everything done. Knows the tide schedule better than the actual weather forecast. Happiest with sand still in their shoes, days after the trip technically ended.\" },\n        { name: 'Sable', code: 'SU-CU-CL', epithet: 'The Understated Minimalist', shopLabel: 'Rectangle Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/rectangle\/',\n          portrait: IMG_BASE + 'Sable.png',\n          blurb: \"Sable owns exactly one really good version of everything and nothing else. Orders the same coffee every time, no substitutions, no explanation needed. Believes the best compliment is \u201cthat's such a you thing to wear,\u201d said quietly, once, and meant completely.\" },\n        { name: 'Lumen', code: 'SU-CU-CO', epithet: 'The Gentle Observer', shopLabel: 'Geometric Frames',\n          link: 'https:\/\/www.visionpros.com\/sunglasses\/geometric\/',\n          portrait: IMG_BASE + 'Lumen.png',\n          blurb: \"Lumen notices the good light in a room before anyone else does, then quietly finds the softest color in it. Keeps a mental list of songs for rainy afternoons and spots the tiny creative details most people miss. Warm, observant, and never loud, Lumen proves colorful style can still speak softly.\" }\n      ]\n    },\n    contacts: {\n      legend: [\n        ['DA \/ RO', 'Daily or Routine'],\n        ['NA \/ TR', 'Natural or Transform'],\n        ['AC \/ CH', 'Active or Chill']\n      ],\n      characters: [\n        { name: 'Fresh', code: 'DA-NA-AC', epithet: 'The Grab-and-Go Mover', shopLabel: 'Daily Clear Lenses',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/daily\/',\n          portrait: IMG_BASE + 'Fresh.png',\n          blurb: \"Fresh treats mornings like a small daily reset: bag packed, fridge restocked, out the door before the coffee's even finished brewing. Has never once been late because of indecision, only because the trail looked too good to leave behind.\" },\n        { name: 'Drift', code: 'DA-NA-CH', epithet: 'The Effortless Regular', shopLabel: 'Daily Clear Lenses',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/daily\/',\n          portrait: IMG_BASE + 'Drift.png',\n          blurb: \"Drift takes each day as it comes and rarely carries yesterday's fuss into today. Doesn't overthink outfits, plans, or Tuesdays in general, and prefers a fresh, simple start with very little upkeep. The calmest reply in any group chat is usually just \u201csounds good.\u201d\" },\n        { name: 'Flash', code: 'DA-TR-AC', epithet: 'The Daily Reinventor', shopLabel: 'Daily Colored Lenses',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/colors\/',\n          portrait: IMG_BASE + 'Flash.png',\n          blurb: \"Flash keeps three different looks in weekly rotation and considers that restrained. Has strong opinions about today's mood and changes that opinion by lunch. The friend most likely to text \u201cnew look, don't ask why.\u201d\" },\n        { name: 'Muse', code: 'DA-TR-CH', epithet: 'The Playful Experimenter', shopLabel: 'Dailies Colors',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/dailies-colors\/',\n          portrait: IMG_BASE + 'Muse.png',\n          blurb: \"Muse tries a new eye color about as often as most people change their coffee order, and with just as little ceremony. No big reveal, just a quiet \u201coh yeah, I switched it up\u201d when someone finally notices.\" },\n        { name: 'Pulse', code: 'RO-NA-AC', epithet: 'The Consistent Go-Getter', shopLabel: 'Monthly Clear Lenses',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/monthly\/',\n          portrait: IMG_BASE + 'Pulse.png',\n          blurb: \"Pulse has a system for everything and genuinely enjoys sticking to it. Mornings start early, days stay full, and somehow nothing ever feels rushed. Keeps some kind of streak going at all times, mostly on principle.\" },\n        { name: 'Steady', code: 'RO-NA-CH', epithet: 'The Reliable Constant', shopLabel: 'Monthly Clear Lenses',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/monthly\/',\n          portrait: IMG_BASE + 'Steady.png',\n          blurb: \"Steady has used the same brand of everything since forever and sees no reason to reconsider. Never once flaked on plans, mostly because Steady never overcommits in the first place. Low drama, high loyalty, always.\" },\n        { name: 'Nova', code: 'RO-TR-AC', epithet: 'The Bold Signature', shopLabel: 'Monthly Colored Lenses',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/colors\/',\n          portrait: IMG_BASE + 'Nova.png',\n          blurb: \"Nova found a signature look years ago and never looked back, literally, since it's the same striking color every single day. Busy schedule, zero patience for high-maintenance routines, and somehow makes \u201cthe same thing every day\u201d look deliberate.\" },\n        { name: 'Clover', code: 'RO-TR-CH', epithet: 'The Loyal Comfort-Seeker', shopLabel: 'Air Optix Colors',\n          link: 'https:\/\/www.visionpros.com\/contact-lenses\/air-optix-colors\/',\n          portrait: IMG_BASE + 'Clover.png',\n          blurb: \"Clover picked a favorite shade months ago and has been quietly loyal to it ever since. Not big on reinventing things that already work, whether that's a lunch order, a Sunday routine, or an eye color.\" }\n      ]\n    }\n  };\n\n  function renderLegend(castKey) {\n    var wrap = root.querySelector('.vpqc-legend');\n    wrap.innerHTML = '';\n    CASTS[castKey].legend.forEach(function (pair) {\n      var chip = document.createElement('span');\n      chip.className = 'vpqc-legend-chip';\n      chip.textContent = pair[0] + ' = ' + pair[1];\n      wrap.appendChild(chip);\n    });\n  }\n\n  function renderGrid(castKey) {\n    var grid = root.querySelector('.vpqc-grid');\n    grid.innerHTML = '';\n    CASTS[castKey].characters.forEach(function (ch) {\n      var card = document.createElement('div');\n      card.className = 'vpqc-card';\n      card.tabIndex = 0;\n      card.setAttribute('role', 'button');\n      card.setAttribute('aria-pressed', 'false');\n      card.setAttribute('aria-label', ch.name + ', ' + ch.epithet + '. Activate to read bio.');\n\n      card.innerHTML =\n        '<div class=\"vpqc-card-inner\">' +\n          '<div class=\"vpqc-card-front\">' +\n            '<div class=\"vpqc-portrait-ring\"><img decoding=\"async\" src=\"' + ch.portrait + '\" alt=\"' + ch.name + ' character illustration\" loading=\"lazy\"><\/div>' +\n            '<div class=\"vpqc-code\">' + ch.code + '<\/div>' +\n            '<h3 class=\"vpqc-name\">' + ch.name + '<\/h3>' +\n            '<p class=\"vpqc-epithet\">' + ch.epithet + '<\/p>' +\n            '<p class=\"vpqc-flip-hint\">Tap to read bio<\/p>' +\n          '<\/div>' +\n          '<div class=\"vpqc-card-back\">' +\n            '<div>' +\n              '<h3 class=\"vpqc-name-back\">' + ch.name + '<\/h3>' +\n              '<p class=\"vpqc-blurb\">' + ch.blurb + '<\/p>' +\n            '<\/div>' +\n            '<a class=\"vpqc-shop-link\" href=\"' + ch.link + '\" target=\"_blank\" rel=\"noopener\">Shop ' + ch.shopLabel + '<\/a>' +\n          '<\/div>' +\n        '<\/div>';\n\n      function toggle(e) {\n        if (e.target.closest('.vpqc-shop-link')) return;\n        var flipped = card.classList.toggle('vpqc-is-flipped');\n        card.setAttribute('aria-pressed', flipped ? 'true' : 'false');\n      }\n      card.addEventListener('click', toggle);\n      card.addEventListener('keydown', function (e) {\n        if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggle(e); }\n      });\n\n      grid.appendChild(card);\n    });\n  }\n\n  function activateTab(castKey) {\n    root.setAttribute('data-active', castKey);\n    root.querySelectorAll('.vpqc-tab').forEach(function (t) {\n      var isActive = t.getAttribute('data-tab') === castKey;\n      t.classList.toggle('vpqc-is-active', isActive);\n      t.setAttribute('aria-selected', isActive ? 'true' : 'false');\n    });\n    renderLegend(castKey);\n    renderGrid(castKey);\n  }\n\n  root.querySelectorAll('.vpqc-tab').forEach(function (btn) {\n    btn.addEventListener('click', function () { activateTab(btn.getAttribute('data-tab')); });\n  });\n\n  root.querySelector('[data-action=\"scroll-quiz\"]').addEventListener('click', function () {\n    var quiz = document.getElementById('vpq-root');\n    if (quiz) quiz.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n\n  activateTab('sunglasses');\n})();\n<\/script>\n\n\n\n<div style=\"height:66px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@100;200;300;400;500;600;700;800;900\" \/>\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-family:&#039;Roboto&#039; !important\">Try Out More of Our Fun Interactive Pages!<\/h2>\n\n\n\n<!-- ============================================================\n     VisionPros: Interactive Pages Card Grid\n     Paste into a GeneratePress Custom HTML block.\n     Heading intentionally omitted because the page already has one.\n     ============================================================ -->\n\n<section id=\"vp-interactive-pages\" class=\"vpi-widget\" aria-label=\"More fun and interactive VisionPros pages\">\n  <div class=\"vpi-grid\">\n\n    <a class=\"vpi-card vpi-card--story\" href=\"https:\/\/www.visionpros.com\/pro\/the-unseeing-village\/\">\n      <div class=\"vpi-image-wrap\">\n        <img decoding=\"async\" data-src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/07\/choose-your-own-adventure-hero-image-1024x384.png\"\n          class=\"vpi-image lazyload\"\n          src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n          alt=\"The Unseeing Village interactive story\"\n          \n          \n          loading=\"lazy\"\n        ><noscript><img decoding=\"async\" class=\"vpi-image\" src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/07\/choose-your-own-adventure-hero-image-1024x384.png\" alt=\"The Unseeing Village interactive story\" width=\"1024\" height=\"384\" loading=\"lazy\"><\/noscript>\n        <span class=\"vpi-tag\">Interactive Story<\/span>\n      <\/div>\n      <div class=\"vpi-content\">\n        <h3 class=\"vpi-title\">The Unseeing Village<\/h3>\n        <p class=\"vpi-description\">Choose what happens next as you explore a mysterious village where every decision changes your path.<\/p>\n        <span class=\"vpi-button\">Begin the Story <span aria-hidden=\"true\">\u2192<\/span><\/span>\n      <\/div>\n    <\/a>\n\n    <a class=\"vpi-card vpi-card--sunglasses\" href=\"https:\/\/www.visionpros.com\/pro\/which-affordable-sunglasses-fit-my-budget-take-this-quiz\/\">\n      <div class=\"vpi-image-wrap\">\n        <img decoding=\"async\" data-src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/03\/Which-Affordable-Sunglasses-Fit-My-Budget_-Take-This-Quiz-1024x384.png\"\n          class=\"vpi-image lazyload\"\n          src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n          alt=\"Affordable sunglasses budget quiz\"\n          \n          \n          loading=\"lazy\"\n        ><noscript><img decoding=\"async\" class=\"vpi-image\" src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/03\/Which-Affordable-Sunglasses-Fit-My-Budget_-Take-This-Quiz-1024x384.png\" alt=\"Affordable sunglasses budget quiz\" width=\"1024\" height=\"384\" loading=\"lazy\"><\/noscript>\n        <span class=\"vpi-tag\">Sunglasses Quiz<\/span>\n      <\/div>\n      <div class=\"vpi-content\">\n        <h3 class=\"vpi-title\">Which Affordable Sunglasses Fit My Budget?<\/h3>\n        <p class=\"vpi-description\">Answer a few quick questions to find sunglasses that suit your style, needs, and spending range.<\/p>\n        <span class=\"vpi-button\">Take the Quiz <span aria-hidden=\"true\">\u2192<\/span><\/span>\n      <\/div>\n    <\/a>\n\n    <a class=\"vpi-card vpi-card--sensitive\" href=\"https:\/\/www.visionpros.com\/pro\/best-contact-lenses-for-sensitive-eyes\/\">\n      <div class=\"vpi-image-wrap\">\n        <img decoding=\"async\" data-src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/02\/Best-Contact-Lenses-For-Sensitive-Eyes-banner-1024x384.webp\"\n          class=\"vpi-image lazyload\"\n          src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n          alt=\"Contact lenses for sensitive eyes quiz\"\n          \n          \n          loading=\"lazy\"\n        ><noscript><img decoding=\"async\" class=\"vpi-image\" src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/02\/Best-Contact-Lenses-For-Sensitive-Eyes-banner-1024x384.webp\" alt=\"Contact lenses for sensitive eyes quiz\" width=\"1024\" height=\"384\" loading=\"lazy\"><\/noscript>\n        <span class=\"vpi-tag\">Contact Lens Quiz<\/span>\n      <\/div>\n      <div class=\"vpi-content\">\n        <h3 class=\"vpi-title\">Contacts for Sensitive Eyes Quiz<\/h3>\n        <p class=\"vpi-description\">Share what tends to bother your eyes and discover contact lens options that match your preferences.<\/p>\n        <span class=\"vpi-button\">Take the Quiz <span aria-hidden=\"true\">\u2192<\/span><\/span>\n      <\/div>\n    <\/a>\n\n    <a class=\"vpi-card vpi-card--finder\" href=\"https:\/\/www.visionpros.com\/pro\/find-the-best-contact-lenses-for-your-eyes-with-our-lens-finder-quiz\/\">\n      <div class=\"vpi-image-wrap\">\n        <img decoding=\"async\" data-src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/02\/Classic-Specs-16-1024x384.png\"\n          class=\"vpi-image lazyload\"\n          src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"\n          alt=\"VisionPros contact lens finder quiz\"\n          \n          \n          loading=\"lazy\"\n        ><noscript><img decoding=\"async\" class=\"vpi-image\" src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/02\/Classic-Specs-16-1024x384.png\" alt=\"VisionPros contact lens finder quiz\" width=\"1024\" height=\"384\" loading=\"lazy\"><\/noscript>\n        <span class=\"vpi-tag\">Lens Finder<\/span>\n      <\/div>\n      <div class=\"vpi-content\">\n        <h3 class=\"vpi-title\">Find the Best Contact Lenses for Your Eyes<\/h3>\n        <p class=\"vpi-description\">Tell us about your vision needs and wearing habits to narrow down the lens types worth exploring.<\/p>\n        <span class=\"vpi-button\">Find Your Match <span aria-hidden=\"true\">\u2192<\/span><\/span>\n      <\/div>\n    <\/a>\n\n  <\/div>\n<\/section>\n\n<style>\n  #vp-interactive-pages {\n    --vpi-navy: #0e4773;\n    --vpi-blue: #3176b4;\n    --vpi-sky: #eaf4fd;\n    --vpi-cream: #fbf3e3;\n    --vpi-ink: #22303c;\n    --vpi-border: #dfd7c8;\n    --vpi-white: #ffffff;\n    width: 100%;\n    max-width: 1100px;\n    margin: 1.5rem auto 2.5rem;\n    padding: 0 1rem;\n    color: var(--vpi-ink);\n    font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    box-sizing: border-box;\n  }\n\n  #vp-interactive-pages *,\n  #vp-interactive-pages *::before,\n  #vp-interactive-pages *::after {\n    box-sizing: inherit;\n  }\n\n  #vp-interactive-pages .vpi-grid {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 1.5rem;\n  }\n\n  #vp-interactive-pages .vpi-card {\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    overflow: hidden;\n    background: var(--vpi-white);\n    border: 1px solid var(--vpi-border);\n    border-radius: 22px;\n    box-shadow: 0 10px 28px rgba(14, 71, 115, 0.10);\n    color: var(--vpi-ink);\n    text-decoration: none !important;\n    transition: transform 180ms ease, box-shadow 180ms ease, border-color 180ms ease;\n  }\n\n  #vp-interactive-pages .vpi-card:hover {\n    transform: translateY(-5px);\n    border-color: #a8c8e3;\n    box-shadow: 0 16px 34px rgba(14, 71, 115, 0.17);\n  }\n\n  #vp-interactive-pages .vpi-card:focus-visible {\n    outline: 4px solid rgba(49, 118, 180, 0.28);\n    outline-offset: 4px;\n  }\n\n  #vp-interactive-pages .vpi-image-wrap {\n    position: relative;\n    width: 100%;\n    aspect-ratio: 8 \/ 3;\n    overflow: hidden;\n    background: var(--vpi-sky);\n  }\n\n  #vp-interactive-pages .vpi-image {\n    display: block;\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    object-fit: cover;\n    object-position: center;\n    transition: transform 260ms ease;\n  }\n\n  #vp-interactive-pages .vpi-card:hover .vpi-image {\n    transform: scale(1.025);\n  }\n\n  #vp-interactive-pages .vpi-tag {\n    position: absolute;\n    left: 1rem;\n    bottom: 0.8rem;\n    display: inline-flex;\n    align-items: center;\n    min-height: 28px;\n    padding: 0.35rem 0.75rem;\n    border-radius: 999px;\n    background: rgba(14, 71, 115, 0.94);\n    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.14);\n    color: var(--vpi-white);\n    font-size: 0.76rem;\n    font-weight: 700;\n    letter-spacing: 0.045em;\n    line-height: 1;\n    text-transform: uppercase;\n  }\n\n  #vp-interactive-pages .vpi-content {\n    display: flex;\n    flex: 1;\n    flex-direction: column;\n    align-items: flex-start;\n    padding: 1.25rem 1.35rem 1.35rem;\n  }\n\n  #vp-interactive-pages .vpi-title {\n    margin: 0 0 0.55rem;\n    color: var(--vpi-navy);\n    font-family: \"Baloo 2\", Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    font-size: clamp(1.2rem, 2vw, 1.45rem);\n    font-weight: 700;\n    line-height: 1.25;\n    text-align: left;\n  }\n\n  #vp-interactive-pages .vpi-description {\n    margin: 0 0 1.15rem;\n    color: var(--vpi-ink);\n    font-size: 0.98rem;\n    line-height: 1.55;\n    text-align: left;\n  }\n\n  #vp-interactive-pages .vpi-button {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.45rem;\n    margin-top: auto;\n    padding: 0.7rem 1rem;\n    border-radius: 999px;\n    background: var(--vpi-blue);\n    color: var(--vpi-white);\n    font-size: 0.92rem;\n    font-weight: 700;\n    line-height: 1;\n    transition: background 180ms ease, gap 180ms ease;\n  }\n\n  #vp-interactive-pages .vpi-card:hover .vpi-button {\n    gap: 0.65rem;\n    background: var(--vpi-navy);\n  }\n\n  #vp-interactive-pages .vpi-card--story .vpi-button {\n    background: #a85e3b;\n  }\n\n  #vp-interactive-pages .vpi-card--sunglasses .vpi-button {\n    background: #d78825;\n  }\n\n  #vp-interactive-pages .vpi-card--sensitive .vpi-button {\n    background: #7b6eb5;\n  }\n\n  #vp-interactive-pages .vpi-card--finder .vpi-button {\n    background: #2c8f84;\n  }\n\n  @media (max-width: 700px) {\n    #vp-interactive-pages .vpi-grid {\n      grid-template-columns: 1fr;\n    }\n\n    #vp-interactive-pages .vpi-card {\n      max-width: 560px;\n      margin: 0 auto;\n    }\n  }\n\n  @media (max-width: 420px) {\n    #vp-interactive-pages {\n      padding: 0 0.5rem;\n    }\n\n    #vp-interactive-pages .vpi-card {\n      border-radius: 17px;\n    }\n\n    #vp-interactive-pages .vpi-content {\n      padding: 1.05rem 1.05rem 1.15rem;\n    }\n\n    #vp-interactive-pages .vpi-tag {\n      left: 0.7rem;\n      bottom: 0.65rem;\n      font-size: 0.7rem;\n    }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    #vp-interactive-pages .vpi-card,\n    #vp-interactive-pages .vpi-image,\n    #vp-interactive-pages .vpi-button {\n      transition: none;\n    }\n  }\n<\/style>\n\n\n\n<div style=\"font-family: Georgia, 'Times New Roman', serif; max-width: 1200px; margin: 40px auto; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden;\">\n  <div style=\"display: flex; align-items: stretch; min-height: 380px;\">\n    <div style=\"flex: 1; display: flex; flex-direction: column; justify-content: center; padding: 40px 44px; background: #ffffff;\">\n      <p style=\"font-family: Arial, sans-serif; font-size: 14px; color: #7ba9d1; letter-spacing: 0.08em; text-transform: uppercase; margin: 0 0 10px 0; font-weight: 700;\">Your eye care destination<\/p>\n      <p style=\"font-family: Georgia, 'Times New Roman', serif; font-size: 38px; font-weight: 700; color: #0e4773; margin: 0 0 10px 0; line-height: 1.3;\">Everything your eyes<br>need, all in one place.<\/p>\n      <p style=\"font-family: Arial, sans-serif; font-size: 16px; color: #555; margin: 0 0 24px 0; line-height: 1.6;\">Shop top brands in contact lenses and sunglasses. All at trusted low prices.<\/p>\n      <a href=\"https:\/\/www.visionpros.com\/\" style=\"display: inline-block; font-family: Arial, sans-serif; font-size: 14px; font-weight: 600; color: #ffffff; background: #3176b4; text-decoration: none; padding: 11px 24px; border-radius: 4px; width: fit-content; letter-spacing: 0.03em;\">Shop VisionPros \u2192<\/a>\n    <\/div>\n   <div style=\"flex: 0 0 55%; overflow: hidden;\">\n  <img decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/06\/Sunglasses-Contact-Lenses.png\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Sunglasses and contact lenses flat lay\" style=\"width: 100%; height: 100%; object-fit: cover; object-position: center center; display: block;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/www.visionpros.com\/pro\/wp-content\/uploads\/2026\/06\/Sunglasses-Contact-Lenses.png\" alt=\"Sunglasses and contact lenses flat lay\" style=\"width: 100%; height: 100%; object-fit: cover; object-position: center center; display: block;\"><\/noscript>\n<\/div>\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Your everyday choices have a personality all their own. Choose the contact lens or sunglasses quiz, answer nine playful questions, and discover which character shares your vibe! Which Frame Are You? Start the Quiz Nine quick questions. One sunglasses soulmate. Answer a handful of everyday scenarios and we&#8217;ll match you with the frame style and [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":7469,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[6,418],"tags":[400,385,330],"semantictags":[],"class_list":["post-7457","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-fun-and-interactive","tag-contact-lenses","tag-sunglasses","tag-visionpros"],"_links":{"self":[{"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/posts\/7457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/comments?post=7457"}],"version-history":[{"count":38,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/posts\/7457\/revisions"}],"predecessor-version":[{"id":7518,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/posts\/7457\/revisions\/7518"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/media\/7469"}],"wp:attachment":[{"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/media?parent=7457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/categories?post=7457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/tags?post=7457"},{"taxonomy":"semantictags","embeddable":true,"href":"https:\/\/www.visionpros.com\/pro\/wp-json\/wp\/v2\/semantictags?post=7457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}