Files
mirror-os-flutter/packages/mirror_ui/lib/theme.dart
T
2026-07-11 21:51:34 -05:00

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;
}