Files
app-hejyou/src/components/PairCards.css
admin 712f9a243c feat: Premium-Redesign + Fortschritts-UI
- Zentrales Design-Token-System in index.css (Farben/Spacing/Radien/Schatten/Fonts)
- Alle Live-Screens auf Tokens: Karten, BottomNav (aktiver Pill), Feed, Auth
- Auth: DM Sans entfernt, Akzent vereinheitlicht (Braun), Tokens gescoped
- Profil neu: Tagesziel-Ring, Streak-Heatmap, Wochen-Graph, echter Skills-Radar, Eckdaten
- Feed-EP-Badge mit Tagesziel-Ring (ProgressRing-Komponente)
- Game/Pro als gestaltetes 'Bald verfügbar' (ComingSoon)
- Konsumiert neue API: getStats/setDailyGoal, degradiert sauber bei 404

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 16:41:09 +02:00

358 lines
8.0 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ─────────────────────────────────────────────────────────────
Pair Feed Cards Shared Styles
───────────────────────────────────────────────────────────── */
/* ── Card shell ── */
.pair-card {
width: 100%;
max-width: 380px;
border-radius: var(--r-lg);
overflow: hidden;
background: var(--surface);
box-shadow: var(--shadow-card);
}
/* ── Header (sits below image) ── */
.pair-card-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 14px 20px 10px;
}
.pair-lang-pill {
font-size: 11px;
font-weight: 500;
letter-spacing: 0.09em;
color: #6B6556;
font-family: var(--font-ui);
text-transform: uppercase;
}
.pair-points-pill {
color: var(--gold);
font-size: 12px;
font-weight: 500;
font-family: var(--font-ui);
display: flex;
align-items: center;
gap: 4px;
}
/* Thin divider below header */
.pair-header-divider {
height: 0.5px;
background: #E0DDD5;
margin: 0 20px;
}
/* ── Section labels ── */
.pair-section-label {
font-size: 10px;
font-weight: 500;
letter-spacing: 0.10em;
text-transform: uppercase;
color: #A89F8C;
font-family: var(--font-ui);
margin-bottom: 8px;
}
/* ── Icon buttons (TTS / translate) ── */
.pair-icon-btn {
background: #F0EDE3;
border: 0.5px solid #D8D3C5;
border-radius: 10px;
width: 38px;
height: 38px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
padding: 0;
flex-shrink: 0;
transition: background 0.15s, color 0.15s;
color: #7A6E55;
-webkit-user-select: none;
user-select: none;
}
.pair-icon-btn:hover { background: #E0DAC8; }
.pair-icon-btn.active { background: #C4A85A22; color: #B07840; }
/* Hold-to-translate button */
.pair-hold-wrap {
width: 38px;
height: 38px;
flex-shrink: 0;
cursor: pointer;
-webkit-user-select: none;
user-select: none;
border-radius: 10px;
overflow: visible;
}
/* Ring fill animation — 2 seconds */
@keyframes holdRing {
from { stroke-dashoffset: 100.53; }
to { stroke-dashoffset: 0; }
}
/* ── Image area ── */
.pair-image-wrap {
position: relative;
width: 100%;
aspect-ratio: 1 / 1;
overflow: hidden;
cursor: default;
background: #1a1a1a;
}
.pair-image {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: filter 0.28s ease;
}
.pair-image-wrap.chip-active .pair-image,
.pair-image-wrap.chip-active .pair-image-placeholder {
filter: brightness(0.45) saturate(0.7);
}
.pair-image-placeholder {
width: 100%;
height: 100%;
min-height: 220px;
background: linear-gradient(145deg, #EDE0CE 0%, #C8A882 100%);
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
transition: filter 0.28s ease;
}
/* Overlay badge that appears above the image when a chip is active */
.pair-chip-highlight {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
animation: chipFadeIn 0.18s ease;
}
@keyframes chipFadeIn {
from { opacity: 0; transform: scale(0.88); }
to { opacity: 1; transform: scale(1); }
}
.pair-chip-highlight-badge {
background: rgba(255, 252, 248, 0.97);
border-radius: 18px;
padding: 16px 28px 14px;
text-align: center;
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.28);
border: 1px solid rgba(200, 160, 100, 0.3);
}
.pair-chip-highlight-target {
display: block;
font-family: var(--font-display);
font-size: 24px;
font-weight: 700;
color: #3A2515;
line-height: 1.2;
margin-bottom: 5px;
}
.pair-chip-highlight-native {
display: block;
font-family: var(--font-ui);
font-size: 13px;
color: #9A7D60;
font-weight: 600;
}
/* Object-chip SVG bbox overlay */
.pair-bbox-svg {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
pointer-events: none;
animation: chipFadeIn 0.2s ease;
}
/* ── Card body ── */
.pair-card-body {
padding: 18px 20px 22px;
}
/* ── Vocabulary chips section ── */
.pair-vocab-section {
margin-top: 16px;
}
.pair-vocab-chips {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.pair-vocab-word {
padding: 6px 14px;
background: #F0EDE3;
border-radius: 30px;
border: 0.5px solid #D8D3C5;
font-family: var(--font-display);
font-size: 13px;
font-style: italic;
color: #7A5C2E;
cursor: default;
}
/* Sentence action row (sentence + icon buttons) */
.pair-sentence-row {
display: flex;
align-items: flex-start;
gap: 12px;
}
.pair-sentence-text {
flex: 1;
}
/* Clickable sentence — tap to play audio */
.pair-sentence-clickable {
cursor: pointer;
user-select: none;
}
/* Word chips inside sentences — underline italic style */
.pair-word-chip {
display: inline;
font-style: italic;
color: #7A5C2E;
text-decoration: underline;
text-decoration-color: #C4A85A;
text-underline-offset: 3px;
text-decoration-thickness: 1.5px;
cursor: pointer;
transition: color 0.15s, text-decoration-color 0.15s;
user-select: none;
background: none;
border: none;
padding: 0;
border-radius: 0;
font-weight: inherit;
vertical-align: baseline;
}
.pair-word-chip:hover {
color: #5C3D22;
text-decoration-color: #B07840;
}
.pair-word-chip.active {
color: #B07840;
text-decoration-color: #B07840;
text-decoration-thickness: 2px;
}
/* Sentence text (text-type cards) */
.pair-sentence {
font-family: var(--font-display);
font-size: 18px;
line-height: 1.7;
color: #3A2515;
margin-bottom: 20px;
}
/* Question text */
.pair-question {
font-family: var(--font-display);
font-size: 17px;
font-weight: 600;
line-height: 1.65;
color: #3A2515;
margin-bottom: 16px;
}
/* Hint — native language translation */
.pair-hint {
font-family: var(--font-ui);
font-size: 13px;
color: #A08868;
line-height: 1.5;
margin: -8px 0 16px;
}
/* ── Buttons ── */
.pair-btn-row {
display: flex;
gap: 10px;
}
.pair-btn {
flex: 1;
padding: 14px 10px;
border-radius: 13px;
border: none;
font-family: var(--font-ui);
font-size: 15px;
font-weight: 700;
cursor: pointer;
letter-spacing: 0.01em;
transition: transform 0.1s, filter 0.15s, opacity 0.15s;
}
.pair-btn:hover:not(:disabled) { filter: brightness(1.07); }
.pair-btn:active:not(:disabled) { transform: scale(0.96); }
.pair-btn:disabled { opacity: 0.75; cursor: default; }
.pair-btn-primary {
background: var(--accent-strong);
color: #F5EDE0;
}
.pair-btn-locked {
background: #E0DDD5;
color: #B0A898;
cursor: not-allowed;
}
.pair-btn-yes {
background: var(--success);
color: #fff;
}
.pair-btn-no {
background: var(--danger);
color: #fff;
}
.pair-btn-correct { background: var(--success); color: #fff; }
.pair-btn-wrong { background: var(--danger); color: #fff; }
/* ── Word option buttons ── */
.pair-options {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 6px;
}
.pair-option-btn {
padding: 11px 18px;
border-radius: 11px;
border: 1.5px solid #DDD0BF;
background: #FDFAF6;
color: #3A2515;
font-family: var(--font-ui);
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: transform 0.1s, background 0.15s, border-color 0.15s, color 0.15s;
}
.pair-option-btn:hover:not(:disabled) {
background: #FFF0E0;
border-color: #C8956A;
}
.pair-option-btn:active:not(:disabled) { transform: scale(0.95); }
.pair-option-btn.selected { background: #FFF0DC; border-color: #C4A85A; color: #5C3D22; }
.pair-option-btn.correct { background: var(--success); color: #fff; border-color: var(--success); }
.pair-option-btn.wrong { background: var(--danger); color: #fff; border-color: var(--danger); }
.pair-option-btn:disabled { cursor: default; }
/* ── Feedback ── */
.pair-feedback {
font-family: var(--font-ui);
font-size: 14px;
font-weight: 700;
padding: 12px 0 2px;
color: #3A2515;
}
.pair-feedback.correct { color: var(--success); }
.pair-feedback.wrong { color: var(--danger); }