This commit is contained in:
@@ -61,6 +61,20 @@ export default function Footer() {
|
||||
>
|
||||
{t("terms-of-service")}
|
||||
</ChakraLink>
|
||||
<ChakraLink
|
||||
as={Link}
|
||||
href="/refund-policy"
|
||||
fontSize="sm"
|
||||
color="fg.muted"
|
||||
focusRing="none"
|
||||
textDecor="none"
|
||||
transition="color 0.2s"
|
||||
_hover={{
|
||||
color: { base: "primary.500", _dark: "primary.300" },
|
||||
}}
|
||||
>
|
||||
{t("refund-policy")}
|
||||
</ChakraLink>
|
||||
</HStack>
|
||||
</Flex>
|
||||
</Box>
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
"use client";
|
||||
|
||||
import { Box, Heading, Text, VStack } from "@chakra-ui/react";
|
||||
|
||||
interface Section {
|
||||
title: string;
|
||||
content: string | string[];
|
||||
}
|
||||
|
||||
interface LegalPageProps {
|
||||
title: string;
|
||||
lastUpdated: string;
|
||||
sections: Section[];
|
||||
}
|
||||
|
||||
export default function LegalPage({ title, lastUpdated, sections }: LegalPageProps) {
|
||||
return (
|
||||
<Box maxW="3xl" mx="auto" px={{ base: 4, md: 8 }} py={12}>
|
||||
<VStack align="start" gap={8}>
|
||||
<Box>
|
||||
<Heading as="h1" size="2xl" mb={2}>
|
||||
{title}
|
||||
</Heading>
|
||||
<Text fontSize="sm" color="fg.muted">
|
||||
{lastUpdated}
|
||||
</Text>
|
||||
</Box>
|
||||
|
||||
{sections.map((section, i) => (
|
||||
<Box key={i} w="full">
|
||||
<Heading as="h2" size="md" mb={3}>
|
||||
{section.title}
|
||||
</Heading>
|
||||
{Array.isArray(section.content) ? (
|
||||
<VStack align="start" gap={2}>
|
||||
{section.content.map((para, j) => (
|
||||
<Text key={j} color="fg.muted" lineHeight="1.8">
|
||||
{para}
|
||||
</Text>
|
||||
))}
|
||||
</VStack>
|
||||
) : (
|
||||
<Text color="fg.muted" lineHeight="1.8">
|
||||
{section.content}
|
||||
</Text>
|
||||
)}
|
||||
</Box>
|
||||
))}
|
||||
</VStack>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
@@ -498,8 +498,8 @@ export default function MatchDetailContent() {
|
||||
{/* ══════════════════════════════════════════════ */}
|
||||
<Box
|
||||
position="sticky"
|
||||
top={0}
|
||||
zIndex={10}
|
||||
top="57px"
|
||||
zIndex={9}
|
||||
bg={tabBg}
|
||||
borderBottomWidth="1px"
|
||||
borderColor={borderColor}
|
||||
@@ -743,24 +743,6 @@ export default function MatchDetailContent() {
|
||||
</Button>
|
||||
</Flex>
|
||||
|
||||
{/* Pre-match disclaimer */}
|
||||
<Flex
|
||||
align="center"
|
||||
gap={2}
|
||||
bg={disclaimerBg}
|
||||
borderWidth="1px"
|
||||
borderColor={disclaimerBorder}
|
||||
borderRadius="lg"
|
||||
px={3}
|
||||
py={2}
|
||||
mb={4}
|
||||
>
|
||||
<LuInfo size={14} style={{ flexShrink: 0 }} />
|
||||
<Text fontSize="xs" color="fg.muted">
|
||||
{tPred("pre-match-disclaimer")}
|
||||
</Text>
|
||||
</Flex>
|
||||
|
||||
{predLoading || isPredFetching ? (
|
||||
<VStack gap={3} align="stretch">
|
||||
<Skeleton h="120px" borderRadius="xl" />
|
||||
@@ -769,31 +751,52 @@ export default function MatchDetailContent() {
|
||||
</VStack>
|
||||
) : prediction ? (
|
||||
<>
|
||||
{/* Pre-match disclaimer — sadece prediction varken göster */}
|
||||
<Flex
|
||||
align="center"
|
||||
gap={2}
|
||||
bg={disclaimerBg}
|
||||
borderWidth="1px"
|
||||
borderColor={disclaimerBorder}
|
||||
borderRadius="lg"
|
||||
px={3}
|
||||
py={2}
|
||||
mb={4}
|
||||
>
|
||||
<LuInfo size={14} style={{ flexShrink: 0 }} />
|
||||
<Text fontSize="xs" color="fg.muted">
|
||||
{tPred("pre-match-disclaimer")}
|
||||
</Text>
|
||||
</Flex>
|
||||
<PredictionCard prediction={prediction} />
|
||||
{/* AI Uzman Yorumu — prediction yüklendikten sonra ayrıca çekiliyor */}
|
||||
<Card.Root bg={cardBg} borderColor={borderColor} borderRadius="2xl">
|
||||
<Card.Body gap={3}>
|
||||
<Flex align="center" gap={2}>
|
||||
<LuBrain size={16} />
|
||||
<Text fontWeight="semibold" fontSize="sm">AI Uzman Yorumu</Text>
|
||||
</Flex>
|
||||
{commentaryLoading ? (
|
||||
{/* AI Uzman Yorumu */}
|
||||
{commentaryLoading ? (
|
||||
<Card.Root bg={cardBg} borderColor={borderColor} borderRadius="2xl">
|
||||
<Card.Body gap={3}>
|
||||
<Flex align="center" gap={2}>
|
||||
<LuBrain size={16} />
|
||||
<Text fontWeight="semibold" fontSize="sm">AI Uzman Yorumu</Text>
|
||||
</Flex>
|
||||
<VStack align="stretch" gap={2}>
|
||||
<Skeleton h="16px" borderRadius="md" />
|
||||
<Skeleton h="16px" borderRadius="md" w="90%" />
|
||||
<Skeleton h="16px" borderRadius="md" w="75%" />
|
||||
<Skeleton h="14px" borderRadius="md" />
|
||||
<Skeleton h="14px" borderRadius="md" w="85%" />
|
||||
<Skeleton h="14px" borderRadius="md" w="70%" />
|
||||
</VStack>
|
||||
) : commentaryData?.data?.commentary ? (
|
||||
</Card.Body>
|
||||
</Card.Root>
|
||||
) : commentaryData?.data?.commentary ? (
|
||||
<Card.Root bg={cardBg} borderColor={borderColor} borderRadius="2xl">
|
||||
<Card.Body gap={3}>
|
||||
<Flex align="center" gap={2}>
|
||||
<LuBrain size={16} />
|
||||
<Text fontWeight="semibold" fontSize="sm">AI Uzman Yorumu</Text>
|
||||
</Flex>
|
||||
<Text fontSize="sm" color="fg.muted" lineHeight="1.7">
|
||||
{commentaryData.data.commentary}
|
||||
</Text>
|
||||
) : (
|
||||
<Text fontSize="sm" color="fg.subtle">
|
||||
Yorum üretilemedi.
|
||||
</Text>
|
||||
)}
|
||||
</Card.Body>
|
||||
</Card.Root>
|
||||
</Card.Body>
|
||||
</Card.Root>
|
||||
) : null}
|
||||
</>
|
||||
) : (
|
||||
<Card.Root borderColor={borderColor} borderRadius="xl">
|
||||
@@ -1129,11 +1132,6 @@ function SidelinedColumn({
|
||||
</Text>
|
||||
</HStack>
|
||||
</VStack>
|
||||
{player.matchesMissed !== undefined && player.matchesMissed > 0 && (
|
||||
<Badge colorPalette="red" variant="subtle" fontSize="2xs">
|
||||
{player.matchesMissed} {t("matches-missed")}
|
||||
</Badge>
|
||||
)}
|
||||
</Flex>
|
||||
</Box>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user