Files
app-hejyou/src/components/PairCards.css
admin 75bb75853e PairWordCard: two-step select then confirm flow
Tapping an option now highlights it (warm gold border); a
"Bestätigen" button activates once something is selected.
Answer is only evaluated on confirmation, not on tap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 13:23:42 +02:00

355 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: 22px;
overflow: hidden;
background: #FDFAF6;
box-shadow:
0 1px 2px rgba(60, 40, 20, 0.06),
0 4px 16px rgba(60, 40, 20, 0.09),
0 12px 40px rgba(60, 40, 20, 0.06);
}
/* ── 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: 'DM Sans', 'Nunito', sans-serif;
text-transform: uppercase;
}
.pair-points-pill {
color: #C4A85A;
font-size: 12px;
font-weight: 500;
font-family: 'DM Sans', 'Nunito', sans-serif;
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: 'DM Sans', 'Nunito', sans-serif;
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: 'Lora', Georgia, serif;
font-size: 24px;
font-weight: 700;
color: #3A2515;
line-height: 1.2;
margin-bottom: 5px;
}
.pair-chip-highlight-native {
display: block;
font-family: 'Nunito', sans-serif;
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: 'Lora', Georgia, serif;
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;
}
/* 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: 'Lora', Georgia, serif;
font-size: 18px;
line-height: 1.7;
color: #3A2515;
margin-bottom: 20px;
}
/* Question text */
.pair-question {
font-family: 'Lora', Georgia, serif;
font-size: 17px;
font-weight: 600;
line-height: 1.65;
color: #3A2515;
margin-bottom: 16px;
}
/* Hint — native language translation */
.pair-hint {
font-family: 'Nunito', sans-serif;
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: 'Nunito', sans-serif;
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: #5C3D22;
color: #F5EDE0;
}
.pair-btn-locked {
background: #E0DDD5;
color: #B0A898;
cursor: not-allowed;
}
.pair-btn-yes {
background: #3D7055;
color: #fff;
}
.pair-btn-no {
background: #A84040;
color: #fff;
}
.pair-btn-correct { background: #3D7055; color: #fff; }
.pair-btn-wrong { background: #A84040; 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: 'Nunito', sans-serif;
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: #3D7055; color: #fff; border-color: #3D7055; }
.pair-option-btn.wrong { background: #A84040; color: #fff; border-color: #A84040; }
.pair-option-btn:disabled { cursor: default; }
/* ── Feedback ── */
.pair-feedback {
font-family: 'Nunito', sans-serif;
font-size: 14px;
font-weight: 700;
padding: 12px 0 2px;
color: #3A2515;
}
.pair-feedback.correct { color: #3D7055; }
.pair-feedback.wrong { color: #A84040; }