academe-kit 0.11.2 → 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -6839,6 +6839,451 @@ const SecurityProvider = ({ apiBaseUrl = "https://stg-api.academe.com.br", skipA
6839
6839
  };
6840
6840
  const useAcademeAuth = () => React2.useContext(SecurityContext);
6841
6841
 
6842
+ // AUTO-GERADO de src/assets/LOGO A SVG 2.svg (logo herói da Academe).
6843
+ // O SVG inteiro vira um data URI, carregado via <img> no LogoA. Funciona em
6844
+ // vite (storybook) e rollup (build) sem loader de asset, e isola os ids
6845
+ // internos do SVG por instância (cada <img> é um documento próprio).
6846
+ // Para regenerar: `base64 < "src/assets/LOGO A SVG 2.svg"` e colar abaixo.
6847
+ const LOGO_A_DATA_URI = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iQ2FtYWRhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMyMCAxMzIwLjQyIj4KICA8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMzAuNS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogMi4xLjQgQnVpbGQgMykgIC0tPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuc3QwIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogIzg5MmNkZDsKICAgICAgfQoKICAgICAgLnN0MSB7CiAgICAgICAgZmlsbDogIzg5MmNkZDsKICAgICAgfQoKICAgICAgLnN0MiB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPHJlY3QgY2xhc3M9InN0MSIgd2lkdGg9IjEzMjAiIGhlaWdodD0iMTMyMCIgcng9IjEwMCIgcnk9IjEwMCIvPgogIDxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik03NDcuMDgsMzQzLjQybC00NDIuNjIsOTc2LjVoLTE3MC4zM0w2NjkuMzQsMTcwLjI4bDc3Ljc0LDE3My4xNFoiLz4KICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNzQ3LjA4LDM0My40MmwtNDQyLjYyLDk3Ni41aC0xNzAuMzNMNjY5LjM0LDE3MC4yOGw3Ny43NCwxNzMuMTRaIi8+CiAgPHBhdGggY2xhc3M9InN0MiIgZD0iTTExODUuNywxMzE5LjkyaC0xNzguNjNsLTExMy42LTI2Mi42NWgtMzg3LjA5bDY5LjU4LTE1My40N2gyNTEuMDJsLTEyMy4xLTI4Mi4xOSw4NC40My0xODYuMjUsMzk3LjQsODg0LjU3WiIvPgogIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMTg1LjcsMTMxOS45MmgtMTc4LjYzbC0xMTMuNi0yNjIuNjVoLTM4Ny4wOWw2OS41OC0xNTMuNDdoMjUxLjAybC0xMjMuMS0yODIuMTksODQuNDMtMTg2LjI1LDM5Ny40LDg4NC41N1oiLz4KPC9zdmc+";
6848
+
6849
+ // Dimensões do viewBox do asset (src/assets/LOGO A SVG 2.svg) — usadas só para
6850
+ // derivar a largura a partir da altura, preservando a proporção do logo.
6851
+ const ASSET_W = 1320;
6852
+ const ASSET_H = 1320.42;
6853
+ /**
6854
+ * Logo "A" da Academe (§8) — renderiza o asset oficial
6855
+ * (`src/assets/LOGO A SVG 2.svg`) via data URI. Puramente estático; quem anima é
6856
+ * o container (scale/opacity) no AcademeLoading.
6857
+ */
6858
+ function LogoA({ size }) {
6859
+ const H = size;
6860
+ const W = size * (ASSET_W / ASSET_H);
6861
+ return (jsxRuntime.jsx("img", { src: LOGO_A_DATA_URI, width: W, height: H, alt: "Academe", draggable: false, style: { display: "block", userSelect: "none", pointerEvents: "none" } }));
6862
+ }
6863
+
6864
+ const TOTAL = 2333;
6865
+ /**
6866
+ * Ponto de `t` onde a animação "segura" no modo controlado. Usamos 0.56 (fim da
6867
+ * fase de assentamento) em vez do meio do hold: nesse ponto o círculo roxo já
6868
+ * está alinhado ao branco (anel simétrico, tudo centralizado) — sem a meia-lua à
6869
+ * esquerda, que num loading estático pareceria "descentralizado". O exit
6870
+ * (0.56→1) passa a ser exatamente o colapso. A meia-lua transitória continua
6871
+ * aparecendo na vinheta completa (modo não-controlado), fiel ao spec.
6872
+ */
6873
+ const HOLD_T = 0.56;
6874
+ const DEFAULT_COLORS = {
6875
+ background: "#F5F5F5",
6876
+ purple: "#7C28D4",
6877
+ white: "#FCFCFC",
6878
+ };
6879
+ // ---- helpers -------------------------------------------------------------
6880
+ const clamp01 = (x) => (x < 0 ? 0 : x > 1 ? 1 : x);
6881
+ /** progresso local [0,1] dentro do trecho [a,b] de `t`. */
6882
+ const seg = (v, a, b) => clamp01((v - a) / (b - a));
6883
+ const mix = (a, b, p) => a + (b - a) * p;
6884
+ /**
6885
+ * cubic-bézier easing self-contained (mesma matemática do CSS `cubic-bezier`):
6886
+ * resolve t para o x dado (Newton-Raphson + bisseção) e devolve y. Evita depender
6887
+ * de exports do framer-motion e permite overshoot (y1>1) para o "pop" do logo.
6888
+ */
6889
+ function cubicBezier(x1, y1, x2, y2) {
6890
+ const cx = 3 * x1;
6891
+ const bx = 3 * (x2 - x1) - cx;
6892
+ const ax = 1 - cx - bx;
6893
+ const cy = 3 * y1;
6894
+ const by = 3 * (y2 - y1) - cy;
6895
+ const ay = 1 - cy - by;
6896
+ const sampleX = (t) => ((ax * t + bx) * t + cx) * t;
6897
+ const sampleY = (t) => ((ay * t + by) * t + cy) * t;
6898
+ const sampleDX = (t) => (3 * ax * t + 2 * bx) * t + cx;
6899
+ const solveX = (x) => {
6900
+ let t = x;
6901
+ for (let i = 0; i < 8; i++) {
6902
+ const xe = sampleX(t) - x;
6903
+ if (Math.abs(xe) < 1e-5)
6904
+ return t;
6905
+ const d = sampleDX(t);
6906
+ if (Math.abs(d) < 1e-6)
6907
+ break;
6908
+ t -= xe / d;
6909
+ }
6910
+ let lo = 0;
6911
+ let hi = 1;
6912
+ t = x;
6913
+ for (let i = 0; i < 20; i++) {
6914
+ const xe = sampleX(t);
6915
+ if (Math.abs(xe - x) < 1e-5)
6916
+ break;
6917
+ if (x > xe)
6918
+ lo = t;
6919
+ else
6920
+ hi = t;
6921
+ t = (lo + hi) / 2;
6922
+ }
6923
+ return t;
6924
+ };
6925
+ return (x) => {
6926
+ if (x <= 0)
6927
+ return 0;
6928
+ if (x >= 1)
6929
+ return 1;
6930
+ return sampleY(solveX(x));
6931
+ };
6932
+ }
6933
+ // easings por fase (§6)
6934
+ const E_ENTER = cubicBezier(0.16, 1, 0.3, 1); // entrada (ease-out rápido)
6935
+ const E_CONV = cubicBezier(0.22, 1, 0.36, 1); // convergência (ease-out)
6936
+ const E_SETTLE = cubicBezier(0.33, 1, 0.68, 1); // assentar (ease-out suave)
6937
+ const E_COLLAPSE = cubicBezier(0.65, 0, 0.35, 1); // colapso (ease-in-out)
6938
+ const E_SHRINK = cubicBezier(0.5, 0, 0.9, 0.2); // encolher (ease-in)
6939
+ const E_POP = cubicBezier(0.34, 1.2, 0.64, 1); // pop leve do logo (overshoot)
6940
+ // ---- component -----------------------------------------------------------
6941
+ function AcademeLoading({ size = 320, duration = TOTAL, loading, autoPlay = true, pulseWhileLoading = true, onFinish, colors, className, style, }) {
6942
+ const S = size;
6943
+ const c = { ...DEFAULT_COLORS, ...colors };
6944
+ const isControlled = loading !== undefined;
6945
+ // Os círculos NÃO são recortados por nenhuma "caixa" interna. O palco antigo
6946
+ // (size×size com overflow:hidden) cortava os círculos na entrada e no herói.
6947
+ // Agora o único container é o backdrop (que o consumidor estica p/ a tela toda)
6948
+ // e os círculos nascem FORA da borda real da tela, deslizando INTEIROS até o
6949
+ // centro. Para isso medimos a largura real do backdrop e derivamos a distância
6950
+ // de entrada `START` — APENAS o ponto de partida é responsivo; o tamanho dos
6951
+ // círculos e toda a convergência continuam fixos em frações de S = size.
6952
+ const containerRef = React2.useRef(null);
6953
+ // Semente: largura da janela (≈ 100vw do backdrop no app). O `useLayoutEffect`
6954
+ // refina para a largura REAL do elemento antes do 1º paint; a semente só fecha a
6955
+ // janela teórica de um paint anterior à medição (React concurrent/futuro).
6956
+ const [vw, setVw] = React2.useState(() => typeof window !== "undefined" ? window.innerWidth : size);
6957
+ React2.useLayoutEffect(() => {
6958
+ const el = containerRef.current;
6959
+ if (!el)
6960
+ return;
6961
+ const measure = () => {
6962
+ const w = el.getBoundingClientRect().width || size;
6963
+ setVw((prev) => (prev === w ? prev : w));
6964
+ };
6965
+ measure();
6966
+ const ro = new ResizeObserver(measure);
6967
+ ro.observe(el);
6968
+ return () => ro.disconnect();
6969
+ // eslint-disable-next-line react-hooks/exhaustive-deps
6970
+ }, []);
6971
+ // Distância de entrada: meia-largura do backdrop + raio do círculo (0.49·S) +
6972
+ // folga → o círculo nasce 100% fora da tela (sem corte e sem ficar parado e
6973
+ // visível perto do centro). Em tela cheia usa a largura real; nas stories (sem
6974
+ // style) o backdrop é size×size e START ≈ 1.05·S, como no design original.
6975
+ const START = vw / 2 + 0.55 * S;
6976
+ const t = framerMotion.useMotionValue(0);
6977
+ const breath = framerMotion.useMotionValue(1);
6978
+ // valores mutáveis lidos imperativamente (sem stale closures nos effects)
6979
+ const durationRef = React2.useRef(duration);
6980
+ durationRef.current = duration;
6981
+ const pulseRef = React2.useRef(pulseWhileLoading);
6982
+ pulseRef.current = pulseWhileLoading;
6983
+ const loadingRef = React2.useRef(loading);
6984
+ loadingRef.current = loading;
6985
+ const onFinishRef = React2.useRef(onFinish);
6986
+ React2.useEffect(() => {
6987
+ onFinishRef.current = onFinish;
6988
+ }, [onFinish]);
6989
+ const phaseRef = React2.useRef("idle");
6990
+ const tAnim = React2.useRef(null);
6991
+ const breathAnim = React2.useRef(null);
6992
+ function startBreathe() {
6993
+ if (!pulseRef.current)
6994
+ return;
6995
+ breathAnim.current?.stop();
6996
+ breathAnim.current = framerMotion.animate(breath, [1, 1.03, 1], {
6997
+ duration: 1.6,
6998
+ ease: "easeInOut",
6999
+ repeat: Infinity,
7000
+ });
7001
+ }
7002
+ function runExit() {
7003
+ if (phaseRef.current === "exiting" || phaseRef.current === "done")
7004
+ return;
7005
+ phaseRef.current = "exiting";
7006
+ breathAnim.current?.stop();
7007
+ framerMotion.animate(breath, 1, { duration: 0.25, ease: "easeOut" });
7008
+ tAnim.current?.stop();
7009
+ const sec = durationRef.current / 1000;
7010
+ tAnim.current = framerMotion.animate(t, 1, {
7011
+ duration: (1 - HOLD_T) * sec,
7012
+ ease: "linear",
7013
+ onComplete: () => {
7014
+ phaseRef.current = "done";
7015
+ onFinishRef.current?.();
7016
+ },
7017
+ });
7018
+ }
7019
+ // ENTRADA (mount). Reseta e reinicia sempre — seguro ao duplo-mount do StrictMode.
7020
+ React2.useEffect(() => {
7021
+ if (!autoPlay)
7022
+ return;
7023
+ t.set(0);
7024
+ breath.set(1);
7025
+ phaseRef.current = "idle";
7026
+ const sec = durationRef.current / 1000;
7027
+ const target = isControlled ? HOLD_T : 1;
7028
+ tAnim.current = framerMotion.animate(t, target, {
7029
+ duration: target * sec,
7030
+ ease: "linear",
7031
+ onComplete: () => {
7032
+ if (!isControlled) {
7033
+ phaseRef.current = "done";
7034
+ onFinishRef.current?.();
7035
+ return;
7036
+ }
7037
+ phaseRef.current = "hold";
7038
+ if (loadingRef.current === false)
7039
+ runExit();
7040
+ else
7041
+ startBreathe();
7042
+ },
7043
+ });
7044
+ return () => {
7045
+ tAnim.current?.stop();
7046
+ breathAnim.current?.stop();
7047
+ };
7048
+ // eslint-disable-next-line react-hooks/exhaustive-deps
7049
+ }, [autoPlay, isControlled]);
7050
+ // SAÍDA / respiração reagindo a `loading` (só após chegar ao hold).
7051
+ React2.useEffect(() => {
7052
+ if (!isControlled || phaseRef.current !== "hold")
7053
+ return;
7054
+ if (loading === false)
7055
+ runExit();
7056
+ else
7057
+ startBreathe();
7058
+ // eslint-disable-next-line react-hooks/exhaustive-deps
7059
+ }, [loading]);
7060
+ // ---- propriedades derivadas de `t` (§7) ----
7061
+ // CÍRCULO ROXO (atrás) — nasce FORA da tela (−START) e desliza INTEIRO até o
7062
+ // centro; a convergência (−0.3S→0) e a meia-lua final continuam fixas em S.
7063
+ const purpleX = framerMotion.useTransform(t, (v) => {
7064
+ if (v <= 0.13)
7065
+ return -START;
7066
+ if (v <= 0.22)
7067
+ return mix(-START, -0.3 * S, E_ENTER(seg(v, 0.13, 0.22)));
7068
+ if (v <= 0.34)
7069
+ return mix(-0.3 * S, -0.18 * S, E_CONV(seg(v, 0.22, 0.34)));
7070
+ if (v <= 0.48)
7071
+ return mix(-0.18 * S, -0.015 * S, E_SETTLE(seg(v, 0.34, 0.48)));
7072
+ if (v <= 0.56)
7073
+ return mix(-0.015 * S, 0, E_COLLAPSE(seg(v, 0.48, 0.56)));
7074
+ return 0;
7075
+ });
7076
+ const purpleScale = framerMotion.useTransform(t, (v) => {
7077
+ if (v <= 0.56)
7078
+ return 1;
7079
+ if (v <= 0.77)
7080
+ return Math.max(0, mix(1, 0, E_SHRINK(seg(v, 0.56, 0.77))));
7081
+ return 0;
7082
+ });
7083
+ const purpleOpacity = framerMotion.useTransform(t, (v) => {
7084
+ if (v <= 0.75)
7085
+ return 1;
7086
+ if (v <= 0.77)
7087
+ return mix(1, 0, seg(v, 0.75, 0.77));
7088
+ return 0;
7089
+ });
7090
+ // CÍRCULO BRANCO (na frente) — nasce de +START (fora da tela) e desliza inteiro até o centro.
7091
+ const whiteX = framerMotion.useTransform(t, (v) => {
7092
+ if (v <= 0.13)
7093
+ return START;
7094
+ if (v <= 0.22)
7095
+ return mix(START, 0.3 * S, E_ENTER(seg(v, 0.13, 0.22)));
7096
+ if (v <= 0.34)
7097
+ return mix(0.3 * S, 0.02 * S, E_CONV(seg(v, 0.22, 0.34)));
7098
+ if (v <= 0.4)
7099
+ return mix(0.02 * S, 0, E_SETTLE(seg(v, 0.34, 0.4)));
7100
+ return 0;
7101
+ });
7102
+ const whiteScale = framerMotion.useTransform(t, (v) => {
7103
+ if (v <= 0.56)
7104
+ return 1;
7105
+ if (v <= 0.72)
7106
+ return Math.max(0, mix(1, 0, E_SHRINK(seg(v, 0.56, 0.72))));
7107
+ return 0;
7108
+ });
7109
+ // LOGO "A" (centralizado)
7110
+ const logoOpacity = framerMotion.useTransform(t, (v) => {
7111
+ if (v <= 0.22)
7112
+ return 0;
7113
+ if (v <= 0.34)
7114
+ return mix(0, 1, E_CONV(seg(v, 0.22, 0.34)));
7115
+ if (v <= 0.66)
7116
+ return 1;
7117
+ if (v <= 0.72)
7118
+ return mix(1, 0, E_SHRINK(seg(v, 0.66, 0.72)));
7119
+ return 0;
7120
+ });
7121
+ const logoScale = framerMotion.useTransform(t, (v) => {
7122
+ if (v <= 0.22)
7123
+ return 0.6;
7124
+ if (v <= 0.4)
7125
+ return mix(0.6, 1, E_POP(seg(v, 0.22, 0.4)));
7126
+ if (v <= 0.56)
7127
+ return 1;
7128
+ if (v <= 0.72)
7129
+ return Math.max(0, mix(1, 0, E_SHRINK(seg(v, 0.56, 0.72))));
7130
+ return 0;
7131
+ });
7132
+ const logoY = framerMotion.useTransform(t, (v) => {
7133
+ if (v <= 0.22)
7134
+ return -0.02 * S;
7135
+ if (v <= 0.4)
7136
+ return mix(-0.02 * S, 0, E_CONV(seg(v, 0.22, 0.4)));
7137
+ return 0;
7138
+ });
7139
+ const LOGO_H = 0.46 * S;
7140
+ const LOGO_W = LOGO_H * (354 / 516);
7141
+ // Centralização determinística: cada camada é absoluta e centralizada por
7142
+ // `inset:0 + margin:auto` sobre um width/height fixo — independe do tamanho
7143
+ // relativo dos elementos (o grid implícito anterior ancorava a célula no canto,
7144
+ // descentralizando tudo). O transform do framer (x, scale) é aplicado por cima
7145
+ // e não afeta a centralização do layout.
7146
+ const layer = {
7147
+ position: "absolute",
7148
+ inset: 0,
7149
+ margin: "auto",
7150
+ };
7151
+ return (
7152
+ // Container ÚNICO = backdrop. O consumidor o estica p/ a tela toda via `style`
7153
+ // e ele pinta o fundo. NÃO há mais "palco" interno recortando a vinheta — os
7154
+ // círculos nascem fora da borda real (translateX ±START) e o `overflow:hidden`
7155
+ // apenas evita scroll dos círculos enquanto ainda estão fora da tela. Os
7156
+ // círculos deslizam INTEIROS (sem corte) até o centro. `width/height: size` são
7157
+ // defaults sobrescritos pelo `...style` (tela cheia no app; size×size nas stories).
7158
+ jsxRuntime.jsx("div", { ref: containerRef, className: className, style: {
7159
+ width: size,
7160
+ height: size,
7161
+ background: c.background,
7162
+ overflow: "hidden",
7163
+ position: "relative",
7164
+ ...style,
7165
+ }, role: "status", "aria-label": "Carregando", "aria-busy": isControlled ? loading : true, children: jsxRuntime.jsxs(framerMotion.motion.div, { style: {
7166
+ position: "absolute",
7167
+ inset: 0,
7168
+ scale: breath,
7169
+ willChange: "transform",
7170
+ }, children: [jsxRuntime.jsx(framerMotion.motion.div, { style: {
7171
+ ...layer,
7172
+ width: 0.98 * S,
7173
+ height: 0.98 * S,
7174
+ borderRadius: "50%",
7175
+ backgroundColor: c.purple,
7176
+ x: purpleX,
7177
+ scale: purpleScale,
7178
+ opacity: purpleOpacity,
7179
+ willChange: "transform, opacity",
7180
+ } }), jsxRuntime.jsx(framerMotion.motion.div, { style: {
7181
+ ...layer,
7182
+ width: 0.92 * S,
7183
+ height: 0.92 * S,
7184
+ borderRadius: "50%",
7185
+ backgroundColor: c.white,
7186
+ x: whiteX,
7187
+ scale: whiteScale,
7188
+ willChange: "transform",
7189
+ } }), jsxRuntime.jsx(framerMotion.motion.div, { style: {
7190
+ ...layer,
7191
+ width: LOGO_W,
7192
+ height: LOGO_H,
7193
+ y: logoY,
7194
+ scale: logoScale,
7195
+ opacity: logoOpacity,
7196
+ willChange: "transform, opacity",
7197
+ }, children: jsxRuntime.jsx(LogoA, { size: LOGO_H }) })] }) }));
7198
+ }
7199
+
7200
+ const themes = {
7201
+ dark: {
7202
+ backgroundColor: "bg-[#111111]",
7203
+ textColors: {
7204
+ textPrimary: "text-white",
7205
+ textSecondary: "text-gray-300",
7206
+ iconColor: "text-[#892CDD]",
7207
+ },
7208
+ },
7209
+ light: {
7210
+ backgroundColor: "bg-[#ffffff]",
7211
+ textColors: {
7212
+ textPrimary: "text-gray-900",
7213
+ textSecondary: "text-gray-600",
7214
+ iconColor: "text-[#892CDD]",
7215
+ },
7216
+ },
7217
+ };
7218
+ const ProtectedAppContext = React2.createContext(null);
7219
+ const useProtectedAppColors = () => {
7220
+ const context = React2.useContext(ProtectedAppContext);
7221
+ return context || themes.dark.textColors;
7222
+ };
7223
+ const ProtectedApp = ({ children, requiredClientRoles, requiredRealmRoles, theme = "dark", pending = false, }) => {
7224
+ const { isInitialized, goToLogin, hasClientRole, hasRealmRole, isAuthenticated, signOut, } = useAcademeAuth();
7225
+ const themeConfig = themes[theme];
7226
+ const { backgroundColor, textColors } = themeConfig;
7227
+ // Está carregando algo do boot: Keycloak inicializando OU dados pós-auth.
7228
+ const loaderActive = !isInitialized || pending;
7229
+ // Mantém a vinheta montada durante a SAÍDA, até o exit concluir (`onFinish`).
7230
+ const [exitDone, setExitDone] = React2.useState(false);
7231
+ // Se o boot recomeçar (re-login / novo fetch), rearma a saída.
7232
+ React2.useEffect(() => {
7233
+ if (loaderActive)
7234
+ setExitDone(false);
7235
+ }, [loaderActive]);
7236
+ const handleContactSupport = () => {
7237
+ window.open("https://wa.me/558540428133", "_blank");
7238
+ };
7239
+ const renderDenied = () => (jsxRuntime.jsxs("div", { className: `flex flex-col w-screen h-screen items-center justify-center ${backgroundColor}`, children: [jsxRuntime.jsx(CircleAlert, { className: `size-10 ${textColors.iconColor}` }), jsxRuntime.jsx("h1", { className: `text-2xl font-bold mt-4 text-center ${textColors.textPrimary}`, children: "Oops, voc\u00EA n\u00E3o tem permiss\u00E3o para acessar aqui." }), jsxRuntime.jsx("span", { className: `text-center ${textColors.textSecondary}`, children: "Se voc\u00EA acredita que isso \u00E9 um erro, entre em contato com o suporte." }), jsxRuntime.jsxs("div", { className: "flex gap-3 mt-4", children: [jsxRuntime.jsx(Button, { variant: "primary", size: "md", onClick: handleContactSupport, children: "Falar com o suporte" }), jsxRuntime.jsx(Button, { variant: "outline", size: "md", onClick: signOut, children: "Sair da conta" })] })] }));
7240
+ // Checagens de auth/role só fazem sentido depois que o Keycloak inicializa.
7241
+ if (isInitialized) {
7242
+ if (!isAuthenticated()) {
7243
+ goToLogin();
7244
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
7245
+ }
7246
+ if (requiredClientRoles &&
7247
+ !requiredClientRoles.roles.some((role) => hasClientRole(role, requiredClientRoles.clientId))) {
7248
+ return renderDenied();
7249
+ }
7250
+ if (requiredRealmRoles &&
7251
+ !requiredRealmRoles?.some((role) => hasRealmRole(role))) {
7252
+ return renderDenied();
7253
+ }
7254
+ }
7255
+ // Vinheta de marca (AcademeLoading): segura no estado-herói enquanto
7256
+ // `loaderActive` e, quando o carregamento termina, toca a saída sincronizada;
7257
+ // só depois do `onFinish` o app é revelado. Fica montada durante o exit graças
7258
+ // ao `!exitDone`.
7259
+ if (loaderActive || !exitDone) {
7260
+ return (jsxRuntime.jsx(AcademeLoading, { loading: loaderActive, duration: 1200, onFinish: () => setExitDone(true), style: { width: "100vw", height: "100vh" } }));
7261
+ }
7262
+ return (jsxRuntime.jsx(ProtectedAppContext.Provider, { value: textColors, children: children }));
7263
+ };
7264
+
7265
+ const ProtectedComponent = ({ children, requiredRealmRoles, requiredClientRoles, }) => {
7266
+ const { hasClientRole, hasRealmRole } = useAcademeAuth();
7267
+ if (requiredClientRoles &&
7268
+ !requiredClientRoles.roles.some((role) => hasClientRole(role, requiredClientRoles.clientId))) {
7269
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
7270
+ }
7271
+ if (requiredRealmRoles &&
7272
+ !requiredRealmRoles?.some((role) => hasRealmRole(role))) {
7273
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
7274
+ }
7275
+ return children;
7276
+ };
7277
+
7278
+ const ProtectedRouter = ({ children, requiredClientRoles, unauthorizedMessage, }) => {
7279
+ const { hasClientRole } = useAcademeAuth();
7280
+ if (requiredClientRoles &&
7281
+ !requiredClientRoles.roles.some((role) => hasClientRole(role, requiredClientRoles.clientId))) {
7282
+ return jsxRuntime.jsx("h1", { children: unauthorizedMessage || "unauthorized" });
7283
+ }
7284
+ return children;
7285
+ };
7286
+
6842
7287
  const CLASS_PART_SEPARATOR = '-';
6843
7288
  const createClassGroupUtils = config => {
6844
7289
  const classMap = createClassMap(config);
@@ -9802,88 +10247,6 @@ function Spinner({ className, ...props }) {
9802
10247
  return (jsxRuntime.jsx(LoaderCircle, { role: "status", "aria-label": "Loading", className: cn("size-10 animate-spin text-violet-500", className), ...props }));
9803
10248
  }
9804
10249
 
9805
- const themes = {
9806
- dark: {
9807
- backgroundColor: "bg-[#111111]",
9808
- textColors: {
9809
- textPrimary: "text-white",
9810
- textSecondary: "text-gray-300",
9811
- iconColor: "text-[#892CDD]",
9812
- },
9813
- },
9814
- light: {
9815
- backgroundColor: "bg-[#ffffff]",
9816
- textColors: {
9817
- textPrimary: "text-gray-900",
9818
- textSecondary: "text-gray-600",
9819
- iconColor: "text-[#892CDD]",
9820
- },
9821
- },
9822
- };
9823
- const ProtectedAppContext = React2.createContext(null);
9824
- const useProtectedAppColors = () => {
9825
- const context = React2.useContext(ProtectedAppContext);
9826
- return context || themes.dark.textColors;
9827
- };
9828
- const ProtectedApp = ({ children, requiredClientRoles, requiredRealmRoles, theme = "dark", pending = false, }) => {
9829
- const { isInitialized, goToLogin, hasClientRole, hasRealmRole, isAuthenticated, signOut, } = useAcademeAuth();
9830
- const themeConfig = themes[theme];
9831
- const { backgroundColor, textColors } = themeConfig;
9832
- const handleContactSupport = () => {
9833
- window.open("https://wa.me/558540428133", "_blank");
9834
- };
9835
- // Tela de loading de tela cheia reutilizada em duas fases do boot:
9836
- // (1) enquanto o Keycloak inicializa (`!isInitialized`) e (2) enquanto o app
9837
- // ainda carrega dados pós-auth (`pending`). Por ser o MESMO elemento na mesma
9838
- // posição da árvore, o React reconcilia entre as fases sem remontar o Spinner
9839
- // — a animação fica contínua (um loading só, sem "piscar").
9840
- const loadingScreen = (jsxRuntime.jsx("div", { className: `!flex !w-screen !h-screen !items-center !justify-center ${backgroundColor}`, children: jsxRuntime.jsx(Spinner, { className: "!size-10", style: { color: "#892CDD" } }) }));
9841
- if (!isInitialized) {
9842
- return loadingScreen;
9843
- }
9844
- if (!isAuthenticated()) {
9845
- goToLogin();
9846
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
9847
- }
9848
- if (requiredClientRoles &&
9849
- !requiredClientRoles.roles.some((role) => hasClientRole(role, requiredClientRoles.clientId))) {
9850
- return (jsxRuntime.jsxs("div", { className: `flex flex-col w-screen h-screen items-center justify-center ${backgroundColor}`, children: [jsxRuntime.jsx(CircleAlert, { className: `size-10 ${textColors.iconColor}` }), jsxRuntime.jsx("h1", { className: `text-2xl font-bold mt-4 text-center ${textColors.textPrimary}`, children: "Oops, voc\u00EA n\u00E3o tem permiss\u00E3o para acessar aqui." }), jsxRuntime.jsx("span", { className: `text-center ${textColors.textSecondary}`, children: "Se voc\u00EA acredita que isso \u00E9 um erro, entre em contato com o suporte." }), jsxRuntime.jsxs("div", { className: "flex gap-3 mt-4", children: [jsxRuntime.jsx(Button, { variant: "primary", size: "md", onClick: handleContactSupport, children: "Falar com o suporte" }), jsxRuntime.jsx(Button, { variant: "outline", size: "md", onClick: signOut, children: "Sair da conta" })] })] }));
9851
- }
9852
- if (requiredRealmRoles &&
9853
- !requiredRealmRoles?.some((role) => hasRealmRole(role))) {
9854
- return (jsxRuntime.jsxs("div", { className: `flex flex-col w-screen h-screen items-center justify-center ${backgroundColor}`, children: [jsxRuntime.jsx(CircleAlert, { className: `size-10 ${textColors.iconColor}` }), jsxRuntime.jsx("h1", { className: `text-2xl font-bold mt-4 text-center ${textColors.textPrimary}`, children: "Oops, voc\u00EA n\u00E3o tem permiss\u00E3o para acessar aqui." }), jsxRuntime.jsx("span", { className: `text-center ${textColors.textSecondary}`, children: "Se voc\u00EA acredita que isso \u00E9 um erro, entre em contato com o suporte." }), jsxRuntime.jsxs("div", { className: "flex gap-3 mt-4", children: [jsxRuntime.jsx(Button, { variant: "primary", size: "md", onClick: handleContactSupport, children: "Falar com o suporte" }), jsxRuntime.jsx(Button, { variant: "outline", size: "md", onClick: signOut, children: "Sair da conta" })] })] }));
9855
- }
9856
- // Auth e roles OK, mas o app ainda carrega dados pós-auth (ex.: a lista de
9857
- // instituições do dash). Mantém o MESMO `loadingScreen` do passo `!isInitialized`,
9858
- // então o spinner não remonta entre as fases — continua sendo um loading só.
9859
- if (pending) {
9860
- return loadingScreen;
9861
- }
9862
- return (jsxRuntime.jsx(ProtectedAppContext.Provider, { value: textColors, children: children }));
9863
- };
9864
-
9865
- const ProtectedComponent = ({ children, requiredRealmRoles, requiredClientRoles, }) => {
9866
- const { hasClientRole, hasRealmRole } = useAcademeAuth();
9867
- if (requiredClientRoles &&
9868
- !requiredClientRoles.roles.some((role) => hasClientRole(role, requiredClientRoles.clientId))) {
9869
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
9870
- }
9871
- if (requiredRealmRoles &&
9872
- !requiredRealmRoles?.some((role) => hasRealmRole(role))) {
9873
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
9874
- }
9875
- return children;
9876
- };
9877
-
9878
- const ProtectedRouter = ({ children, requiredClientRoles, unauthorizedMessage, }) => {
9879
- const { hasClientRole } = useAcademeAuth();
9880
- if (requiredClientRoles &&
9881
- !requiredClientRoles.roles.some((role) => hasClientRole(role, requiredClientRoles.clientId))) {
9882
- return jsxRuntime.jsx("h1", { children: unauthorizedMessage || "unauthorized" });
9883
- }
9884
- return children;
9885
- };
9886
-
9887
10250
  function styleInject(css, ref) {
9888
10251
  if ( ref === void 0 ) ref = {};
9889
10252
  var insertAt = ref.insertAt;
@@ -10913,10 +11276,10 @@ function JourneyCrystalPin({ className, style }) {
10913
11276
  return (jsxRuntime.jsxs("div", { className: ['journey-crystal-pin', className].filter(Boolean).join(' '), style: style, children: [jsxRuntime.jsx("div", { className: "journey-crystal-pin__glow", "aria-hidden": "true", children: jsxRuntime.jsx("svg", { viewBox: "0 0 40 60", className: "journey-crystal-pin__svg", children: jsxRuntime.jsx("polygon", { points: "20,0 40,20 20,60 0,20", fill: "#a78bfa" }) }) }), jsxRuntime.jsxs("svg", { viewBox: "0 0 40 60", className: "journey-crystal-pin__svg journey-crystal-pin__crystal", "aria-hidden": "true", focusable: "false", children: [jsxRuntime.jsx("polygon", { points: "20,0 0,20 20,60", fill: "#7c3aed" }), jsxRuntime.jsx("polygon", { points: "20,0 40,20 20,60", fill: "#a78bfa" }), jsxRuntime.jsx("polygon", { points: "20,0 0,20 10,15", fill: "#c4b5fd" }), jsxRuntime.jsx("polygon", { points: "20,0 40,20 30,15", fill: "#ddd6fe" }), jsxRuntime.jsx("line", { x1: "20", y1: "0", x2: "20", y2: "60", stroke: "#8b5cf6", strokeWidth: "1", opacity: "0.5" })] })] }));
10914
11277
  }
10915
11278
 
10916
- var css_248z$1 = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:222.2 47.4% 11.2%;--primary-foreground:210 40% 98%;--secondary:210 40% 96.1%;--secondary-foreground:222.2 47.4% 11.2%;--muted:210 40% 96.1%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96.1%;--accent-foreground:222.2 47.4% 11.2%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:222.2 84% 4.9%;--radius:0.5rem}.dark{--background:222.2 84% 4.9%;--foreground:210 40% 98%;--card:222.2 84% 4.9%;--card-foreground:210 40% 98%;--popover:222.2 84% 4.9%;--popover-foreground:210 40% 98%;--primary:210 40% 98%;--primary-foreground:222.2 47.4% 11.2%;--secondary:217.2 32.6% 17.5%;--secondary-foreground:210 40% 98%;--muted:217.2 32.6% 17.5%;--muted-foreground:215 20.2% 65.1%;--accent:217.2 32.6% 17.5%;--accent-foreground:210 40% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:210 40% 98%;--border:217.2 32.6% 17.5%;--input:217.2 32.6% 17.5%;--ring:212.7 26.8% 83.9%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.\\!container{margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important;width:100%!important}.container{margin-left:auto;margin-right:auto;padding-left:2rem;padding-right:2rem;width:100%}@media (min-width:1400px){.\\!container{max-width:1400px!important}.container{max-width:1400px}}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.\\!flex{display:flex!important}.flex{display:flex}.table{display:table}.grid{display:grid}.\\!size-10{height:2.5rem!important;width:2.5rem!important}.size-10{height:2.5rem;width:2.5rem}.\\!h-screen{height:100vh!important}.h-screen{height:100vh}.\\!w-screen{width:100vw!important}.w-screen{width:100vw}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.resize{resize:both}.flex-col{flex-direction:column}.\\!items-center{align-items:center!important}.items-center{align-items:center}.\\!justify-center{justify-content:center!important}.justify-center{justify-content:center}.gap-3{gap:.75rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius)}.border-2{border-width:2px}.border-\\[\\#892CDD\\]{--tw-border-opacity:1;border-color:rgb(137 44 221/var(--tw-border-opacity,1))}.bg-\\[\\#111111\\]{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity,1))}.bg-\\[\\#892CDD\\]{--tw-bg-opacity:1;background-color:rgb(137 44 221/var(--tw-bg-opacity,1))}.bg-\\[\\#ffffff\\]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-\\[\\#892CDD\\]{--tw-text-opacity:1;color:rgb(137 44 221/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.hover\\:bg-\\[\\#892CDD\\]\\/10:hover{background-color:rgba(137,44,221,.1)}.hover\\:bg-\\[\\#892CDD\\]\\/80:hover{background-color:rgba(137,44,221,.8)}.hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:ring-\\[\\#892CDD\\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(137 44 221/var(--tw-ring-opacity,1))}.focus\\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}";
11279
+ var css_248z$1 = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:222.2 47.4% 11.2%;--primary-foreground:210 40% 98%;--secondary:210 40% 96.1%;--secondary-foreground:222.2 47.4% 11.2%;--muted:210 40% 96.1%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96.1%;--accent-foreground:222.2 47.4% 11.2%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:222.2 84% 4.9%;--radius:0.5rem}.dark{--background:222.2 84% 4.9%;--foreground:210 40% 98%;--card:222.2 84% 4.9%;--card-foreground:210 40% 98%;--popover:222.2 84% 4.9%;--popover-foreground:210 40% 98%;--primary:210 40% 98%;--primary-foreground:222.2 47.4% 11.2%;--secondary:217.2 32.6% 17.5%;--secondary-foreground:210 40% 98%;--muted:217.2 32.6% 17.5%;--muted-foreground:215 20.2% 65.1%;--accent:217.2 32.6% 17.5%;--accent-foreground:210 40% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:210 40% 98%;--border:217.2 32.6% 17.5%;--input:217.2 32.6% 17.5%;--ring:212.7 26.8% 83.9%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.\\!container{margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important;width:100%!important}.container{margin-left:auto;margin-right:auto;padding-left:2rem;padding-right:2rem;width:100%}@media (min-width:1400px){.\\!container{max-width:1400px!important}.container{max-width:1400px}}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-10{height:2.5rem;width:2.5rem}.h-screen{height:100vh}.w-screen{width:100vw}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-3{gap:.75rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius)}.border{border-width:1px}.border-2{border-width:2px}.border-\\[\\#892CDD\\]{--tw-border-opacity:1;border-color:rgb(137 44 221/var(--tw-border-opacity,1))}.bg-\\[\\#111111\\]{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity,1))}.bg-\\[\\#892CDD\\]{--tw-bg-opacity:1;background-color:rgb(137 44 221/var(--tw-bg-opacity,1))}.bg-\\[\\#ffffff\\]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-\\[\\#892CDD\\]{--tw-text-opacity:1;color:rgb(137 44 221/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.ease-in{animation-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.hover\\:bg-\\[\\#892CDD\\]\\/10:hover{background-color:rgba(137,44,221,.1)}.hover\\:bg-\\[\\#892CDD\\]\\/80:hover{background-color:rgba(137,44,221,.8)}.hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:ring-\\[\\#892CDD\\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(137 44 221/var(--tw-ring-opacity,1))}.focus\\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}";
10917
11280
  styleInject(css_248z$1,{"insertAt":"top"});
10918
11281
 
10919
- var css_248z = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.\\!container{margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important;width:100%!important}.container{margin-left:auto;margin-right:auto;padding-left:2rem;padding-right:2rem;width:100%}@media (min-width:1400px){.\\!container{max-width:1400px!important}.container{max-width:1400px}}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.\\!flex{display:flex!important}.flex{display:flex}.table{display:table}.grid{display:grid}.\\!size-10{height:2.5rem!important;width:2.5rem!important}.size-10{height:2.5rem;width:2.5rem}.\\!h-screen{height:100vh!important}.h-screen{height:100vh}.\\!w-screen{width:100vw!important}.w-screen{width:100vw}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.resize{resize:both}.flex-col{flex-direction:column}.\\!items-center{align-items:center!important}.items-center{align-items:center}.\\!justify-center{justify-content:center!important}.justify-center{justify-content:center}.gap-3{gap:.75rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius)}.border-2{border-width:2px}.border-\\[\\#892CDD\\]{--tw-border-opacity:1;border-color:rgb(137 44 221/var(--tw-border-opacity,1))}.bg-\\[\\#111111\\]{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity,1))}.bg-\\[\\#892CDD\\]{--tw-bg-opacity:1;background-color:rgb(137 44 221/var(--tw-bg-opacity,1))}.bg-\\[\\#ffffff\\]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-\\[\\#892CDD\\]{--tw-text-opacity:1;color:rgb(137 44 221/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.hover\\:bg-\\[\\#892CDD\\]\\/10:hover{background-color:rgba(137,44,221,.1)}.hover\\:bg-\\[\\#892CDD\\]\\/80:hover{background-color:rgba(137,44,221,.8)}.hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:ring-\\[\\#892CDD\\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(137 44 221/var(--tw-ring-opacity,1))}.focus\\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}";
11282
+ var css_248z = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.\\!container{margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important;width:100%!important}.container{margin-left:auto;margin-right:auto;padding-left:2rem;padding-right:2rem;width:100%}@media (min-width:1400px){.\\!container{max-width:1400px!important}.container{max-width:1400px}}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-10{height:2.5rem;width:2.5rem}.h-screen{height:100vh}.w-screen{width:100vw}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-3{gap:.75rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius)}.border{border-width:1px}.border-2{border-width:2px}.border-\\[\\#892CDD\\]{--tw-border-opacity:1;border-color:rgb(137 44 221/var(--tw-border-opacity,1))}.bg-\\[\\#111111\\]{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity,1))}.bg-\\[\\#892CDD\\]{--tw-bg-opacity:1;background-color:rgb(137 44 221/var(--tw-bg-opacity,1))}.bg-\\[\\#ffffff\\]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-\\[\\#892CDD\\]{--tw-text-opacity:1;color:rgb(137 44 221/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.ease-in{animation-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.hover\\:bg-\\[\\#892CDD\\]\\/10:hover{background-color:rgba(137,44,221,.1)}.hover\\:bg-\\[\\#892CDD\\]\\/80:hover{background-color:rgba(137,44,221,.8)}.hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:ring-\\[\\#892CDD\\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(137 44 221/var(--tw-ring-opacity,1))}.focus\\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}";
10920
11283
  styleInject(css_248z,{"insertAt":"top"});
10921
11284
 
10922
11285
  exports.BACKOFFICE_ROLES = void 0;
@@ -10968,11 +11331,13 @@ var academeApi = /*#__PURE__*/Object.freeze({
10968
11331
  });
10969
11332
 
10970
11333
  exports.AcademeAuthProvider = AcademeAuthProvider;
11334
+ exports.AcademeLoading = AcademeLoading;
10971
11335
  exports.Button = Button;
10972
11336
  exports.CosmicDecor = CosmicDecor;
10973
11337
  exports.CosmicStarsCanvas = CosmicStarsCanvas;
10974
11338
  exports.JourneyCrystalPin = JourneyCrystalPin;
10975
11339
  exports.JourneyStep = JourneyStep;
11340
+ exports.LogoA = LogoA;
10976
11341
  exports.ProtectedApp = ProtectedApp;
10977
11342
  exports.ProtectedComponent = ProtectedComponent;
10978
11343
  exports.ProtectedRouter = ProtectedRouter;