diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..b0b3e1fe2543143896ee06ae7b9984f8bd038f73
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,18 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.json]
+indent_size = 2
+
+[*.yaml]
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.gitignore b/.gitignore
index 361df94f91db934b411ea13244ac8db6f41f3888..54ae0222de3e722adfb2b48c14d77c4d074dafda 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
 .buildlog/
 .history
 .svn/
+migrate_working_dir/
 
 # IntelliJ related
 *.iml
diff --git a/assets/fonts/Nunito-Bold.ttf b/assets/fonts/Nunito-Bold.ttf
deleted file mode 100644
index 6519feb781449ebe0015cbc74dfd9e13110fbba9..0000000000000000000000000000000000000000
Binary files a/assets/fonts/Nunito-Bold.ttf and /dev/null differ
diff --git a/assets/fonts/Nunito-Light.ttf b/assets/fonts/Nunito-Light.ttf
deleted file mode 100644
index 8a0736c41cd6c2a1225d356bf274de1d0afc3497..0000000000000000000000000000000000000000
Binary files a/assets/fonts/Nunito-Light.ttf and /dev/null differ
diff --git a/assets/fonts/Nunito-Medium.ttf b/assets/fonts/Nunito-Medium.ttf
deleted file mode 100644
index 88fccdc0638b6f5d6ac49d9d269dc3d518618ad1..0000000000000000000000000000000000000000
Binary files a/assets/fonts/Nunito-Medium.ttf and /dev/null differ
diff --git a/assets/fonts/Nunito-Regular.ttf b/assets/fonts/Nunito-Regular.ttf
deleted file mode 100644
index e7b8375a896ef0cd8e06730a78c84532b377e784..0000000000000000000000000000000000000000
Binary files a/assets/fonts/Nunito-Regular.ttf and /dev/null differ
diff --git a/fastlane/metadata/android/en-US/changelogs/36.txt b/fastlane/metadata/android/en-US/changelogs/36.txt
new file mode 100644
index 0000000000000000000000000000000000000000..65ba5e83570223adc45ccea599a3487b24b8a7dd
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/36.txt
@@ -0,0 +1 @@
+Use flutter_custom_toolbox for common features.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/36.txt b/fastlane/metadata/android/fr-FR/changelogs/36.txt
new file mode 100644
index 0000000000000000000000000000000000000000..258c624fb3898d91b6b70d7d99db2719c1bf0751
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/36.txt
@@ -0,0 +1 @@
+Utilisation de flutter_custom_toolbox pour les fonctionnalités communes.
diff --git a/lib/config/default_game_settings.dart b/lib/config/default_game_settings.dart
index a95748ccb347da9508470852798ede34319afdcd..ae24687f10b5f56c8c1cf2dbdec7c3365e1e1ba9 100644
--- a/lib/config/default_game_settings.dart
+++ b/lib/config/default_game_settings.dart
@@ -1,4 +1,4 @@
-import 'package:jeweled/utils/tools.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 class DefaultGameSettings {
   // available game parameters codes
diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart
index 56816e20b14b1f46065e48d9629e8820fc1d2107..0d768baa136507cedb6337411b661c9f651084d3 100644
--- a/lib/config/default_global_settings.dart
+++ b/lib/config/default_global_settings.dart
@@ -1,4 +1,4 @@
-import 'package:jeweled/utils/tools.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 class DefaultGlobalSettings {
   // available global parameters codes
diff --git a/lib/config/menu.dart b/lib/config/menu.dart
index aa89aa5707e955ccb37e5c6778693cae4f89b205..af477181778261bb6a08e5886855219e6df5c719 100644
--- a/lib/config/menu.dart
+++ b/lib/config/menu.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:unicons/unicons.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/ui/screens/page_game.dart';
 import 'package:jeweled/ui/screens/page_settings.dart';
