{"id":11,"date":"2026-08-08T06:26:34","date_gmt":"2026-08-08T06:26:34","guid":{"rendered":"https:\/\/vivi-massage.com\/?page_id=11"},"modified":"2026-08-11T00:10:37","modified_gmt":"2026-08-11T00:10:37","slug":"home","status":"publish","type":"page","link":"https:\/\/vivi-massage.com\/","title":{"rendered":"home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11\" class=\"elementor elementor-11\">\n\t\t\t\t<div class=\"elementor-element elementor-element-18c72aa e-con-full e-flex e-con e-parent\" data-id=\"18c72aa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f68569 elementor-widget elementor-widget-html\" data-id=\"9f68569\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Vivi Massage Spa | Elementor HTML Widget version | Paste this file contents into one Elementor HTML widget. -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,500;0,600;1,500&display=swap\" rel=\"stylesheet\">\n<style>\n\n    .vivi-elementor-page {\n      --ink: #201b18;\n      --ink-soft: #5f5650;\n      --paper: #fffdf9;\n      --cream: #f6f0e5;\n      --sand: #ded0bb;\n      --sand-soft: #eee4d5;\n      --clay: #a95f47;\n      --clay-deep: #794331;\n      --gold: #a16207;\n      --white: #ffffff;\n      --line: rgba(32, 27, 24, 0.14);\n      --line-light: rgba(255, 255, 255, 0.18);\n      --shadow-soft: 0 24px 70px rgba(58, 42, 33, 0.12);\n      --shadow-card: 0 16px 48px rgba(58, 42, 33, 0.08);\n      --radius-sm: 14px;\n      --radius-md: 26px;\n      --radius-lg: 44px;\n      --shell: 1180px;\n    }\n\n    .vivi-elementor-page * { box-sizing: border-box; }\n    .vivi-elementor-page { scroll-behavior: smooth; background: var(--paper); }\n    .vivi-elementor-page {\n      margin: 0;\n      min-width: 320px;\n      overflow-x: hidden;\n      background: var(--paper);\n      color: var(--ink);\n      font-family: \"Inter\", Arial, Helvetica, sans-serif;\n      font-size: 16px;\n      line-height: 1.6;\n      -webkit-font-smoothing: antialiased;\n      text-rendering: optimizeLegibility;\n    }\n    .vivi-elementor-page img, .vivi-elementor-page iframe { display: block; max-width: 100%; }\n    .vivi-elementor-page a { color: inherit; text-decoration: none; }\n    .vivi-elementor-page a, .vivi-elementor-page button { -webkit-tap-highlight-color: transparent; touch-action: manipulation; }\n    .vivi-elementor-page :focus-visible { outline: 3px solid var(--clay); outline-offset: 4px; }\n    .vivi-elementor-page .shell { width: min(var(--shell), calc(100% - 48px)); margin: 0 auto; }\n    .vivi-elementor-page .display {\n      font-family: \"Playfair Display\", Georgia, serif;\n      font-weight: 500;\n      letter-spacing: -0.045em;\n    }\n    .vivi-elementor-page .eyebrow {\n      margin: 0 0 18px;\n      color: var(--clay-deep);\n      font-size: 11px;\n      line-height: 1.3;\n      font-weight: 700;\n      letter-spacing: 0.19em;\n      text-transform: uppercase;\n    }\n\n    .vivi-elementor-page .notice {\n      min-height: 36px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 8px 18px;\n      background: var(--ink);\n      color: rgba(255,255,255,0.78);\n      text-align: center;\n      font-size: 11px;\n      font-weight: 600;\n      letter-spacing: 0.08em;\n    }\n    .vivi-elementor-page .notice span { color: #e6c792; }\n\n    .vivi-elementor-page .site-header {\n      position: sticky;\n      z-index: 50;\n      top: 0;\n      border-bottom: 1px solid rgba(32, 27, 24, 0.09);\n      background: rgba(255,253,249,0.94);\n      backdrop-filter: blur(16px);\n    }\n    .vivi-elementor-page .header-inner {\n      min-height: 78px;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 30px;\n    }\n    .vivi-elementor-page .brand { width: 224px; max-width: 42vw; flex: 0 0 auto; }\n    .vivi-elementor-page .brand img { width: 100%; height: 52px; object-fit: contain; object-position: left center; }\n    .vivi-elementor-page .nav { display: flex; align-items: center; gap: clamp(22px, 3vw, 40px); }\n    .vivi-elementor-page .nav-link {\n      position: relative;\n      padding: 11px 0;\n      color: #514843;\n      font-size: 12px;\n      font-weight: 600;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      transition: color 220ms ease;\n    }\n    .vivi-elementor-page .nav-link::after {\n      content: \"\";\n      position: absolute;\n      right: 0;\n      bottom: 7px;\n      left: 0;\n      height: 1px;\n      background: var(--clay);\n      transform: scaleX(0);\n      transform-origin: right;\n      transition: transform 220ms ease;\n    }\n    .vivi-elementor-page .nav-link:hover { color: var(--ink); }\n    .vivi-elementor-page .nav-link:hover::after { transform: scaleX(1); transform-origin: left; }\n    .vivi-elementor-page .header-call {\n      min-height: 46px;\n      padding: 12px 20px;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      background: var(--ink);\n      color: var(--white);\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      transition: background 220ms ease, transform 220ms ease;\n    }\n    .vivi-elementor-page .header-call:hover { background: var(--clay-deep); transform: translateY(-1px); }\n\n    .vivi-elementor-page .hero {\n      position: relative;\n      isolation: isolate;\n      overflow: hidden;\n      background: var(--cream);\n    }\n    .vivi-elementor-page .hero::before {\n      content: \"\";\n      position: absolute;\n      z-index: -2;\n      inset: 0;\n      opacity: 0.34;\n      background-image: radial-gradient(rgba(81, 63, 51, 0.16) 0.55px, transparent 0.55px);\n      background-size: 8px 8px;\n    }\n    .vivi-elementor-page .hero::after {\n      content: \"\";\n      position: absolute;\n      z-index: -1;\n      width: 560px;\n      height: 560px;\n      right: -210px;\n      bottom: -280px;\n      border-radius: 50%;\n      background: rgba(198, 123, 92, 0.14);\n    }\n    .vivi-elementor-page .hero-inner {\n      min-height: 690px;\n      padding: 64px 0 76px;\n      display: grid;\n      grid-template-columns: 1.03fr 0.97fr;\n      align-items: center;\n      gap: clamp(54px, 7vw, 92px);\n    }\n    .vivi-elementor-page .hero-copy { position: relative; z-index: 3; }\n    .vivi-elementor-page .hero h1 {\n      max-width: 690px;\n      margin: 0;\n      font-size: clamp(58px, 6.6vw, 94px);\n      line-height: 0.96;\n    }\n    .vivi-elementor-page .hero h1 em {\n      color: var(--clay-deep);\n      font-weight: 500;\n    }\n    .vivi-elementor-page .hero-lede {\n      max-width: 570px;\n      margin: 30px 0 0;\n      color: #5a514c;\n      font-size: 17px;\n      line-height: 1.8;\n    }\n    .vivi-elementor-page .hero-actions { margin-top: 34px; display: flex; flex-wrap: wrap; gap: 12px; }\n    .vivi-elementor-page .button {\n      min-height: 54px;\n      padding: 15px 24px;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      border: 1px solid transparent;\n      cursor: pointer;\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      transition: background 220ms ease, color 220ms ease, border-color 220ms ease, transform 220ms ease;\n    }\n    .vivi-elementor-page .button:hover { transform: translateY(-2px); }\n    .vivi-elementor-page .button-primary { background: var(--ink); color: var(--white); }\n    .vivi-elementor-page .button-primary:hover { background: var(--clay-deep); }\n    .vivi-elementor-page .button-secondary { border-color: rgba(32,27,24,0.28); background: rgba(255,255,255,0.28); color: var(--ink); }\n    .vivi-elementor-page .button-secondary:hover { background: var(--paper); border-color: rgba(32,27,24,0.5); }\n    .vivi-elementor-page .hero-meta {\n      margin-top: 23px;\n      display: flex;\n      flex-wrap: wrap;\n      gap: 8px 20px;\n      color: #746a64;\n      font-size: 12px;\n    }\n    .vivi-elementor-page .hero-meta span { position: relative; }\n    .vivi-elementor-page .hero-meta span + span::before {\n      content: \"\";\n      position: absolute;\n      width: 3px;\n      height: 3px;\n      left: -12px;\n      top: 9px;\n      border-radius: 50%;\n      background: var(--clay);\n    }\n\n    .vivi-elementor-page .hero-visual { position: relative; min-height: 550px; }\n    .vivi-elementor-page .arch-back {\n      position: absolute;\n      width: 79%;\n      height: 88%;\n      right: 0;\n      top: 0;\n      border-radius: 220px 220px 22px 22px;\n      background: var(--sand);\n    }\n    .vivi-elementor-page .arch-photo {\n      position: absolute;\n      z-index: 2;\n      width: 78%;\n      height: 88%;\n      left: 0;\n      bottom: 0;\n      overflow: hidden;\n      border-radius: 220px 220px 18px 18px;\n      background: #d8cec2;\n      box-shadow: var(--shadow-soft);\n    }\n    .vivi-elementor-page .arch-photo img { width: 100%; height: 100%; object-fit: cover; object-position: center 18%; }\n    .vivi-elementor-page .floating-card {\n      position: absolute;\n      z-index: 4;\n      right: 0;\n      bottom: 20px;\n      width: min(310px, 69%);\n      padding: 24px 26px;\n      background: var(--paper);\n      border: 1px solid rgba(32,27,24,0.08);\n      box-shadow: var(--shadow-card);\n    }\n    .vivi-elementor-page .floating-card .tiny { display: block; margin-bottom: 8px; color: var(--clay-deep); font-size: 10px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; }\n    .vivi-elementor-page .floating-card strong { display: block; font-family: \"Playfair Display\", Georgia, serif; font-size: 19px; line-height: 1.3; font-weight: 500; }\n    .vivi-elementor-page .floating-card span:last-child { display: block; margin-top: 5px; color: var(--ink-soft); font-size: 12px; }\n\n    .vivi-elementor-page .trust-strip { background: var(--paper); border-bottom: 1px solid var(--line); }\n    .vivi-elementor-page .trust-grid { display: grid; grid-template-columns: repeat(3, 1fr); }\n    .vivi-elementor-page .trust-item { min-height: 110px; padding: 26px 30px; display: flex; flex-direction: column; justify-content: center; border-right: 1px solid var(--line); }\n    .vivi-elementor-page .trust-item:first-child { border-left: 1px solid var(--line); }\n    .vivi-elementor-page .trust-label { color: #8a7e77; font-size: 9px; font-weight: 700; letter-spacing: .17em; text-transform: uppercase; }\n    .vivi-elementor-page .trust-value { margin-top: 6px; color: var(--ink); font-family: \"Playfair Display\", Georgia, serif; font-size: 19px; line-height: 1.35; }\n\n    .vivi-elementor-page .intro { padding: 112px 0 96px; background: var(--paper); }\n    .vivi-elementor-page .intro-grid { display: grid; grid-template-columns: .62fr 1.38fr; gap: 84px; }\n    .vivi-elementor-page .intro h2 { max-width: 760px; margin: 0; font-size: clamp(43px, 5vw, 66px); line-height: 1.05; }\n    .vivi-elementor-page .intro-copy { max-width: 720px; margin: 26px 0 0; color: var(--ink-soft); font-size: 17px; line-height: 1.85; }\n\n    .vivi-elementor-page .services { padding: 105px 0 118px; background: var(--cream); }\n    .vivi-elementor-page .section-head { margin-bottom: 48px; display: grid; grid-template-columns: 1fr .72fr; align-items: end; gap: 60px; }\n    .vivi-elementor-page .section-head h2 { margin: 0; font-size: clamp(45px, 5.2vw, 68px); line-height: 1.04; }\n    .vivi-elementor-page .section-note { margin: 0; color: #6f645e; font-size: 13px; line-height: 1.8; }\n    .vivi-elementor-page .service-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }\n    .vivi-elementor-page .service-card {\n      min-height: 365px;\n      padding: 32px 31px 30px;\n      display: flex;\n      flex-direction: column;\n      background: rgba(255,253,249,0.82);\n      border: 1px solid rgba(32,27,24,0.09);\n      border-radius: var(--radius-md);\n      transition: transform 220ms ease, box-shadow 220ms ease, border-color 220ms ease;\n    }\n    .vivi-elementor-page .service-card:hover { transform: translateY(-4px); border-color: rgba(169,95,71,0.24); box-shadow: var(--shadow-card); }\n    .vivi-elementor-page .service-kicker { margin: 0 0 16px; color: var(--clay-deep); font-size: 10px; font-weight: 700; letter-spacing: .13em; text-transform: uppercase; }\n    .vivi-elementor-page .service-card h3 { margin: 0; font-family: \"Playfair Display\", Georgia, serif; font-size: 31px; line-height: 1.12; font-weight: 500; letter-spacing: -.025em; }\n    .vivi-elementor-page .service-desc { margin: 16px 0 24px; color: #6c625c; font-size: 13px; line-height: 1.7; }\n    .vivi-elementor-page .price-list { margin-top: auto; padding-top: 20px; border-top: 1px solid var(--line); display: grid; gap: 9px; }\n    .vivi-elementor-page .price-row { display: flex; align-items: baseline; justify-content: space-between; gap: 18px; font-size: 12px; }\n    .vivi-elementor-page .price-row span:first-child { color: #706660; }\n    .vivi-elementor-page .price-row strong { color: var(--ink); font-variant-numeric: tabular-nums; font-weight: 700; white-space: nowrap; }\n    .vivi-elementor-page .service-card.featured { background: var(--ink); color: white; border-color: var(--ink); }\n    .vivi-elementor-page .service-card.featured .service-kicker { color: #dfb8a6; }\n    .vivi-elementor-page .service-card.featured .service-desc, .vivi-elementor-page .service-card.featured .price-row span:first-child { color: rgba(255,255,255,.64); }\n    .vivi-elementor-page .service-card.featured .price-list { border-color: var(--line-light); }\n    .vivi-elementor-page .service-card.featured .price-row strong { color: white; }\n\n    .vivi-elementor-page .offer { padding: 34px 0; background: var(--clay-deep); color: var(--white); }\n    .vivi-elementor-page .offer-inner { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 34px; }\n    .vivi-elementor-page .offer-mark {\n      width: 78px;\n      height: 78px;\n      display: grid;\n      place-items: center;\n      border: 1px solid rgba(255,255,255,.32);\n      border-radius: 50%;\n      font-family: \"Playfair Display\", Georgia, serif;\n      font-size: 24px;\n      font-weight: 500;\n    }\n    .vivi-elementor-page .offer-copy strong { display: block; font-family: \"Playfair Display\", Georgia, serif; font-size: clamp(25px, 3vw, 38px); line-height: 1.15; font-weight: 500; }\n    .vivi-elementor-page .offer-copy span { display: block; margin-top: 8px; color: rgba(255,255,255,.67); font-size: 12px; line-height: 1.7; }\n    .vivi-elementor-page .offer-link { min-height: 48px; padding: 12px 18px; display: inline-flex; align-items: center; border: 1px solid rgba(255,255,255,.45); color: white; font-size: 10px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; transition: background 220ms ease, color 220ms ease; }\n    .vivi-elementor-page .offer-link:hover { background: white; color: var(--clay-deep); }\n\n    .vivi-elementor-page .story { padding: 118px 0; background: var(--paper); }\n    .vivi-elementor-page .story-grid { display: grid; grid-template-columns: 0.95fr 1.05fr; gap: clamp(62px, 8vw, 108px); align-items: center; }\n    .vivi-elementor-page .story-photo {\n      position: relative;\n      overflow: hidden;\n      min-height: 650px;\n      border-radius: 220px 220px 24px 24px;\n      background: var(--sand-soft);\n      box-shadow: var(--shadow-soft);\n    }\n    .vivi-elementor-page .story-photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 14%; }\n    .vivi-elementor-page .story-copy h2 { max-width: 660px; margin: 0; font-size: clamp(45px, 5vw, 66px); line-height: 1.04; }\n    .vivi-elementor-page .story-copy > p { max-width: 610px; margin: 26px 0 0; color: var(--ink-soft); font-size: 16px; line-height: 1.85; }\n    .vivi-elementor-page .story-list { margin: 35px 0 0; padding: 0; list-style: none; display: grid; gap: 0; border-top: 1px solid var(--line); }\n    .vivi-elementor-page .story-list li { padding: 19px 0; display: grid; grid-template-columns: 32px 1fr; gap: 15px; align-items: start; border-bottom: 1px solid var(--line); }\n    .vivi-elementor-page .story-list b { color: var(--clay-deep); font-family: \"Playfair Display\", Georgia, serif; font-size: 15px; font-weight: 500; }\n    .vivi-elementor-page .story-list span { color: #4f4742; font-size: 13px; line-height: 1.65; }\n\n    .vivi-elementor-page .visit { padding: 105px 0; background: #efe5d8; }\n    .vivi-elementor-page .visit-grid { display: grid; grid-template-columns: .85fr 1.15fr; gap: 64px; align-items: stretch; }\n    .vivi-elementor-page .visit-copy { padding: 16px 0; }\n    .vivi-elementor-page .visit h2 { margin: 0; font-size: clamp(46px, 5vw, 66px); line-height: 1.03; }\n    .vivi-elementor-page .details { margin: 38px 0 34px; border-top: 1px solid rgba(32,27,24,.16); }\n    .vivi-elementor-page .detail { padding: 18px 0; display: grid; grid-template-columns: 112px 1fr; gap: 20px; border-bottom: 1px solid rgba(32,27,24,.16); }\n    .vivi-elementor-page .detail-label { color: #867970; font-size: 9px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; }\n    .vivi-elementor-page .detail-value { color: #3b332f; font-size: 13px; line-height: 1.6; }\n    .vivi-elementor-page .detail-value strong { display: block; color: var(--ink); font-size: 13px; }\n    .vivi-elementor-page .phone-number { color: var(--ink); font-family: \"Playfair Display\", Georgia, serif; font-size: 25px; line-height: 1.25; }\n    .vivi-elementor-page .visit-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 24px; }\n    .vivi-elementor-page .text-link { padding: 6px 0; border-bottom: 1px solid rgba(32,27,24,.45); color: var(--ink); font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }\n    .vivi-elementor-page .map {\n      min-height: 570px;\n      overflow: hidden;\n      border: 1px solid rgba(32,27,24,.1);\n      border-radius: var(--radius-lg);\n      background: #ded5c9;\n      box-shadow: var(--shadow-card);\n    }\n    .vivi-elementor-page .map iframe { width: 100%; height: 100%; min-height: 570px; border: 0; filter: sepia(.08) saturate(.78) contrast(.96); }\n\n    .vivi-elementor-page footer { padding: 35px 0 38px; background: #15110f; color: rgba(255,255,255,.56); }\n    .vivi-elementor-page .footer-inner { display: flex; align-items: center; justify-content: space-between; gap: 40px; font-size: 11px; line-height: 1.7; }\n    .vivi-elementor-page .footer-brand { color: rgba(255,255,255,.88); font-family: \"Playfair Display\", Georgia, serif; font-size: 18px; }\n    .vivi-elementor-page .footer-right { text-align: right; }\n    .vivi-elementor-page .footer-right a { color: #dfc7a3; }\n\n    .vivi-elementor-page .mobile-call { display: none; }\n\n    @media (max-width: 980px) {\n      .vivi-elementor-page .hero-inner, .vivi-elementor-page .intro-grid, .vivi-elementor-page .section-head, .vivi-elementor-page .story-grid, .vivi-elementor-page .visit-grid { grid-template-columns: 1fr; }\n      .vivi-elementor-page .hero-inner { padding-top: 70px; gap: 56px; }\n      .vivi-elementor-page .hero-copy { max-width: 760px; }\n      .vivi-elementor-page .hero-visual { width: min(660px, 100%); }\n      .vivi-elementor-page .trust-grid { grid-template-columns: 1fr 1fr 1fr; }\n      .vivi-elementor-page .intro-grid { gap: 28px; }\n      .vivi-elementor-page .section-head { gap: 22px; }\n      .vivi-elementor-page .section-note { max-width: 660px; }\n      .vivi-elementor-page .service-grid { grid-template-columns: repeat(2, 1fr); }\n      .vivi-elementor-page .story-photo { width: min(610px, 100%); min-height: 620px; }\n      .vivi-elementor-page .visit-grid { gap: 46px; }\n      .vivi-elementor-page .map, .vivi-elementor-page .map iframe { min-height: 470px; }\n    }\n\n    @media (max-width: 720px) {\n      .vivi-elementor-page .shell { width: min(var(--shell), calc(100% - 32px)); }\n      .vivi-elementor-page .notice { font-size: 10px; }\n      .vivi-elementor-page .header-inner { min-height: 69px; }\n      .vivi-elementor-page .brand { width: 176px; max-width: 48vw; }\n      .vivi-elementor-page .brand img { height: 42px; }\n      .vivi-elementor-page .nav-link { display: none; }\n      .vivi-elementor-page .header-call { min-height: 43px; padding: 10px 12px; font-size: 9px; }\n      .vivi-elementor-page .hero-inner { min-height: auto; padding: 58px 0 70px; }\n      .vivi-elementor-page .hero h1 { font-size: clamp(52px, 15vw, 72px); }\n      .vivi-elementor-page .hero-lede { font-size: 16px; }\n      .vivi-elementor-page .hero-actions { display: grid; grid-template-columns: 1fr; }\n      .vivi-elementor-page .button { width: 100%; }\n      .vivi-elementor-page .hero-meta { display: grid; gap: 4px; }\n      .vivi-elementor-page .hero-meta span + span::before { display: none; }\n      .vivi-elementor-page .hero-visual { min-height: 470px; }\n      .vivi-elementor-page .arch-back { width: 80%; height: 86%; }\n      .vivi-elementor-page .arch-photo { width: 82%; height: 88%; }\n      .vivi-elementor-page .floating-card { width: min(300px, 78%); padding: 20px 22px; }\n      .vivi-elementor-page .trust-grid { grid-template-columns: 1fr; }\n      .vivi-elementor-page .trust-item { min-height: 92px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }\n      .vivi-elementor-page .trust-item:first-child { border-left: 1px solid var(--line); }\n      .vivi-elementor-page .intro, .vivi-elementor-page .services, .vivi-elementor-page .story, .vivi-elementor-page .visit { padding: 78px 0; }\n      .vivi-elementor-page .intro h2, .vivi-elementor-page .section-head h2, .vivi-elementor-page .story-copy h2, .vivi-elementor-page .visit h2 { font-size: 42px; }\n      .vivi-elementor-page .service-grid { grid-template-columns: 1fr; }\n      .vivi-elementor-page .service-card { min-height: 0; }\n      .vivi-elementor-page .offer-inner { grid-template-columns: 64px 1fr; gap: 18px; }\n      .vivi-elementor-page .offer-mark { width: 64px; height: 64px; font-size: 20px; }\n      .vivi-elementor-page .offer-link { grid-column: 1 \/ -1; width: 100%; justify-content: center; }\n      .vivi-elementor-page .story-photo { min-height: 500px; }\n      .vivi-elementor-page .detail { grid-template-columns: 88px 1fr; gap: 14px; }\n      .vivi-elementor-page .visit-actions { display: grid; grid-template-columns: 1fr; }\n      .vivi-elementor-page .visit-actions .text-link { justify-self: start; }\n      .vivi-elementor-page .map, .vivi-elementor-page .map iframe { min-height: 390px; }\n      .vivi-elementor-page .footer-inner { padding-bottom: 68px; flex-direction: column; align-items: flex-start; gap: 18px; }\n      .vivi-elementor-page .footer-right { text-align: left; }\n      .vivi-elementor-page .mobile-call {\n        position: fixed;\n        z-index: 80;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        display: block;\n        padding: 10px 16px calc(10px + env(safe-area-inset-bottom));\n        border-top: 1px solid rgba(255,255,255,.12);\n        background: rgba(21,17,15,.96);\n        backdrop-filter: blur(12px);\n      }\n      .vivi-elementor-page .mobile-call a { min-height: 46px; display: flex; align-items: center; justify-content: center; background: #f1dfc7; color: var(--ink); font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      .vivi-elementor-page { scroll-behavior: auto; }\n      .vivi-elementor-page *, .vivi-elementor-page *::before, .vivi-elementor-page *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; }\n    }\n  \n<\/style>\n<div class=\"vivi-elementor-page\" data-vivi-template=\"massage-spa\">\n<div class=\"notice\">Vivi Massage Spa &nbsp;\u00b7&nbsp; Princeton, Texas &nbsp;\u00b7&nbsp; <span>Mon\u2013Sat 10:00 AM\u20139:30 PM<\/span><\/div>\n\n  <header class=\"site-header\">\n    <div class=\"shell header-inner\">\n      <a class=\"brand\" href=\"#top\" aria-label=\"Vivi Massage Spa home\">\n        <img decoding=\"async\" src=\"https:\/\/vivi-massage.com\/wp-content\/uploads\/2026\/08\/image-from-clipboard.png\" width=\"243\" height=\"70\" alt=\"Vivi Massage Spa logo\">\n      <\/a>\n      <nav class=\"nav\" aria-label=\"Main navigation\">\n        <a class=\"nav-link\" href=\"#services\">Services<\/a>\n        <a class=\"nav-link\" href=\"#visit\">Visit<\/a>\n        <a class=\"header-call\" href=\"tel:469-370-7198\">Call 469-370-7198<\/a>\n      <\/nav>\n    <\/div>\n  <\/header>\n\n  <main id=\"top\">\n    <section class=\"hero\">\n      <div class=\"shell hero-inner\">\n        <div class=\"hero-copy\">\n          <p class=\"eyebrow\">Massage Spa \u00b7 Princeton, Texas<\/p>\n          <h1 class=\"display\">A quieter hour,<br><em>just for you.<\/em><\/h1>\n          <p class=\"hero-lede\">Choose from Swedish, Thai, foot, four hands, and combo massage options at Vivi Massage Spa in Princeton. View our posted menu, plan your visit, and call the store when you\u2019re ready to book.<\/p>\n          <div class=\"hero-actions\">\n            <a class=\"button button-primary\" href=\"tel:469-370-7198\">Call to Book<\/a>\n            <a class=\"button button-secondary\" href=\"#services\">View Services &amp; Prices<\/a>\n          <\/div>\n          <div class=\"hero-meta\" aria-label=\"Store information\">\n            <span>Princeton, TX<\/span>\n            <span>Mon\u2013Sat \u00b7 10:00 AM\u20139:30 PM<\/span>\n            <span>Sunday \u00b7 Closed<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"hero-visual\" aria-label=\"Vivi Massage Spa in-store menu\">\n          <div class=\"arch-back\" aria-hidden=\"true\"><\/div>\n          <div class=\"arch-photo\">\n            <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/vivi-massage.com\/wp-content\/uploads\/2026\/08\/photo-1544161515-4ab6ce6db874.avif\" width=\"560\" height=\"560\" alt=\"Vivi Massage Spa in-store menu\">\n          <\/div>\n          <div class=\"floating-card\">\n            <span class=\"tiny\">Visit Vivi Massage Spa<\/span>\n            <strong>201 E Princeton Dr #100B<\/strong>\n            <span>Princeton, TX 75407<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"trust-strip\" aria-label=\"Store highlights\">\n      <div class=\"shell trust-grid\">\n        <div class=\"trust-item\"><span class=\"trust-label\">Store phone<\/span><a class=\"trust-value\" href=\"tel:469-370-7198\">469-370-7198<\/a><\/div>\n        <div class=\"trust-item\"><span class=\"trust-label\">Hours<\/span><span class=\"trust-value\">Mon\u2013Sat \u00b7 10:00 AM\u20139:30 PM<\/span><\/div>\n        <div class=\"trust-item\"><span class=\"trust-label\">Location<\/span><span class=\"trust-value\">Princeton, Texas 75407<\/span><\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"intro\">\n      <div class=\"shell intro-grid\">\n        <p class=\"eyebrow\">Choose your pace<\/p>\n        <div>\n          <h2 class=\"display\">Massage options for the time you have.<\/h2>\n          <p class=\"intro-copy\">Our posted menu includes 30-, 60-, 90-, and 120-minute options across selected services. Start with the massage style and session length that fit your schedule, then call the store to confirm current availability.<\/p>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"services\" id=\"services\">\n      <div class=\"shell\">\n        <div class=\"section-head\">\n          <div>\n            <p class=\"eyebrow\">Services &amp; posted prices<\/p>\n            <h2 class=\"display\">Find your session.<\/h2>\n          <\/div>\n          <p class=\"section-note\">Prices below reflect the in-store menu provided. Please call before your visit to confirm current pricing and appointment availability.<\/p>\n        <\/div>\n\n        <div class=\"service-grid\">\n          <article class=\"service-card featured\">\n            <p class=\"service-kicker\">Organic hot oil full body<\/p>\n            <h3>Swedish Massage<\/h3>\n            <p class=\"service-desc\">A classic full-body massage option for a calm, unhurried appointment.<\/p>\n            <div class=\"price-list\">\n              <div class=\"price-row\"><span>30 minutes<\/span><strong>$45<\/strong><\/div>\n              <div class=\"price-row\"><span>60 minutes<\/span><strong>$65<\/strong><\/div>\n              <div class=\"price-row\"><span>90 minutes<\/span><strong>$100<\/strong><\/div>\n              <div class=\"price-row\"><span>120 minutes<\/span><strong>$130<\/strong><\/div>\n            <\/div>\n          <\/article>\n\n          <article class=\"service-card\">\n            <p class=\"service-kicker\">Two practitioners<\/p>\n            <h3>Four Hands Massage<\/h3>\n            <p class=\"service-desc\">A coordinated massage session with two practitioners working at the same time.<\/p>\n            <div class=\"price-list\">\n              <div class=\"price-row\"><span>30 minutes<\/span><strong>$80<\/strong><\/div>\n              <div class=\"price-row\"><span>60 minutes<\/span><strong>$120<\/strong><\/div>\n              <div class=\"price-row\"><span>90 minutes<\/span><strong>$180<\/strong><\/div>\n            <\/div>\n          <\/article>\n\n          <article class=\"service-card\">\n            <p class=\"service-kicker\">Foot + body<\/p>\n            <h3>Combo Massage<\/h3>\n            <p class=\"service-desc\">Combine dedicated foot massage time with a body massage in one appointment.<\/p>\n            <div class=\"price-list\">\n              <div class=\"price-row\"><span>30 foot + 30 body<\/span><strong>$60<\/strong><\/div>\n              <div class=\"price-row\"><span>30 foot + 60 body<\/span><strong>$90<\/strong><\/div>\n              <div class=\"price-row\"><span>60 foot + 30 body<\/span><strong>$90<\/strong><\/div>\n            <\/div>\n          <\/article>\n\n          <article class=\"service-card\">\n            <p class=\"service-kicker\">Traditional-style option<\/p>\n            <h3>Thai Massage<\/h3>\n            <p class=\"service-desc\">A Thai-style massage option for guests who prefer a different approach from a classic Swedish session.<\/p>\n            <div class=\"price-list\">\n              <div class=\"price-row\"><span>60 minutes<\/span><strong>$85<\/strong><\/div>\n              <div class=\"price-row\"><span>90 minutes<\/span><strong>$130<\/strong><\/div>\n            <\/div>\n          <\/article>\n\n          <article class=\"service-card\">\n            <p class=\"service-kicker\">Focused foot session<\/p>\n            <h3>Foot Massage<\/h3>\n            <p class=\"service-desc\">A focused option when you want to spend your appointment on your feet.<\/p>\n            <div class=\"price-list\">\n              <div class=\"price-row\"><span>30 minutes<\/span><strong>$35<\/strong><\/div>\n              <div class=\"price-row\"><span>60 minutes<\/span><strong>$50<\/strong><\/div>\n            <\/div>\n          <\/article>\n\n          <article class=\"service-card\">\n            <p class=\"service-kicker\">Optional additions<\/p>\n            <h3>Add-ons<\/h3>\n            <p class=\"service-desc\">Ask about adding either option to an eligible massage session.<\/p>\n            <div class=\"price-list\">\n              <div class=\"price-row\"><span>Hot Stone<\/span><strong>$10<\/strong><\/div>\n              <div class=\"price-row\"><span>Essential Oil<\/span><strong>$10<\/strong><\/div>\n            <\/div>\n          <\/article>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"offer\" aria-label=\"Community appreciation offer\">\n      <div class=\"shell offer-inner\">\n        <div class=\"offer-mark\">30%<\/div>\n        <div class=\"offer-copy\">\n          <strong>For police officers &amp; firefighters<\/strong>\n          <span>An in-store appreciation offer shown at Vivi Massage Spa. Ask in store for eligibility details and current terms.<\/span>\n        <\/div>\n        <a class=\"offer-link\" href=\"tel:469-370-7198\">Call the Store<\/a>\n      <\/div>\n    <\/section>\n\n    <section class=\"story\">\n      <div class=\"shell story-grid\">\n        <figure class=\"story-photo\">\n          <img decoding=\"async\" src=\"https:\/\/vivi-massage.com\/wp-content\/uploads\/2026\/08\/Man-17.jpg\" width=\"560\" height=\"560\" alt=\"Vivi Massage Spa in Princeton, Texas\">\n        <\/figure>\n        <div class=\"story-copy\">\n          <p class=\"eyebrow\">Simple, local, straightforward<\/p>\n          <h2 class=\"display\">Plan your visit with the details up front.<\/h2>\n          <p>Vivi Massage Spa lists core service options, store hours, location information, and pricing so you can review the basics before calling.<\/p>\n          <ul class=\"story-list\">\n            <li><b>01<\/b><span>Review Swedish, Thai, foot, four hands, and combo massage options.<\/span><\/li>\n            <li><b>02<\/b><span>Choose a session length from the posted menu.<\/span><\/li>\n            <li><b>03<\/b><span>Call the store to confirm current availability and pricing before your visit.<\/span><\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"visit\" id=\"visit\">\n      <div class=\"shell visit-grid\">\n        <div class=\"visit-copy\">\n          <p class=\"eyebrow\">Plan your visit<\/p>\n          <h2 class=\"display\">Right here in Princeton.<\/h2>\n          <div class=\"details\">\n            <div class=\"detail\">\n              <span class=\"detail-label\">Address<\/span>\n              <div class=\"detail-value\"><strong>201 E Princeton Dr #100B<\/strong>Princeton, TX 75407<\/div>\n            <\/div>\n            <div class=\"detail\">\n              <span class=\"detail-label\">Hours<\/span>\n              <div class=\"detail-value\"><strong>Monday\u2013Saturday<\/strong>10:00 AM\u20139:30 PM<br><strong>Sunday: Closed<\/strong><\/div>\n            <\/div>\n            <div class=\"detail\">\n              <span class=\"detail-label\">Store phone<\/span>\n              <div class=\"detail-value\"><a class=\"phone-number\" href=\"tel:469-370-7198\">469-370-7198<\/a><\/div>\n            <\/div>\n          <\/div>\n          <div class=\"visit-actions\">\n            <a class=\"button button-primary\" href=\"tel:469-370-7198\">Call to Book<\/a>\n            <a class=\"text-link\" href=\"https:\/\/maps.app.goo.gl\/XdCvB6Dy2Ty4zqp56\" target=\"_blank\" rel=\"noopener noreferrer\">Get Directions<\/a>\n          <\/div>\n        <\/div>\n\n        <div class=\"map\" aria-label=\"Map showing Vivi Massage Spa in Princeton, Texas\">\n          <iframe src=\"https:\/\/www.google.com\/maps\/embed?pb=!1m18!1m12!1m3!1d3339.5430540772645!2d-96.50103202469425!3d33.17362116361299!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x864c0f533dffbba9%3A0xbf8ebd21db019e56!2sVivi%20Massage%20Spa!5e0!3m2!1szh-CN!2s!4v1786173458996!5m2!1szh-CN!2s\" width=\"600\" height=\"450\" style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n        <\/div>\n      <\/div>\n    <\/section>\n\n  <\/main>\n\n  <footer>\n    <div class=\"shell footer-inner\">\n      <div>\n        <div class=\"footer-brand\">Vivi Massage Spa<\/div>\n        <div>201 E Princeton Dr #100B \u00b7 Princeton, TX 75407<\/div>\n      <\/div>\n      <div class=\"footer-right\">Mon\u2013Sat 10:00 AM\u20139:30 PM \u00b7 Sun Closed<br><a href=\"tel:469-370-7198\">469-370-7198<\/a><\/div>\n    <\/div>\n  <\/footer>\n\n  <div class=\"mobile-call\"><a href=\"tel:469-370-7198\">Call to Book \u00b7 469-370-7198<\/a><\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Vivi Massage Spa &nbsp;\u00b7&nbsp; Princeton, Texas &nbsp;\u00b7&nbsp; Mon\u2013Sat 10:00 AM\u20139:30 PM Services Visit Call 469-370-7198 Massage Spa \u00b7 Princeton, Texas A quieter hour,just for you. Choose from Swedish, Thai, foot, four hands, and combo massage options at Vivi Massage Spa in Princeton. View our posted menu, plan your visit, and call the store when you\u2019re [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-11","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vivi-massage.com\/index.php?rest_route=\/wp\/v2\/pages\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vivi-massage.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vivi-massage.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vivi-massage.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vivi-massage.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11"}],"version-history":[{"count":7,"href":"https:\/\/vivi-massage.com\/index.php?rest_route=\/wp\/v2\/pages\/11\/revisions"}],"predecessor-version":[{"id":23,"href":"https:\/\/vivi-massage.com\/index.php?rest_route=\/wp\/v2\/pages\/11\/revisions\/23"}],"wp:attachment":[{"href":"https:\/\/vivi-massage.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}