/* ——— Hard lock colors & typography (WP theme override) ——— */
#roxy-hypno-theme, #roxy-hypno-theme * {
box-sizing: border-box;
color: #EAE6FF !important; /* pearly near-white text: LOCKED */
font-family: “Inter”, “Segoe UI”, Roboto, Arial, sans-serif !important;
line-height: 1.6 !important;
text-rendering: optimizeLegibility !important;
}
#roxy-hypno-theme {
position: relative;
overflow: hidden;
padding: 42px 22px 60px;
background: #06060B !important; /* ink-black base: LOCKED */
isolation: isolate;
}
/* ——— Animated hypnotic background ——— */
#roxy-hypno-theme::before,
#roxy-hypno-theme::after {
content: “”;
position: absolute;
inset: -15%;
z-index: -2;
background:
radial-gradient(60% 60% at 50% 50%, rgba(120,0,255,0.22), transparent 60%),
radial-gradient(30% 30% at 20% 10%, rgba(0,200,255,0.14), transparent 70%),
radial-gradient(25% 25% at 80% 90%, rgba(255,0,130,0.12), transparent 70%);
filter: blur(22px) saturate(120%);
animation: aurora 18s linear infinite;
}
#roxy-hypno-theme::after {
z-index: -1;
mix-blend-mode: screen;
opacity: 0.45;
background:
repeating-conic-gradient(from 0deg, rgba(255,255,255,0.04) 0 10deg, transparent 10deg 20deg);
animation: spin 38s linear infinite;
}
@keyframes aurora {
0% { transform: translate3d(0,0,0) scale(1); }
50%{ transform: translate3d(2%, -1%, 0) scale(1.03); }
100%{ transform: translate3d(0,0,0) scale(1); }
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* ——— Layout container ——— */
.wrap {
max-width: 900px;
margin: 0 auto;
background: rgba(10,10,18,0.55);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 16px;
backdrop-filter: blur(6px);
padding: 28px 22px;
box-shadow: 0 20px 60px rgba(0,0,0,0.55), inset 0 0 0 1px rgba(255,255,255,0.04);
}
/* ——— Gradient title + headers ——— */
.title {
margin: 6px 0 8px;
font-weight: 800;
letter-spacing: 0.5px;
font-size: clamp(28px, 5vw, 46px);
background: linear-gradient(90deg, #F8D3FF 0%, #BE6BFF 35%, #68D5FF 70%, #F8D3FF 100%);
-webkit-background-clip: text; background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 0 22px rgba(190,107,255,0.25);
}
.tagline {
margin-top: 0;
opacity: 0.9;
font-size: clamp(15px, 2.4vw, 18px);
letter-spacing: 0.4px;
text-transform: uppercase;
color: #CFC9FF !important;
}
h2 {
margin: 26px 0 8px;
font-size: clamp(20px, 3.2vw, 28px);
font-weight: 800;
letter-spacing: 0.4px;
background: linear-gradient(90deg, #9A7BFF, #67E0FF);
-webkit-background-clip: text; background-clip: text;
-webkit-text-fill-color: transparent;
}
.spark {
display: inline-block;
filter: drop-shadow(0 0 6px rgba(255,255,255,0.45));
}
/* ——— Body text & highlights ——— */
p { margin: 12px 0; font-size: 17px; }
.glow {
color: #EFE9FF !important;
text-shadow: 0 0 10px rgba(160,120,255,0.45);
}
.ink {
color: #C9F2FF !important;
text-shadow: 0 0 10px rgba(80,200,255,0.3);
}
.hypno {
padding: 0 6px;
border-radius: 6px;
background: linear-gradient(90deg, rgba(190,107,255,0.18), rgba(103,224,255,0.18));
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08);
}
/* ——— Hypno-glyph float effect ——— */
.glyph-layer { position: fixed; inset: 0; pointer-events: none; z-index: 2; }
.glyph {
position: absolute;
font-size: 18px;
opacity: 0.16;
animation: drift var(–dur) linear infinite;
filter: drop-shadow(0 0 6px rgba(255,255,255,0.35));
}
@keyframes drift {
0% { transform: translateY(110vh) rotate(0deg); }
100% { transform: translateY(-10vh) rotate(360deg); }
}
/* ——— CTA buttons ——— */
.cta-row {
display: grid;
grid-template-columns: 1fr;
gap: 14px;
margin-top: 28px;
}
@media (min-width: 560px) { .cta-row { grid-template-columns: 1fr 1fr; } }
.btn {
–h1:#7B2FFF; –h2:#00D0FF;
display: inline-flex; align-items: center; justify-content: center;
text-decoration: none !important;
padding: 14px 16px;
border-radius: 14px;
font-weight: 800;
letter-spacing: 0.4px;
text-transform: uppercase;
background: linear-gradient(135deg, var(–h1), var(–h2));
color: #0A0A12 !important; /* legible on bright gradient */
text-shadow: 0 1px 0 rgba(255,255,255,0.35);
border: none;
box-shadow:
0 10px 26px rgba(0, 0, 0, 0.55),
inset 0 0 0 1px rgba(255,255,255,0.25);
transition: transform .15s ease, filter .15s ease, box-shadow .15s ease;
will-change: transform, filter;
}
.btn:hover { transform: translateY(-2px) scale(1.02); filter: brightness(1.05); }
.btn:active { transform: translateY(0) scale(0.99); }
.btn.phone { –h1:#FF64DE; –h2:#7E5BFF; }
.btn.site { –h1:#00F0FF; –h2:#7A7BFF; }
/* ——— Subtle divider line ——— */
.divider {
height: 1px; margin: 22px 0;
background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(170,140,255,0.45) 50%, rgba(255,255,255,0) 100%);
}
Roxy’s Velvet Spiral
★ Slim, deviant, and unshakeably in control—Roxy’s voice slides under your skin like silk and switches off your doubts one by one. ★
🌀 Deeper… down… good toy
“Breathe in,” Roxy murmurs, her words a soft violet ribbon curling through your mind. “Hold. Now let go.” The room dims; the world narrows to her cadence, the faint perfume of danger, the cool edge of a smile you can’t quite see—but feel.
She doesn’t ask. She guides. Fingers trace the air; your thoughts follow, obedient and slow. “That’s it,” she purrs. “Thoughts like feathers… floating… gone.” The spiral behind your eyes begins to turn, catching every stray impulse and filing it neatly under one command: obey.
💫 Trigger words & velvet chains
“When I say melt, your knees soften. When I say hush, your mouth forgets every answer but yes, Roxy. When I say sleep…” She pauses, smiling in the dark. “You drop deeper than you believed was possible.”
Her voice becomes a corridor of low lights—left, right, down—until there’s only her hand at the small of your back and the quiet thrill of surrender. “Good,” she whispers. “I own the switch. You adore the drop.”
🌙 The afterglow command
When the spell loosens, you’re flushed and floating—marked by a secret you’ll carry like a kiss. Roxy leans close, breath warm at your ear. “Remember this feeling,” she says. “Crave it. Come find me when your mind needs its favorite leash.”
/* Lightweight floating hypno glyphs (🌀, ✦, ✧). Tweak count for performance. */
(function () {
const layer = document.getElementById(‘glyphLayer’);
if (!layer) return;
const symbols = [“🌀”,”✦”,”✧”,”❇”,”✺”];
const COUNT = Math.min(40, Math.max(18, Math.floor(window.innerWidth / 40)));
function spawn() {
const s = document.createElement(‘span’);
s.className = ‘glyph’;
s.textContent = symbols[Math.floor(Math.random() * symbols.length)];
const size = Math.random() * 22 + 12; // 12–34px
const x = Math.random() * 100; // vw
const delay = Math.random() * 6;
const dur = Math.random() * 16 + 14; // 14–30s
const tilt = (Math.random() * 20 – 10) + ‘deg’;
s.style.left = x + ‘vw’;
s.style.fontSize = size + ‘px’;
s.style.animationDelay = delay + ‘s’;
s.style.setProperty(‘–dur’, dur + ‘s’);
s.style.transform = `rotate(${tilt})`;
layer.appendChild(s);
// Clean up old nodes to avoid DOM bloat
setTimeout(() => { s.remove(); }, (dur + delay) * 1000);
}
for (let i = 0; i < COUNT; i++) spawn();
setInterval(spawn, 900); // steady trickle
})();