111 lines
3.4 KiB
Dart
111 lines
3.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class MirrorTheme {
|
|
MirrorTheme._();
|
|
|
|
static const _zinc50 = Color(0xFFFAFAFA);
|
|
static const _zinc100 = Color(0xFFF4F4F5);
|
|
static const _zinc200 = Color(0xFFE4E4E7);
|
|
static const _zinc400 = Color(0xFFA1A1AA);
|
|
static const _zinc500 = Color(0xFF71717A);
|
|
static const _zinc700 = Color(0xFF3F3F46);
|
|
static const _zinc800 = Color(0xFF27272A);
|
|
static const _zinc900 = Color(0xFF18181B);
|
|
static const _zinc950 = Color(0xFF09090B);
|
|
|
|
static const _accent = Color(0xFF60A5FA); // blue-400
|
|
static const _accentDim = Color(0xFF1E3A5F);
|
|
static const _success = Color(0xFF4ADE80); // green-400
|
|
static const _danger = Color(0xFFF87171); // red-400
|
|
static const _warning = Color(0xFFFBBF24); // amber-400
|
|
|
|
static const fontFamily = 'Inter';
|
|
static const fontMono = 'JetBrains Mono';
|
|
|
|
static ThemeData get dark => ThemeData(
|
|
brightness: Brightness.dark,
|
|
fontFamily: fontFamily,
|
|
scaffoldBackgroundColor: _zinc950,
|
|
colorScheme: const ColorScheme.dark(
|
|
surface: _zinc900,
|
|
primary: _accent,
|
|
secondary: _zinc700,
|
|
error: _danger,
|
|
onSurface: _zinc100,
|
|
onPrimary: _zinc950,
|
|
),
|
|
cardTheme: const CardThemeData(
|
|
color: _zinc900,
|
|
elevation: 0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(16)),
|
|
),
|
|
),
|
|
textTheme: const TextTheme(
|
|
displayLarge: TextStyle(
|
|
fontSize: 96,
|
|
fontWeight: FontWeight.w200,
|
|
fontFamily: fontMono,
|
|
color: _zinc50,
|
|
letterSpacing: -2,
|
|
),
|
|
displayMedium: TextStyle(
|
|
fontSize: 60,
|
|
fontWeight: FontWeight.w200,
|
|
fontFamily: fontMono,
|
|
color: _zinc50,
|
|
),
|
|
displaySmall: TextStyle(
|
|
fontSize: 36,
|
|
fontWeight: FontWeight.w300,
|
|
color: _zinc50,
|
|
),
|
|
headlineLarge: TextStyle(
|
|
fontSize: 28,
|
|
fontWeight: FontWeight.w600,
|
|
color: _zinc50,
|
|
),
|
|
headlineMedium: TextStyle(
|
|
fontSize: 22,
|
|
fontWeight: FontWeight.w500,
|
|
color: _zinc50,
|
|
),
|
|
bodyLarge: TextStyle(
|
|
fontSize: 18,
|
|
fontWeight: FontWeight.w400,
|
|
color: _zinc200,
|
|
),
|
|
bodyMedium: TextStyle(
|
|
fontSize: 16,
|
|
fontWeight: FontWeight.w400,
|
|
color: _zinc400,
|
|
),
|
|
bodySmall: TextStyle(
|
|
fontSize: 14,
|
|
fontWeight: FontWeight.w400,
|
|
color: _zinc500,
|
|
),
|
|
labelLarge: TextStyle(
|
|
fontSize: 16,
|
|
fontWeight: FontWeight.w600,
|
|
color: _zinc50,
|
|
letterSpacing: 1.5,
|
|
),
|
|
),
|
|
iconTheme: const IconThemeData(color: _zinc400, size: 24),
|
|
dividerColor: _zinc800,
|
|
);
|
|
|
|
static const Color accent = _accent;
|
|
static const Color accentDim = _accentDim;
|
|
static const Color success = _success;
|
|
static const Color danger = _danger;
|
|
static const Color warning = _warning;
|
|
static const Color surface = _zinc900;
|
|
static const Color surfaceLight = _zinc800;
|
|
static const Color background = _zinc950;
|
|
static const Color textPrimary = _zinc50;
|
|
static const Color textSecondary = _zinc400;
|
|
static const Color textMuted = _zinc500;
|
|
}
|