Pular para o conteúdo principal

27 publicações com a etiqueta "infra"

Ver todas as etiquetas

Changelog - 09/08/2026

Perfil único de resolução para a arte de jogo

  • Janela desta entrada — cobre 03/08 a 09/08 (25 commits em main-7k). É a entrada mais recente do changelog; 10/08 ainda estava em curso quando ela foi escrita, e os dois commits daquele dia que fecham a poda de environments estão anotados no fim, em ## Infra / CI/CD.
  • O Cloudflare Images codifica o transform no PATH, então cada combinação de largura, altura e recorte é um RECURSO distinto (PR #1876) — 1b6b8e904 parte dessa constatação: cache-key de browser própria, entrada de cache CF própria e download próprio pra cada variação. O app tinha 12 superfícies pintando game.image com 4 recortes e 10 ladders diferentes, nenhuma compartilhando nada. Medido no 7k mobile (iPhone 14 Pro Max, DPR 3, 3G): o card do carrossel pedia width=240,height=300 (10,0 KB) e a página de jogo pedia width=320,height=400 (13,5 KB) — 23,5 KB pra mostrar a MESMA arte duas vezes, com o segundo request entrando frio no 3G do usuário e a arte piscando ao abrir o jogo.
  • Pior: os degraus grandes eram upscale. O master da arte de jogo no CF é 300x350 (amostrado sobre 12 assets reais da biblioteca), então 320, 447 e 480 inventavam pixel — width=480,height=600 devolvia 21,5 KB de nada, o dobro do degrau que a listagem já tinha em cache. O teto útil é ~300px de largura.
  • O que passa a valer~/utils/game-artwork centraliza ladder e fallback num perfil único e cada superfície declara só o seu sizes, que é o slot de layout real. Não há mais recorte no servidor: o enquadramento vai pro CSS (object-cover numa caixa de aspect fixa), então card 4/5, poster 59/79 e thumb de proporção natural passam a compartilhar o MESMO arquivo. O ladder default vai de [144,216,288] pra [128,192,288] — o degrau do meio serve DPR 1 e precisa ficar logo acima do maior slot (186px, a thumb do preview da página de jogo) sem nenhum degrau entre ele e o menor slot de card de desktop (140px); com 216 o card pegava um degrau e o hero era empurrado pro seguinte, baixando a mesma arte duas vezes no desktop. As 5 brands size: "compact" passam a [128,192,240], cortando ~25% dos bytes e da memória de bitmap decodado. Fundos borrados e reflexos reusam as props EXATAS da thumb em vez de baixar uma segunda variante recortada só pra ficar sob um blur().
  • Guarda-chuva contra regressão — 11 testes de perfil mais uma auditoria de TODAS as brands (56 casos) que falha se alguém reintroduzir um degrau entre o card e o hero, inclusive em brand nova. THUMB_ASPECT_VALUE foi removido porque existia só pra alimentar o recorte no servidor e mantê-lo era convite pra refragmentar.
  • A convergência que faltava (PR #1877) — a97d91545: o perfil único convergia em DPR maior ou igual a 2 (todo celular real) e em DPR 1 no desktop, mas não em DPR 1 com viewport estreito, onde os slots divergem de verdade (o card declara 115px e a thumb do preview ~152px, com o degrau 128 exatamente no meio). O fix faz as superfícies da página de jogo declararem o slot do CARD no mobile: GAME_PREVIEW_ARTWORK_SIZES passa a espelhar os breakpoints do card e o GamePageHero da donald vai de 131px pra 128px. É uma sub-declaração deliberada de ~19% — em DPR 1 estreito a arte vem 128px numa caixa de ~152px, imperceptível.

Changelog - 02/08/2026

BREAKING: cassino-bet-br e vera-bet-br saem do front-web-base

  • Janela desta entrada — cobre 27/07 a 02/08 (60 commits em main-7k). Duas mudanças breaking e duas features apagadas por completo: é a semana mais consequente do trimestre pra quem consome o template.
  • As duas brands foram removidas do base e vivem hoje no fork front-web-external (PR #1835) — 84057c160 (refactor(brands)!) apaga overrides/cassino-bet-br e overrides/vera-bet-br inteiros. O diretório de overrides do base vai de 15 para 13 brands rastreadas: 7k-bet-br, betpontobet-bet-br, casateste-com, cl-bet7k-com, donald-bet-br, fi-7k-bet, ng-7k-bet, pb-bet, ph-state77-com, pt-state77-com, rj-bet, state77-com, x2b-bet. O commit toca 439 arquivos e remove ~28,4 mil linhas.
  • Para onde elas foram — ops bd6d1ee cria config/brands/web-external/brand.yml apontando pro repositório cactus-agents/front-web-external e MOVE 5 environments de web-base pra web-external: cassino-bet-br, vera-bet-br (com default_branch de main-external pra main), stage-cassino, stage-vera e sports-vera. O placeholder config/brands/vera-bet-br é removido — um fork atende as duas. Ops e01a693 já havia apontado os envs pra main-external em 18/07, e ops 3b555c3 ajusta o required_team de deploy protection dos dois. No base, 2d47d394d limpa o dropdown de workflow_dispatch.
  • O que morreu junto, por não ter mais consumidor — o commit é a melhor documentação do próprio efeito colateral: saem ~40 variantes órfãs de layout e widget (header-split-bar, header-vera, sidebar-sectioned-titled, sidebar-wide, header-secondary-flat, as bottom-navs illustrated-tabs/grid-tiles/betano/fab-center, TopGameCardLegacyGrid/CompactWatermark/Outline, SectionTitleNeon/Vera/Panel, CtaButtonVera, BiggestWinsListWidget com HomeWinsRightColumn, RecommendedGamesCarousel, ProfileCompactHero/CenteredSpotlight, FooterBadges) e features exclusivas das duas (ReferralIndicatorV2 com suas rotas de API, todo o Incognia, useAutoLogoutEndpoint com a rota /logout-auto, gamificationRelevanceSort, homeRightPane, usePaginatedGames, useRemarketingId). Mantidos de propósito por decisão de produto: ftd*, profiles, social auth, os módulos VIP, sports-rogue e RecommendedGamesBento (default do base).
  • Consequência prática pra leitores do changelog — todas as entradas anteriores que tratam cassino-bet-br e vera-bet-br como brands do base descrevem um estado que não existe mais aqui. Mudanças nessas duas brands a partir de 28/07 acontecem no front-web-external, cujo histórico não é visível deste workspace.

Changelog - 26/07/2026

Documento SSR auth-agnóstico — useAuthGate e o expurgo de dado de usuário dos loaders

  • Janela desta entrada — cobre 20/07 a 26/07 (171 commits em main-7k, a semana mais movimentada do trimestre). Foi também a semana em que main-fix e main-7k foram cruzadas nos dois sentidos (PR #1770 e PR #1773), então muitos assuntos aparecem duas vezes no histórico com SHAs diferentes — cada item abaixo cita um SHA só.
  • O documento SSR deixa de saber quem é o usuário (PR #1808, branch feat/user-data-out-of-ssr) — 6b1f32a90 remove auth e smarticoHash do loader de routes/_layout, e cb1b41c26 introduz o gate canônico app/hooks/useAuthGate.ts, client-side e sem snapshot SSR: o SSR sempre pinta convidado, o cookie is_authenticated serve como sinal otimista pós-mount e a store reativa assume depois da hidratação. Regra que nasce daqui: visibilidade e comportamento de UI nunca devem ser decididos com useRouteLoaderData("routes/_layout"), porque aquele é um snapshot SSR que não atualiza quando o login/logout acontece por modal.
  • Loaders per-user desmontados um por umd006a45fc (wallet, fetch 100% client-side), 62fd7b064 (rewards e income-report), 7de40d656 (página de favoritos), f17975eff (favoritos e recentes da home), 5683cdb3c (a página de jogo passa a serializar só a contagem pública de voteState; o userVote vira client-side), e23934b23 (bootstrap do álbum via /api/album/bootstrap). 28366ffca é a reescrita larga do caminho de dado de usuário no SSR.
  • Guardrail em teste, não em revisão282070eca cria o leak-canary: loaders públicos não podem serializar dado de usuário, e o teste falha se voltarem a fazê-lo. e06e384a0 fecha um furo do próprio guardrail (o canary passou a resolver todos os campos-promise do _layout, não só os síncronos). f8d6acf53 testa o useAuthGate contra a store real e f4d4eb059 deduplica React e Zustand no vitest.config — a resolução source-direct estava trazendo uma segunda cópia de React pela via de alias.
  • Reconciliação do Smartico7c5659fba mantém o smarticoHash correto em login e logout dentro da sessão SPA agora que o doc é auth-agnóstico, e 338c824b0 adiciona guard de corrida no fetch dele (além de corrigir comentários que descreviam o gate SSR antigo).

Changelog - 19/07/2026

Refino de UX da família 7k — ondas 4 a 7 e paridade cl/ng/fi

  • Janela desta entrada — cobre 13/07 a 19/07 (151 commits em main-7k, a branch de entrega viva do front-web-base; a main está parada desde 25/06 e não representa o que está em produção). Entradas semanais, não diárias.
  • Ondas 4, 5 e 7 fecham a série de refino visual do 7k-bet-br2de6e2187 (onda 4: modais de depósito, PIX compacto, "já paguei", valores sugeridos), 927f6b2e6 (onda 5: sidebar/nav, gamificação, home cassino, busca mobile) e 352b5beeb (onda 7: corrige hydration mismatch dos links de share, que piscava no F5). As ondas 1 a 3 caíram na semana anterior.
  • Paridade da família imediatamente depois32245acd0 replica as ondas 1 a 4 em cl-bet7k-com, ng-7k-bet e fi-7k-bet; fd3e7ad1c replica a onda 5 (sidebar/nav). O padrão do trimestre: o 7k-bet-br é a brand de referência e as três irmãs recebem o mesmo pacote em commit separado.
  • Barra mobile redesenhada com FAB central da marca (PR #1597) — b5a8d4f99 cria a variante mobile-nav-fab-logo: o item "Menu" vira um FAB circular com a logo da brand e o menu mobile passa a subir como bottom sheet em vez de drawer lateral, degradando pra tiles planos quando o special fab-center está ausente. af7e9bd23 (PR #1594) reordena os tiles pra Menu · Cassino · Buscar · Torneios · Esportes, com a busca no centro pelo alcance do polegar.
  • Tom global dos textos escurecido um pontoe45e597c4 troca #e6e6e6 por #e0e0e0 nos theme/colors.ts das 4 brands da família, cobrindo texts, links, titles e todos os sub-tokens; 4fb6b3eb5 já havia escurecido o fundo dos títulos de seção.

Changelog - 09/05/2026

Geo-SEO multi-país da rede 7k (BR / CL / NG / FI)

  • Cluster recíproco de hreflang sem x-default: cada um dos quatro domínios da família 7k declara as outras três variantes como alternates explícitas — 7k.bet.br (pt-BR, self) + cl.bet7k.com (es-CL) + ng.7k.bet (en-NG) + fi.7k.bet (fi-FI). Os três overrides novos (overrides/{cl-bet7k-com,fi-7k-bet,ng-7k-bet}/app/config/seo/hreflang.ts) e a atualização do 7k-bet-br removem o x-default que apontava pro Brasil — cada brand é geo-exclusiva (KYC, regulação e moeda locais), então não existe "world fallback" legítimo. Resultado: o Google só serve a variante quando o idioma/região do usuário matcha um alternate explícito (ex: russo ou alemão não vê nenhum domínio, em vez de cair no 7k.bet.br).
  • Schema.org/Organization enriquecida com sinais de país: buildOrganizationJsonLd() (app/utils/seo.ts) agora aceita addressCountry (ISO-3166 alpha-2) + areaServedName (nome do país em inglês) e emite address.addressCountry + areaServed.@type=Country. O _layout.tsx resolve ambos via getCountryByAlpha3 de @cactus-agents/country-config — mesmo catálogo usado pelo api-client pra derivar geo headers, evita duplicar mapping alpha-3 → alpha-2 + nome do país.
  • Novo JSON-LD WebSite com inLanguage: segundo blob de Schema.org reforçando o idioma da página de forma independente do <html lang>. Google parseia inLanguage separadamente, então emitir os dois dá ao algoritmo dois sinais redundantes de locale.
  • Header HTTP Content-Language injetado em toda response HTML pelo app/entry.server.tsx (text/html only — JSON/JS unaffected). Sourced do define __BRAND_LANGUAGE__ do Vite e mapeado pra forma BCP 47. Adiciona uma terceira camada de sinal de locale (header HTTP + JSON-LD + <html lang>).
  • Helper compartilhado app/utils/locale.ts consolida os mapas BRAND_LANGUAGE → BCP 47 (pra <html lang>, Content-Language, inLanguage, hreflang) e BRAND_LANGUAGE → og:locale (pra OpenGraph). Antes os dois mapas ficavam inline em root.tsx e _layout.tsx — havia risco de drift entre <html lang="pt-BR"> e Content-Language: pt. Cobertura: oito códigos ativos (pt-br, pt, en, es, es-mx, es-cl, en-ng, fi-fi) com fallback pra pt-BR.
  • useCasinoNomenclature agora é guiado por i18n, não mais por regex country-aware. O hook colapsa qualquer string vinda do BFF (campo casinoNomenclature) num enum de 2 valores ("casino" | "games") e resolve o substantivo traduzido via t("layout:sidebar.casino") / t("layout:sidebar.nomenclature_games"). Adicionar país novo virou uma linha em cada layout.json do core — zero mudança no front. Dependência de useBrand().features.country?.code removida.
  • Doc operacional fora-do-código: o sinal mais forte de geo-targeting pra gccTLDs (.com, .bet) continua sendo o Google Search Console → International Targeting → Country, que é manual. Walkthrough escrito em docs/superpowers/specs/2026-05-09-google-search-console-geo-targeting.md pro time de SEO/marketing.

Changelog - 07/05/2026

Segurança — remoção total de debug do bundle de produção

  • Toggle ?EnableDebug=1 removido em prod. O parâmetro de URL e a chave sessionStorage["debug_enabled"] foram completamente eliminados — não existe mais runtime gate que possa ser ligado por query param, cookie ou storage. O motivador foi um leak no /api/games/start: o endpoint passava debug:true ao ApiClient e ecoava _debug.requestInfo na response, expondo o header cf-worker-key que o Worker usa pra autenticar com o BFF — qualquer um clicando em "Play" em qualquer brand de prod conseguia ler do DevTools. Endpoint corrigido com 6 testes de regressão que travam o contrato (debug:true proibido, _debug ausente em sucesso e erro).
  • Painéis DevApiDebug/DevApiExplorer agora gated por import.meta.env.DEV. Novo wrapper DevPanel com React.lazy condicional — em prod, o dynamic import('./DevApiDebug') vira inalcançável e o Vite remove o chunk inteiro do build. Consumers (home, favorites, game detail, wallet, history) trocaram <DevApiDebug> por <DevPanel> envolto em {import.meta.env.DEV && (...)}, garantindo que loader _debug data nunca serializa no SSR stream de prod.
  • Rotas /api/dev/*, /dev/ftd-cashback, /debug e /debug/analytics só existem em dev build. O registro em app/router/routes.ts é gated por process.env.NODE_ENV !== 'production' — em prod build esses arquivos são tree-shaken por completo (server e client). Eliminados também app/utils/debug.server.ts (com isDebugRequest/?EnableDebug) e a doc docs/enable-debug/overview.md.
  • CI guard pnpm bundle:guard falha se strings proibidas vazarem para o bundle de prod. Novo script scripts/check-prod-bundle.mjs faz grep no build/ após pnpm build e detecta DevApiDebug, DevApiExplorer, activateDebugFromUrl, isDebugActive, EnableDebug, debug_enabled, validation_debug, /api/dev/, /dev/ftd-cashback, debug/analytics e cf-worker-key (no client bundle apenas). Wired via pnpm build:check (= build + bundle:guard). Adicionar nova string secret-adjacent exige atualizar FORBIDDEN_STRINGS no script.
  • Bumps no core que sustentam a remoção: @cactus-agents/api-client 0.12.0 (redação regex-based de headers *-key/*-token/*-secret/cf-*/x-api-* no requestInfo em modo debug) e @cactus-agents/utils 1.0.0 major (remove os exports activateDebugFromUrl e isDebugActive — não existe mais API pública pra ligar o toggle em runtime). Defense-in-depth: console.* em ftd-cashback.client.ts, smartico-checkin.client.ts e useOnFirstScrollIntoView.ts agora também passam por import.meta.env.DEV, então mesmo se um caller acidentalmente passar debug:true em prod o output some no build.

Changelog - 02/05/2026

Dia pesado: 30 PRs no front-web-base + 4 PRs no front-cactus-core. Destaques: revamp completo da gamificação 7k (cards de missão/torneio + modal), portabilidade massiva da personalização da vera-bet-br (paridade visual com legado), fluxo FTD completo da Vera (oferta, cashback, autoDeposit, check-in), polimentos visuais da cassino-bet-br e correções de Proteção de Conta.

Gamificação — Revamp 7k

  • Cards de missão e torneio completamente revisados nas variantes classic e stacked para 7k-bet-br/fi-7k-bet/ng-7k-bet, com novos visuais, badges de status e progresso refinado.
  • Modal de detalhe da missão (MissionDetailModal) ganhou layout novo com seção de prêmios, regras de elegibilidade e CTA de inscrição/reivindicação.
  • Tela de torneio (tournaments.$id.tsx) reescrita: novo TournamentHero, RegistrationCTA com estados expandidos, TournamentStatsCarousel e tournament-internals consolidados.
  • LevelsSection ajustada e página vip/levels.tsx reorganizada para refletir a hierarquia de níveis VIP do 7k.
  • Smartico Initializer atualizado para integrar com o novo fluxo de claim e pending_claim exposto pelo SDK.
  • Configs de brand (gamification.ts, widgets/mission-card.ts, widgets/tournament-card.ts) propagadas nos três overrides 7k para refletir o novo visual.

Changelog - 29/04/2026

Dia pesado: 25 PRs no front-web-base cobrindo um empurrão grande de performance (CSS, ícones, modal), refatoração do header secundário com gating de rota, novas features de cassino e pagamentos, e ajustes finos de SEO/mobile/auth. Plus 4 mudanças de CI/CD em front-ops pra suportar o novo modelo de cache por device/country/buildId.

Performance — empurrão grande

  • Drop important: true do Tailwind (tailwind.config.js). Removido globalmente — precedência CSS volta ao normal (inline style vence class). Resultado: CSS −23,5KB raw (−14,4%). Componentes que usavam o pattern condicional bgStyle ? "" : "bg-..." (omitir classe quando havia inline style) foram simplificados — agora basta sempre emitir a classe que o style inline sobrescreve quando presente. Atualizados: GameCardStacked, GameStats, GameWinners, MainLeaguesSquare, SidebarButtonsGradient, SidebarButtonsGrid.
  • Migração react-modal-sheetvaul (app/components/base/Modal.tsx). Modal chunk caiu de ~158KB pra ~65KB raw — −93KB (−59%). Mesma API externa, drop-in pelos consumers. (PR #405 fez ajustes finos depois pra resolver bugs de input-focus em mobile e espaço fantasma no footer.)
  • Remoção do @tailwindcss/typography. Plugin não justificava o custo — uso restrito a 4 lugares (FaqSingleContent, WpPostContent, page.$slug, vip/levels) substituído por classes utilitárias inline. package.json enxuga uma dep + 22 linhas de pnpm-lock.yaml.
  • Ícones direct-imports + lazy MainLeagues (app/widgets/home-leagues/). Drop do registry intermediário — agora cada componente faz import Icon from "~icons/<set>/<name>" direto. MainLeaguesSquare virou lazy chunk separado. 25 arquivos tocados, −564 linhas vs +454. Atualiza configs de home-leagues em 7 brands (7k-bet-br, cassino-bet-br, fi-7k-bet, ng-7k-bet, pb-bet, vera-bet-br, state77-com, x2b-bet).
  • CI Lighthouse manual (.github/workflows/lighthouse.yml). Workflow caller dispatchável via workflow_dispatch pra rodar Lighthouse on-demand contra preview/prod sem precisar de schedule fixo. Útil pra validar PRs pesados de UI antes de mergear.

Changelog - 21/04/2026

Semana 13–21/04 — auth, user e wallet viram @cactus-agents/accounts (breaking)

  • Os três pacotes de conta foram fundidos em um só, no dia 17/04. eac3812 cria packages/accounts movendo para lá o código de packages/auth, packages/user e packages/wallet (serviços de auth, recuperação, usuário e wallet; restrição de conta; histórico de login; jogo responsável; refresh de token; tipos de auth/user/wallet), e 452450e apaga os três pacotes no mesmo dia — 16 arquivos, 2.623 linhas removidas. Não existe mais @cactus-agents/auth, @cactus-agents/user nem @cactus-agents/wallet.
  • Migração para quem consome: troque os três imports por @cactus-agents/accounts (serviços e tipos) e @cactus-agents/accounts/react (hooks). No base isso foi feito em 88f85f275, com o pacote entrando via fde5ef596 / 4db2b4ed1 e a versão subindo de ^0.2.0 (a3396a973) para ^0.14.1 ao fim da semana. O package.json do base saiu de auth ^0.6.0 + user ^0.6.0 + wallet ^0.4.1 para uma única dependência accounts.
  • Retratação: as entradas de março que anunciaram @cactus-agents/wallet e @cactus-agents/user como pacotes SDK publicados descrevem um estado que deixou de existir aqui. Leia-as como histórico — os nomes não resolvem mais no registry.
  • O subpath /react é o que muda o dia a dia do base. 212615a expõe store Zustand no nível do módulo e os hooks de saldo já formatados por locale/moeda (useRealBalance, useBonusBalance, useCashbackBalance); 3fad9c8 completa a superfície de wallet (useWallet, useRollover, useWalletFlags, useTransactions, useTransferBonus, useTransferCashback, useRefreshWallet, useFormatMoney, useAccountsInit), tornando removível a fachada useWallet que o base mantinha à mão; dd73c98 adiciona os hooks de auth (useCurrentUser, useLogin, useRegister, useLogout, useRefreshProfile, useValidateDocument, useRecovery); da07b42 adiciona useProfile com updateAddress, updatePhone, updateProfile, storeDocument, updateMarketing e lookupPostalCode; 0afc73a adiciona useWithdrawReceipt.
  • Os adapters HTTP default vêm embutidos (a492634): como todos os forks do base herdam as rotas de proxy /api/wallet/refresh|transactions|action, /api/auth/*, /api/user/* e /api/address/* com o envelope { ok, data, error }, a lib passou a falar esse protocolo por padrão — o consumidor só chama useAccountsInit({ locale, currency }). 2816079 desacopla initAccounts do client concreto (recebe refetchWallet em vez de walletService), 0a89fe9 alinha os adapters de auth ao envelope do base, e 494c42c documenta por que o /react usa fetch cru em vez do ApiClient.
  • useTransactions devolve transação pré-formatada (b5ae424): novo FormattedTransaction = Transaction & { amountFormatted: string }, com o amount cru preservado para a lógica de sinal. Consumidor não importa formatador nem recebe um por prop.
  • Do lado do base, a consequência foi apagar código: 551fa1470 remove os fetches manuais, a76c112c1 migra as cinco seções de edição de perfil (AddressSection, PhoneSection, DocumentSection, InfosSection, MarketingSection) para useProfile — adicionando apenas a rota /api/user/update-marketing, porque as demais reaproveitam proxies existentes — e deleta app/store/user.ts. d58617465 conclui a migração de auth, f161de1ab corrige o import de useAccountsStore na PixSection e 886e81f58 fecha os erros de tipo em TransactionCard e BonusWalletCard.
  • Rollover ficou plano. 6c2b9c8 promove os campos de firstTransaction do rollover para o nível de cima e 9ca9cf5 adiciona lookupByPostalCode e maxBonusWithdrawAmount no topo; 10c9d48, 2b5f002 e e0ca444 simplificam a transformação de wallet em cima disso. e2f2f61b6 ajusta o BonusWalletCard para o novo shape.

Changelog - 30/03/2026

Banners Recomendados

  • Implementada nova seção de Banners Recomendados na home — componente RecommendedBannersCarousel que exibe banners em carrossel com setas de navegação
  • Dados consumidos de brand.appearance.recommendedBanners (desktop e mobile separados)
  • Breakpoint de alternância mobile/desktop ajustado para lg (1024px)
  • Largura mobile alinhada ao tamanho dos cards de jogos (w-[115px] / sm:w-[140px])
  • Largura desktop dinâmica via calc para acompanhar o container central ao redimensionar
  • Título e ícone da seção configurável por brand via home-rows.legacy.ts
  • Override betpontobet: seção "Os melhores de 2026" adicionada à home
  • Override state77: seção "Los mejores juegos de Chile hoy" adicionada à home
  • Suporte a casino-rows e casino-live-rows para exibir banners nas páginas de cassino