This repository has been archived on 2026-05-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tippspiel/frontend/src/components/TipModal.module.css
T
Ronny c0c0b3bef5 style: stärkerer Glossy-Effekt auf Flag-Boxen im Light Mode
Glanz-Overlay auf 55% angehoben, inset-Highlight und Border ergänzt
für MatchCard flagBox, TipModal flagLarge und pickerBtn.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 14:02:21 +02:00

603 lines
12 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.
/* TipModal — Stadium Elite / Stitch Style */
.overlay {
position: fixed;
inset: 0;
z-index: 200;
background: rgba(0, 0, 0, 0.65);
backdrop-filter: blur(12px);
display: flex;
align-items: flex-end;
justify-content: center;
padding-bottom: 0;
animation: fadeIn 0.2s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Bottom sheet */
.sheet {
background: var(--surface-mid);
width: 100%;
max-width: 540px;
border-radius: 28px 28px 0 0;
padding: 12px 28px 36px;
box-shadow:
0 -8px 40px rgba(0,0,0,0.5),
0 0 0 1px rgba(75,183,248,0.08),
inset 0 1px 0 rgba(255,255,255,0.08);
animation: slideUp 0.3s cubic-bezier(0.32, 0.72, 0, 1);
position: relative;
}
@keyframes slideUp {
from { transform: translateY(100%); }
to { transform: translateY(0); }
}
/* Glossy sheen on top of sheet */
.sheet::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0; height: 40%;
background: linear-gradient(180deg, rgba(255,255,255,0.04) 0%, transparent 100%);
border-radius: 28px 28px 0 0;
pointer-events: none;
}
/* Drag handle */
.handle {
width: 40px;
height: 4px;
background: var(--surface-high);
border-radius: 2px;
margin: 0 auto 20px;
}
/* Match header */
.matchHeader {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 24px;
}
.groupBadge {
font-size: 11px;
font-weight: 700;
color: var(--primary);
background: var(--primary-dim);
padding: 3px 10px;
border-radius: 20px;
border: 1px solid rgba(75,183,248,0.2);
text-transform: uppercase;
letter-spacing: 0.05em;
}
/* Teams row */
.teamsRow {
display: grid;
grid-template-columns: 1fr 40px 1fr;
gap: 8px;
margin-bottom: 32px;
align-items: start;
}
.teamBlock {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
/* Large flag box */
.flagLarge {
width: 72px;
height: 72px;
border-radius: 18px;
background: var(--surface-high);
box-shadow:
var(--shadow-card),
inset 0 1px 0 rgba(255,255,255,0.55),
inset 0 -1px 0 rgba(0,0,0,0.06);
border: 1px solid var(--border-subtle);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.flagLarge::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 55%;
background: linear-gradient(180deg, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0.0) 100%);
pointer-events: none;
z-index: 1;
}
.flagImg {
width: 48px;
height: 48px;
object-fit: contain;
position: relative;
z-index: 0;
}
.flagEmoji { font-size: 36px; }
.teamName {
font-family: 'Plus Jakarta Sans', sans-serif;
font-weight: 700;
font-size: 14px;
color: var(--text-primary);
text-align: center;
line-height: 1.2;
}
.teamShort {
font-size: 11px;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.vsBlock {
display: flex;
align-items: center;
justify-content: center;
height: 72px;
}
.kickoffBlock {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
}
.kickoffDate {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 11px;
font-weight: 700;
color: var(--text-secondary);
text-align: center;
white-space: nowrap;
}
.kickoffTime {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 12px;
font-weight: 800;
color: var(--primary);
text-align: center;
white-space: nowrap;
}
/* Picker section */
.pickerSection {
margin-bottom: 20px;
}
.pickerLabel {
text-align: center;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--text-muted);
margin-bottom: 16px;
}
.pickerRow {
display: flex;
align-items: center;
justify-content: center;
gap: 16px;
}
.pickerColon {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 48px;
font-weight: 800;
color: var(--text-secondary);
line-height: 1;
padding-bottom: 12px;
}
/* Individual picker */
.picker {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.pickerBtn {
width: 56px;
height: 56px;
background: var(--surface-high);
border: 1px solid var(--border-subtle);
border-radius: 16px;
color: var(--text-primary);
font-size: 24px;
font-weight: 300;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.15s;
position: relative;
overflow: hidden;
box-shadow:
var(--shadow-card),
inset 0 1px 0 rgba(255,255,255,0.55),
inset 0 -1px 0 rgba(0,0,0,0.06);
}
/* Glossy sheen gleich wie flagLarge */
.pickerBtn::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 55%;
background: linear-gradient(180deg, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0.0) 100%);
pointer-events: none;
border-radius: 16px 16px 0 0;
}
.pickerBtn:hover {
background: rgba(75,183,248,0.12);
border-color: rgba(75,183,248,0.35);
color: var(--primary);
box-shadow:
0 6px 20px rgba(75,183,248,0.2),
inset 0 1px 0 rgba(75,183,248,0.15),
inset 1px 0 0 rgba(75,183,248,0.08);
}
.pickerBtn:active {
transform: scale(0.93);
}
.pickerValue {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 58px;
font-weight: 800;
color: var(--text-primary);
min-width: 70px;
text-align: center;
line-height: 1;
text-shadow: 0 2px 12px rgba(0,0,0,0.4);
filter: drop-shadow(0 0 18px rgba(75,183,248,0.12));
}
/* Tendenz bar */
.tendencyBar {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 12px 16px;
background: var(--surface-high);
border-radius: 12px;
margin-bottom: 20px;
border: 1px solid var(--border-subtle);
position: relative;
overflow: hidden;
box-shadow:
0 4px 16px rgba(0,0,0,0.25),
inset 0 1px 0 rgba(255,255,255,0.1),
inset 1px 0 0 rgba(255,255,255,0.05);
}
/* Glossy sheen gleich wie flagLarge und pickerBtn */
.tendencyBar::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 50%;
background: linear-gradient(180deg, rgba(255,255,255,0.07) 0%, transparent 100%);
pointer-events: none;
}
.tendencyIcon { font-size: 18px; }
.tendencyText {
font-size: 14px;
color: var(--text-secondary);
}
.tendencyText strong {
color: var(--tendency-color, var(--primary));
font-weight: 700;
}
/* ---- Expertenblick ---- */
.insightWrapper {
margin-bottom: 20px;
}
/* Toggle-Zeile mit Play-Button */
.insightToggleRow {
display: flex;
align-items: center;
gap: 8px;
}
.insightToggleRow .insightToggle {
flex: 1;
}
/* Audio-Play-Button */
.audioBtn {
display: flex;
align-items: center;
gap: 5px;
padding: 9px 12px;
background: linear-gradient(135deg, rgba(75,183,248,0.12) 0%, rgba(75,183,248,0.05) 100%);
border: 1px solid rgba(75,183,248,0.3);
border-radius: 12px;
color: var(--cyan);
font-size: 12px;
font-weight: 700;
font-family: 'Plus Jakarta Sans', sans-serif;
cursor: pointer;
transition: all 0.18s;
white-space: nowrap;
flex-shrink: 0;
}
.audioBtn:hover:not(:disabled) {
background: linear-gradient(135deg, rgba(75,183,248,0.2) 0%, rgba(75,183,248,0.08) 100%);
border-color: rgba(75,183,248,0.5);
}
.audioBtn:disabled {
opacity: 0.6;
cursor: default;
}
/* Dialog-Format: Delling / Netzer */
.dialogLine {
display: flex;
flex-direction: column;
gap: 2px;
padding: 8px 12px;
border-radius: 10px;
margin-bottom: 6px;
animation: insightFadeIn 0.2s ease;
}
.dialogLine:last-child {
margin-bottom: 0;
}
.speakerDelling {
background: rgba(148, 163, 184, 0.06);
border-left: 2px solid rgba(148,163,184,0.4);
align-items: flex-start;
}
.speakerNetzer {
background: rgba(254, 174, 50, 0.06);
border-left: 2px solid rgba(254,174,50,0.5);
align-items: flex-start;
}
.dialogSpeaker {
font-size: 10px;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
margin-bottom: 2px;
}
.speakerDelling .dialogSpeaker {
color: rgba(148,163,184,0.8);
}
.speakerNetzer .dialogSpeaker {
color: var(--gold);
}
.dialogText {
font-size: 13px;
line-height: 1.55;
color: var(--text-primary);
font-style: italic;
}
.insightToggle {
width: 100%;
display: flex;
align-items: center;
gap: 8px;
padding: 11px 16px;
background: linear-gradient(135deg, rgba(254,174,50,0.12) 0%, rgba(254,174,50,0.05) 100%);
border: 1px solid rgba(254,174,50,0.3);
border-radius: 12px;
color: var(--gold);
font-size: 13px;
font-weight: 700;
font-family: 'Plus Jakarta Sans', sans-serif;
cursor: pointer;
transition: all 0.18s;
text-align: left;
letter-spacing: 0.02em;
position: relative;
overflow: hidden;
box-shadow:
0 2px 12px rgba(254,174,50,0.1),
inset 0 1px 0 rgba(254,174,50,0.15);
}
/* Glossy sheen */
.insightToggle::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 50%;
background: linear-gradient(180deg, rgba(255,255,255,0.06) 0%, transparent 100%);
pointer-events: none;
}
.insightToggle:hover {
background: linear-gradient(135deg, rgba(254,174,50,0.2) 0%, rgba(254,174,50,0.08) 100%);
border-color: rgba(254,174,50,0.5);
box-shadow:
0 4px 20px rgba(254,174,50,0.2),
inset 0 1px 0 rgba(254,174,50,0.2);
}
.insightIcon {
color: var(--gold);
flex-shrink: 0;
filter: drop-shadow(0 0 4px rgba(254,174,50,0.5));
}
.insightChevron {
margin-left: auto;
color: rgba(254,174,50,0.6);
transition: transform 0.2s;
}
.insightPanel {
margin-top: 8px;
padding: 14px 16px;
background: var(--surface-high);
border-radius: 12px;
border: 1px solid rgba(254,174,50,0.1);
box-shadow: inset 0 1px 0 rgba(254,174,50,0.05);
animation: insightFadeIn 0.2s ease;
}
@keyframes insightFadeIn {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
.insightLoading {
display: flex;
align-items: center;
gap: 8px;
color: var(--text-muted);
font-size: 13px;
}
.insightSpinner {
color: var(--primary);
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.insightText {
display: flex;
flex-direction: column;
gap: 0;
}
.insightLine {
display: flex;
flex-direction: column;
gap: 3px;
padding: 10px 0;
border-bottom: 1px solid var(--border-subtle);
}
.insightLine:last-child {
border-bottom: none;
padding-bottom: 0;
}
.insightLine:first-child {
padding-top: 0;
}
.insightLabel {
font-family: 'Plus Jakarta Sans', sans-serif;
font-weight: 700;
font-size: 10px;
color: var(--primary);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.insightValue {
font-size: 13px;
line-height: 1.5;
color: var(--text-secondary);
}
.insightValue strong {
color: var(--text-primary);
font-weight: 700;
}
.insightCursor {
display: inline-block;
width: 2px;
height: 14px;
background: var(--primary);
border-radius: 1px;
margin-left: 2px;
vertical-align: middle;
animation: blink 0.8s ease-in-out infinite;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
.insightErrorMsg {
font-size: 13px;
color: var(--text-muted);
text-align: center;
}
/* Error */
.error {
color: var(--error);
font-size: 13px;
text-align: center;
padding: 10px 14px;
background: rgba(248,113,113,0.08);
border-radius: 10px;
margin-bottom: 16px;
border: 1px solid rgba(248,113,113,0.15);
}
/* CTA Buttons */
.saveBtn {
width: 100%;
padding: 15px;
font-size: 15px;
border-radius: 14px;
margin-bottom: 10px;
box-shadow: 0 6px 20px rgba(75,183,248,0.25);
}
.cancelBtn {
width: 100%;
padding: 12px;
background: transparent;
border: none;
color: var(--text-muted);
font-size: 14px;
cursor: pointer;
transition: color 0.15s;
}
.cancelBtn:hover { color: var(--text-secondary); }