@xetwa/design-system 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +30 -0
- package/.storybook/main.ts +17 -0
- package/.storybook/preview.tsx +65 -0
- package/eslint.config.js +22 -0
- package/index.html +13 -0
- package/package.json +55 -0
- package/public/favicon.svg +1 -0
- package/public/icons.svg +24 -0
- package/src/App.css +184 -0
- package/src/App.tsx +122 -0
- package/src/BordasSombras.mdx +343 -0
- package/src/Colors.mdx +393 -0
- package/src/GrelhaLayout.mdx +375 -0
- package/src/Icons.mdx +42 -0
- package/src/MovimentoBreakpoints.mdx +379 -0
- package/src/Spacing.mdx +231 -0
- package/src/Typography.mdx +321 -0
- package/src/assets/Mascots/vava/estaticos/vava-acenar.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-acertou.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-celebrar.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-com-autocolantes.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-dormir.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-errou.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-feliz.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-neutra.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-original.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-pensar.svg +3 -0
- package/src/assets/Mascots/vava/estaticos/vava-surpresa.svg +3 -0
- package/src/assets/Mascots/yaya/avatar/yaya-avatar-falar.svg +7 -0
- package/src/assets/Mascots/yaya/avatar/yaya-avatar-feliz.svg +7 -0
- package/src/assets/Mascots/yaya/avatar/yaya-avatar-transparente.svg +6 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-acertou.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-celebrar.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-dormir.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-errou.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-falar.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-feliz.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-neutra.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-pensar.svg +13 -0
- package/src/assets/Mascots/yaya/estaticos/yaya-surpresa.svg +13 -0
- package/src/assets/hero.png +0 -0
- package/src/assets/react.svg +1 -0
- package/src/assets/vite.svg +1 -0
- package/src/components/Buttons/BackButton/BackButton.stories.tsx +86 -0
- package/src/components/Buttons/BackButton/BackButton.tsx +107 -0
- package/src/components/Buttons/FabButton/FabButton.stories.tsx +74 -0
- package/src/components/Buttons/FabButton/FabButton.tsx +161 -0
- package/src/components/Buttons/IconButton/IconButton.stories.tsx +99 -0
- package/src/components/Buttons/IconButton/IconButton.tsx +189 -0
- package/src/components/Buttons/JourneyButton/JourneyButton.stories.tsx +80 -0
- package/src/components/Buttons/JourneyButton/JourneyButton.tsx +194 -0
- package/src/components/Buttons/MainButton/MainButton.stories.tsx +144 -0
- package/src/components/Buttons/MainButton/MainButton.tsx +258 -0
- package/src/components/Buttons/WordChip/WordChip.stories.tsx +84 -0
- package/src/components/Buttons/WordChip/WordChip.tsx +157 -0
- package/src/components/Buttons/WordChip/index.ts +1 -0
- package/src/components/Cards/AnswerOptionCard/AnswerOptionCard.stories.tsx +181 -0
- package/src/components/Cards/AnswerOptionCard/AnswerOptionCard.tsx +201 -0
- package/src/components/Cards/BaseCard/BaseCard.stories.tsx +148 -0
- package/src/components/Cards/BaseCard/BaseCard.tsx +181 -0
- package/src/components/Cards/BoardingPassCard/BoardingPassCard.stories.tsx +205 -0
- package/src/components/Cards/BoardingPassCard/BoardingPassCard.tsx +384 -0
- package/src/components/Cards/BoardingPassCard/FlightIcon.tsx +21 -0
- package/src/components/Cards/BoardingPassCard/FlightIcon.web.tsx +18 -0
- package/src/components/Cards/CountryCard/CountryCard.stories.tsx +97 -0
- package/src/components/Cards/CountryCard/CountryCard.tsx +185 -0
- package/src/components/Cards/LevelProgressCard/LevelProgressCard.stories.tsx +61 -0
- package/src/components/Cards/LevelProgressCard/LevelProgressCard.tsx +143 -0
- package/src/components/Cards/ModuleCard/ModuleCard.stories.tsx +108 -0
- package/src/components/Cards/ModuleCard/ModuleCard.tsx +304 -0
- package/src/components/Cards/ModuleCompletionCard/ModuleCompletionCard.stories.tsx +53 -0
- package/src/components/Cards/ModuleCompletionCard/ModuleCompletionCard.tsx +167 -0
- package/src/components/Cards/Passport/PassportCover.tsx +114 -0
- package/src/components/Cards/Passport/PassportIDPage.tsx +217 -0
- package/src/components/Cards/Passport/PassportStampPage.tsx +253 -0
- package/src/components/Cards/Passport/PassportViewer.stories.tsx +95 -0
- package/src/components/Cards/Passport/PassportViewer.tsx +328 -0
- package/src/components/Cards/PlanCard/PlanCard.stories.tsx +159 -0
- package/src/components/Cards/PlanCard/PlanCard.tsx +317 -0
- package/src/components/Cards/PricingCard/PricingCard.stories.tsx +83 -0
- package/src/components/Cards/PricingCard/PricingCard.tsx +144 -0
- package/src/components/Cards/SelectionCard/SelectionCard.stories.tsx +77 -0
- package/src/components/Cards/SelectionCard/SelectionCard.tsx +111 -0
- package/src/components/Cards/TeacherCard/TeacherCard.stories.tsx +126 -0
- package/src/components/Cards/TeacherCard/TeacherCard.tsx +236 -0
- package/src/components/Charts/WeeklyProgressChart/WeeklyProgressChart.stories.tsx +89 -0
- package/src/components/Charts/WeeklyProgressChart/WeeklyProgressChart.tsx +179 -0
- package/src/components/Charts/WeeklyProgressChart/index.ts +1 -0
- package/src/components/DataDisplay/Avatar/Avatar.stories.tsx +85 -0
- package/src/components/DataDisplay/Avatar/Avatar.tsx +118 -0
- package/src/components/DataDisplay/Avatar/index.ts +1 -0
- package/src/components/DataDisplay/Badge/Badge.stories.tsx +62 -0
- package/src/components/DataDisplay/Badge/Badge.tsx +146 -0
- package/src/components/DataDisplay/Flag/Flag.stories.tsx +98 -0
- package/src/components/DataDisplay/Flag/Flag.tsx +347 -0
- package/src/components/DataDisplay/Flag/Flag.web.tsx +334 -0
- package/src/components/DataDisplay/InstructionBubble/InstructionBubble.stories.tsx +80 -0
- package/src/components/DataDisplay/InstructionBubble/InstructionBubble.tsx +86 -0
- package/src/components/DataDisplay/LevelBadge/LevelBadge.stories.tsx +99 -0
- package/src/components/DataDisplay/LevelBadge/LevelBadge.tsx +118 -0
- package/src/components/DataDisplay/ProgressBar/ProgressBar.stories.tsx +95 -0
- package/src/components/DataDisplay/ProgressBar/ProgressBar.tsx +117 -0
- package/src/components/DataDisplay/StatBadge/StatBadge.stories.tsx +82 -0
- package/src/components/DataDisplay/StatBadge/StatBadge.tsx +135 -0
- package/src/components/DataDisplay/StatBadge/index.ts +1 -0
- package/src/components/DataDisplay/Tag/Tag.stories.tsx +63 -0
- package/src/components/DataDisplay/Tag/Tag.tsx +148 -0
- package/src/components/Feedback/FeedbackBottomSheet/FeedbackBottomSheet.stories.tsx +74 -0
- package/src/components/Feedback/FeedbackBottomSheet/FeedbackBottomSheet.tsx +200 -0
- package/src/components/Forms/Checkbox/Checkbox.stories.tsx +60 -0
- package/src/components/Forms/Checkbox/Checkbox.tsx +127 -0
- package/src/components/Forms/Checkbox/index.ts +1 -0
- package/src/components/Forms/DaySelector/DaySelector.stories.tsx +62 -0
- package/src/components/Forms/DaySelector/DaySelector.tsx +133 -0
- package/src/components/Forms/Radio/Radio.stories.tsx +61 -0
- package/src/components/Forms/Radio/Radio.tsx +141 -0
- package/src/components/Forms/Radio/index.ts +1 -0
- package/src/components/Forms/SegmentedToggle/SegmentedToggle.stories.tsx +67 -0
- package/src/components/Forms/SegmentedToggle/SegmentedToggle.tsx +150 -0
- package/src/components/Forms/SegmentedToggle/index.ts +1 -0
- package/src/components/Forms/Select/Select.stories.tsx +59 -0
- package/src/components/Forms/Select/Select.tsx +255 -0
- package/src/components/Forms/Select/index.ts +1 -0
- package/src/components/Forms/Switch/Switch.stories.tsx +57 -0
- package/src/components/Forms/Switch/Switch.tsx +120 -0
- package/src/components/Forms/Switch/index.ts +1 -0
- package/src/components/Forms/TimeSlot/TimeSlot.stories.tsx +62 -0
- package/src/components/Forms/TimeSlot/TimeSlot.tsx +116 -0
- package/src/components/Headers/CountryHeader/CountryHeader.stories.tsx +114 -0
- package/src/components/Headers/CountryHeader/CountryHeader.tsx +147 -0
- package/src/components/Headers/ProfileHeader/ProfileHeader.stories.tsx +141 -0
- package/src/components/Headers/ProfileHeader/ProfileHeader.tsx +233 -0
- package/src/components/Inputs/FillInTheBlank/FillInTheBlank.stories.tsx +333 -0
- package/src/components/Inputs/FillInTheBlank/FillInTheBlank.tsx +287 -0
- package/src/components/Inputs/FillInTheBlank/index.ts +1 -0
- package/src/components/Inputs/TextInput/TextInput.stories.tsx +103 -0
- package/src/components/Inputs/TextInput/TextInput.tsx +187 -0
- package/src/components/Mascots/Vava/Vava.stories.tsx +114 -0
- package/src/components/Mascots/Vava/Vava.tsx +276 -0
- package/src/components/Mascots/Yaya/Yaya.stories.tsx +98 -0
- package/src/components/Mascots/Yaya/Yaya.tsx +233 -0
- package/src/components/Navigation/BottomTabBar/BottomTabBar.stories.tsx +68 -0
- package/src/components/Navigation/BottomTabBar/BottomTabBar.tsx +85 -0
- package/src/components/Navigation/BottomTabBar/BottomTabBarItem.tsx +68 -0
- package/src/components/Navigation/BottomTabBar/index.ts +2 -0
- package/src/components/Navigation/PaginationDots/PaginationDots.stories.tsx +62 -0
- package/src/components/Navigation/PaginationDots/PaginationDots.tsx +81 -0
- package/src/components/Navigation/PaginationDots/index.ts +1 -0
- package/src/components/Navigation/ProgressMap/ProgressMap.stories.tsx +116 -0
- package/src/components/Navigation/ProgressMap/ProgressMap.tsx +827 -0
- package/src/components/Navigation/WorldProgressMap/WorldProgressMap.stories.tsx +169 -0
- package/src/components/Navigation/WorldProgressMap/WorldProgressMap.tsx +790 -0
- package/src/components/Typography/Typography.stories.tsx +127 -0
- package/src/components/Typography/Typography.tsx +53 -0
- package/src/hooks/useResponsive.ts +41 -0
- package/src/hooks/useTheme.ts +32 -0
- package/src/index.css +355 -0
- package/src/index.ts +28 -0
- package/src/main.tsx +10 -0
- package/src/mocks/codegenNativeComponent.ts +5 -0
- package/src/styles/countryThemes.ts +79 -0
- package/src/styles/theme.ts +297 -0
- package/src/utils/iconMap.ts +23 -0
- package/tsconfig.app.json +25 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +24 -0
- package/vite.config.ts +51 -0
- package/vitest.shims.d.ts +1 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Brand Guidelines/Bordas & Sombras" />
|
|
4
|
+
|
|
5
|
+
# Raios de Borda & Sombras
|
|
6
|
+
|
|
7
|
+
Estes tokens definem o comportamento estrutural dos elementos do **Xetlingo**, moldando os cantos arredondados (raios de borda) e a elevação visual (sombras) das nossas interfaces.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
{/* Raios de Borda */}
|
|
12
|
+
<div style={{
|
|
13
|
+
backgroundColor: 'var(--bg-surface)',
|
|
14
|
+
border: '1px solid var(--border-color)',
|
|
15
|
+
borderRadius: '16px',
|
|
16
|
+
padding: '1.5rem',
|
|
17
|
+
boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03)',
|
|
18
|
+
marginBottom: '2.5rem',
|
|
19
|
+
marginTop: '1.5rem'
|
|
20
|
+
}}>
|
|
21
|
+
<h3 style={{
|
|
22
|
+
fontFamily: 'var(--font-title)',
|
|
23
|
+
fontSize: '1.25rem',
|
|
24
|
+
fontWeight: '700',
|
|
25
|
+
color: 'var(--text-primary)',
|
|
26
|
+
marginTop: 0,
|
|
27
|
+
marginBottom: '1.25rem',
|
|
28
|
+
}}>Raios de borda (Cantos Arredondados)</h3>
|
|
29
|
+
|
|
30
|
+
<p style={{ fontSize: '0.9rem', color: 'var(--text-secondary)', marginBottom: '1.5rem' }}>
|
|
31
|
+
O sistema Xetwa usa cantos generosamente arredondados — amigável e consistente com a marca.
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<table style={{
|
|
35
|
+
width: '100%',
|
|
36
|
+
borderCollapse: 'collapse',
|
|
37
|
+
textAlign: 'left'
|
|
38
|
+
}}>
|
|
39
|
+
<thead>
|
|
40
|
+
<tr style={{
|
|
41
|
+
borderBottom: '2px solid var(--border-color)',
|
|
42
|
+
}}>
|
|
43
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Token</th>
|
|
44
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Valor</th>
|
|
45
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em', width: '90px' }}>Visual</th>
|
|
46
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Usado em</th>
|
|
47
|
+
</tr>
|
|
48
|
+
</thead>
|
|
49
|
+
<tbody>
|
|
50
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
51
|
+
<td style={{ padding: '12px 16px' }}>
|
|
52
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-xs</code>
|
|
53
|
+
</td>
|
|
54
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>6px</td>
|
|
55
|
+
<td style={{ padding: '12px 16px' }}>
|
|
56
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '6px' }} />
|
|
57
|
+
</td>
|
|
58
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
59
|
+
Etiquetas "EM CURSO", badges de estado
|
|
60
|
+
</td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
63
|
+
<td style={{ padding: '12px 16px' }}>
|
|
64
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-sm</code>
|
|
65
|
+
</td>
|
|
66
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>10px</td>
|
|
67
|
+
<td style={{ padding: '12px 16px' }}>
|
|
68
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '10px' }} />
|
|
69
|
+
</td>
|
|
70
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
71
|
+
Chips/tags, chips de data, ícone de plano
|
|
72
|
+
</td>
|
|
73
|
+
</tr>
|
|
74
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
75
|
+
<td style={{ padding: '12px 16px' }}>
|
|
76
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-md</code>
|
|
77
|
+
</td>
|
|
78
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>12px</td>
|
|
79
|
+
<td style={{ padding: '12px 16px' }}>
|
|
80
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '12px' }} />
|
|
81
|
+
</td>
|
|
82
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
83
|
+
Inputs, botões pequenos, avatares quadrados
|
|
84
|
+
</td>
|
|
85
|
+
</tr>
|
|
86
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
87
|
+
<td style={{ padding: '12px 16px' }}>
|
|
88
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-lg</code>
|
|
89
|
+
</td>
|
|
90
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>16px</td>
|
|
91
|
+
<td style={{ padding: '12px 16px' }}>
|
|
92
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '16px' }} />
|
|
93
|
+
</td>
|
|
94
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
95
|
+
Botões primários, cards de opção, horários
|
|
96
|
+
</td>
|
|
97
|
+
</tr>
|
|
98
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
99
|
+
<td style={{ padding: '12px 16px' }}>
|
|
100
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-xl</code>
|
|
101
|
+
</td>
|
|
102
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>20px</td>
|
|
103
|
+
<td style={{ padding: '12px 16px' }}>
|
|
104
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '20px' }} />
|
|
105
|
+
</td>
|
|
106
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
107
|
+
Cards de módulo, bottom sheet, cartão de embarque
|
|
108
|
+
</td>
|
|
109
|
+
</tr>
|
|
110
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
111
|
+
<td style={{ padding: '12px 16px' }}>
|
|
112
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-2xl</code>
|
|
113
|
+
</td>
|
|
114
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>24px</td>
|
|
115
|
+
<td style={{ padding: '12px 16px' }}>
|
|
116
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '24px' }} />
|
|
117
|
+
</td>
|
|
118
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
119
|
+
Modals, cards de mascote, passaporte
|
|
120
|
+
</td>
|
|
121
|
+
</tr>
|
|
122
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
123
|
+
<td style={{ padding: '12px 16px' }}>
|
|
124
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-screen</code>
|
|
125
|
+
</td>
|
|
126
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>34px</td>
|
|
127
|
+
<td style={{ padding: '12px 16px' }}>
|
|
128
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderRadius: '34px' }} />
|
|
129
|
+
</td>
|
|
130
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
131
|
+
Ecrã dentro do frame de telemóvel
|
|
132
|
+
</td>
|
|
133
|
+
</tr>
|
|
134
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
135
|
+
<td style={{ padding: '12px 16px' }}>
|
|
136
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-phone</code>
|
|
137
|
+
</td>
|
|
138
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>42px</td>
|
|
139
|
+
<td style={{ padding: '12px 16px' }}>
|
|
140
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#51332d', borderRadius: '42px' }} />
|
|
141
|
+
</td>
|
|
142
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
143
|
+
Frame exterior do telemóvel (mockups)
|
|
144
|
+
</td>
|
|
145
|
+
</tr>
|
|
146
|
+
<tr>
|
|
147
|
+
<td style={{ padding: '12px 16px' }}>
|
|
148
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--radius-full</code>
|
|
149
|
+
</td>
|
|
150
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>9999px</td>
|
|
151
|
+
<td style={{ padding: '12px 16px' }}>
|
|
152
|
+
<div style={{ width: '32px', height: '32px', backgroundColor: '#f2974b', borderRadius: '9999px' }} />
|
|
153
|
+
</td>
|
|
154
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
155
|
+
Avatares circulares, nós do mapa, chips de nível
|
|
156
|
+
</td>
|
|
157
|
+
</tr>
|
|
158
|
+
</tbody>
|
|
159
|
+
</table>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
{/* Sombras */}
|
|
163
|
+
<div style={{
|
|
164
|
+
backgroundColor: 'var(--bg-surface)',
|
|
165
|
+
border: '1px solid var(--border-color)',
|
|
166
|
+
borderRadius: '16px',
|
|
167
|
+
padding: '1.5rem',
|
|
168
|
+
boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03)',
|
|
169
|
+
marginBottom: '2.5rem'
|
|
170
|
+
}}>
|
|
171
|
+
<h3 style={{
|
|
172
|
+
fontFamily: 'var(--font-title)',
|
|
173
|
+
fontSize: '1.25rem',
|
|
174
|
+
fontWeight: '700',
|
|
175
|
+
color: 'var(--text-primary)',
|
|
176
|
+
marginTop: 0,
|
|
177
|
+
marginBottom: '1.25rem',
|
|
178
|
+
}}>Sombras (Elevação & Efeito 3D)</h3>
|
|
179
|
+
|
|
180
|
+
<p style={{ fontSize: '0.9rem', color: 'var(--text-secondary)', marginBottom: '1.5rem' }}>
|
|
181
|
+
As sombras são suaves e usam o castanho da marca (<code style={{ fontSize: '0.8rem' }}>rgba(81,51,45, ...)</code>) para não quebrar a paleta.
|
|
182
|
+
Os botões usam **sombra rígida ("bottom shadow") estilo jogo** — não box-shadow difuso.
|
|
183
|
+
</p>
|
|
184
|
+
|
|
185
|
+
<table style={{
|
|
186
|
+
width: '100%',
|
|
187
|
+
borderCollapse: 'collapse',
|
|
188
|
+
textAlign: 'left'
|
|
189
|
+
}}>
|
|
190
|
+
<thead>
|
|
191
|
+
<tr style={{
|
|
192
|
+
borderBottom: '2px solid var(--border-color)',
|
|
193
|
+
}}>
|
|
194
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Token</th>
|
|
195
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Valor CSS</th>
|
|
196
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em', width: '80px' }}>Amostra</th>
|
|
197
|
+
<th style={{ padding: '10px 16px', fontSize: '0.75rem', fontWeight: '700', color: 'var(--text-secondary)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Usado em</th>
|
|
198
|
+
</tr>
|
|
199
|
+
</thead>
|
|
200
|
+
<tbody>
|
|
201
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
202
|
+
<td style={{ padding: '12px 16px' }}>
|
|
203
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-xs</code>
|
|
204
|
+
</td>
|
|
205
|
+
<td style={{ padding: '12px 16px' }}>
|
|
206
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 1px 3px rgba(81,51,45,.08)</code>
|
|
207
|
+
</td>
|
|
208
|
+
<td style={{ padding: '12px 16px' }}>
|
|
209
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: 'var(--bg-surface)', border: '1px solid var(--border-color)', borderRadius: '6px', boxShadow: 'var(--shadow-xs)' }} />
|
|
210
|
+
</td>
|
|
211
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
212
|
+
Tags, chips, inputs em repouso
|
|
213
|
+
</td>
|
|
214
|
+
</tr>
|
|
215
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
216
|
+
<td style={{ padding: '12px 16px' }}>
|
|
217
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-sm</code>
|
|
218
|
+
</td>
|
|
219
|
+
<td style={{ padding: '12px 16px' }}>
|
|
220
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 2px 8px rgba(81,51,45,.10)</code>
|
|
221
|
+
</td>
|
|
222
|
+
<td style={{ padding: '12px 16px' }}>
|
|
223
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: 'var(--bg-surface)', border: '1px solid var(--border-color)', borderRadius: '6px', boxShadow: 'var(--shadow-sm)' }} />
|
|
224
|
+
</td>
|
|
225
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
226
|
+
Cards simples, avatares
|
|
227
|
+
</td>
|
|
228
|
+
</tr>
|
|
229
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
230
|
+
<td style={{ padding: '12px 16px' }}>
|
|
231
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-md</code>
|
|
232
|
+
</td>
|
|
233
|
+
<td style={{ padding: '12px 16px' }}>
|
|
234
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 4px 14px rgba(81,51,45,.13)</code>
|
|
235
|
+
</td>
|
|
236
|
+
<td style={{ padding: '12px 16px' }}>
|
|
237
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: 'var(--bg-surface)', border: '1px solid var(--border-color)', borderRadius: '6px', boxShadow: 'var(--shadow-md)' }} />
|
|
238
|
+
</td>
|
|
239
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
240
|
+
Cards de módulo, modals, passaporte
|
|
241
|
+
</td>
|
|
242
|
+
</tr>
|
|
243
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
244
|
+
<td style={{ padding: '12px 16px' }}>
|
|
245
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-lg</code>
|
|
246
|
+
</td>
|
|
247
|
+
<td style={{ padding: '12px 16px' }}>
|
|
248
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 8px 26px rgba(81,51,45,.18)</code>
|
|
249
|
+
</td>
|
|
250
|
+
<td style={{ padding: '12px 16px' }}>
|
|
251
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: 'var(--bg-surface)', border: '1px solid var(--border-color)', borderRadius: '6px', boxShadow: 'var(--shadow-lg)' }} />
|
|
252
|
+
</td>
|
|
253
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
254
|
+
Bottom sheets, cards premium, boarding pass
|
|
255
|
+
</td>
|
|
256
|
+
</tr>
|
|
257
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
258
|
+
<td style={{ padding: '12px 16px' }}>
|
|
259
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-xl</code>
|
|
260
|
+
</td>
|
|
261
|
+
<td style={{ padding: '12px 16px' }}>
|
|
262
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 18px 40px rgba(81,51,45,.28)</code>
|
|
263
|
+
</td>
|
|
264
|
+
<td style={{ padding: '12px 16px' }}>
|
|
265
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: 'var(--bg-surface)', border: '1px solid var(--border-color)', borderRadius: '6px', boxShadow: 'var(--shadow-xl)' }} />
|
|
266
|
+
</td>
|
|
267
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
268
|
+
Frame de telemóvel nos mockups
|
|
269
|
+
</td>
|
|
270
|
+
</tr>
|
|
271
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
272
|
+
<td style={{ padding: '12px 16px' }}>
|
|
273
|
+
<code style={{ fontSize: '0.85rem', color: '#cf7a30', backgroundColor: '#fef6ee', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-btn-primary</code>
|
|
274
|
+
</td>
|
|
275
|
+
<td style={{ padding: '12px 16px' }}>
|
|
276
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 4px 0 #cf7a30</code>
|
|
277
|
+
</td>
|
|
278
|
+
<td style={{ padding: '12px 16px' }}>
|
|
279
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#f2974b', borderBottom: '4px solid #cf7a30', borderRadius: '6px' }} />
|
|
280
|
+
</td>
|
|
281
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
282
|
+
Botão primário (laranja) — sombra rígida
|
|
283
|
+
</td>
|
|
284
|
+
</tr>
|
|
285
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
286
|
+
<td style={{ padding: '12px 16px' }}>
|
|
287
|
+
<code style={{ fontSize: '0.85rem', color: '#51332d', backgroundColor: '#efe2d6', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-btn-secondary</code>
|
|
288
|
+
</td>
|
|
289
|
+
<td style={{ padding: '12px 16px' }}>
|
|
290
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 4px 0 #efe2d6</code>
|
|
291
|
+
</td>
|
|
292
|
+
<td style={{ padding: '12px 16px' }}>
|
|
293
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#fef6ee', borderBottom: '4px solid #efe2d6', borderLeft: '1px solid #efe2d6', borderRight: '1px solid #efe2d6', borderRadius: '6px' }} />
|
|
294
|
+
</td>
|
|
295
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
296
|
+
Botão secundário (branco) — sombra rígida
|
|
297
|
+
</td>
|
|
298
|
+
</tr>
|
|
299
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
300
|
+
<td style={{ padding: '12px 16px' }}>
|
|
301
|
+
<code style={{ fontSize: '0.85rem', color: '#ffffff', backgroundColor: '#51332d', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-btn-dark</code>
|
|
302
|
+
</td>
|
|
303
|
+
<td style={{ padding: '12px 16px' }}>
|
|
304
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 4px 0 #3a241f</code>
|
|
305
|
+
</td>
|
|
306
|
+
<td style={{ padding: '12px 16px' }}>
|
|
307
|
+
<div style={{ width: '40px', height: '24px', backgroundColor: '#51332d', borderBottom: '4px solid #3a241f', borderRadius: '6px' }} />
|
|
308
|
+
</td>
|
|
309
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
310
|
+
Botão dark (castanho) — sombra rígida
|
|
311
|
+
</td>
|
|
312
|
+
</tr>
|
|
313
|
+
<tr style={{ borderBottom: '1px solid var(--border-color)' }}>
|
|
314
|
+
<td style={{ padding: '12px 16px' }}>
|
|
315
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-focus</code>
|
|
316
|
+
</td>
|
|
317
|
+
<td style={{ padding: '12px 16px' }}>
|
|
318
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>0 0 0 3px rgba(242,151,75,.22)</code>
|
|
319
|
+
</td>
|
|
320
|
+
<td style={{ padding: '12px 16px' }}>
|
|
321
|
+
<div style={{ width: '36px', height: '20px', borderRadius: '6px', border: '3px solid rgba(242, 151, 75, 0.22)' }} />
|
|
322
|
+
</td>
|
|
323
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
324
|
+
Focus ring de inputs e botões
|
|
325
|
+
</td>
|
|
326
|
+
</tr>
|
|
327
|
+
<tr>
|
|
328
|
+
<td style={{ padding: '12px 16px' }}>
|
|
329
|
+
<code style={{ fontSize: '0.85rem', color: 'var(--text-primary)', backgroundColor: 'var(--bg-app)', padding: '4px 8px', borderRadius: '6px', fontWeight: '600' }}>--shadow-ring-pulse</code>
|
|
330
|
+
</td>
|
|
331
|
+
<td style={{ padding: '12px 16px' }}>
|
|
332
|
+
<code style={{ fontSize: '0.8rem', color: 'var(--text-secondary)', fontFamily: 'monospace' }}>Pulse animation</code>
|
|
333
|
+
</td>
|
|
334
|
+
<td style={{ padding: '12px 16px' }}>
|
|
335
|
+
<div style={{ width: '20px', height: '20px', borderRadius: '50%', backgroundColor: '#f2974b', boxShadow: '0 0 0 6px rgba(242, 151, 75, 0.25)' }} />
|
|
336
|
+
</td>
|
|
337
|
+
<td style={{ padding: '12px 16px', fontSize: '0.9rem', color: 'var(--text-primary)' }}>
|
|
338
|
+
Animação de pulse no nó ativo do mapa
|
|
339
|
+
</td>
|
|
340
|
+
</tr>
|
|
341
|
+
</tbody>
|
|
342
|
+
</table>
|
|
343
|
+
</div>
|