:root { --bg: #f5efe7; --bg-2: #efe5d7; --surface: rgba(255, 251, 246, 0.92); --surface-strong: #fffaf3; --ink: #1d1815; --muted: #5a5048; --line: #dbcdbd; --accent: #b33636; --accent-2: #264653; --accent-soft: #f0ddd0; --ok: #236b45; --radius: 18px; --radius-sm: 12px; --radius-pill: 999px; --tab-height: 56px; } * { box-sizing: border-box; } body { margin: 0; color: var(--ink); font-family: "IBM Plex Sans", "Inter", system-ui, sans-serif; background: radial-gradient(circle at top left, rgba(179, 54, 54, 0.14), transparent 24%), radial-gradient(circle at bottom right, rgba(38, 70, 83, 0.12), transparent 22%), linear-gradient(180deg, var(--bg-2), var(--bg)); min-height: 100vh; padding-bottom: calc(var(--tab-height) + 12px); } button, input, textarea { font: inherit; } button { border: 0; border-radius: var(--radius-pill); background: var(--accent); color: white; padding: 10px 16px; cursor: pointer; transition: transform 120ms ease, opacity 120ms ease; font-size: 0.88rem; } button:hover { transform: translateY(-1px); } button:active { transform: scale(0.97); } button.secondary { background: var(--accent-2); } button.ghost { background: transparent; color: var(--ink); border: 1px solid var(--line); } button.sm { padding: 6px 12px; font-size: 0.82rem; } input, textarea { width: 100%; border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; background: var(--surface-strong); color: var(--ink); } .page { max-width: 680px; margin: 0 auto; padding: 16px; } /* ── Global tools (all tabs / mobile + desktop) ── */ .app-global-bar { display: flex; justify-content: flex-end; align-items: center; margin: 0 0 10px; min-height: 36px; } .app-graph-debug-toggle--on { border-color: var(--accent-2); background: rgba(38, 70, 83, 0.1); color: var(--accent-2); } /* ── Tab bar ── */ .tab-bar { position: fixed; bottom: 0; left: 0; right: 0; display: flex; justify-content: center; gap: 0; height: var(--tab-height); background: var(--surface-strong); border-top: 1px solid var(--line); z-index: 90; } .tab-btn { flex: 1; max-width: 180px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; background: transparent; color: var(--muted); border: none; border-radius: 0; padding: 4px 0; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.02em; transition: color 100ms ease; } .tab-btn:hover { transform: none; } .tab-btn.active { color: var(--accent); } .tab-icon { font-size: 1.3rem; line-height: 1; } .tab-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; border-radius: var(--radius-pill); background: var(--accent); color: white; font-size: 0.66rem; font-weight: 700; padding: 0 5px; position: absolute; top: 4px; right: calc(50% - 20px); } /* ── Top bar ── */ .top-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; } .top-bar-title { font-size: 1.4rem; font-weight: 800; letter-spacing: -0.03em; line-height: 1; } .top-bar-right { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; color: var(--muted); } .top-bar-right strong { color: var(--ink); } /* ── Cards ── */ .card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.04); } .card-lg { padding: 28px 24px; text-align: center; } .card-title { margin: 0 0 8px; font-size: 1.8rem; font-weight: 800; letter-spacing: -0.03em; line-height: 1.1; } .card-definition { color: var(--muted); font-size: 1rem; line-height: 1.5; max-width: 480px; margin: 0 auto 16px; } /* User-facing category only — never raw backend cluster keys */ .kink-pill, .card-cluster { display: inline-block; padding: 5px 11px; border-radius: var(--radius-pill); background: rgba(38, 70, 83, 0.08); color: var(--accent-2); font-size: 0.7rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 12px; } .card-image-area { width: 100%; aspect-ratio: 16 / 9; border-radius: var(--radius-sm); background: linear-gradient(135deg, #c9b8a7 0%, #a89584 100%); overflow: hidden; margin-bottom: 16px; position: relative; cursor: pointer; } .card-image-area img { width: 100%; height: 100%; object-fit: cover; filter: blur(20px); transition: filter 0.3s ease; } .card-image-area.revealed img { filter: none; } .card-counter { font-size: 0.84rem; color: var(--muted); font-weight: 600; } .card-image-area--preview { cursor: pointer; } .card-image-area--preview .card-image-blur { width: 100%; height: 100%; object-fit: cover; filter: blur(20px); transform: scale(1.04); display: block; } .card-image-cta { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 0.95rem; font-weight: 700; text-shadow: 0 1px 8px rgba(0, 0, 0, 0.75); pointer-events: none; } .card-image-scroll { max-height: 340px; overflow-y: auto; overflow-x: hidden; scroll-snap-type: y mandatory; border-radius: var(--radius-sm); margin-bottom: 16px; border: 1px solid var(--line); -webkit-overflow-scrolling: touch; overscroll-behavior: contain; scrollbar-width: thin; } .card-image-slide { min-height: 220px; scroll-snap-align: start; scroll-snap-stop: always; } .card-image-slide img { width: 100%; height: 100%; min-height: 220px; object-fit: cover; display: block; } /* ── Discover: static card (no drag) ── */ .discover-card-wrap { margin: 0 auto 10px; max-width: 420px; border-radius: 22px; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12); } .discover-photo-hint { text-align: center; margin: 0 0 8px; line-height: 1.45; max-width: 420px; margin-left: auto; margin-right: auto; padding: 0 8px; } .discover-photo-hint strong { color: var(--ink); font-weight: 800; } .discover-reason-row { max-width: 420px; margin: 0 auto 8px; padding: 0 8px; } .discover-reason-pill { display: inline-flex; align-items: center; padding: 6px 12px; border-radius: var(--radius-pill); background: rgba(29, 24, 21, 0.06); color: var(--ink); font-size: 0.78rem; font-weight: 600; line-height: 1.3; } .discover-reason-pill--partner_influenced { background: rgba(179, 54, 54, 0.12); color: var(--accent); } .discover-reason-pill--starter { background: rgba(38, 70, 83, 0.1); color: var(--accent-2); } .discover-group-row { max-width: 420px; margin: 0 auto 14px; padding: 0 4px; } .discover-group-label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 8px; } .partner-group-picker { margin-bottom: 8px; } .discover-photo-toggle { display: flex; align-items: center; gap: 10px; margin: 0 auto 12px; max-width: 420px; font-size: 0.86rem; color: var(--muted); cursor: pointer; user-select: none; } .discover-photo-toggle input { width: 1.05rem; height: 1.05rem; accent-color: var(--accent, #c62828); } .discover-directions { max-width: 420px; margin: 4px auto 6px; padding: 0 10px; } .discover-dir-label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: var(--muted); margin-bottom: 8px; } .discover-direction-sheet { max-width: 420px; margin: 0 auto 14px; padding: 14px; border: 1px solid var(--line); border-radius: var(--radius); background: rgba(255, 255, 255, 0.88); display: grid; gap: 10px; } .discover-direction-actions { display: flex; gap: 8px; flex-wrap: wrap; } .discover-scenario-hint { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; } .discover-scenario-hint strong { display: block; margin-bottom: 2px; } /* Tinder card (photo-first, vertical photo stack) */ .tinder-card { background: var(--surface-strong); border: 1px solid var(--line); border-radius: 22px; overflow: hidden; text-align: left; } .tinder-card__media { position: relative; background: linear-gradient(145deg, #3d3430 0%, #1a1513 100%); } .tinder-card__media-inner { position: relative; /* vh jumps when mobile browser chrome toggles; dvh tracks the visible viewport. */ height: min(58vh, 520px); height: min(58dvh, 520px); min-height: 280px; overflow: hidden; } .tinder-card__carousel { position: relative; width: 100%; height: 100%; } .tinder-card__slide--solo { height: 100%; } .tinder-card__slide--solo img { width: 100%; height: 100%; min-height: min(58vh, 520px); min-height: min(58dvh, 520px); object-fit: cover; display: block; } /* Stop above the bottom strip (reveal row + safe area) so prev/next don’t steal Show taps. */ .tinder-edge { position: absolute; top: 0; bottom: calc(104px + env(safe-area-inset-bottom, 0px)); width: 30%; max-width: 150px; z-index: 4; cursor: pointer; background: transparent; border: none; padding: 0; -webkit-tap-highlight-color: transparent; } .tinder-edge--left { left: 0; background: linear-gradient(90deg, rgba(0, 0, 0, 0.14), transparent); } .tinder-edge--right { right: 0; background: linear-gradient(270deg, rgba(0, 0, 0, 0.14), transparent); } .tinder-edge:active { opacity: 0.85; } .tinder-dots { position: absolute; bottom: 14px; left: 50%; transform: translateX(-50%); display: flex; gap: 7px; z-index: 5; pointer-events: none; } .tinder-dots span { width: 7px; height: 7px; border-radius: 50%; background: rgba(255, 255, 255, 0.38); transition: transform 120ms ease, background 120ms ease; } .tinder-dots span.on { background: #fff; transform: scale(1.12); } .tinder-card__media-scroll { height: 100%; overflow-y: auto; overflow-x: hidden; scroll-snap-type: y mandatory; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; scrollbar-width: thin; } .tinder-card__slide { min-height: 100%; scroll-snap-align: start; scroll-snap-stop: always; box-sizing: border-box; } .tinder-card__slide img { width: 100%; height: 100%; min-height: min(58vh, 520px); object-fit: cover; display: block; } .tinder-card__img-blur { filter: blur(22px); transform: scale(1.06); } .tinder-card__media--placeholder { display: flex; align-items: center; justify-content: center; aspect-ratio: 3 / 4; max-height: 58vh; min-height: 280px; } .tinder-card__placeholder-letters { font-size: 3.5rem; font-weight: 800; color: rgba(255, 255, 255, 0.22); letter-spacing: -0.06em; } .tinder-card__photo-badge { position: absolute; top: 12px; right: 12px; left: auto; bottom: auto; transform: none; z-index: 4; padding: 5px 12px; border-radius: var(--radius-pill); background: rgba(0, 0, 0, 0.5); color: #fff; font-size: 0.74rem; font-weight: 700; letter-spacing: 0.04em; pointer-events: none; } .tinder-card__gradient { position: absolute; inset: 0; background: linear-gradient(180deg, transparent 38%, rgba(0, 0, 0, 0.55) 100%); pointer-events: none; z-index: 2; } /* Fixed-height strip: keeps “Show” from riding a % of a box whose height jitters with vh. */ .tinder-card__reveal-row { position: absolute; left: 0; right: 0; bottom: 0; height: calc(104px + env(safe-area-inset-bottom, 0px)); display: flex; align-items: center; justify-content: center; z-index: 6; pointer-events: none; box-sizing: border-box; padding-bottom: env(safe-area-inset-bottom, 0px); } .tinder-card__reveal { position: relative; flex: 0 0 auto; width: max-content; max-width: min(280px, calc(100% - 32px)); margin: 0; padding: 11px 20px; border-radius: var(--radius-pill); border: 1px solid rgba(255, 255, 255, 0.5); background: rgba(0, 0, 0, 0.5); color: #fff; font-size: 0.84rem; font-weight: 700; cursor: pointer; box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35); touch-action: manipulation; -webkit-user-select: none; user-select: none; pointer-events: auto; outline: none; } @media (hover: hover) and (pointer: fine) { .tinder-card__reveal:hover { background: rgba(0, 0, 0, 0.62); } } .tinder-card__reveal:focus-visible { box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35), 0 0 0 2px rgba(255, 255, 255, 0.45); } .tinder-card__body { padding: 16px 18px 20px; } /* Native