diff --git a/lib/config/theme.dart b/lib/config/theme.dart
deleted file mode 100644
index 74f532fd5abf693979118609564d29167e902009..0000000000000000000000000000000000000000
--- a/lib/config/theme.dart
+++ /dev/null
@@ -1,190 +0,0 @@
-import 'package:flutter/material.dart';
-
-/// Colors from Tailwind CSS (v3.0) - June 2022
-///
-/// https://tailwindcss.com/docs/customizing-colors
-
-const int _primaryColor = 0xFF6366F1;
-const MaterialColor primarySwatch = MaterialColor(_primaryColor, <int, Color>{
-  50: Color(0xFFEEF2FF), // indigo-50
-  100: Color(0xFFE0E7FF), // indigo-100
-  200: Color(0xFFC7D2FE), // indigo-200
-  300: Color(0xFFA5B4FC), // indigo-300
-  400: Color(0xFF818CF8), // indigo-400
-  500: Color(_primaryColor), // indigo-500
-  600: Color(0xFF4F46E5), // indigo-600
-  700: Color(0xFF4338CA), // indigo-700
-  800: Color(0xFF3730A3), // indigo-800
-  900: Color(0xFF312E81), // indigo-900
-});
-
-const int _textColor = 0xFF64748B;
-const MaterialColor textSwatch = MaterialColor(_textColor, <int, Color>{
-  50: Color(0xFFF8FAFC), // slate-50
-  100: Color(0xFFF1F5F9), // slate-100
-  200: Color(0xFFE2E8F0), // slate-200
-  300: Color(0xFFCBD5E1), // slate-300
-  400: Color(0xFF94A3B8), // slate-400
-  500: Color(_textColor), // slate-500
-  600: Color(0xFF475569), // slate-600
-  700: Color(0xFF334155), // slate-700
-  800: Color(0xFF1E293B), // slate-800
-  900: Color(0xFF0F172A), // slate-900
-});
-
-const Color errorColor = Color(0xFFDC2626); // red-600
-
-final ColorScheme lightColorScheme = ColorScheme.light(
-  primary: primarySwatch.shade500,
-  secondary: primarySwatch.shade500,
-  onSecondary: Colors.white,
-  error: errorColor,
-  onSurface: textSwatch.shade500,
-  surface: textSwatch.shade50,
-  surfaceContainerHighest: Colors.white,
-  shadow: textSwatch.shade900.withOpacity(.1),
-);
-
-final ColorScheme darkColorScheme = ColorScheme.dark(
-  primary: primarySwatch.shade500,
-  secondary: primarySwatch.shade500,
-  onSecondary: Colors.white,
-  error: errorColor,
-  onSurface: textSwatch.shade300,
-  surface: const Color(0xFF262630),
-  surfaceContainerHighest: const Color(0xFF282832),
-  shadow: textSwatch.shade900.withOpacity(.2),
-);
-
-final ThemeData lightTheme = ThemeData(
-  colorScheme: lightColorScheme,
-  fontFamily: 'Nunito',
-  textTheme: TextTheme(
-    displayLarge: TextStyle(
-      color: textSwatch.shade700,
-      fontFamily: 'Nunito',
-    ),
-    displayMedium: TextStyle(
-      color: textSwatch.shade600,
-      fontFamily: 'Nunito',
-    ),
-    displaySmall: TextStyle(
-      color: textSwatch.shade500,
-      fontFamily: 'Nunito',
-    ),
-    headlineLarge: TextStyle(
-      color: textSwatch.shade700,
-      fontFamily: 'Nunito',
-    ),
-    headlineMedium: TextStyle(
-      color: textSwatch.shade600,
-      fontFamily: 'Nunito',
-    ),
-    headlineSmall: TextStyle(
-      color: textSwatch.shade500,
-      fontFamily: 'Nunito',
-    ),
-    titleLarge: TextStyle(
-      color: textSwatch.shade700,
-      fontFamily: 'Nunito',
-    ),
-    titleMedium: TextStyle(
-      color: textSwatch.shade600,
-      fontFamily: 'Nunito',
-    ),
-    titleSmall: TextStyle(
-      color: textSwatch.shade500,
-      fontFamily: 'Nunito',
-    ),
-    bodyLarge: TextStyle(
-      color: textSwatch.shade700,
-      fontFamily: 'Nunito',
-    ),
-    bodyMedium: TextStyle(
-      color: textSwatch.shade600,
-      fontFamily: 'Nunito',
-    ),
-    bodySmall: TextStyle(
-      color: textSwatch.shade500,
-      fontFamily: 'Nunito',
-    ),
-    labelLarge: TextStyle(
-      color: textSwatch.shade700,
-      fontFamily: 'Nunito',
-    ),
-    labelMedium: TextStyle(
-      color: textSwatch.shade600,
-      fontFamily: 'Nunito',
-    ),
-    labelSmall: TextStyle(
-      color: textSwatch.shade500,
-      fontFamily: 'Nunito',
-    ),
-  ),
-);
-
-final ThemeData darkTheme = lightTheme.copyWith(
-  colorScheme: darkColorScheme,
-  textTheme: TextTheme(
-    displayLarge: TextStyle(
-      color: textSwatch.shade200,
-      fontFamily: 'Nunito',
-    ),
-    displayMedium: TextStyle(
-      color: textSwatch.shade300,
-      fontFamily: 'Nunito',
-    ),
-    displaySmall: TextStyle(
-      color: textSwatch.shade400,
-      fontFamily: 'Nunito',
-    ),
-    headlineLarge: TextStyle(
-      color: textSwatch.shade200,
-      fontFamily: 'Nunito',
-    ),
-    headlineMedium: TextStyle(
-      color: textSwatch.shade300,
-      fontFamily: 'Nunito',
-    ),
-    headlineSmall: TextStyle(
-      color: textSwatch.shade400,
-      fontFamily: 'Nunito',
-    ),
-    titleLarge: TextStyle(
-      color: textSwatch.shade200,
-      fontFamily: 'Nunito',
-    ),
-    titleMedium: TextStyle(
-      color: textSwatch.shade300,
-      fontFamily: 'Nunito',
-    ),
-    titleSmall: TextStyle(
-      color: textSwatch.shade400,
-      fontFamily: 'Nunito',
-    ),
-    bodyLarge: TextStyle(
-      color: textSwatch.shade200,
-      fontFamily: 'Nunito',
-    ),
-    bodyMedium: TextStyle(
-      color: textSwatch.shade300,
-      fontFamily: 'Nunito',
-    ),
-    bodySmall: TextStyle(
-      color: textSwatch.shade400,
-      fontFamily: 'Nunito',
-    ),
-    labelLarge: TextStyle(
-      color: textSwatch.shade200,
-      fontFamily: 'Nunito',
-    ),
-    labelMedium: TextStyle(
-      color: textSwatch.shade300,
-      fontFamily: 'Nunito',
-    ),
-    labelSmall: TextStyle(
-      color: textSwatch.shade400,
-      fontFamily: 'Nunito',
-    ),
-  ),
-);
diff --git a/lib/cubit/game_cubit.dart b/lib/cubit/game_cubit.dart
index 276c94597d030b4e6167907b87b3fefb1b1407fe..3bddd1a6a48b47449cc665378cb09d0b1c2f4bc7 100644
--- a/lib/cubit/game_cubit.dart
+++ b/lib/cubit/game_cubit.dart
@@ -1,13 +1,11 @@
-import 'package:equatable/equatable.dart';
 import 'package:flutter/material.dart';
-import 'package:hydrated_bloc/hydrated_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/default_game_settings.dart';
 import 'package:jeweled/models/game/cell_location.dart';
 import 'package:jeweled/models/game/game.dart';
 import 'package:jeweled/models/settings/settings_game.dart';
 import 'package:jeweled/models/settings/settings_global.dart';
-import 'package:jeweled/utils/tools.dart';
 
 part 'game_state.dart';
 
