#pragma once #include "imgui.h" // Design tokens — identidad visual unica para todas las apps C++ del registry. // Alineados 1:1 con @fn_library (Mantine v9 dark + indigo primary). // Ver cpp/DESIGN_SYSTEM.md para la especificacion completa. // // Equivalencias frontend -> C++: // createTheme({ primaryColor: 'indigo', primaryShade: {dark:4}, // defaultRadius: 'md', defaultColorScheme: 'dark' }) // se corresponde con los valores de este header. namespace fn_tokens { namespace colors { // Primary — Mantine indigo (primaryShade dark = 4) // indigo.4 = #748FFC indigo.5 = #5C7CFA indigo.6 = #4C6EF5 indigo.7 = #4263EB constexpr ImVec4 primary {0.298f, 0.431f, 0.961f, 1.0f}; // indigo.6 (base) constexpr ImVec4 primary_hover {0.361f, 0.486f, 0.980f, 1.0f}; // indigo.5 constexpr ImVec4 primary_light {0.455f, 0.561f, 0.988f, 1.0f}; // indigo.4 (dark mode accent) constexpr ImVec4 primary_active {0.259f, 0.388f, 0.922f, 1.0f}; // indigo.7 // Semantic — colores Mantine oficiales constexpr ImVec4 success {0.251f, 0.753f, 0.341f, 1.0f}; // green.6 #40C057 constexpr ImVec4 warning {0.980f, 0.690f, 0.020f, 1.0f}; // yellow.6 #FAB005 constexpr ImVec4 error {0.980f, 0.322f, 0.322f, 1.0f}; // red.6 #FA5252 constexpr ImVec4 info {0.133f, 0.545f, 0.902f, 1.0f}; // blue.6 #228BE6 // Surfaces — escala dark Mantine (oscuro a claro: dark.9 -> dark.0) constexpr ImVec4 bg {0.102f, 0.106f, 0.118f, 1.0f}; // dark.7 #1A1B1E body bg constexpr ImVec4 surface {0.145f, 0.149f, 0.169f, 1.0f}; // dark.6 #25262B Paper/Card constexpr ImVec4 surface_hover {0.173f, 0.180f, 0.200f, 1.0f}; // dark.5 #2C2E33 constexpr ImVec4 surface_active{0.216f, 0.227f, 0.251f, 1.0f}; // dark.4 #373A40 // Border constexpr ImVec4 border {0.216f, 0.227f, 0.251f, 1.0f}; // dark.4 #373A40 constexpr ImVec4 border_strong {0.361f, 0.373f, 0.400f, 1.0f}; // dark.3 #5C5F66 // Text (escala dark inversa: dark.0 mas claro) constexpr ImVec4 text {0.757f, 0.761f, 0.773f, 1.0f}; // dark.0 #C1C2C5 texto primario constexpr ImVec4 text_muted {0.565f, 0.573f, 0.588f, 1.0f}; // dark.2 #909296 subtitulos constexpr ImVec4 text_dim {0.361f, 0.373f, 0.400f, 1.0f}; // dark.3 #5C5F66 disabled } // Spacing — adaptado para ImGui (densidad mayor que CSS). // Mantine usa 10/12/16/20/32 px, aqui densificamos al estilo TUI clasico. namespace spacing { constexpr float xs = 4.0f; constexpr float sm = 8.0f; constexpr float md = 12.0f; constexpr float lg = 16.0f; constexpr float xl = 24.0f; } // Radius — mapeo directo Mantine (defaultRadius: 'md' = 8px). namespace radius { constexpr float none = 0.0f; constexpr float xs = 2.0f; constexpr float sm = 4.0f; constexpr float md = 8.0f; // default para Paper/Card/Button/Input constexpr float lg = 12.0f; constexpr float xl = 16.0f; } namespace font_size { constexpr float xs = 10.0f; constexpr float sm = 12.0f; constexpr float md = 14.0f; // default constexpr float lg = 18.0f; constexpr float xl = 24.0f; constexpr float xxl = 32.0f; } // Aplica la identidad visual al ImGuiStyle y a los estilos de ImPlot (si // esta enlazado). Se invoca automaticamente desde fn::run_app() (app_base.h) // salvo que AppConfig::theme sea ImGuiDark/ImGuiLight/None. // Idempotente: se puede llamar varias veces sin efectos secundarios. // No desactiva ninguna feature de ImGui (docking, viewports, etc). void apply_dark_theme(); } // namespace fn_tokens