{"product_id":"wolvina-plug-in-natural-marble-tube-wall-sconce","title":"Wolvina Plug-In Natural Marble Tube Wall Sconce","description":"\u003cstyle\u003e\n#fecify-typography-scope { scroll-behavior: auto; overflow-x: visible; display: flow-root; width: 100%; max-width: none; margin: 0; font-weight: 400 !important; }\n#fecify-typography-scope *, #fecify-typography-scope *::before, #fecify-typography-scope *::after { box-sizing: border-box; }\n#fecify-typography-scope img { display: block !important; max-width: 100% !important; width: 100% !important; height: auto !important; margin: 0 !important; padding: 0 !important; border: 0 !important; }\n#fecify-typography-scope video { display: block; max-width: 100%; width: 100%; height: auto; margin: 0 !important; }\n\n    #fecify-typography-scope {\n      --bg: #f3efe8; --ink: #1b1714; --text: #2c261f; --soft: #5c5348; --muted: #8a7d70;\n      --line: rgba(27, 23, 20, 0.1); --brass: #a68456; --brass-deep: #6d5332;\n      --metal: #2a2623; --paper: #fbf7f2; --glow: #f6e2c4;\n      --fs-eyebrow: 0.72rem; --fs-meta: 0.875rem; --fs-body: 1rem; --fs-lead: 1.05rem;\n      --fs-h3: 1.35rem; --fs-h2: clamp(1.7rem, 2.6vw, 2.15rem);\n      --fs-display: clamp(2.35rem, 4vw, 3.35rem);\n      --serif: \"Fraunces\", \"Iowan Old Style\", Palatino, serif;\n      --sans: \"Outfit\", \"Helvetica Neue\", Arial, sans-serif;\n      --max: 1120px; --ease: cubic-bezier(0.16, 1, 0.3, 1);\n      margin: 0; color: var(--text); background:\n        radial-gradient(ellipse 42% 28% at 100% 0%, rgba(166, 132, 86, 0.14), transparent 62%),\n        linear-gradient(180deg, #f7f3ec 0%, #f3efe8 55%, #ebe4da 100%);\n      font-family: var(--sans); font-size: var(--fs-body); font-weight: 400 !important;\n      line-height: 1.6; -webkit-font-smoothing: antialiased;\n    }\n    #fecify-typography-scope *, #fecify-typography-scope *::before, #fecify-typography-scope *::after { box-sizing: border-box; }\n    #fecify-typography-scope img { display: block !important; width: 100% !important; height: auto !important; max-width: 100% !important; margin: 0 !important; padding: 0 !important; border: 0; }\n    #fecify-typography-scope p, #fecify-typography-scope span, #fecify-typography-scope li, #fecify-typography-scope div { font-weight: inherit; }\n    #fecify-typography-scope .wrap { width: min(100% - 2.4rem, var(--max)); margin-inline: auto; }\n    #fecify-typography-scope .eyebrow {\n      display: flex; align-items: center; gap: 0.65rem; margin: 0 0 0.7rem;\n      color: var(--brass-deep); font-size: var(--fs-eyebrow); font-weight: 600 !important;\n      letter-spacing: 0.18em; text-transform: uppercase;\n    }\n    #fecify-typography-scope .eyebrow::before { content: \"\"; width: 1.4rem; height: 1px; background: var(--brass); }\n    #fecify-typography-scope .display {\n      margin: 0; font-family: var(--serif); font-size: var(--fs-display); font-weight: 500 !important;\n      font-optical-sizing: auto; line-height: 0.98; letter-spacing: -0.03em; color: var(--ink);\n    }\n    #fecify-typography-scope .h2 {\n      margin: 0; font-family: var(--serif); font-size: var(--fs-h2); font-weight: 500 !important;\n      line-height: 1.08; letter-spacing: -0.02em; color: var(--ink);\n    }\n    #fecify-typography-scope .h3 {\n      margin: 0; font-family: var(--serif); font-size: var(--fs-h3); font-weight: 560 !important;\n      line-height: 1.2; color: var(--ink);\n    }\n    #fecify-typography-scope .lead { margin: 0.75rem 0 0; max-width: 36rem; color: var(--soft); font-size: var(--fs-lead); line-height: 1.55; }\n    #fecify-typography-scope .body { margin: 0.4rem 0 0; color: var(--soft); line-height: 1.5; }\n    #fecify-typography-scope .section { padding: clamp(0.9rem, 2vw, 1.6rem) 0; }\n    #fecify-typography-scope .reveal { opacity: 1; transform: none; }\n    #fecify-typography-scope.js-animate .reveal { opacity: 0; transform: translateY(16px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); }\n    #fecify-typography-scope.js-animate .reveal.is-in { opacity: 1; transform: none; }\n\n    #fecify-typography-scope .hero-grid {\n      display: grid; grid-template-columns: 1.25fr 0.75fr; gap: clamp(0.7rem, 1.6vw, 1.2rem); align-items: stretch;\n    }\n    #fecify-typography-scope .media-frame {\n      position: relative; overflow: hidden; background: var(--metal); line-height: 0;\n      box-shadow: 0 18px 40px rgba(27, 23, 20, 0.12);\n    }\n    #fecify-typography-scope .swap-stack { display: grid; }\n    #fecify-typography-scope .swap-stack img { grid-area: 1 \/ 1; }\n    #fecify-typography-scope .swap-night { z-index: 1; opacity: 0; animation: wv-day-night 6.2s ease-in-out infinite; }\n    @keyframes wv-day-night { 0%, 16% { opacity: 0; } 40%, 62% { opacity: 1; } 86%, 100% { opacity: 0; } }\n    @media (prefers-reduced-motion: reduce) { #fecify-typography-scope .swap-night { animation: none; opacity: 1; } }\n    #fecify-typography-scope .media-frame.is-paused .swap-night { animation: none; }\n    #fecify-typography-scope .media-frame.is-on .swap-night { opacity: 1 !important; animation: none; }\n    #fecify-typography-scope .media-frame.is-off .swap-night { opacity: 0 !important; animation: none; }\n    #fecify-typography-scope .media-badge {\n      position: absolute; left: 0.85rem; bottom: 0.85rem; z-index: 2; cursor: pointer;\n      appearance: none; -webkit-appearance: none; font-family: inherit;\n      padding: 0.45rem 0.8rem; border: 0; background: var(--paper); color: var(--ink);\n      font-size: 0.72rem; font-weight: 600 !important; letter-spacing: 0.14em; text-transform: uppercase;\n    }\n    #fecify-typography-scope .hero-copy {\n      position: relative; display: flex; flex-direction: column; justify-content: center;\n      padding: 1.35rem 1.25rem; background: linear-gradient(145deg, #e9dfd3 0%, #d7c5b3 100%); color: #2c261f;\n    }\n    #fecify-typography-scope .hero-copy .eyebrow { color: #6d5332; }\n    #fecify-typography-scope .hero-copy .eyebrow::before { background: var(--glow); }\n    #fecify-typography-scope .hero-copy .display { color: #2c261f; }\n    #fecify-typography-scope .hero-copy .lead { max-width: 19rem; margin-top: 0.7rem; color: rgba(44, 38, 31, 0.78); }\n    #fecify-typography-scope .hero-meta {\n      display: flex; flex-wrap: wrap; gap: 0.35rem 0; margin: 1.15rem 0 0;\n      color: #6d5332; font-size: 0.72rem; font-weight: 600 !important; letter-spacing: 0.14em; text-transform: uppercase;\n    }\n    #fecify-typography-scope .hero-meta span + span { margin-left: 0.7rem; padding-left: 0.7rem; border-left: 1px solid rgba(44, 38, 31, 0.28); }\n    #fecify-typography-scope .corner {\n      position: absolute; width: 0.7rem; height: 0.7rem; border: 1.5px solid rgba(246, 240, 231, 0.32);\n    }\n    #fecify-typography-scope .corner.tr { top: 0.7rem; right: 0.7rem; }\n    #fecify-typography-scope .corner.bl { left: 0.7rem; bottom: 0.7rem; }\n\n    #fecify-typography-scope .section-head { margin-bottom: 1rem; max-width: 40rem; }\n    #fecify-typography-scope .detail-layout {\n      display: grid; grid-template-columns: minmax(230px, 280px) minmax(0, 1fr);\n      gap: 1rem 0.7rem; align-items: stretch;\n    }\n    #fecify-typography-scope .detail-copy {\n      position: relative; overflow: hidden; display: flex; flex-direction: column; gap: 0.55rem; min-height: 100%;\n      padding: 0.95rem 0.9rem 0.85rem; background: #1b1714; color: #f4ece3;\n    }\n    #fecify-typography-scope .detail-copy .eyebrow { color: #f0d7b0; }\n    #fecify-typography-scope .detail-copy .eyebrow::before { background: var(--glow); }\n    #fecify-typography-scope .detail-copy .h2 { color: #f6f0e7; }\n    #fecify-typography-scope .detail-copy .lead { max-width: none; margin-top: 0.4rem; color: rgba(244, 236, 227, 0.78); }\n    #fecify-typography-scope .material-pair { flex: 1; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; min-height: 5.4rem; }\n    #fecify-typography-scope .material-pair p {\n      display: flex; flex-direction: column; justify-content: flex-end; gap: 0.2rem;\n      margin: 0; padding: 0.7rem; min-height: 100%;\n    }\n    #fecify-typography-scope .material-pair .stone { background: linear-gradient(165deg, #f6f1e8, #e7d7be 72%, #cbb89a); color: #1b1714; }\n    #fecify-typography-scope .material-pair .metal { background: linear-gradient(165deg, #6a6258, #3c3732 60%, #2a2623); color: #f6f0e7; box-shadow: inset 0 0 0 1px rgba(246, 240, 231, 0.2); }\n    #fecify-typography-scope .material-pair span {\n      font-size: 0.68rem; font-weight: 600 !important; letter-spacing: 0.14em; text-transform: uppercase;\n    }\n    #fecify-typography-scope .material-pair strong { font-family: var(--serif); font-size: 1.15rem; font-weight: 500 !important; }\n    #fecify-typography-scope .detail-notes p {\n      display: grid; grid-template-columns: 2rem minmax(0, 1fr); gap: 0.1rem 0.6rem;\n      margin: 0; padding: 0.65rem 0 0; border-top: 1px solid rgba(246, 240, 231, 0.16);\n      color: rgba(244, 236, 227, 0.82); font-size: 0.92rem;\n    }\n    #fecify-typography-scope .detail-notes p + p { margin-top: 0.55rem; }\n    #fecify-typography-scope .detail-notes .idx {\n      grid-row: span 2; font-family: var(--serif); font-size: 1.2rem; line-height: 1;\n      color: var(--glow); font-weight: 500 !important;\n    }\n    #fecify-typography-scope .detail-notes .k {\n      color: #f6f0e7; font-size: 0.68rem; font-weight: 600 !important; letter-spacing: 0.14em; text-transform: uppercase;\n    }\n    #fecify-typography-scope .diptych {\n      display: grid; grid-template-columns: 1fr 1fr; gap: 0.45rem; align-items: start; width: 100%; margin: 0;\n    }\n    #fecify-typography-scope .diptych.carousel-track { display: grid; overflow: visible; cursor: default; touch-action: auto; }\n    #fecify-typography-scope .diptych-shot { position: relative; min-width: 0; margin: 0; overflow: hidden; background: #e7e0d6; }\n    #fecify-typography-scope .diptych-shot img { aspect-ratio: 1; height: auto !important; object-fit: cover; }\n    #fecify-typography-scope .diptych-shot figcaption {\n      position: absolute; left: 0.5rem; bottom: 0.5rem; z-index: 1; margin: 0;\n      padding: 0.22rem 0.45rem; background: rgba(20, 16, 12, 0.55); color: #f6f0e7;\n      font-size: 0.68rem; font-weight: 600 !important; letter-spacing: 0.14em; text-transform: uppercase;\n    }\n\n    #fecify-typography-scope .room-mosaic {\n      display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 0.4rem; align-items: start;\n    }\n    #fecify-typography-scope .room-mosaic.carousel-track { display: grid; overflow: visible; cursor: default; touch-action: auto; }\n    #fecify-typography-scope .room-card { position: relative; min-width: 0; margin: 0; overflow: hidden; background: var(--metal); }\n    #fecify-typography-scope .room-card:nth-child(1) { grid-column: 1 \/ span 8; aspect-ratio: 2.02 \/ 1; }\n    #fecify-typography-scope .room-card:nth-child(2) { grid-column: 9 \/ span 4; aspect-ratio: 1 \/ 1; }\n    #fecify-typography-scope .room-card:nth-child(3) { grid-column: 1 \/ span 4; aspect-ratio: 1 \/ 1; }\n    #fecify-typography-scope .room-card:nth-child(4) { grid-column: 5 \/ span 4; aspect-ratio: 1 \/ 1; }\n    #fecify-typography-scope .room-card:nth-child(5) { grid-column: 9 \/ span 4; aspect-ratio: 1 \/ 1; }\n    #fecify-typography-scope .room-card .shot { position: absolute; inset: 0; overflow: hidden; line-height: 0; }\n    #fecify-typography-scope .room-card .shot img { height: 100% !important; object-fit: cover; }\n    #fecify-typography-scope .room-card .cap {\n      position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;\n      padding: 1.15rem 0.8rem 0.6rem;\n      background: linear-gradient(180deg, transparent, rgba(20, 16, 12, 0.62));\n      color: #f6f0e7;\n    }\n    #fecify-typography-scope .room-card .cap .h3 { color: #f6f0e7; font-size: 1.2rem; }\n    #fecify-typography-scope .room-card .cap .body { color: rgba(246, 240, 231, 0.82); margin-top: 0.15rem; }\n\n    #fecify-typography-scope .reel { background: transparent; color: var(--text); }\n    #fecify-typography-scope .reel-grid {\n      display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n      gap: 0.8rem; align-items: stretch;\n    }\n    #fecify-typography-scope .reel-copy {\n      position: relative; overflow: hidden; display: flex; flex-direction: column; justify-content: center;\n      padding: 1.55rem 1.45rem 1.35rem; background: #1b1714; color: #f4ece3;\n      border-radius: 0;\n    }\n    #fecify-typography-scope .reel-copy .eyebrow { color: #f0d7b0; }\n    #fecify-typography-scope .reel-copy .eyebrow::before {\n      width: 0.42rem; height: 0.42rem; border-radius: 50%; background: var(--glow);\n    }\n    #fecify-typography-scope .reel-copy .h2 { max-width: 14rem; color: #f6f0e7; }\n    #fecify-typography-scope .reel-copy .lead { max-width: 26rem; color: rgba(244, 236, 227, 0.78); }\n    #fecify-typography-scope .reel-mark {\n      position: absolute; width: 0.85rem; height: 0.85rem; border-radius: 0;\n      border: 1.5px solid rgba(246, 240, 231, 0.28);\n    }\n    #fecify-typography-scope .reel-mark.tr { top: 0.85rem; right: 0.85rem; }\n    #fecify-typography-scope .reel-mark.bl { left: 0.85rem; bottom: 0.85rem; }\n    #fecify-typography-scope .reel-sketch {\n      position: absolute; right: 0.85rem; bottom: 1.15rem; width: 5rem; height: auto;\n      color: #f0d7b0; opacity: 0.35; pointer-events: none;\n    }\n    #fecify-typography-scope .reel-points { list-style: none !important; margin: 1.25rem 0 0; padding: 0 5.2rem 0.35rem 0; position: relative; z-index: 1; }\n    #fecify-typography-scope .reel-points li {\n      display: flex; align-items: center; gap: 0.7rem; margin: 0; padding: 0.72rem 0;\n      border-top: 1px solid rgba(246, 240, 231, 0.16); list-style: none !important;\n      color: #f4ece3; font-size: 0.98rem;\n    }\n    #fecify-typography-scope .reel-points li::before { content: none !important; }\n    #fecify-typography-scope .reel-points svg {\n      width: 1.05rem; height: 1.05rem; flex: 0 0 auto; stroke: rgba(244, 236, 227, 0.78); fill: none; stroke-width: 1.6;\n    }\n    #fecify-typography-scope .reel-stage {\n      position: relative; align-self: start; width: 100%; aspect-ratio: 1 \/ 1; min-height: 0; margin: 0; overflow: hidden; background: #100e0c; line-height: 0;\n      border-radius: 0;\n    }\n    #fecify-typography-scope .reel-stage video {\n      position: absolute; inset: 0; display: block !important; width: 100% !important; height: 100% !important;\n      max-width: none !important; margin: 0 !important; object-fit: cover; object-position: 28% center; background: #100e0c;\n    }\n    #fecify-typography-scope .reel-play {\n      position: absolute; left: 0.75rem; top: 0.75rem; z-index: 2; cursor: pointer;\n      appearance: none; -webkit-appearance: none; font-family: inherit;\n      padding: 0.42rem 0.75rem; border: 0; border-radius: 0; background: var(--paper); color: var(--ink);\n      font-size: 0.72rem; font-weight: 600 !important; letter-spacing: 0.14em; text-transform: uppercase;\n    }\n\n    #fecify-typography-scope .specs {\n      display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);\n      gap: clamp(1rem, 2.4vw, 2rem); align-items: start;\n      padding: clamp(1rem, 2vw, 1.4rem); background: var(--paper);\n      border: 1px solid rgba(27, 23, 20, 0.08);\n    }\n    #fecify-typography-scope .size-switch { display: flex; gap: 0.4rem; margin: 0 0 0.75rem; }\n    #fecify-typography-scope .size-btn {\n      appearance: none; -webkit-appearance: none; cursor: pointer; font-family: inherit;\n      padding: 0.4rem 0.7rem; border: 1px solid rgba(27, 23, 20, 0.16); background: transparent;\n      color: var(--soft); font-size: 0.78rem; font-weight: 600 !important; letter-spacing: 0.04em;\n    }\n    #fecify-typography-scope .size-btn.is-active { background: var(--metal); color: #f6f0e7; border-color: var(--metal); }\n    #fecify-typography-scope .size-track { display: flex; gap: 0; overflow-x: auto; scrollbar-width: none; background: #fff; }\n    #fecify-typography-scope .size-track::-webkit-scrollbar { display: none; }\n    #fecify-typography-scope .size-track \u003e img { flex: 0 0 100%; max-width: 100%; width: 100%; height: auto; }\n    #fecify-typography-scope .spec-list { margin: 0; padding: 0; border-top: 1px solid var(--line); }\n    #fecify-typography-scope .spec-row {\n      display: grid; grid-template-columns: 7.2rem minmax(0, 1fr); gap: 0.4rem 0.7rem;\n      padding: 0.48rem 0; border-bottom: 1px solid var(--line); align-items: center;\n    }\n    #fecify-typography-scope .spec-k { margin: 0; color: var(--muted); font-size: 0.95rem; font-weight: 500 !important; }\n    #fecify-typography-scope .spec-v { margin: 0; color: var(--text); font-size: 1rem; line-height: 1.45; }\n    #fecify-typography-scope .spec-chips { display: flex; flex-wrap: wrap; gap: 0.3rem; }\n    #fecify-typography-scope .spec-chips span {\n      padding: 0.18rem 0.5rem; border: 1px solid rgba(166, 132, 86, 0.4); color: var(--brass-deep); font-size: 0.88rem;\n    }\n\n    #fecify-typography-scope .carousel { position: relative; min-width: 0; }\n    #fecify-typography-scope .carousel-nav {\n      position: absolute; inset: 0; z-index: 3; display: flex; align-items: center; justify-content: space-between;\n      padding: 0 0.65rem; pointer-events: none;\n    }\n    #fecify-typography-scope .carousel-dots { display: none; justify-content: center; gap: 0.4rem; margin-top: 0.75rem; }\n    #fecify-typography-scope .carousel-dots:empty, #fecify-typography-scope .carousel-dots.is-disabled, #fecify-typography-scope .carousel-nav.is-disabled { display: none !important; }\n    #fecify-typography-scope .carousel-dot {\n      width: 0.42rem; height: 0.42rem; padding: 0; border: 0; border-radius: 50%;\n      background: rgba(27, 23, 20, 0.22); cursor: pointer; appearance: none; -webkit-appearance: none;\n    }\n    #fecify-typography-scope .carousel-dot.is-active { background: var(--brass-deep); }\n    #fecify-typography-scope .carousel-track.is-dragging { cursor: grabbing; }\n    #fecify-typography-scope .carousel-btn {\n      display: grid; place-items: center; width: 2.2rem; height: 2.2rem; padding: 0; pointer-events: auto;\n      border: 1px solid rgba(246, 240, 231, 0.72); background: rgba(27, 23, 20, 0.58); color: #f6f0e7;\n      cursor: pointer; appearance: none; -webkit-appearance: none; font: inherit; line-height: 1;\n    }\n    #fecify-typography-scope .carousel-btn::before { font-size: 1.25rem; font-weight: 400; }\n    #fecify-typography-scope .carousel-prev::before { content: \"‹\"; }\n    #fecify-typography-scope .carousel-next::before { content: \"›\"; }\n    #fecify-typography-scope .carousel-btn:focus-visible { outline: 2px solid var(--glow); outline-offset: 2px; }\n    #fecify-typography-scope .carousel-nav.is-disabled { display: none !important; }\n\n    @media (max-width: 980px) {\n      #fecify-typography-scope .hero-grid, #fecify-typography-scope .specs, #fecify-typography-scope .detail-layout, #fecify-typography-scope .reel-grid { grid-template-columns: 1fr; }\n      #fecify-typography-scope .reel-stage { aspect-ratio: 1; min-height: 0; }\n      #fecify-typography-scope .detail-copy { padding: 0.95rem 0.9rem 0.85rem; }\n      #fecify-typography-scope .hero-copy { border-top: 0; }\n    }\n    @media (max-width: 720px) {\n      #fecify-typography-scope {\n        --fs-display: 2.15rem; --fs-h2: 1.7rem;\n        width: 100vw !important; max-width: 100vw !important;\n        margin-left: calc(50% - 50vw) !important; margin-right: calc(50% - 50vw) !important;\n        padding-left: max(24px, env(safe-area-inset-left, 0px)) !important;\n        padding-right: max(24px, env(safe-area-inset-right, 0px)) !important;\n        box-sizing: border-box !important;\n      }\n      #fecify-typography-scope .wrap { width: 100%; }\n      #fecify-typography-scope .diptych.carousel-track, #fecify-typography-scope .room-mosaic.carousel-track, #fecify-typography-scope .size-track.carousel-track {\n        display: flex !important; overflow-x: auto !important; gap: 0;\n        scroll-behavior: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; touch-action: pan-y;\n        overscroll-behavior-x: contain; scrollbar-width: none; cursor: grab;\n      }\n      #fecify-typography-scope .diptych.carousel-track::-webkit-scrollbar,\n      #fecify-typography-scope .room-mosaic.carousel-track::-webkit-scrollbar { display: none; }\n      #fecify-typography-scope .diptych { width: 100%; margin-left: 0; }\n      #fecify-typography-scope .diptych.carousel-track \u003e *, #fecify-typography-scope .room-mosaic.carousel-track \u003e * {\n        flex: 0 0 100%; max-width: 100%; scroll-snap-align: start;\n      }\n      #fecify-typography-scope .size-track.carousel-track \u003e img { scroll-snap-align: start; }\n      #fecify-typography-scope .diptych-shot img { aspect-ratio: 1; }\n      #fecify-typography-scope .room-card,\n      #fecify-typography-scope .room-card:nth-child(1),\n      #fecify-typography-scope .room-card:nth-child(2),\n      #fecify-typography-scope .room-card:nth-child(3),\n      #fecify-typography-scope .room-card:nth-child(4),\n      #fecify-typography-scope .room-card:nth-child(5) { grid-column: auto; aspect-ratio: 1; }\n      #fecify-typography-scope .carousel-dots { display: flex; }\n      #fecify-typography-scope .carousel-nav { padding: 0 0.4rem; }\n      #fecify-typography-scope .carousel-btn { width: 2rem; height: 2rem; }\n      #fecify-typography-scope .spec-row { grid-template-columns: 1fr; gap: 0.12rem; }\n      .el-collapse-item__wrap:has(#ml-wolvina-pdp), .el-collapse-item__wrap:has(#fecify-typography-scope),\n      .el-collapse-item__content:has(#ml-wolvina-pdp), .el-collapse-item__content:has(#fecify-typography-scope),\n      .body_html:has(#ml-wolvina-pdp), .body_html:has(#fecify-typography-scope) {\n        overflow: visible !important; height: auto !important; max-height: none !important;\n      }\n      .body_html:has(#ml-wolvina-pdp), .body_html:has(#fecify-typography-scope) {\n        width: 100vw !important; max-width: 100vw !important;\n        margin-left: calc(50% - 50vw) !important; margin-right: calc(50% - 50vw) !important;\n        padding-left: 0 !important; padding-right: 0 !important; background: transparent !important;\n      }\n    }\n\n\u003c\/style\u003e\u003cdiv id=\"fecify-typography-scope\"\u003e\n\u003csection class=\"section\"\u003e\u003cdiv class=\"wrap hero-grid reveal\"\u003e\n\u003cdiv class=\"media-frame\" aria-label=\"On and off light comparison\"\u003e\n\u003cdiv class=\"swap-stack\"\u003e\n\u003cimg class=\"swap-day\" src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/766d00452b8774ddc260d09488a321f2.jpg\" alt=\"Wolvina marble tube sconce unlit in a living room\" width=\"1536\" height=\"1024\"\u003e \u003cimg class=\"swap-night\" src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/8b609216c6a8e0b19a8b0ba8befe42d7.jpg\" alt=\"Wolvina marble tube sconce glowing in a living room\" width=\"1536\" height=\"1024\"\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"media-badge\" aria-label=\"Toggle on and off light preview\"\u003eOn \/ Off\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"hero-copy\"\u003e\n\u003cspan class=\"corner tr\" aria-hidden=\"true\"\u003e\u003c\/span\u003e \u003cspan class=\"corner bl\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cdiv\u003e\n\u003cp class=\"eyebrow\"\u003eMarble wall sconce\u003c\/p\u003e\n\u003ch1 class=\"display\"\u003eA quiet glow, shaped by stone.\u003c\/h1\u003e\n\u003cp class=\"lead\"\u003eNatural marble softens the light from within; the open base lets its warmth spill gently into the room.\u003c\/p\u003e\n\u003cp class=\"hero-meta\"\u003e\u003cspan\u003eStone\u003c\/span\u003e\u003cspan\u003eMetal\u003c\/span\u003e\u003cspan\u003eSwitch\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\u003csection class=\"section\"\u003e\u003cdiv class=\"wrap detail-layout\"\u003e\n\u003cdiv class=\"detail-copy reveal\"\u003e\n\u003cspan class=\"corner tr\" aria-hidden=\"true\"\u003e\u003c\/span\u003e \u003cspan class=\"corner bl\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cdiv\u003e\n\u003cp class=\"eyebrow\"\u003eTwo materials\u003c\/p\u003e\n\u003ch2 class=\"h2\"\u003eVein, then metal.\u003c\/h2\u003e\n\u003cp class=\"lead\"\u003eThe stone is the shade.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"material-pair\"\u003e\n\u003cp class=\"stone\"\u003e\u003cspan\u003eStone\u003c\/span\u003e\u003cstrong\u003eThe vein\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"metal\"\u003e\u003cspan\u003eMetal\u003c\/span\u003e\u003cstrong\u003eThe plate\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"detail-notes\"\u003e\n\u003cp\u003e\u003cspan class=\"idx\"\u003e01\u003c\/span\u003e\u003cspan class=\"k\"\u003eStone\u003c\/span\u003eLight at the open base.\u003c\/p\u003e\n\u003cp\u003e\u003cspan class=\"idx\"\u003e02\u003c\/span\u003e\u003cspan class=\"k\"\u003eMetal\u003c\/span\u003eTwo screws, then the cord.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel\" data-loop=\"1\"\u003e\n\u003cdiv class=\"diptych carousel-track\"\u003e\n\u003cfigure class=\"diptych-shot reveal\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/90dbc9f09d9b8164903f2735f57e7219.jpg\" alt=\"Glowing marble tube with an open base\" width=\"1254\" height=\"1254\"\u003e\u003cfigcaption\u003eStone\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure class=\"diptych-shot reveal\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/dcd849dffc8c3e42b63205b3f762b83a.jpg\" alt=\"Slim metal backplate and short arm\" width=\"1254\" height=\"1254\"\u003e\u003cfigcaption\u003eMetal\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel-nav\" aria-label=\"Detail slide controls\"\u003e\n\u003cbutton type=\"button\" class=\"carousel-btn carousel-prev\" aria-label=\"Previous detail slide\"\u003e\u003c\/button\u003e \u003cbutton type=\"button\" class=\"carousel-btn carousel-next\" aria-label=\"Next detail slide\"\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel-dots\" aria-label=\"Detail slides\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\u003csection class=\"section\"\u003e\u003cdiv class=\"wrap\"\u003e\u003cdiv class=\"carousel\" data-loop=\"1\"\u003e\n\u003cdiv class=\"section-head reveal\"\u003e\n\u003cp class=\"eyebrow\"\u003eRooms\u003c\/p\u003e\n\u003ch2 class=\"h2\"\u003eA column for quiet walls.\u003c\/h2\u003e\n\u003cp class=\"lead\"\u003eConsole, study, living, breakfast, and the entry.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"room-mosaic carousel-track\"\u003e\n\u003carticle class=\"room-card reveal\"\u003e\u003cdiv class=\"shot\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/13\/fdd6d3439951dcbc8d7865c9135042ba.jpg\" alt=\"Calacatta marble tube sconce beside a console and archway\" width=\"1821\" height=\"864\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"cap\"\u003e\n\u003ch3 class=\"h3\"\u003eConsole\u003c\/h3\u003e\n\u003cp class=\"body\"\u003eCalacatta and brass by the sideboard.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\u003carticle class=\"room-card reveal\"\u003e\u003cdiv class=\"shot\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/ad8ddaa1a3c2321dabc476fe21fdadc3.jpg\" alt=\"Brass marble tube sconce in a study\" width=\"1254\" height=\"1254\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"cap\"\u003e\n\u003ch3 class=\"h3\"\u003eStudy\u003c\/h3\u003e\n\u003cp class=\"body\"\u003eTumbled brass by the desk.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\u003carticle class=\"room-card reveal\"\u003e\u003cdiv class=\"shot\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/df3b019cb49f0bb2c9f19372ac158d90.jpg\" alt=\"Chrome marble tube sconce beside a chair\" width=\"1254\" height=\"1254\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"cap\"\u003e\n\u003ch3 class=\"h3\"\u003eLiving\u003c\/h3\u003e\n\u003cp class=\"body\"\u003eChrome beside the chair.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\u003carticle class=\"room-card reveal\"\u003e\u003cdiv class=\"shot\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/13\/319d52246b7b364862a5d6d7afac3559.jpg\" alt=\"Calacatta marble tube sconce in a breakfast nook\" width=\"1254\" height=\"1254\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"cap\"\u003e\n\u003ch3 class=\"h3\"\u003eBreakfast\u003c\/h3\u003e\n\u003cp class=\"body\"\u003eCalacatta veining with morning coffee.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\u003carticle class=\"room-card reveal\"\u003e\u003cdiv class=\"shot\"\u003e\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/b3cf0875247aaf049ce2589e3e874b24.jpg\" alt=\"Marble tube sconce in an entryway\" width=\"1254\" height=\"1254\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"cap\"\u003e\n\u003ch3 class=\"h3\"\u003eEntry\u003c\/h3\u003e\n\u003cp class=\"body\"\u003eA quiet welcome over the console.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel-nav\" aria-label=\"Room slide controls\"\u003e\n\u003cbutton type=\"button\" class=\"carousel-btn carousel-prev\" aria-label=\"Previous room slide\"\u003e\u003c\/button\u003e \u003cbutton type=\"button\" class=\"carousel-btn carousel-next\" aria-label=\"Next room slide\"\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel-dots\" aria-label=\"Room slides\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\u003c\/section\u003e\u003csection class=\"section reel\"\u003e\u003cdiv class=\"wrap reel-grid reveal\"\u003e\n\u003cdiv class=\"reel-copy\"\u003e\n\u003cspan class=\"reel-mark tr\" aria-hidden=\"true\"\u003e\u003c\/span\u003e \u003cspan class=\"reel-mark bl\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cp class=\"eyebrow\"\u003eIn motion\u003c\/p\u003e\n\u003ch2 class=\"h2\"\u003eSee the stone light up.\u003c\/h2\u003e\n\u003cp class=\"lead\"\u003eA marble tube on a metal plate. Watch the glow gather at the open base.\u003c\/p\u003e\n\u003cul class=\"reel-points\"\u003e\n\u003cli\u003e\n\u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003crect x=\"7\" y=\"3\" width=\"8\" height=\"16\" rx=\"4\"\u003e\u003c\/rect\u003e\u003cpath d=\"M11 19v2\"\u003e\u003c\/path\u003e\u003c\/svg\u003eMarble tube shade\u003c\/li\u003e\n\u003cli\u003e\n\u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"3.2\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 3.5v2.2M12 18.3v2.2M3.5 12h2.2M18.3 12h2.2\"\u003e\u003c\/path\u003e\u003c\/svg\u003eGlow from the open base\u003c\/li\u003e\n\u003cli\u003e\n\u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003crect x=\"8\" y=\"4\" width=\"8\" height=\"16\" rx=\"1.2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M4 12h4\"\u003e\u003c\/path\u003e\u003c\/svg\u003eSlim metal plate\u003c\/li\u003e\n\u003cli\u003e\n\u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3v18\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"16\" r=\"2.2\"\u003e\u003c\/circle\u003e\u003c\/svg\u003eSwitch on the cord\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003csvg class=\"reel-sketch\" viewbox=\"0 0 120 150\" aria-hidden=\"true\"\u003e \u003crect x=\"34\" y=\"6\" width=\"28\" height=\"96\" rx=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\u003e\u003c\/rect\u003e \u003cpath d=\"M62 58h28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\u003e\u003c\/path\u003e \u003crect x=\"86\" y=\"32\" width=\"22\" height=\"52\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\u003e\u003c\/rect\u003e \u003cpath d=\"M48 102v28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\u003e\u003c\/path\u003e \u003ccircle cx=\"48\" cy=\"136\" r=\"3.2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\u003e\u003c\/circle\u003e \u003c\/svg\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"reel-stage\"\u003e\n\u003cvideo width=\"300\" height=\"150\" class=\"reel-video\" poster=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/12\/8b609216c6a8e0b19a8b0ba8befe42d7.jpg\" autoplay=\"autoplay\" muted=\"\" loop=\"loop\" playsinline=\"\" controls=\"controls\" preload=\"metadata\" aria-label=\"Wolvina marble tube sconce switched on\"\u003e\n            \u003csource src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/video\/2026\/10\/13\/c51d42d8ade1296892f52e6f096f9ad7.mp4\" type=\"video\/mp4\"\u003e\u003c\/video\u003e \u003cbutton type=\"button\" class=\"reel-play\" aria-label=\"Pause the sconce film\"\u003ePause\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\u003csection class=\"section\"\u003e\u003cdiv class=\"wrap\"\u003e\n\u003cdiv class=\"section-head reveal\"\u003e\n\u003cp class=\"eyebrow\"\u003eSpecifications\u003c\/p\u003e\n\u003ch2 class=\"h2\"\u003eTwo stones, one drawing each.\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"specs reveal\"\u003e\n\u003cdiv class=\"size-block\"\u003e\n\u003cdiv class=\"size-switch\" role=\"group\" aria-label=\"Marble size\"\u003e\n\u003cbutton type=\"button\" class=\"size-btn is-active\" data-size=\"0\"\u003eNatural Marble\u003c\/button\u003e \u003cbutton type=\"button\" class=\"size-btn\" data-size=\"1\"\u003eCalacatta\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel\" data-loop=\"1\"\u003e\n\u003cdiv class=\"size-track carousel-track\"\u003e\n\u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/13\/7929f5d6c862742d87d2494d3eac2d77.jpg\" alt=\"Natural Marble size diagram, W 4 in by H 13 in\" width=\"1254\" height=\"1254\"\u003e \u003cimg src=\"https:\/\/7889264f09.yunchenkeji.com\/media\/custom_1088\/585\/image\/2026\/10\/13\/834503f49c73d32b7f6ba2b1e4a92443.jpg\" alt=\"Calacatta size diagram, W 2.8 in by H 9.5 in\" width=\"1254\" height=\"1254\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"carousel-dots\" aria-label=\"Size diagrams\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-list\"\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eProduct type\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003ePlug-in wall sconce\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eNatural Marble\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eW 4 × D 6 × H 13 in \/ 10.2 × 15.2 × 33 cm\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eCalacatta\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eW 2.8 × D 3.5 × H 9.5 in \/ 7 × 9 × 24 cm\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eBackplate\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eW 4 × H 6 × D 1 in \/ 10.2 × 15.2 × 2.5 cm\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eShade\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eNatural marble tube\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eMaterials\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eIron \u0026amp; marble\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eFinish\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003e\u003cdiv class=\"spec-chips\"\u003e\n\u003cspan\u003eTumbled Brass\u003c\/span\u003e\u003cspan\u003eBronze\u003c\/span\u003e\u003cspan\u003eChrome\u003c\/span\u003e\u003cspan\u003eAged Brass\u003c\/span\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eMarble\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003e\u003cdiv class=\"spec-chips\"\u003e\n\u003cspan\u003eNatural Marble\u003c\/span\u003e\u003cspan\u003eCalacatta\u003c\/span\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eSocket\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eE12 \/ G9\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eBulb\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eNot included\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eCord\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003e70.87 in \/ 180 cm\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cdiv class=\"spec-k\"\u003eControl\u003c\/div\u003e\n\u003cdiv class=\"spec-v\"\u003eInline push-button switch\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\u003cscript\u003e\n    (function () {\n      var roots = [];\n      function addRoot(el) {\n        if (!el || roots.indexOf(el) !== -1) return;\n        roots.push(el);\n      }\n      addRoot(document.getElementById(\"fecify-typography-scope\"));\n      Array.prototype.forEach.call(document.querySelectorAll(\"#fecify-typography-scope\"), addRoot);\n      if (!roots.length) return;\n      var wrap = function (i, n) { return ((i % n) + n) % n; };\n\n      function unclipAncestors(root) {\n        var node = root.parentElement, depth = 0;\n        while (node \u0026\u0026 node !== document.body \u0026\u0026 depth \u003c 14) {\n          var cs = window.getComputedStyle(node);\n          if (cs.overflow !== \"visible\" || cs.overflowX !== \"visible\" || cs.overflowY !== \"visible\") {\n            node.style.setProperty(\"overflow\", \"visible\", \"important\");\n          }\n          if (node.classList \u0026\u0026 (node.classList.contains(\"el-collapse-item__wrap\") || node.classList.contains(\"el-collapse-item__content\") || node.classList.contains(\"body_html\") || node.classList.contains(\"rte\") || node.classList.contains(\"product-single__description\"))) {\n            node.style.setProperty(\"overflow\", \"visible\", \"important\");\n            if (node.classList.contains(\"el-collapse-item__wrap\")) node.style.setProperty(\"height\", \"auto\", \"important\");\n          }\n          node = node.parentElement; depth += 1;\n        }\n      }\n      function applyBleed(root) {\n        if (window.innerWidth \u003e 720) {\n          root.style.removeProperty(\"width\"); root.style.removeProperty(\"max-width\");\n          root.style.removeProperty(\"margin-left\"); root.style.removeProperty(\"margin-right\");\n          root.style.removeProperty(\"position\"); return;\n        }\n        unclipAncestors(root);\n        root.style.setProperty(\"width\", \"100vw\", \"important\");\n        root.style.setProperty(\"max-width\", \"100vw\", \"important\");\n        root.style.setProperty(\"margin-left\", \"calc(50% - 50vw)\", \"important\");\n        root.style.setProperty(\"margin-right\", \"calc(50% - 50vw)\", \"important\");\n        root.style.setProperty(\"box-sizing\", \"border-box\", \"important\");\n        root.style.setProperty(\"position\", \"relative\", \"important\");\n        root.style.setProperty(\"overflow-x\", \"visible\", \"important\");\n      }\n      function stepWidth(track) {\n        var item = track.children[0];\n        if (!item) return 280;\n        var styles = window.getComputedStyle(track);\n        var gap = parseFloat(styles.columnGap || styles.gap || \"0\") || 0;\n        return Math.max(160, item.getBoundingClientRect().width + gap);\n      }\n      function bindSwap(root) {\n        root.querySelectorAll(\".media-frame\").forEach(function (frame) {\n          var badge = frame.querySelector(\".media-badge\");\n          if (!badge || badge.getAttribute(\"data-bound\") === \"1\") return;\n          badge.setAttribute(\"data-bound\", \"1\");\n          var mode = \"auto\";\n          badge.addEventListener(\"click\", function () {\n            if (mode === \"auto\" || mode === \"off\") {\n              mode = \"on\"; frame.classList.add(\"is-paused\", \"is-on\"); frame.classList.remove(\"is-off\");\n            } else {\n              mode = \"off\"; frame.classList.add(\"is-paused\", \"is-off\"); frame.classList.remove(\"is-on\");\n            }\n          });\n        });\n      }\n      function bindCarousels(root) {\n        root.querySelectorAll(\".carousel\").forEach(function (carousel) {\n          var track = carousel.querySelector(\".carousel-track\");\n          if (!track || track.getAttribute(\"data-bound\") === \"1\") return;\n          track.setAttribute(\"data-bound\", \"1\");\n          var n = track.children.length;\n          if (!n) return;\n          var loop = carousel.getAttribute(\"data-loop\") === \"1\";\n          var idx = 0, lockUntil = 0;\n          var dotsWrap = carousel.querySelector(\".carousel-dots\");\n          var nav = carousel.querySelector(\".carousel-nav\");\n          var prev = nav \u0026\u0026 nav.querySelector(\".carousel-prev\");\n          var next = nav \u0026\u0026 nav.querySelector(\".carousel-next\");\n          var sizeBlock = carousel.parentElement \u0026\u0026 carousel.parentElement.classList.contains(\"size-block\") ? carousel.parentElement : null;\n          function maxScroll() { return Math.max(0, track.scrollWidth - track.clientWidth); }\n          function paintSize() {\n            if (!sizeBlock) return;\n            Array.prototype.forEach.call(sizeBlock.querySelectorAll(\".size-btn\"), function (b) {\n              b.classList.toggle(\"is-active\", String(b.getAttribute(\"data-size\")) === String(idx));\n            });\n          }\n          function renderDots() {\n            if (!dotsWrap) return;\n            var disabled = n \u003c 2 || maxScroll() \u003c 8;\n            if (nav) nav.classList.toggle(\"is-disabled\", disabled);\n            if (disabled) { dotsWrap.classList.add(\"is-disabled\"); dotsWrap.innerHTML = \"\"; return; }\n            dotsWrap.classList.remove(\"is-disabled\");\n            dotsWrap.innerHTML = \"\";\n            for (var i = 0; i \u003c n; i++) {\n              (function (i) {\n                var b = document.createElement(\"button\");\n                b.type = \"button\";\n                b.className = \"carousel-dot\" + (i === idx ? \" is-active\" : \"\");\n                b.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n                b.addEventListener(\"click\", function () { show(i); });\n                dotsWrap.appendChild(b);\n              })(i);\n            }\n          }\n          function syncFromScroll() {\n            var w = stepWidth(track);\n            if (w \u003c 1 || maxScroll() \u003c 8) return;\n            idx = wrap(Math.round(track.scrollLeft \/ w), n);\n            if (dotsWrap) Array.prototype.forEach.call(dotsWrap.children, function (d, i) { d.classList.toggle(\"is-active\", i === idx); });\n            paintSize();\n          }\n          function easeTo(left) {\n            if (window.matchMedia \u0026\u0026 window.matchMedia(\"(max-width: 720px)\").matches \u0026\u0026 typeof track.scrollTo === \"function\") {\n              track.scrollTo({ left: left, behavior: \"smooth\" });\n              return;\n            }\n            var from = track.scrollLeft;\n            var dist = left - from;\n            if (track._raf) cancelAnimationFrame(track._raf);\n            if (Math.abs(dist) \u003c 1) { track.scrollLeft = left; return; }\n            var t0 = performance.now();\n            var dur = Math.min(420, 220 + Math.abs(dist) * 0.28);\n            function frame(now) {\n              var p = Math.min(1, (now - t0) \/ dur);\n              var e = 1 - Math.pow(1 - p, 3);\n              track.scrollLeft = from + dist * e;\n              if (p \u003c 1) track._raf = requestAnimationFrame(frame);\n              else track.scrollLeft = left;\n            }\n            track._raf = requestAnimationFrame(frame);\n          }\n          function show(i) {\n            if (Date.now() \u003c lockUntil) return;\n            idx = loop ? wrap(i, n) : wrap(i, n);\n            var left = idx * stepWidth(track);\n            var max = maxScroll();\n            if (left \u003e max) left = max;\n            lockUntil = Date.now() + 380;\n            renderDots(); paintSize();\n            easeTo(left);\n          }\n          if (prev) prev.addEventListener(\"click\", function () { step(-1); });\n          if (next) next.addEventListener(\"click\", function () { step(1); });\n          function perView() {\n            var w = stepWidth(track);\n            if (w \u003c 1) return 1;\n            var count = Math.round(track.clientWidth \/ w);\n            return count \u003c 1 ? 1 : count;\n          }\n          function step(dir) {\n            if (maxScroll() \u003c 8) return;\n            if (perView() \u003e 1 \u0026\u0026 dir \u003e 0 \u0026\u0026 track.scrollLeft \u003e= maxScroll() - 4) show(0);\n            else if (perView() \u003e 1 \u0026\u0026 dir \u003c 0 \u0026\u0026 track.scrollLeft \u003c= 4) show(Math.round(maxScroll() \/ stepWidth(track)));\n            else show(idx + dir);\n          }\n          if (sizeBlock \u0026\u0026 sizeBlock.getAttribute(\"data-bound\") !== \"1\") {\n            sizeBlock.setAttribute(\"data-bound\", \"1\");\n            Array.prototype.forEach.call(sizeBlock.querySelectorAll(\".size-btn\"), function (b) {\n              b.addEventListener(\"click\", function () { show(Number(b.getAttribute(\"data-size\")) || 0); });\n            });\n          }\n          var startX = 0, startY = 0, gesturing = false, axis = null, originLeft = 0, startIdx = 0;\n          track.addEventListener(\"touchstart\", function (e) {\n            if (!e.touches || !e.touches[0] || maxScroll() \u003c 8) return;\n            if (track._raf) cancelAnimationFrame(track._raf);\n            startX = e.touches[0].clientX; startY = e.touches[0].clientY;\n            originLeft = track.scrollLeft; startIdx = idx; gesturing = true; axis = null;\n          }, { passive: true });\n          track.addEventListener(\"touchmove\", function (e) {\n            if (!gesturing || !e.touches || !e.touches[0]) return;\n            var dx = e.touches[0].clientX - startX, dy = e.touches[0].clientY - startY;\n            if (!axis \u0026\u0026 (Math.abs(dx) \u003e 6 || Math.abs(dy) \u003e 6)) axis = Math.abs(dx) \u003e Math.abs(dy) ? \"x\" : \"y\";\n            if (axis === \"x\") {\n              e.preventDefault();\n              track.scrollLeft = originLeft - dx;\n            }\n          }, { passive: false });\n          track.addEventListener(\"touchend\", function (e) {\n            if (!gesturing) return;\n            gesturing = false;\n            if (axis !== \"x\") return;\n            var tch = e.changedTouches \u0026\u0026 e.changedTouches[0];\n            if (!tch) return;\n            var dx = tch.clientX - startX;\n            if (Math.abs(dx) \u003c 28) { easeTo(idx * stepWidth(track)); return; }\n            if (Date.now() \u003c lockUntil) { easeTo(idx * stepWidth(track)); return; }\n            show(startIdx + (dx \u003c 0 ? 1 : -1));\n          }, { passive: true });\n          track.addEventListener(\"touchcancel\", function () {\n            gesturing = false; axis = null;\n          }, { passive: true });\n          track.addEventListener(\"scroll\", function () {\n            window.clearTimeout(track._syncT);\n            track._syncT = window.setTimeout(syncFromScroll, 80);\n          }, { passive: true });\n          var drag = false, dStartX = 0, dStartLeft = 0, dragStartIdx = 0, moved = false;\n          track.addEventListener(\"pointerdown\", function (e) {\n            if (e.pointerType !== \"mouse\" || e.button !== 0 || maxScroll() \u003c 8) return;\n            drag = true; moved = false; dStartX = e.clientX; dStartLeft = track.scrollLeft; dragStartIdx = idx;\n            track.classList.add(\"is-dragging\");\n            try { track.setPointerCapture(e.pointerId); } catch (err) {}\n          });\n          track.addEventListener(\"pointermove\", function (e) {\n            if (!drag) return;\n            var dx = e.clientX - dStartX;\n            if (Math.abs(dx) \u003e 3) moved = true;\n            track.scrollLeft = dStartLeft - dx;\n          });\n          track.addEventListener(\"pointerup\", function (e) {\n            if (!drag) return;\n            drag = false; track.classList.remove(\"is-dragging\");\n            try { track.releasePointerCapture(e.pointerId); } catch (err) {}\n            if (!moved || maxScroll() \u003c 8) return;\n            var dx = e.clientX - dStartX;\n            if (Math.abs(dx) \u003e= 28 \u0026\u0026 Date.now() \u003e= lockUntil) show(dragStartIdx + (dx \u003c 0 ? 1 : -1));\n            else easeTo(idx * stepWidth(track));\n          });\n          track.addEventListener(\"pointercancel\", function () { drag = false; track.classList.remove(\"is-dragging\"); });\n          track.addEventListener(\"click\", function (e) { if (moved) { e.preventDefault(); e.stopPropagation(); } }, true);\n          renderDots();\n          window.addEventListener(\"resize\", function () {\n            renderDots();\n            if (maxScroll() \u003c 8) return;\n            show(idx);\n          });\n          window.setTimeout(function () { syncFromScroll(); renderDots(); }, 80);\n        });\n      }\n      function bindReel(root) {\n        var vid = root.querySelector(\".reel-video\");\n        var btn = root.querySelector(\".reel-play\");\n        if (!vid || !btn) return;\n        var reduce = window.matchMedia \u0026\u0026 window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n        function paint() {\n          var paused = vid.paused;\n          btn.textContent = paused ? \"Play\" : \"Pause\";\n          btn.setAttribute(\"aria-label\", paused ? \"Play the sconce film\" : \"Pause the sconce film\");\n        }\n        btn.addEventListener(\"click\", function () {\n          if (vid.paused) { var p = vid.play(); if (p \u0026\u0026 p.catch) p.catch(function () {}); }\n          else vid.pause();\n        });\n        vid.addEventListener(\"play\", paint);\n        vid.addEventListener(\"pause\", paint);\n        if (reduce) { vid.removeAttribute(\"autoplay\"); vid.pause(); }\n        paint();\n      }\n      function initRoot(root) {\n        if (root.getAttribute(\"data-wolvina-ready\") === \"1\") return;\n        root.setAttribute(\"data-wolvina-ready\", \"1\");\n        root.classList.add(\"js-animate\");\n        if (\"IntersectionObserver\" in window) {\n          var io = new IntersectionObserver(function (entries) {\n            entries.forEach(function (entry) {\n              if (entry.isIntersecting) { entry.target.classList.add(\"is-in\"); io.unobserve(entry.target); }\n            });\n          }, { threshold: 0.12, rootMargin: \"0px 0px -4% 0px\" });\n          root.querySelectorAll(\".reveal\").forEach(function (el) { io.observe(el); });\n        } else {\n          root.querySelectorAll(\".reveal\").forEach(function (el) { el.classList.add(\"is-in\"); });\n        }\n        applyBleed(root);\n        window.addEventListener(\"resize\", function () { applyBleed(root); });\n        window.setTimeout(function () { applyBleed(root); }, 300);\n        window.setTimeout(function () { applyBleed(root); }, 1000);\n        document.addEventListener(\"click\", function () {\n          window.setTimeout(function () { applyBleed(root); }, 50);\n          window.setTimeout(function () { applyBleed(root); }, 350);\n        }, true);\n        bindSwap(root);\n        bindReel(root);\n        bindCarousels(root);\n      }\n      roots.forEach(initRoot);\n    })();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"monulo","offers":[{"title":"Tumbled Brass \/ Natural Marble \/ US Plug","offer_id":67826191138974,"sku":"Hotplugin-walllamp-1020455","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Bronze \/ Natural Marble \/ US Plug","offer_id":67826191171742,"sku":"Hotplugin-walllamp-1020454","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Chrome \/ Natural Marble \/ US Plug","offer_id":67826191204510,"sku":"Hotplugin-walllamp-1020453","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Aged Brass \/ Calacatta Marble \/ US Plug","offer_id":67826191237278,"sku":"Hotplugin-walllamp-1020452","price":314.0,"currency_code":"USD","in_stock":true},{"title":"Tumbled Brass \/ Natural Marble \/ UK Plug","offer_id":67826191270046,"sku":"Hotplugin-walllamp-1020451","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Tumbled Brass \/ Natural Marble \/ AU Plug","offer_id":67826191302814,"sku":"Hotplugin-walllamp-1020450","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Tumbled Brass \/ Natural Marble \/ EU Plug","offer_id":67826191335582,"sku":"Hotplugin-walllamp-1020449","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Bronze \/ Natural Marble \/ UK Plug","offer_id":67826191368350,"sku":"Hotplugin-walllamp-1020448","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Bronze \/ Natural Marble \/ AU Plug","offer_id":67826191401118,"sku":"Hotplugin-walllamp-1020447","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Bronze \/ Natural Marble \/ EU Plug","offer_id":67826191433886,"sku":"Hotplugin-walllamp-1020446","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Chrome \/ Natural Marble \/ UK Plug","offer_id":67826191466654,"sku":"Hotplugin-walllamp-1020445","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Chrome \/ Natural Marble \/ AU Plug","offer_id":67826191499422,"sku":"Hotplugin-walllamp-1020444","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Chrome \/ Natural Marble \/ EU Plug","offer_id":67826191532190,"sku":"Hotplugin-walllamp-1020443","price":225.0,"currency_code":"USD","in_stock":true},{"title":"Aged Brass \/ Calacatta Marble \/ UK Plug","offer_id":67826191564958,"sku":"Hotplugin-walllamp-1020442","price":314.0,"currency_code":"USD","in_stock":true},{"title":"Aged Brass \/ Calacatta Marble \/ AU Plug","offer_id":67826191597726,"sku":"Hotplugin-walllamp-1020441","price":314.0,"currency_code":"USD","in_stock":true},{"title":"Aged Brass \/ Calacatta Marble \/ EU Plug","offer_id":67826191630494,"sku":"Hotplugin-walllamp-1020440","price":314.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0680\/6349\/4302\/files\/8ad0f998017f7c9398c867d974c5cb51.jpg?v=1793068034","url":"https:\/\/www.monulo.com\/es\/products\/wolvina-plug-in-natural-marble-tube-wall-sconce","provider":"Monulo","version":"1.0","type":"link"}