diff --git a/lib/cubit/nav_cubit.dart b/lib/cubit/nav_cubit.dart
index 47db0b126c57d4b39b343a417909f61bdd45ce9c..cbccfa80ea6e54c065ae68e030969af8766c19dc 100644
--- a/lib/cubit/nav_cubit.dart
+++ b/lib/cubit/nav_cubit.dart
@@ -1,4 +1,4 @@
-import 'package:hydrated_bloc/hydrated_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/menu.dart';
 
diff --git a/lib/cubit/settings_game_cubit.dart b/lib/cubit/settings_game_cubit.dart
index 53df322a469307b409a03e89fb91ffcf549acf5f..2aee5b73bceae98dfab3c2ab57ca352defaedd0c 100644
--- a/lib/cubit/settings_game_cubit.dart
+++ b/lib/cubit/settings_game_cubit.dart
@@ -1,6 +1,5 @@
-import 'package:equatable/equatable.dart';
 import 'package:flutter/material.dart';
-import 'package:hydrated_bloc/hydrated_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/default_game_settings.dart';
 import 'package:jeweled/models/settings/settings_game.dart';
diff --git a/lib/cubit/settings_global_cubit.dart b/lib/cubit/settings_global_cubit.dart
index eadc407a1e445975ac5d9b00b98179d2f2fb42e8..61d550412c94a8b0c58d150ca5e4f017d71a2711 100644
--- a/lib/cubit/settings_global_cubit.dart
+++ b/lib/cubit/settings_global_cubit.dart
@@ -1,6 +1,5 @@
-import 'package:equatable/equatable.dart';
 import 'package:flutter/material.dart';
-import 'package:hydrated_bloc/hydrated_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/default_global_settings.dart';
 import 'package:jeweled/models/settings/settings_global.dart';
diff --git a/lib/cubit/theme_cubit.dart b/lib/cubit/theme_cubit.dart
index b793e895dbb0c672d451cd403e0036c3d9ac9b42..1ecab6014c67a0393eabbf704b8b85c9e988705e 100644
--- a/lib/cubit/theme_cubit.dart
+++ b/lib/cubit/theme_cubit.dart
@@ -1,6 +1,5 @@
-import 'package:equatable/equatable.dart';
 import 'package:flutter/material.dart';
-import 'package:hydrated_bloc/hydrated_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 part 'theme_state.dart';
 
diff --git a/lib/main.dart b/lib/main.dart
index f62d4d593cf6c79a4e466f8c91f35c5a70fe4f33..a9290ea088997fb5e2276db3f4f08fa68ed92790 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,18 +1,14 @@
 import 'dart:io';
 
-import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:hive/hive.dart';
-import 'package:hydrated_bloc/hydrated_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 import 'package:jeweled/cubit/nav_cubit.dart';
 import 'package:jeweled/cubit/settings_game_cubit.dart';
 import 'package:jeweled/cubit/settings_global_cubit.dart';
 import 'package:jeweled/ui/skeleton.dart';
-import 'package:path_provider/path_provider.dart';
 
-import 'package:jeweled/config/theme.dart';
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/cubit/theme_cubit.dart';
 
diff --git a/lib/models/game/board.dart b/lib/models/game/board.dart
index 50db4a0f50f395a05bf0ce97ba4c9b21fec774e9..bc3dfc04658c05c10d437b8c9a132e4848461e21 100644
--- a/lib/models/game/board.dart
+++ b/lib/models/game/board.dart
@@ -1,8 +1,9 @@
 import 'dart:math';
 
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 import 'package:jeweled/models/game/cell.dart';
 import 'package:jeweled/models/settings/settings_game.dart';
