SkinFirts uses a centralised theme system underDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/BhushanBadhe39/SkinFirts/llms.txt
Use this file to discover all available pages before exploring further.
src/theme/ that drives every visual decision in the app. Rather than scattering raw hex values, pixel numbers, or font strings across screens and components, all values are imported from four files — colors.js, fonts.js, metrics.js, and commonStyles.js. This keeps the entire codebase consistent and makes global design changes a single-file edit.
Color Palette
All brand colors live insrc/theme/colors.js and are exported as a single colors object.
| Token | Value | Usage |
|---|---|---|
primary | #2260FF | Buttons, active icons, active states, borders |
secondary | #FFFFFF | Screen backgrounds, text on primary surfaces |
black | #000000 | Main body text |
shade | #CAD6FF | Card backgrounds, inactive toggle state, icon button backgrounds |
shadeLight | #ECF1FF | Input backgrounds, secondary card fills |
shadeText | #809CFF | Placeholder text, muted timestamps |
transparent is imported from react-native-paper inside colors.js but not re-exported. If you need a transparent surface, use the React Native built-in string 'transparent' directly in your styles.Typography
SkinFirts uses the LeagueSpartan variable font family across all nine weight variants. Font sizes are defined withmoderateScale so they adjust proportionally to screen width rather than being hardcoded pixels.
Font scale (src/theme/fonts.js)
Font weight reference
| Token | Font Family String | Weight |
|---|---|---|
thin | LeagueSpartan-Thin | 100 |
extraLight | LeagueSpartan-ExtraLight | 200 |
light | LeagueSpartan-Light | 300 |
regular | LeagueSpartan-Regular | 400 |
medium | LeagueSpartan-Medium | 500 |
semiBold | LeagueSpartan-SemiBold | 600 |
bold | LeagueSpartan-Bold | 700 |
extraBold | LeagueSpartan-ExtraBold | 800 |
black | LeagueSpartan-Black | 900 |
Usage example
Metrics & Responsive Scaling
src/theme/metrics.js exports three scaling helpers built on top of Dimensions.get('window'). All helpers are calibrated against a 360 × 800 dp baseline device (a common Android reference). Width and height ratios are capped at 1.5× so tablet layouts don’t over-scale.
Helper reference
| Helper | Scales against | Best used for | Example |
|---|---|---|---|
scale(size) | Screen width | Horizontal dimensions — widths, horizontal padding/margin, icon sizes | width: scale(100) |
verticalScale(size) | Screen height | Vertical dimensions — heights, vertical padding/margin, spacing | paddingVertical: verticalScale(12) |
moderateScale(size, factor?) | Width, dampened by factor (default 0.5) | Font sizes and values that should scale but not as aggressively as raw dimensions | fontSize: moderateScale(14) |
Usage example
commonStyles
src/theme/commonStyles.js exposes a StyleSheet of shared style tokens that every screen and component can import. Using these tokens instead of repeating the same declarations keeps the codebase DRY and ensures consistent spacing, typography, and layout behaviour everywhere.
Token reference
| Token | Purpose |
|---|---|
container | Root screen wrapper — white background, flex: 1 |
row | Horizontal flex row with space-evenly justification and a scale(7) gap |
centeredItems | alignItems: 'center' shorthand |
buttonsRow | Stretched space-between row — used for action button rows inside cards |
lgMarginBox | Wide horizontal margin (scale(45)) for centered auth-screen content |
mdMarginBox | Medium horizontal margin (scale(30)) — most screen content areas |
smTopMargin | Small top margin (verticalScale(18)) between sections |
mdTopMargin | Medium top margin (verticalScale(36)) between major sections |
smSpace | Small bottom spacer (verticalScale(12)) |
mdSpace | Medium bottom spacer (verticalScale(36)) |
subheading | Semi-bold fonts.md text in colors.primary |
infoText | Light fonts.xxs text — captions and metadata |
blackText | Medium fonts.sm text — standard body copy |
impText | colors.primary colour override for emphasis |
profileTextRegular | Regular fonts.md left-aligned text in black — profile fields |
input | Shared text input shape (overridden per input component for radius) |
iconButton | 60 × 60 circular icon button base shape |
dash | Full-width horizontal rule in colors.primary |
Usage example
PressableStyles
src/theme/PressableStyles.js exports a single pressableStyles object with a pressed state style. Apply it inside Pressable’s style callback to give interactive elements a consistent press-feedback opacity.