Карты

:root {
–cream: #f5f0e8;
–ink: #1a1612;
–gold: #b8975a;
–gold-light: #d4b483;
–muted: #7a6f62;
–card-w: 320px;
–card-h: 480px;
}

– { margin: 0; padding: 0; box-sizing: border-box; }

body {
background-color: var(–ink);
background-image:
radial-gradient(ellipse at 20% 20%, #2a1f14 0%, transparent 60%),
radial-gradient(ellipse at 80% 80%, #1a120a 0%, transparent 60%),
url(“data:image/svg+xml,%3Csvg xmlns=‘http://www.w3.org/2000/svg’ width=‘400’ height=‘400’%3E%3Cfilter id=‘n’%3E%3CfeTurbulence type=‘fractalNoise’ baseFrequency=‘0.75’ numOctaves=‘4’ stitchTiles=‘stitch’/%3E%3C/filter%3E%3Crect width=‘400’ height=‘400’ filter=‘url(%23n)’ opacity=‘0.04’/%3E%3C/svg%3E”);
min-height: 100vh;
font-family: ‘Jost’, sans-serif;
color: var(–cream);
display: flex;
flex-direction: column;
align-items: center;
padding: 48px 24px 80px;
}

/* ── HEADER ── */
.header {
text-align: center;
margin-bottom: 56px;
opacity: 0;
animation: fadeUp 1.2s ease forwards;
}

.header-eyebrow {
font-family: ‘Jost’, sans-serif;
font-weight: 200;
font-size: 11px;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–gold);
margin-bottom: 16px;
}

.header h1 {
font-family: ‘Cormorant Garamond’, serif;
font-weight: 300;
font-size: clamp(36px, 6vw, 54px);
line-height: 1.1;
color: var(–cream);
margin-bottom: 24px;
}

.header h1 em {
font-style: italic;
color: var(–gold-light);
}

.divider {
width: 48px;
height: 1px;
background: var(–gold);
margin: 0 auto 24px;
opacity: 0.5;
}

.header-intro {
font-family: ‘Cormorant Garamond’, serif;
font-style: italic;
font-size: 17px;
line-height: 1.8;
color: #c4b89a;
max-width: 480px;
margin: 0 auto;
}

/* ── CARD STAGE ── */
.card-stage {
perspective: 1200px;
margin-bottom: 40px;
opacity: 0;
animation: fadeUp 1.2s ease 0.3s forwards;
}

.card-inner {
width: var(–card-w);
height: var(–card-h);
position: relative;
transform-style: preserve-3d;
transition: transform 0.85s cubic-bezier(0.45, 0.05, 0.15, 1);
cursor: pointer;
}

.card-inner.flipped {
transform: rotateY(180deg);
}

.card-face {
position: absolute;
inset: 0;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
border-radius: 16px;
overflow: hidden;
box-shadow:
0 30px 80px rgba(0,0,0,0.6),
0 0 0 1px rgba(184,151,90,0.15),
inset 0 0 0 1px rgba(255,255,255,0.04);
}

.card-back-face {
background: var(–ink);
}

.card-back-face img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}

.card-front-face {
transform: rotateY(180deg);
background: #0d0b08;
}

.card-front-face img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}

/* tap hint on back */
.tap-hint {
position: absolute;
bottom: 24px;
left: 0; right: 0;
text-align: center;
font-family: ‘Jost’, sans-serif;
font-weight: 200;
font-size: 11px;
letter-spacing: 0.25em;
text-transform: uppercase;
color: rgba(184,151,90,0.7);
pointer-events: none;
transition: opacity 0.4s;
}

.card-inner.flipped .tap-hint { opacity: 0; }

/* shimmer on hover */
.card-back-face::after {
content: ‘’;
position: absolute;
inset: 0;
background: linear-gradient(135deg, transparent 40%, rgba(184,151,90,0.06) 50%, transparent 60%);
opacity: 0;
transition: opacity 0.4s;
}
.card-stage:hover .card-back-face::after { opacity: 1; }

/* ── DRAW BUTTON ── */
.btn-draw {
background: transparent;
border: 1px solid rgba(184,151,90,0.4);
color: var(–gold-light);
font-family: ‘Jost’, sans-serif;
font-weight: 300;
font-size: 12px;
letter-spacing: 0.3em;
text-transform: uppercase;
padding: 14px 40px;
border-radius: 2px;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
opacity: 0;
animation: fadeUp 1.2s ease 0.5s forwards;
margin-bottom: 56px;
}

.btn-draw::before {
content: ‘’;
position: absolute;
inset: 0;
background: rgba(184,151,90,0.08);
transform: translateX(-100%);
transition: transform 0.4s ease;
}

.btn-draw:hover {
border-color: rgba(184,151,90,0.8);
color: var(–cream);
box-shadow: 0 0 24px rgba(184,151,90,0.12);
}