-import 'package:jeweled/utils/tools.dart';
 
 class Board {
   final List<List<Cell>> cells;
diff --git a/lib/models/game/game.dart b/lib/models/game/game.dart
index 6c4f4ae8d95482da0ccb8c73dedf04d6b732489e..26f71becea327b6c2881ec54613213604f86863c 100644
--- a/lib/models/game/game.dart
+++ b/lib/models/game/game.dart
@@ -1,5 +1,7 @@
 import 'dart:math';
 
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 import 'package:jeweled/config/color_theme.dart';
 import 'package:jeweled/config/default_global_settings.dart';
 import 'package:jeweled/models/game/board.dart';
@@ -7,7 +9,6 @@ import 'package:jeweled/models/game/cell.dart';
 import 'package:jeweled/models/game/cell_location.dart';
 import 'package:jeweled/models/settings/settings_game.dart';
 import 'package:jeweled/models/settings/settings_global.dart';
-import 'package:jeweled/utils/tools.dart';
 
 class Game {
   Game({
diff --git a/lib/models/settings/settings_game.dart b/lib/models/settings/settings_game.dart
index da6f4e36a8df0bcfdda10b4efc76b9e12f8db980..c733c1a34fafbf2e8f85b104e7549cd98472d076 100644
--- a/lib/models/settings/settings_game.dart
+++ b/lib/models/settings/settings_game.dart
@@ -1,5 +1,6 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 import 'package:jeweled/config/default_game_settings.dart';
-import 'package:jeweled/utils/tools.dart'; 
 
 class GameSettings {
   final String boardSize;
diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart
index 8212f83365dd6f9579422b457391f109c62fe76f..a79ed5cf6378bc8b5cf12033a63b5dd698c2dfba 100644
--- a/lib/models/settings/settings_global.dart
+++ b/lib/models/settings/settings_global.dart
@@ -1,5 +1,6 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 import 'package:jeweled/config/default_global_settings.dart';
-import 'package:jeweled/utils/tools.dart'; 
 
 class GlobalSettings {
   final String colorsTheme;
diff --git a/lib/ui/game/game_top.dart b/lib/ui/game/game_top.dart
index 36f45daa6f1fde3225c9350827b13ce64c748a17..920171a2ea06063b40224775558459da3218a484 100644
--- a/lib/ui/game/game_top.dart
+++ b/lib/ui/game/game_top.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/models/game/game.dart';
diff --git a/lib/ui/helpers/app_titles.dart b/lib/ui/helpers/app_titles.dart
deleted file mode 100644
index b98107b12fabc3114ebfbec994166b588abcf1ad..0000000000000000000000000000000000000000
--- a/lib/ui/helpers/app_titles.dart
+++ /dev/null
@@ -1,32 +0,0 @@
-import 'package:easy_localization/easy_localization.dart';
-import 'package:flutter/material.dart';
-
-class AppHeader extends StatelessWidget {
-  const AppHeader({super.key, required this.text});
-
-  final String text;
-
-  @override
-  Widget build(BuildContext context) {
-    return Text(
-      tr(text),
-      textAlign: TextAlign.start,
-      style: Theme.of(context).textTheme.headlineMedium!.apply(fontWeightDelta: 2),
-    );
-  }
-}
-
-class AppTitle extends StatelessWidget {
-  const AppTitle({super.key, required this.text});
-
-  final String text;
-
-  @override
-  Widget build(BuildContext context) {
-    return Text(
-      tr(text),
-      textAlign: TextAlign.start,
-      style: Theme.of(context).textTheme.titleLarge!.apply(fontWeightDelta: 2),
-    );
-  }
-}
diff --git a/lib/ui/helpers/outlined_text_widget.dart b/lib/ui/helpers/outlined_text_widget.dart
deleted file mode 100644
index 99c26587ba0ae4323777e9bea53064e36e3af88a..0000000000000000000000000000000000000000
--- a/lib/ui/helpers/outlined_text_widget.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-import 'package:flutter/material.dart';
-
-import 'package:jeweled/utils/color_extensions.dart';
-
-class OutlinedText extends StatelessWidget {
-  const OutlinedText({
-    super.key,
-    required this.text,
-    required this.fontSize,
-    required this.textColor,
-    this.outlineColor,
-  });
-
-  final String text;
-  final double fontSize;
-  final Color textColor;
-  final Color? outlineColor;
-
-  @override
-  Widget build(BuildContext context) {
-    final double delta = fontSize / 30;
-
-    return Text(
-      text,
-      style: TextStyle(
-        inherit: true,
-        fontSize: fontSize,
-        fontWeight: FontWeight.w600,
-        color: textColor,
-        shadows: [
-          Shadow(
-            offset: Offset(-delta, -delta),
-            color: outlineColor ?? textColor.darken(),
-          ),
-          Shadow(
-            offset: Offset(delta, -delta),
-            color: outlineColor ?? textColor.darken(),
-          ),
-          Shadow(
-            offset: Offset(delta, delta),
-            color: outlineColor ?? textColor.darken(),
-          ),
-          Shadow(
-            offset: Offset(-delta, delta),
-            color: outlineColor ?? textColor.darken(),
-          ),
-        ],
-      ),
-    );
-  }
-}
diff --git a/lib/ui/helpers/styled_button.dart b/lib/ui/helpers/styled_button.dart
deleted file mode 100644
index dc194821db5e285f05de854b7501e2f139398b0c..0000000000000000000000000000000000000000
--- a/lib/ui/helpers/styled_button.dart
+++ /dev/null
@@ -1,210 +0,0 @@
-import 'package:auto_size_text/auto_size_text.dart';
-import 'package:flutter/material.dart';
-
-import 'package:jeweled/utils/color_extensions.dart';
-
-class StyledButton extends StatelessWidget {
-  const StyledButton({
-    super.key,
-    required this.color,
-    required this.onPressed,
-    this.onLongPress,
-    required this.child,
-  });
-
-  final Color color;
-  final VoidCallback? onPressed;
-  final VoidCallback? onLongPress;
-  final Widget child;
-
-  factory StyledButton.text({
-    Key? key,
-    required VoidCallback? onPressed,
-    VoidCallback? onLongPress,
-    required String caption,
-    required Color color,
-  }) {
-    final Widget captionWidget = AutoSizeText(
-      caption,
-      maxLines: 1,
-      style: TextStyle(
-        inherit: true,
-        fontWeight: FontWeight.w900,
-        color: color.darken(60),
-        shadows: [
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(2, 2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(2, -2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(-2, 2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(-2, -2),
-          ),
-        ],
-      ),
-    );
-
-    return StyledButton(
-      color: color,
-      onPressed: onPressed,
-      onLongPress: onLongPress,
-      child: captionWidget,
-    );
-  }
-
-  factory StyledButton.icon({
-    Key? key,
-    required VoidCallback? onPressed,
-    VoidCallback? onLongPress,
-    required Icon icon,
-    required Color color,
-    required double iconSize,
-  }) {
-    return StyledButton(
-      color: color,
-      onPressed: onPressed,
-      onLongPress: onLongPress,
-      child: Icon(
-        icon.icon,
-        color: icon.color ?? color.darken(60),
-        size: iconSize,
-        shadows: [
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(2, 2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(2, -2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(-2, 2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(-2, -2),
-          ),
-        ],
-      ),
-    );
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    const double borderWidth = 4;
-    final Color borderColor = color.darken(40);
-    const double borderRadius = 10;
-
-    return Container(
-      margin: const EdgeInsets.all(2),
-      padding: const EdgeInsets.all(2),
-      decoration: BoxDecoration(
-        color: color,
-        border: Border.all(
-          color: borderColor,
-          width: borderWidth,
-        ),
-        borderRadius: BorderRadius.circular(borderRadius),
-      ),
-      child: CustomPaint(
-        painter: StyledButtonPainter(
-          baseColor: color,
-        ),
-        child: MaterialButton(
-          onPressed: onPressed,
-          onLongPress: onLongPress,
-          padding: const EdgeInsets.all(8),
-          materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
-          minWidth: 40,
-          child: child,
-        ),
-      ),
-    );
-  }
-}
-
-class StyledButtonPainter extends CustomPainter {
-  StyledButtonPainter({
-    required this.baseColor,
-  });
-
-  final Color baseColor;
-
-  @override
-  void paint(Canvas canvas, Size size) {
-    final Color lightColor = baseColor.lighten(20);
-    final Color darkColor = baseColor.darken(20);
-
-    final Paint paint = Paint()..style = PaintingStyle.fill;
-
-    const double cornerRadius = 6;
-
-    Path topPath = Path()
-      ..moveTo(cornerRadius, 0)
-      ..lineTo(size.width - cornerRadius, 0)
-      ..arcToPoint(
-        Offset(size.width, cornerRadius),
-        radius: const Radius.circular(cornerRadius),
-      )
-      ..lineTo(size.width, size.height * .35)
-      ..quadraticBezierTo(
-        size.width * .4,
-        size.height * .1,
-        0,
-        size.height * .3,
-      )
-      ..lineTo(0, cornerRadius)
-      ..arcToPoint(
-        const Offset(cornerRadius, 0),
-        radius: const Radius.circular(cornerRadius),
-      );
-
-    Path bottomPath = Path()
-      ..moveTo(cornerRadius, size.height)
-      ..lineTo(size.width - cornerRadius, size.height)
-      ..arcToPoint(
-        Offset(size.width, size.height - cornerRadius),
-        radius: const Radius.circular(cornerRadius),
-        clockwise: false,
-      )
-      ..lineTo(size.width, size.height * .7)
-      ..quadraticBezierTo(
-        size.width * .6,
-        size.height * .9,
-        0,
-        size.height * .7,
-      )
-      ..lineTo(0, size.height - cornerRadius)
-      ..arcToPoint(
-        Offset(cornerRadius, size.height),
-        radius: const Radius.circular(cornerRadius),
-        clockwise: false,
-      );
-
-    paint.color = lightColor;
-    canvas.drawPath(topPath, paint);
-
-    paint.color = darkColor;
-    canvas.drawPath(bottomPath, paint);
-  }
-
-  @override
-  bool shouldRepaint(CustomPainter oldDelegate) => false;
-}
diff --git a/lib/ui/layouts/game_layout.dart b/lib/ui/layouts/game_layout.dart
index 4c9e4a6067984e2902cecb5f7669df4bf7fc7beb..089495539f5da281e318d698fc8c4611e3a40715 100644
--- a/lib/ui/layouts/game_layout.dart
+++ b/lib/ui/layouts/game_layout.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/models/game/game.dart';
diff --git a/lib/ui/layouts/parameters_layout.dart b/lib/ui/layouts/parameters_layout.dart
index 3f213585799f69114a44d1ac7721e25b7f302eb2..f702b4fed1763ddd1b4c9e01132552340ba5fc4f 100644
--- a/lib/ui/layouts/parameters_layout.dart
+++ b/lib/ui/layouts/parameters_layout.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/default_game_settings.dart';
 import 'package:jeweled/config/default_global_settings.dart';
diff --git a/lib/ui/painters/game_board_painter.dart b/lib/ui/painters/game_board_painter.dart
index 2c490e4309d8f674b1e09f4f3049ef4483db2a00..f1523f0a72dec7303cc4fedc09ac0c34c61190fb 100644
--- a/lib/ui/painters/game_board_painter.dart
+++ b/lib/ui/painters/game_board_painter.dart
@@ -2,12 +2,12 @@ import 'dart:math';
 import 'dart:ui' as ui;
 
 import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/color_theme.dart';
 import 'package:jeweled/config/default_global_settings.dart';
 import 'package:jeweled/models/game/cell_location.dart';
 import 'package:jeweled/models/game/game.dart';
-import 'package:jeweled/utils/color_extensions.dart';
 
 class GameBoardPainter extends CustomPainter {
   const GameBoardPainter({
diff --git a/lib/ui/parameters/parameter_painter.dart b/lib/ui/parameters/parameter_painter.dart
index f3fd654ecd49496e26e285bd2004e9966497b6f2..e63459a685399c4fa0737cb646eb0de49483e0be 100644
--- a/lib/ui/parameters/parameter_painter.dart
+++ b/lib/ui/parameters/parameter_painter.dart
@@ -2,14 +2,13 @@ import 'dart:math';
 import 'dart:ui' as ui;
 
 import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/color_theme.dart';
 import 'package:jeweled/config/default_game_settings.dart';
 import 'package:jeweled/config/default_global_settings.dart';
 import 'package:jeweled/models/settings/settings_game.dart';
 import 'package:jeweled/models/settings/settings_global.dart';
-import 'package:jeweled/utils/color_extensions.dart';
-import 'package:jeweled/utils/tools.dart';
 
 class ParameterPainter extends CustomPainter {
   const ParameterPainter({
diff --git a/lib/ui/parameters/parameter_widget.dart b/lib/ui/parameters/parameter_widget.dart
index 172801b268cf72271c7d6b5cde9ea975763cb6a1..915121d37ee180ebdbc7d11ffab0c28840eb93f8 100644
--- a/lib/ui/parameters/parameter_widget.dart
+++ b/lib/ui/parameters/parameter_widget.dart
@@ -1,12 +1,12 @@
 import 'package:flutter/material.dart';
 
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 import 'package:jeweled/config/default_game_settings.dart';
 import 'package:jeweled/config/default_global_settings.dart';
 import 'package:jeweled/models/settings/settings_game.dart';
 import 'package:jeweled/models/settings/settings_global.dart';
-import 'package:jeweled/ui/helpers/styled_button.dart';
 import 'package:jeweled/ui/parameters/parameter_painter.dart';
-import 'package:jeweled/utils/tools.dart';
 
 class ParameterWidget extends StatelessWidget {
   const ParameterWidget({
diff --git a/lib/ui/screens/page_about.dart b/lib/ui/screens/page_about.dart
index f359df109b71dfd1d61a40dd163174525a10a73d..ab73e304b8138295f6669330b928e0d1d0263565 100644
--- a/lib/ui/screens/page_about.dart
+++ b/lib/ui/screens/page_about.dart
@@ -1,8 +1,5 @@
-import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:package_info_plus/package_info_plus.dart';
-
-import 'package:jeweled/ui/helpers/app_titles.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 class PageAbout extends StatelessWidget {
   const PageAbout({super.key});
diff --git a/lib/ui/screens/page_game.dart b/lib/ui/screens/page_game.dart
index a7e380720505fecae87050b94067bc79b3a73511..46ca3b5d6c3b834f58e3d80b7ccbe765aa9ac1d9 100644
--- a/lib/ui/screens/page_game.dart
+++ b/lib/ui/screens/page_game.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/models/game/game.dart';
diff --git a/lib/ui/screens/page_settings.dart b/lib/ui/screens/page_settings.dart
index 51389bc3dc109a18034de618512bad8463f0051b..780fe422bf9df64186e1bc7c3f8451cbdf5e8587 100644
--- a/lib/ui/screens/page_settings.dart
+++ b/lib/ui/screens/page_settings.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:jeweled/ui/helpers/app_titles.dart';
 import 'package:jeweled/ui/settings/settings_form.dart';
 
 class PageSettings extends StatelessWidget {
diff --git a/lib/ui/settings/settings_form.dart b/lib/ui/settings/settings_form.dart
index 703e9c9049a2004dea9282a5b9c7aaf92ace48e4..f71abb014190346b65d136b1b783701ee7e05811 100644
--- a/lib/ui/settings/settings_form.dart
+++ b/lib/ui/settings/settings_form.dart
@@ -1,6 +1,5 @@
-import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:unicons/unicons.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/ui/settings/theme_card.dart';
 
diff --git a/lib/ui/settings/theme_card.dart b/lib/ui/settings/theme_card.dart
index 959bfbcb0d84067ad6a5bf067aa47dbb3befa56a..32cf2abd531febb3f4d1837c03714145b26ebd09 100644
--- a/lib/ui/settings/theme_card.dart
+++ b/lib/ui/settings/theme_card.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/theme_cubit.dart';
 
diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart
index 8513856b1c8a5a96c2b3ac11c4ee8550d7c7d56c..36e5e54add8564bd81b23895aebcb34e7510c682 100644
--- a/lib/ui/skeleton.dart
+++ b/lib/ui/skeleton.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/menu.dart';
 import 'package:jeweled/cubit/nav_cubit.dart';
diff --git a/lib/ui/widgets/actions/button_delete_saved_game.dart b/lib/ui/widgets/actions/button_delete_saved_game.dart
index bd3876c30d46a0815b6bf94e5b8ba195c307197d..64d9ff2c01c2e31152e07598acdfaad0dffeeccc 100644
--- a/lib/ui/widgets/actions/button_delete_saved_game.dart
+++ b/lib/ui/widgets/actions/button_delete_saved_game.dart
@@ -1,8 +1,7 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
-import 'package:jeweled/ui/helpers/styled_button.dart';
 
 class DeleteSavedGameButton extends StatelessWidget {
   const DeleteSavedGameButton({super.key});
diff --git a/lib/ui/widgets/actions/button_game_quit.dart b/lib/ui/widgets/actions/button_game_quit.dart
index 6142cc199cf12ba2b35989673077c3948de86b67..73697c1de4a417e7581e2824745ee8fc353debb4 100644
--- a/lib/ui/widgets/actions/button_game_quit.dart
+++ b/lib/ui/widgets/actions/button_game_quit.dart
@@ -1,8 +1,7 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
-import 'package:jeweled/ui/helpers/styled_button.dart';
 
 class QuitGameButton extends StatelessWidget {
   const QuitGameButton({super.key});
diff --git a/lib/ui/widgets/actions/button_game_start_new.dart b/lib/ui/widgets/actions/button_game_start_new.dart
index 48e6f1aeecf54032fe47995fd6080e0b9f5889dc..443ae93b82669ea8fade8b040c734763b46d36ea 100644
--- a/lib/ui/widgets/actions/button_game_start_new.dart
+++ b/lib/ui/widgets/actions/button_game_start_new.dart
@@ -1,10 +1,9 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/cubit/settings_game_cubit.dart';
 import 'package:jeweled/cubit/settings_global_cubit.dart';
-import 'package:jeweled/ui/helpers/styled_button.dart';
 
 class StartNewGameButton extends StatelessWidget {
   const StartNewGameButton({super.key});
diff --git a/lib/ui/widgets/actions/button_resume_saved_game.dart b/lib/ui/widgets/actions/button_resume_saved_game.dart
index 2f4f97c9c90e34ef75e79c22206e09d5e5820654..30eb40738d2c3d86852a4b1803459125ec42bd30 100644
--- a/lib/ui/widgets/actions/button_resume_saved_game.dart
+++ b/lib/ui/widgets/actions/button_resume_saved_game.dart
@@ -1,8 +1,7 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
-import 'package:jeweled/ui/helpers/styled_button.dart';
 
 class ResumeSavedGameButton extends StatelessWidget {
   const ResumeSavedGameButton({super.key});
diff --git a/lib/ui/widgets/game/board.dart b/lib/ui/widgets/game/board.dart
index 5daec54bbf8b20d5d5ff2aad19d1b007ac0ad49d..08db3c8a185a440a2a0cc064a712cbd4703e0003 100644
--- a/lib/ui/widgets/game/board.dart
+++ b/lib/ui/widgets/game/board.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/models/game/cell_location.dart';
diff --git a/lib/ui/widgets/global_app_bar.dart b/lib/ui/widgets/global_app_bar.dart
index 78ddd10f326c2c536dda275eb36bf569a447f79a..6ac5318fd59039b3993c723b2f66b9ee03b37812 100644
--- a/lib/ui/widgets/global_app_bar.dart
+++ b/lib/ui/widgets/global_app_bar.dart
@@ -1,12 +1,10 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/config/menu.dart';
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/cubit/nav_cubit.dart';
 import 'package:jeweled/models/game/game.dart';
-import 'package:jeweled/ui/helpers/app_titles.dart';
-import 'package:jeweled/ui/helpers/styled_button.dart';
 
 class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
   const GlobalAppBar({super.key});
@@ -38,7 +36,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
                 // go to Settings page
                 menuActions.add(ElevatedButton(
                   onPressed: () {
-                    context.read<NavCubit>().goToSettingsPage();
+                    BlocProvider.of<NavCubit>(context).goToSettingsPage();
                   },
                   style: ElevatedButton.styleFrom(
                     shape: const CircleBorder(),
@@ -49,7 +47,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
                 // go to About page
                 menuActions.add(ElevatedButton(
                   onPressed: () {
-                    context.read<NavCubit>().goToAboutPage();
+                    BlocProvider.of<NavCubit>(context).goToAboutPage();
                   },
                   style: ElevatedButton.styleFrom(
                     shape: const CircleBorder(),
@@ -60,7 +58,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
                 // back to Home page
                 menuActions.add(ElevatedButton(
                   onPressed: () {
-                    context.read<NavCubit>().goToGamePage();
+                    BlocProvider.of<NavCubit>(context).goToGamePage();
                   },
                   style: ElevatedButton.styleFrom(
                     shape: const CircleBorder(),
diff --git a/lib/ui/widgets/indicators/indicator_available_blocks.dart b/lib/ui/widgets/indicators/indicator_available_blocks.dart
index acffb94f18fedb69b03a269ffeb6e1e0f58e883f..a7742e7da5eb1919a3bc7bc0c2472f489438c2d6 100644
--- a/lib/ui/widgets/indicators/indicator_available_blocks.dart
+++ b/lib/ui/widgets/indicators/indicator_available_blocks.dart
@@ -1,10 +1,9 @@
 import 'dart:math';
 
 import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/models/game/game.dart';
-import 'package:jeweled/ui/helpers/outlined_text_widget.dart';
-import 'package:jeweled/utils/color_extensions.dart';
 
 class AvailableBlocksCountIndicator extends StatelessWidget {
   const AvailableBlocksCountIndicator({super.key, required this.game});
diff --git a/lib/ui/widgets/indicators/indicator_moves_count.dart b/lib/ui/widgets/indicators/indicator_moves_count.dart
index 8693ab308c7bf58b3cdd430109280539952c8678..7af1fd2504ead2345665b034d1b7ce1ad5c94a9a 100644
--- a/lib/ui/widgets/indicators/indicator_moves_count.dart
+++ b/lib/ui/widgets/indicators/indicator_moves_count.dart
@@ -1,8 +1,7 @@
 import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/models/game/game.dart';
-import 'package:jeweled/ui/helpers/outlined_text_widget.dart';
-import 'package:jeweled/utils/color_extensions.dart';
 
 class MovesCountsIndicator extends StatelessWidget {
   const MovesCountsIndicator({super.key, required this.game});
diff --git a/lib/ui/widgets/indicators/indicator_score.dart b/lib/ui/widgets/indicators/indicator_score.dart
index 97f940254454aff2d7615c366f5733ef8774f60d..7d25e7e05dd01922a00dd95ffcbfada1ebddd762 100644
--- a/lib/ui/widgets/indicators/indicator_score.dart
+++ b/lib/ui/widgets/indicators/indicator_score.dart
@@ -1,8 +1,7 @@
 import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/models/game/game.dart';
-import 'package:jeweled/ui/helpers/outlined_text_widget.dart';
-import 'package:jeweled/utils/color_extensions.dart';
 
 class ScoreIndicator extends StatelessWidget {
   const ScoreIndicator({super.key, required this.game});
diff --git a/lib/ui/widgets/indicators/indicator_shuffle_button.dart b/lib/ui/widgets/indicators/indicator_shuffle_button.dart
index 26cc17fb68081f065f70fc95db4302d7d06030e2..56f815c5c15e95cd5315d320af4d5b71f20a0cfa 100644
--- a/lib/ui/widgets/indicators/indicator_shuffle_button.dart
+++ b/lib/ui/widgets/indicators/indicator_shuffle_button.dart
@@ -1,10 +1,8 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:jeweled/cubit/game_cubit.dart';
 import 'package:jeweled/models/game/game.dart';
-import 'package:jeweled/ui/helpers/outlined_text_widget.dart';
-import 'package:jeweled/utils/color_extensions.dart';
 
 class ShuffleButton extends StatelessWidget {
   const ShuffleButton({super.key, required this.game});
diff --git a/lib/utils/color_extensions.dart b/lib/utils/color_extensions.dart
deleted file mode 100644
index 4e55e338f0d3ed98b233d1ef887b7b3e17e29d97..0000000000000000000000000000000000000000
--- a/lib/utils/color_extensions.dart
+++ /dev/null
@@ -1,33 +0,0 @@
-import 'dart:ui';
-
-extension ColorExtension on Color {
-  Color darken([int percent = 40]) {
-    assert(1 <= percent && percent <= 100);
-    final value = 1 - percent / 100;
-    return Color.fromARGB(
-      alpha,
-      (red * value).round(),
-      (green * value).round(),
-      (blue * value).round(),
-    );
-  }
-
-  Color lighten([int percent = 40]) {
-    assert(1 <= percent && percent <= 100);
-    final value = percent / 100;
-    return Color.fromARGB(
-      alpha,
-      (red + ((255 - red) * value)).round(),
-      (green + ((255 - green) * value)).round(),
-      (blue + ((255 - blue) * value)).round(),
-    );
-  }
-
-  Color avg(Color other) {
-    final red = (this.red + other.red) ~/ 2;
-    final green = (this.green + other.green) ~/ 2;
-    final blue = (this.blue + other.blue) ~/ 2;
-    final alpha = (this.alpha + other.alpha) ~/ 2;
-    return Color.fromARGB(alpha, red, green, blue);
-  }
-}
diff --git a/lib/utils/tools.dart b/lib/utils/tools.dart
deleted file mode 100644
index fd48b2b009b80b22248d6e7f08a63e96c4065bd7..0000000000000000000000000000000000000000
--- a/lib/utils/tools.dart
+++ /dev/null
@@ -1,7 +0,0 @@
-import 'package:flutter/foundation.dart';
-
-void printlog(String message) {
-  if (!kReleaseMode) {
-    debugPrint(message);
-  }
-}
diff --git a/pubspec.lock b/pubspec.lock
index 229631c1f86719287b9acdfad6debc0e9f46254d..add98fbfa6f448021ae70f955575f581ab0753d9 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,20 +5,20 @@ packages:
     dependency: transitive
     description:
       name: args
-      sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+      sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
       url: "https://pub.dev"
     source: hosted
-    version: "2.5.0"
+    version: "2.6.0"
   async:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.12.0"
   auto_size_text:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: auto_size_text
       sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599"
@@ -61,12 +61,12 @@ packages:
     dependency: transitive
     description:
       name: crypto
-      sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
+      sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.5"
+    version: "3.0.6"
   easy_localization:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: easy_localization
       sha256: fa59bcdbbb911a764aa6acf96bbb6fa7a5cf8234354fc45ec1a43a0349ef0201
@@ -82,7 +82,7 @@ packages:
     source: hosted
     version: "0.0.2"
   equatable:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: equatable
       sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
@@ -111,13 +111,22 @@ packages:
     source: sdk
     version: "0.0.0"
   flutter_bloc:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: flutter_bloc
       sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
       url: "https://pub.dev"
     source: hosted
     version: "8.1.6"
+  flutter_custom_toolbox:
+    dependency: "direct main"
+    description:
+      path: "."
+      ref: "0.1.1"
+      resolved-ref: ba7137ca9edec7e503ed3dbfe7f6ede7e9cfbf4d
+      url: "https://git.harrault.fr/android/flutter-toolbox.git"
+    source: git
+    version: "0.1.1"
   flutter_lints:
     dependency: "direct dev"
     description:
@@ -137,7 +146,7 @@ packages:
     source: sdk
     version: "0.0.0"
   hive:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: hive
       sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
@@ -161,7 +170,7 @@ packages:
     source: hosted
     version: "4.0.2"
   hydrated_bloc:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: hydrated_bloc
       sha256: af35b357739fe41728df10bec03aad422cdc725a1e702e03af9d2a41ea05160c
@@ -209,13 +218,13 @@ packages:
     source: hosted
     version: "1.0.0"
   package_info_plus:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: package_info_plus
-      sha256: "894f37107424311bdae3e476552229476777b8752c5a2a2369c0cb9a2d5442ef"
+      sha256: df3eb3e0aed5c1107bb0fdb80a8e82e778114958b1c5ac5644fb1ac9cae8a998
       url: "https://pub.dev"
     source: hosted
-    version: "8.0.3"
+    version: "8.1.0"
   package_info_plus_platform_interface:
     dependency: transitive
     description:
@@ -233,7 +242,7 @@ packages:
     source: hosted
     version: "1.9.0"
   path_provider:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: path_provider
       sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
@@ -284,10 +293,10 @@ packages:
     dependency: transitive
     description:
       name: platform
-      sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
+      sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
       url: "https://pub.dev"
     source: hosted
-    version: "3.1.5"
+    version: "3.1.6"
   plugin_platform_interface:
     dependency: transitive
     description:
@@ -377,10 +386,10 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "0bd04f5bb74fcd6ff0606a888a30e917af9bd52820b178eaa464beb11dca84b6"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   synchronized:
     dependency: transitive
     description:
@@ -401,12 +410,12 @@ packages:
     dependency: transitive
     description:
       name: typed_data
-      sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+      sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.2"
+    version: "1.4.0"
   unicons:
-    dependency: "direct main"
+    dependency: transitive
     description:
       name: unicons
       sha256: f3eab9d87c226415ef857cfd2167e1d12ad81ea1f5783b46cf644224fea4eab7
@@ -433,10 +442,10 @@ packages:
     dependency: transitive
     description:
       name: win32
-      sha256: "4d45dc9069dba4619dc0ebd93c7cec5e66d8482cb625a370ac806dcc8165f2ec"
+      sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
       url: "https://pub.dev"
     source: hosted
-    version: "5.5.5"
+    version: "5.7.0"
   xdg_directories:
     dependency: transitive
     description:
@@ -446,5 +455,5 @@ packages:
     source: hosted
     version: "1.1.0"
 sdks:
-  dart: ">=3.5.0 <4.0.0"
+  dart: ">=3.5.3 <4.0.0"
   flutter: ">=3.24.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 0bdf7d07241dc175a5ec1a885e82fd9a01aff6dd..df436865de54fff7dcfc8cc1bc820c9e4cb9c1ea 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: Jeweled Game
 
 publish_to: "none"
 
-version: 0.2.1+35
+version: 0.3.0+36
 
 environment:
   sdk: "^3.0.0"
@@ -13,15 +13,10 @@ dependencies:
     sdk: flutter
 
   # base
-  auto_size_text: ^3.0.0
-  easy_localization: ^3.0.1
-  equatable: ^2.0.5
-  flutter_bloc: ^8.1.1
-  hive: ^2.2.3
-  hydrated_bloc: ^9.0.0
-  package_info_plus: ^8.0.0
-  path_provider: ^2.0.11
-  unicons: ^3.0.0
+  flutter_custom_toolbox:
+    git:
+      url: https://git.harrault.fr/android/flutter-toolbox.git
+      ref: 0.1.1
 
   # specific
   # (none)
@@ -34,15 +29,3 @@ flutter:
   assets:
     - assets/translations/
     - assets/ui/
-
-  fonts:
-    - family: Nunito
-      fonts:
-        - asset: assets/fonts/Nunito-Bold.ttf
-          weight: 700
-        - asset: assets/fonts/Nunito-Medium.ttf
-          weight: 500
-        - asset: assets/fonts/Nunito-Regular.ttf
-          weight: 400
-        - asset: assets/fonts/Nunito-Light.ttf
-          weight: 300