.btn-draw:hover::before { transform: translateX(0); }
.btn-draw:active { transform: scale(0.97); }

/* ── QUESTIONS ── */
.questions-section {
width: 100%;
max-width: 520px;
opacity: 0;
animation: fadeUp 1.2s ease 0.7s forwards;
}

.questions-label {
font-family: ‘Jost’, sans-serif;
font-weight: 200;
font-size: 10px;
letter-spacing: 0.35em;
text-transform: uppercase;
color: var(–gold);
opacity: 0.7;
text-align: center;
margin-bottom: 28px;
}

.questions-list {
list-style: none;
display: flex;
flex-direction: column;
gap: 0;
}

.questions-list li {
font-family: ‘Cormorant Garamond’, serif;
font-size: 18px;
font-weight: 300;
line-height: 1.5;
color: #c4b89a;
padding: 18px 0;
border-bottom: 1px solid rgba(184,151,90,0.1);
display: flex;
gap: 16px;
align-items: baseline;
}

.questions-list li:first-child {
border-top: 1px solid rgba(184,151,90,0.1);
}

.q-num {
font-family: ‘Jost’, sans-serif;
font-weight: 200;
font-size: 11px;
color: var(–gold);
opacity: 0.5;
flex-shrink: 0;
padding-top: 3px;
letter-spacing: 0.1em;
}

/* ── FOOTER ── */
.footer {
margin-top: 64px;
text-align: center;
font-family: ‘Jost’, sans-serif;
font-weight: 200;
font-size: 11px;
letter-spacing: 0.2em;
color: rgba(184,151,90,0.3);
text-transform: uppercase;
opacity: 0;
animation: fadeUp 1.2s ease 1s forwards;
}

/* ── CARD CHANGE ANIMATION ── */
.card-stage.changing .card-inner {
animation: cardChange 0.5s ease forwards;
}

@keyframes cardChange {
0% { transform: rotateY(0deg) scale(1); opacity: 1; }
40% { transform: rotateY(90deg) scale(0.95); opacity: 0.3; }
60% { transform: rotateY(90deg) scale(0.95); opacity: 0.3; }
100% { transform: rotateY(0deg) scale(1); opacity: 1; }
}

@keyframes fadeUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}

/* ── RESPONSIVE ── */
@media (max-width: 400px) {
:root {
–card-w: 280px;
–card-h: 420px;
}
}

Метафорические карты

Вытяни свою карту

Сделай глубокий вдох. Задай себе вопрос или просто позволь себе быть в этом моменте —

и вытяни карту, которая ждёт именно тебя.

Карта

нажми, чтобы открыть
Карта

Вопросы для размышления

  • 01Какие детали изображения в первую очередь бросились тебе в глаза?
  • 02Какое название ты бы дала этому изображению?
  • 03Как ты опишешь происходящее на изображении?
  • 04Что происходит на изображении?
  • 05Какая часть твоего тела отзывается при виде этого изображения?
  • 06Какое настроение передаёт это изображение?
  • 07Что в твоей жизни сопоставимо с ответами на вопросы выше или можно описать теми же словами?
mywellness.club

const TOTAL = 42;
const BASE_URL = “https://mystretch.blog/wp-content/uploads/2026/05/card”;

// Shuffle tracking — no repeats until all 42 shown
let deck = [];
let currentCard = null;

function buildDeck() {
deck = Array.from({length: TOTAL}, (_, i) => i + 1);
// Fisher-Yates shuffle
for (let i = deck.length – 1; i > 0; i–) {
const j = Math.floor(Math.random() * (i + 1));
[deck[i], deck[j]] = [deck[j], deck[i]];
}
}

function drawCard() {
if (deck.length === 0) buildDeck();
// avoid same card twice in a row
let next = deck.pop();
if (next === currentCard && deck.length > 0) {
deck.unshift(next); // put it back at the bottom
next = deck.pop();
}
currentCard = next;
return next;
}

function flipCard() {
const inner = document.getElementById(‘cardInner’);
if (!inner.classList.contains(‘flipped’)) {
inner.classList.add(‘flipped’);
}
}

function drawNewCard() {
const stage = document.getElementById(‘cardStage’);
const inner = document.getElementById(‘cardInner’);
const frontImg = document.getElementById(‘cardFront’);

const num = drawCard();
const newSrc = BASE_URL + num + “.png”;

// Reset flip, animate change
inner.classList.remove(‘flipped’);
stage.classList.add(‘changing’);

setTimeout(() => {
frontImg.src = newSrc;
stage.classList.remove(‘changing’);
}, 450);
}

// Preload first card on page load
window.addEventListener(‘load’, () => {
buildDeck();
const num = drawCard();
document.getElementById(‘cardFront’).src = BASE_URL + num + “.png”;
});