Snippets Collections
program Primo;
var
  n, i: integer;
  esPrimo: boolean;
begin
  writeln('Ingrese un número:');
  readln(n);
  esPrimo := true;
  if n < 2 then
    esPrimo := false
  else
    for i := 2 to n div 2 do
      if n mod i = 0 then
      begin
        esPrimo := false;
        break;
      end;
  if esPrimo then
    writeln(n, ' es un número primo')
  else
    writeln(n, ' no es un número primo');
end.
program Factorial;
var
  n, i: integer;
  factorial: longint;
begin
  writeln('Ingrese un número:');
  readln(n);
  factorial := 1;
  for i := 1 to n do
    factorial := factorial * i;
  writeln('El factorial de ', n, ' es ', factorial);
end.
git clone https://github.com/tfkhdyt/termux-fpc.git

cd termux-fpc
./install.sh

pas nombre_archivo.pas
Si en tu proyecto Yii2 no tienes el archivo console.php, eso significa que no tienes configurada aún la aplicación para la consola (la línea de comandos), que es necesaria para ejecutar comandos como las migraciones.

Para resolverlo, debes crear ese archivo manualmente desde cero dentro de la carpeta config/ de tu proyecto.

Aquí te dejo un ejemplo básico y funcional para que crees tu propio archivo console.php de configuración para la consola en Yii2:

<?php

return [
    'id' => 'app-console',
    'basePath' => dirname(__DIR__),  // Ruta base de tu proyecto
    'controllerNamespace' => 'app\commands', // Ruta por defecto para los controladores de consola
    // Aquí agregas la configuración de conexión a la base de datos
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=tu_base_de_datos', // Cambia esto por tu configuración
            'username' => 'tu_usuario',
            'password' => 'tu_contraseña',
            'charset' => 'utf8',
        ],
    ],
    // Configurar el controlador de migraciones extendido de la extensión bizley
    'controllerMap' => [
        'migration' => [
            'class' => 'bizley\migration\controllers\MigrationController',
        ],
    ],
];

      Además de crear este archivo, asegúrate de tener el script de entrada para consola que por defecto es el archivo yii (sin extensión) que está en la raíz del proyecto, el cual usa este archivo de configuración para correr comandos. Este archivo debería lucir así:
      
      #!/usr/bin/env php
<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';

$config = require __DIR__ . '/config/console.php';

$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);

Resumen de la solución si no tienes console.php
Crea el archivo config/console.php con la configuración mínima requerida (como conexión a DB, controlador de migraciones, etc.).

Asegúrate de tener el archivo ejecutable yii en la raíz del proyecto que carga esa configuración para comandos de consola.

Con eso ya podrás usar comandos Yii como yii migrate y el controlador personalizado para migraciones.
composer require --dev bizley/migration

Configurar el controlador en console.php:
Agrega esto para registrar el controlador de migraciones extendido:

¿Qué es el controlador en controllerMap?
En Yii2, los controladores son clases que contienen la lógica que se ejecuta cuando llamas a un comando o accedes a una ruta web.

En la aplicación de consola, cada comando corresponde a un controlador.

controllerMap es una configuración especial que permite registrar o sobrescribir controladores específicos para la aplicación.
'controllerMap' => [
    'migration' => [
        'class' => 'bizley\migration\controllers\MigrationController',
    ],
],
  Aquí se le está diciendo a Yii2 que cuando ejecutes comandos relacionados con migration (migraciones), debe usar NO el controlador de migraciones por defecto que trae Yii2, sino otro controlador que ofrece la extensión bizley/yii2-migration.
Ese controlador extendido está implementado en la clase PHP bizley\migration\controllers\MigrationController, que viene con la extensión que instalaste.
Esto permite agregar funcionalidades avanzadas al comando yii migration usando ese controlador.
return [
    'id' => 'app-console',
    'basePath' => dirname(__DIR__),
    'controllerMap' => [
        'migration' => [
            'class' => 'bizley\migration\controllers\MigrationController',
        ],
    ],
    // otras configuraciones...
];


¿Dónde se añade esto?
En el archivo console.php de configuración, que es un archivo donde se define un array grande con la configuración, agregarías esta parte dentro del array principal, generalmente así:

  Generar migraciones a partir de la base de datos existente:

Para generar migración de una tabla específica:
  php yii migration/create nombre_tabla

  Para generar migraciones para varias tablas separadas por coma:
  php yii migration/create tabla1,tabla2,tabla3
  
Para generar migraciones para todas las tablas de la base de datos:
  php yii migration/create "*"
{
  "DFIntTaskSchedulerTargetFps": 240,
  "FFlagDebugDisableTextureFiltering": true,
  "DFFlagDebugRenderForceTechnologyVoxel": true,
  "FIntDebugForceMSAASamples": 0,
  "FFlagDisablePostFx": true,
  "FIntRenderShadowIntensity": 0,
  "FFlagDebugSkyGray": true,
  "FFlagDisableShadows": true,
  "FFlagDisableReflectionProbe": true,
  "FIntDebugForcePhysicsThrottle": 1,
  "DFFlagDisableLightInfluence": true,
  "FIntTextureQualityOverride": 0,
  "FFlagDisableWaterReflection": true,
  "FFlagDisableWaterRendering": true,
  "FFlagDisableGlobalShadows": true,
  "FFlagDisableOutdoorAmbient": true
}
{
  "DFIntTaskSchedulerTargetFps": 200,
  "FFlagDebugDisableTextureFiltering": true,
  "DFFlagDebugRenderForceTechnologyVoxel": true,
  "FIntDebugForceMSAASamples": 0,
  "FFlagDisablePostFx": true,
  "FFlagDisableGraphicsQualityOverrides": true
}
For crypto-focused startups, a secure wallet is a non-negotiable part of the infrastructure. Cryptocurrency wallet development enables users to store, send, and receive digital assets with full control and security. Whether you’re launching an exchange, DeFi app, or NFT platform, a custom wallet boosts user trust and engagement. Startups can choose between hot wallets for convenience or cold wallets for added security. A reliable cryptocurrency wallet development company ensures proper encryption, multi-currency support, and compliance with industry standards. Cryptocurrency wallet development is more than storage—it's your gateway to long-term user retention.
Experience the future of decentralized trading with Cross DEX Development by Web5 Nexus. Our advanced solution seamlessly connects multiple decentralized exchanges across different blockchains, enabling users to trade assets effortlessly without switching platforms. With mixes of real-time liquidity, reduced gas fees, and secure smart contracts, We enable your decentralized Finance project to provide a seamless, scalable, and accessible experience. Whether you're launching a new platform or upgrading an existing one, Web5 Nexus ensures your DEX stays ahead with strong architecture, fast transaction speeds, and flawless Web3 integration. Our development services, which include multi-token exchanges and cross-chain asset bridging, are intended to remove troubles and provide countless opportunities in the cryptocurrency space. If you're looking to build the next-generation DEX with interoperability at its core, trust Web5 Nexus to bring your vision to life.

Know more >>> https://crossdex.web5.nexus/

Mail to :  connect@web5.nexus
// -- Plugin check ----------------------------------------------------------------
global proc uvCU_EnsureUnfold3D()
{
    if (!`pluginInfo -q -l "Unfold3D"`) {
        loadPlugin "Unfold3D";
        if (!`pluginInfo -q -l "Unfold3D"`) {
            error "Unfold3D plugin not available. Enable it in Plugin Manager and try again.";
        }
    }
}

// -- Helpers ---------------------------------------------------------------------
global proc string[] uvCU_GetExplicitUVs(string $sel[])
{
    string $uvs[] = `filterExpand -sm 35 -ex 1`;
    if (!size($uvs)) {
        string $uvConv[] = `polyListComponentConversion -toUV $sel`;
        $uvs = `filterExpand -sm 35 -ex 1 $uvConv`;
    }
    return $uvs;
}

// -- Camera planar (from current view) ------------------------------------------
global proc uvCU_PlanarFromCamera()
{
    string $sel[] = `ls -sl`;
    if (!size($sel)) error "Select mesh components or objects to project.";

    string $faces[] = `filterExpand -sm 34 -ex 1`;
    if (!size($faces)) {
        string $toFaces[] = `polyListComponentConversion -toFace $sel`;
        $faces = `filterExpand -sm 34 -ex 1 $toFaces`;
    }
    if (!size($faces)) error "Could not resolve faces from selection.";

    select -r $faces;
    polyProjection -type Planar -md p -constructionHistory 1;

    print "[UV] Camera-based planar projection applied from view.\n";
}

// -- Core: Cut + Unfold ----------------------------------------------------------
// Behavior per toggle:
//  - shellsOnly = 1  => strictly: polyMapCut then u3dUnfold with specific flags; TD is ignored.
//  - shellsOnly = 0  => original behavior: unfold all UVs on owning meshes; TD optional.
global proc uvCU_Run(float $td, int $mapSize, int $doSetTD, int $doShellsOnly)
{
    // Require seam edges
    string $edges[] = `filterExpand -sm 32 -ex 1`;
    if (!size($edges)) error "Select polygon edges (UV seams) first.";

    // Always cut along selected edges first
    select -r $edges;
    polyMapCut;

    if ($doShellsOnly)
    {
        // Edges -> UVs -> full shells (explicit UV selection)
        string $edgeUVs[] = `polyListComponentConversion -fromEdge -toUV $edges`;
        if (!size($edgeUVs)) error "No UVs found from selected seams.";
        select -r $edgeUVs;
        polySelectBorderShell 1;
        string $shellUVs[] = `filterExpand -sm 35 -ex 1`;
        if (!size($shellUVs)) error "Could not resolve UV shells from selected seams.";

        // Always Unfold3D with requested flags; ignore TD in shells-only mode
        uvCU_EnsureUnfold3D();
        select -r $shellUVs;
        // Flags requested: -ite 1 -p 0 -bi 1 -tf 1 -ms 1024 -rs 0
        u3dUnfold -ite 1 -p 0 -bi 1 -tf 1 -ms 1024 -rs 0;

        print "[UV] Cut + Unfold (Shells Only, basic flags) complete.\n";
        return;
    }
    else
    {
        // Original behavior: unfold ALL UVs on the meshes owning the selected edges
        string $owners[] = `ls -o $edges`;
        string $xforms[];
        for ($o in $owners) {
            string $p[] = `listRelatives -p -pa $o`;
            if (size($p)) {
                int $seen = 0; for ($t in $xforms){ if ($t==$p[0]){$seen=1;break;} }
                if (!$seen) $xforms[size($xforms)] = $p[0];
            }
        }

        // Select ALL UVs on those meshes
        select -cl;
        for ($t in $xforms) {
            string $uvs0[] = `polyListComponentConversion -toUV $t`;
            select -add $uvs0;
        }
        string $targetUVs[] = `filterExpand -sm 35 -ex 1`;

        // If still empty, seed projection and retry (rare)
        if (!size($targetUVs)) {
            for ($t in $xforms) {
                select -r $t;
                polyAutoProjection -lm 0 -pb 0 -ibd 1 -cm 0 -l 2 -sc 1 -o 1 -p 6 -ps 0.2 -ch 0;
            }
            select -cl;
            for ($t in $xforms) { string $uvs1[] = `polyListComponentConversion -toUV $t`; select -add $uvs1; }
            $targetUVs = `filterExpand -sm 35 -ex 1`;
            if (!size($targetUVs)) error "Could not resolve UVs.";
        }

        // Unfold3D (default options), optional Texel Density
        uvCU_EnsureUnfold3D();
        select -r $targetUVs;
        u3dUnfold;

        if ($doSetTD) {
            if ($td <= 0.0)  error "Texel Density must be > 0.";
            if ($mapSize <= 0) error "Map Size must be > 0.";
            select -r $targetUVs;
            texSetTexelDensity $td $mapSize;
        }

        print "[UV] Cut + Unfold (All UVs on mesh) complete.\n";
    }
}

// -- Separate: Auto Layout Now ---------------------------------------------------
global proc uvCU_LayoutNow(float $padding)
{
    string $curr[] = `ls -sl`;
    if (!size($curr)) error "Select UVs or mesh components to layout.";

    string $uvs[] = uvCU_GetExplicitUVs($curr);
    if (!size($uvs)) error "Could not resolve UVs from selection.";

    select -r $uvs;
    // padding is in UV units (0..1)
    polyLayoutUV -l 2 -sc 1 -fr 1 -ps $padding -ch 0;

    print ("[UV] Auto Layout done (Pad: " + $padding + ").\n");
}

// -- Checkbox callback: enable/disable TD-related controls -----------------------
global proc uvCU_ToggleTD()
{
    int $state = `checkBox -q -v uvCU_cbTD`;
    control -e -en $state uvCU_tdFld;       // enable/disable TD value
    control -e -en $state uvCU_msFld;       // enable/disable Map Size
    control -e -en $state uvCU_padFld;      // enable/disable UV Padding
    control -e -en $state uvCU_layoutBtn;   // enable/disable Auto Layout Now button
}

// -- Button callback to persist options & run ------------------------------------
global proc uvCU_OnRun()
{
    float $td        = `floatFieldGrp -q -value1 uvCU_tdFld`;
    int   $ms        = `intFieldGrp   -q -value1 uvCU_msFld`;
    int   $doTD      = `checkBox      -q -v      uvCU_cbTD`;
    int   $shellOnly = `checkBox      -q -v      uvCU_cbShells`;

    optionVar -fv "uvCU_texelDensity" $td;
    optionVar -iv "uvCU_mapSize"      $ms;
    optionVar -iv "uvCU_doSetTD"      $doTD;
    optionVar -iv "uvCU_shellsOnly"   $shellOnly;

    uvCU_Run($td, $ms, $doTD, $shellOnly);
}

// -- UI --------------------------------------------------------------------------
global proc uvCU_UI()
{
    string $win = "uvCutUnfoldTDWin";
    if (`window -exists $win`) deleteUI -window $win;

    window -title "ChatGPT X CS UV Tool" -widthHeight 540 400 $win;
    columnLayout -adj true -rs 6;

        // Top: toggles + main actions (both toggles default OFF)
        int   $defShell = 0;
        int   $defDoTD  = 0;

        checkBox      -l "Only shells from selected seams" -v $defShell uvCU_cbShells;
        checkBox      -l "Scale to density after unfold"   -v $defDoTD  -cc "uvCU_ToggleTD()" uvCU_cbTD;

        // Main row
        rowLayout -nc 2 -cw2 180 180 -ct2 "both" "both" -co2 2 2;
            button -label "CameraBased Planar" -c "uvCU_PlanarFromCamera();";
            button -label "Cut + Unfold"       -c "uvCU_OnRun();";
        setParent ..;

        separator -style "in";

        // Bottom: TD/Map/Pad + Layout Now
        float $defTD  = (`optionVar -exists "uvCU_texelDensity"`) ? `optionVar -q "uvCU_texelDensity"` : 8.0;
        int   $defMap = (`optionVar -exists "uvCU_mapSize"`)      ? `optionVar -q "uvCU_mapSize"`      : 2048;
        float $defPad = (`optionVar -exists "uvCU_padding"`)      ? `optionVar -q "uvCU_padding"`      : 0.005;

        floatFieldGrp -label "Texel Density (px/unit)" -numberOfFields 1 -value1 $defTD  uvCU_tdFld;
        intFieldGrp   -label "Map Size (px)"           -numberOfFields 1 -value1 $defMap uvCU_msFld;
        floatFieldGrp -label "UV Padding (0..1)"       -numberOfFields 1 -value1 $defPad uvCU_padFld;

        // Same width as the top row
        rowLayout -nc 1 -cw1 364 -ct1 "both" -co1 2;
            button -label "Auto Layout Now" -c "uvCU_LayoutNow(`floatFieldGrp -q -value1 uvCU_padFld`);" uvCU_layoutBtn;
        setParent ..;

        // Respect initial TD state (defaults OFF)
        control -e -en $defDoTD uvCU_tdFld;
        control -e -en $defDoTD uvCU_msFld;
        control -e -en $defDoTD uvCU_padFld;
        control -e -en $defDoTD uvCU_layoutBtn;

    showWindow $win;
}

// Launch UI
uvCU_UI();
[ExtensionOf(classStr(PurchReqWorkflow))]
final class PurchReqWorkflow_LOC_Finance_Extension
{

    public static void main(Args _args)
    {
        PurchReqWorkflow purchReqWorkflow = PurchReqWorkflow::construct();
        PurchReqTable purchReqTable;
        FormDataSource purchReqTableDS;
        if (_args)
        {
            purchReqTable = _args.record();
            purchReqTableDS = FormDataUtil::getFormDataSource(purchReqTable);
 
            if(purchReqTable)
            {
                if(purchReqTable.ProjectName == "" || purchReqTable.ProjectDuration == ""
                    || purchReqTable.ProjectObjectives == "" || purchReqTable.BusinessImpact == "")
                    throw error("Sorry you can't submit this request, please must be fill Project Description, Project Duration, Project Objectives and Business Impact.");
            }
        }
        next main(_args);
    }
}

// https://khadarmsdax.wordpress.com/2022/08/11/workflow-validation-before-submit-x/
// ===== UV Cut + Unfold (+ Pack / Texel Density / Padding) — Stable MEL (Maya 2026) =====

global proc uvCU_RunPad(float $td, int $mapSize, int $doSetTD, int $doPack, float $padding)
{
    if ($doSetTD && $td <= 0.0)  error "Texel Density must be > 0.";
    if ($doSetTD && $mapSize <= 0) error "Map Size must be > 0.";

    string $edges[] = `filterExpand -sm 32 -ex 1`;
    if (!size($edges)) error "Select polygon edges (UV seams) first.";

    string $owners[] = `ls -o $edges`;
    string $xforms[];
    for ($o in $owners) {
        string $p[] = `listRelatives -p -pa $o`;
        if (size($p)) {
            int $seen = 0; for ($t in $xforms){ if ($t==$p[0]){$seen=1;break;} }
            if (!$seen) $xforms[size($xforms)] = $p[0];
        }
    }

    select -r $edges;
    polyMapCut;

    // Select ALL UVs on those meshes
    select -cl;
    for ($t in $xforms) {
        string $uvs[] = `polyListComponentConversion -toUV $t`;
        select -add $uvs;
    }
    select -r `filterExpand -sm 35 -ex 1`;

    // If no UVs yet, seed a quick projection & reselect UVs
    if (!size(`ls -sl -fl`)) {
        for ($t in $xforms) {
            select -r $t;
            polyAutoProjection -lm 0 -pb 0 -ibd 1 -cm 0 -l 2 -sc 1 -o 1 -p 6 -ps 0.2 -ch 0;
        }
        select -cl;
        for ($t in $xforms) {
            string $uvs2[] = `polyListComponentConversion -toUV $t`;
            select -add $uvs2;
        }
        select -r `filterExpand -sm 35 -ex 1`;
    }

    // Unfold (Unfold3D tool entry)
    u3dUnfold;

    // Optional Texel Density
    if ($doSetTD) {
        texSetTexelDensity $td $mapSize;
    }

    // Optional Pack (padding in UV units 0..1)
    if ($doPack) {
        polyLayoutUV -l 2 -sc 1 -fr 1 -ps $padding -ch 0;
    }

    string $msg = "[UV] Cut + Unfold";
    if ($doSetTD) $msg += " + TD";
    if ($doPack)  $msg += (" + Pack (Padding: " + $padding + ")");
    print ($msg + ".\n");
}

// Camera planar from current view (your requested flags)
global proc uvCU_PlanarFromCamera()
{
    string $sel[] = `ls -sl`;
    if (!size($sel)) error "Select mesh components or objects to project.";

    string $faces[] = `filterExpand -sm 34 -ex 1`;
    if (!size($faces)) {
        string $toFaces[] = `polyListComponentConversion -toFace $sel`;
        $faces = `filterExpand -sm 34 -ex 1 $toFaces`;
    }
    if (!size($faces)) error "Could not resolve faces from selection.";

    select -r $faces;
    polyProjection -type Planar -md p -constructionHistory 1;

    print "[UV] Camera-based planar projection applied from view.\n";
}

// Button callback — query controls by explicit names and run
global proc uvCU_OnRun()
{
    float $td      = `floatFieldGrp -q -value1 uvCU_tdFld`;
    int   $ms      = `intFieldGrp   -q -value1 uvCU_msFld`;
    int   $doTD    = `checkBox      -q -v      uvCU_cbTD`;
    int   $doPack  = `checkBox      -q -v      uvCU_cbPack`;
    float $padding = `floatFieldGrp -q -value1 uvCU_padFld`;

    optionVar -fv "uvCU_texelDensity" $td;
    optionVar -iv "uvCU_mapSize"      $ms;
    optionVar -iv "uvCU_doSetTD"      $doTD;
    optionVar -iv "uvCU_doPack"       $doPack;
    optionVar -fv "uvCU_padding"      $padding;

    uvCU_RunPad($td, $ms, $doTD, $doPack, $padding);
}

// UI — controls are created with fixed names so callbacks never break
global proc uvCU_UI()
{
    string $win = "uvCutUnfoldTDWin";
    if (`window -exists $win`) deleteUI -window $win;

    window -title "ChatGPT X CS UV Tool" -widthHeight 420 300 $win;
    columnLayout -adj true -rs 6;

        float $defTD   = (`optionVar -exists "uvCU_texelDensity"`) ? `optionVar -q "uvCU_texelDensity"` : 8.0;
        int   $defMap  = (`optionVar -exists "uvCU_mapSize"`)      ? `optionVar -q "uvCU_mapSize"`      : 2048;
        int   $defDoTD = (`optionVar -exists "uvCU_doSetTD"`)      ? `optionVar -q "uvCU_doSetTD"`      : 1;
        int   $defPack = (`optionVar -exists "uvCU_doPack"`)       ? `optionVar -q "uvCU_doPack"`       : 1;
        float $defPad  = (`optionVar -exists "uvCU_padding"`)      ? `optionVar -q "uvCU_padding"`      : 0.005;

        // Name each control explicitly (last arg)
        floatFieldGrp -label "Texel Density (px/unit)" -numberOfFields 1 -value1 $defTD  uvCU_tdFld;
        intFieldGrp   -label "Map Size (px)"           -numberOfFields 1 -value1 $defMap uvCU_msFld;
        checkBox      -l "Scale to density after unfold" -v $defDoTD uvCU_cbTD;
        checkBox      -l "Pack after unfold"             -v $defPack uvCU_cbPack;
        floatFieldGrp -label "UV Padding (0..1)"       -numberOfFields 1 -value1 $defPad uvCU_padFld;

        separator -style "in";

        rowLayout -nc 3 -cw3 180 160 60 -ct3 "both" "both" "both" -co3 2 2 2;
            button -label "CameraBased Planar" -c "uvCU_PlanarFromCamera();";
            button -label "Cut + Unfold"       -c "uvCU_OnRun();";
            button -label "Close"               -c ("deleteUI -window " + $win);
        setParent ..;

    showWindow $win;
}

// Launch
uvCU_UI();
In crypto, smart systems beat constant manual effort. Crypto trading bot development gives startups and entrepreneurs a way to automate trading while maintaining full control over strategies. Features like backtesting, real-time alerts, and multi-strategy support make bots versatile tools for any trading style. They also help keep decision-making consistent in volatile markets. A trusted crypto trading bot development company ensures your system is secure, efficient, and adaptable. For founders, a trading bot is both a productivity tool and a growth driver.

string button.send_doc_via_docu_sign()
{
	Ownership_Change_Request_id = "5971686000098845399";
	get_Details = zoho.crm.getRecordById("Ownership_Change_Request",Ownership_Change_Request_id);
	//info get_Details;
	customer_id = get_Details.get("Customer_Name").get("id");
	//info customer_id;
	contact_Details = zoho.crm.getRecordById("Contacts",customer_id);
	//info contact_Details;
	buyer_email = contact_Details.get("Email");
	info buyer_email;
	buyer_name = contact_Details.get("Full_Name");
	info buyer_name;

	// Step 1: Get Attachment from Ownership Change Request
	OCR_attachments = zoho.crm.getRelatedRecords("Attachments","Ownership_Change_Request",Ownership_Change_Request_id);
	if(OCR_attachments.size() > 0)
	{
		firstAttachment = OCR_attachments.get(0);
		attachmentId = firstAttachment.get("id");

		// Step 2: Download the document from CRM
		response1 = invokeurl
		[
			url :"https://www.zohoapis.com/crm/v8/Ownership_Change_Request/" + Ownership_Change_Request_id + "/Attachments/" + attachmentId
			type :GET
			connection:"newzohocrm"
		];

		// Step 3: Convert to Base64
		base64_pdf = zoho.encryption.base64Encode(response1);

		// Step 4: Prepare document map for DocuSign
		doc = Map();
		doc.put("documentBase64",base64_pdf);
		doc.put("name","Sale Purchase Agreement");
		doc.put("fileExtension","docx");
		doc.put("documentId","1");

		// Step 5: Signers' Info
		buyer_email = contact_Details.get("Email");
		buyer_name = contact_Details.get("Full_Name");

		// Joint Buyer
		joint_buyer_name = "Shahzad Joint";
		joint_buyer_email = "muhammad.kaleem@leosops.com";

		// Manager
		manager_name = "Leos";
		manager_email = "m.awais@leosuk.com";

		// ===== SIGNER 1: Buyer =====
		sign_here_buyer = List();
		sign_here_buyer.add({"anchorString":"Signed by Individual Purchaser","anchorUnits":"pixels","anchorXOffset":"170","anchorYOffset":"28"});
		sign_here_buyer.add({"anchorString":"Signed for and on behalf of the Purchaser","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"12"});

		// Initial field
		initial_here_buyer = List();
		initial_here_buyer.add({"anchorString":"Purchaser’s initials","anchorUnits":"pixels","anchorXOffset":"12","anchorYOffset":"-7"});

		// Date Signed field
		date_signed_buyer = List();
		date_signed_buyer.add({"anchorString":"Date signed:","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"10"});

		tabs_buyer = Map();
		tabs_buyer.put("signHereTabs",sign_here_buyer);
		tabs_buyer.put("initialHereTabs",initial_here_buyer);
		tabs_buyer.put("dateSignedTabs",date_signed_buyer);

		signer1 = Map();
		signer1.put("email",buyer_email);
		signer1.put("name",buyer_name);
		signer1.put("recipientId","1");
		signer1.put("routingOrder","1");
		signer1.put("tabs",tabs_buyer);

		// ===== SIGNER 2: Joint Buyer =====
		sign_here_joint = List();
		sign_here_joint.add({"anchorString":"Signed by Joint Individual Purchaser","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"28"});

		initial_here_joint = List();
		initial_here_joint.add({"anchorString":"Initial by Joint Individual Purchaser","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"28"});

		date_signed_joint = List();
		date_signed_joint.add({"anchorString":"Date Signed by Joint Individual Purchaser","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"28"});

		tabs_joint = Map();
		tabs_joint.put("signHereTabs",sign_here_joint);
		tabs_joint.put("initialHereTabs",initial_here_joint);
		tabs_joint.put("dateSignedTabs",date_signed_joint);

		signer2 = Map();
		signer2.put("email",joint_buyer_email);
		signer2.put("name",joint_buyer_name);
		signer2.put("recipientId","2");
		signer2.put("routingOrder","2");
		signer2.put("tabs",tabs_joint);

		// ===== SIGNER 3: Develper =====
		sign_here_manager = List();
		sign_here_manager.add({"anchorString":"Signed for and on behalf of Developer:","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"28"});

		initial_here_manager = List();
		initial_here_manager.add({"anchorString":"Seller’s initials","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"-3"});

		date_signed_manager = List();
		date_signed_manager.add({"anchorString":"Date Signed by Seller","anchorUnits":"pixels","anchorXOffset":"175","anchorYOffset":"28"});

		tabs_manager = Map();
		tabs_manager.put("signHereTabs",sign_here_manager);
		tabs_manager.put("initialHereTabs",initial_here_manager);
		tabs_manager.put("dateSignedTabs",date_signed_manager);

		signer3 = Map();
		signer3.put("email",manager_email);
		signer3.put("name",manager_name);
		signer3.put("recipientId","3");
		signer3.put("routingOrder","3");
		signer3.put("tabs",tabs_manager);

		// Step 6: Recipients map
		recipients = Map();
		recipients.put("signers",{signer1,signer2,signer3});

		// Step 7: Envelope
		envelope = Map();
		envelope.put("documents",{doc});
		envelope.put("emailSubject","Please Sign the Sale Purchase Agreement");
		envelope.put("status","sent");
		envelope.put("recipients",recipients);

		// Step 8: Get DocuSign Access Token from CRM Variable
		access_token_response = invokeurl
		[
			url :"https://www.zohoapis.com/crm/v6/settings/variables/5971686000102746225"
			type :GET
			connection:"newzohocrm"
		];
		access_token = access_token_response.get("variables").get(0).get("value");

		// Step 9: Send envelope via DocuSign
		headers = Map();
		headers.put("Authorization","Bearer " + access_token);
		headers.put("Content-Type","application/json");

		response = invokeurl
		[
			url :"https://demo.docusign.net/restapi/v2.1/accounts/60bf62d5-5696-443e-8b93-74f5da67f9b7/envelopes"
			type :POST
			parameters:envelope.toString()
			headers:headers
		];
		info response;
		envelopeId = response.get("envelopeId");

		update_map = Map();
		update_map.put("Envelope_ID", envelopeId);
		Update_Rec= zoho.crm.updateRecord("Reservation_", Ownership_Change_Request_id, update_map);
	}
	else
	{
		info "No attachments found on Ownership Change Request record.";
	}
	return "";
}
# Circumference of Circle
r = int(input("Enter radius of circle : "))
c = 2*3.14*r
print("Circumference of Circle is : ", c)

# Area of Circle
area = 3.14*r*r
print("Area of Circle is : ", area)
# Perimeter of Rectangle 
l = int(input("Enter length : "))
b = int(input("Enter breadth : "))
perimeter = 2*(l + b)
print("Perimeter of Rectangle is : ", perimeter)

# Are of Rectangle 
area = l*b
print("Area of Rectangle is : ", area)
# Sum of 3 Numbers
x = int(input("Enter 1st no. : "))
y = int(input("Enter 2nd no. : "))
z = int(input("Enter 3rd no. : "))
sum = x+y+z
print("Sum of these nos. is : ", sum)
import pandas as pd
list1=[-10,-20,-30]
ser = pd.Series(list1)
print(ser*2)
Are you ready to kickstart your own dynamic sports wagering platform using a customizable Bet365 clone script that aligns perfectly with your brand identity?Plurance offers an cutting-edge sports betting platform development solution that prioritizes the security of your business and player data.Our Ready-made Bet365 Clone Script includes features like user registration and profile management, diverse betting options, live odds and real-time updates, a secure payment gateway, a robust admin dashboard for streamlined operations, and compatibility across web and mobile platforms to enhance user experience, support, and management.We also offer a free live demo so you can experience the platform before you launch. 

Get in touch with our team today and take the first step toward launching your own betting platform

Book a free demo

Website – https://www.plurance.com/bet365-clone-script

Call/WhatsApp – +918807211181

Telegram – Pluranceteck

For free demo/cost – https://www.plurance.com/contact-us
DROP TABLE team_kingkong.tpap_risk116_breaches;
 
-- CREATE TABLE team_kingkong.tpap_risk116_breaches AS
INSERT INTO team_kingkong.tpap_risk116_breaches
SELECT DISTINCT B.*, C.category, D.txnType, D.txnType1, D.osVersion, D.initiationMode
, IF(D.upi_subtype IS NOT NULL, D.upi_subtype, IF(C.category = 'LITE_MANDATE', 'UPI_LITE_MANDATE', '')) AS upi_subtype
, 'upi_oc141_mcc7995_betting_v3' AS rule_name
, 'Breaches' as breach_reason
FROM
    (SELECT txn_id,
    MAX(CASE WHEN participant_type = 'PAYER' THEN vpa END) AS payer_vpa,
    MAX(CASE WHEN participant_type = 'PAYEE' THEN vpa END) AS payee_vpa,
    MAX(CASE WHEN participant_type = 'PAYEE' THEN mcc END) AS payeeMccCode,
    MAX(DATE(created_on)) as txn_date,
    MAX(amount) AS txn_amount,
    MAX(created_on) AS txn_time
    FROM switch.txn_participants_snapshot_v3
    WHERE DATE(dl_last_updated) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    AND DATE(created_on) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    GROUP BY 1)B
inner join
    (select txn_id, category
    from switch.txn_info_snapshot_v3
    where DATE(dl_last_updated) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    and DATE(created_on) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    and upper(status) = 'SUCCESS'
    AND category = 'VPA2MERCHANT') C
on B.txn_id = C.txn_id
INNER JOIN
    (SELECT txnid
    , regexp_replace(cast(json_extract(request, '$.requestPayload.payerType') AS varchar),'"','') AS payerType
    , regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') AS payeeType
    , JSON_EXTRACT_SCALAR(request, '$.requestPayload.initiationMode') AS initiationMode
    , regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') AS upi_subtype
    , regexp_replace(cast(json_extract(request, '$.requestPayload.osVersion') as varchar), '"', '') AS osVersion
    , json_extract_scalar(request, '$.requestPayload.txnType') AS txnType
    , json_extract_scalar(request, '$.requestPayload.txnType1') AS txnType1
    FROM tpap_hss.upi_switchv2_dwh_risk_data_snapshot_v3
    WHERE DATE(dl_last_updated) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    AND json_extract_scalar(response, '$.action_recommended') <> 'BLOCK'
    AND regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') = 'UPI_TRANSACTION'
    )D
ON B.txn_id = D.txnid
WHERE payeeMccCode = '7995'
AND ((LOWER(D.osVersion) LIKE '%android%' AND txnType = 'COLLECT')
OR (D.osVersion LIKE 'iOS%' AND txn_amount > 2000 AND txnType = 'COLLECT')
OR (txnType NOT IN ('PAY', 'DEBIT') AND txnType1 = 'CR' AND initiationMode = '00')
OR (D.initiationMode NOT IN ('00', '04', '05', '10')));     
-- RISK136	upi_lite_add_money_amount_limit
-- DROP TABLE team_kingkong.tpap_risk136_breaches;
 
-- CREATE TABLE team_kingkong.tpap_risk136_breaches AS
INSERT INTO team_kingkong.tpap_risk136_breaches
SELECT DISTINCT B.*, C.category, D.requestType
, IF(D.upi_subtype IS NOT NULL, D.upi_subtype, IF(C.category = 'LITE_MANDATE', 'UPI_LITE_MANDATE', '')) AS upi_subtype
, 'upi_lite_add_money_amount_limit' AS rule_name
, 'Add money to upi lite > 5k' as breach_reason
FROM
    (SELECT txn_id,
    MAX(CASE WHEN participant_type = 'PAYER' THEN vpa END) AS payer_vpa,
    MAX(CASE WHEN participant_type = 'PAYEE' THEN vpa END) AS payee_vpa,
    MAX(CASE WHEN participant_type = 'PAYEE' THEN mcc END) AS payeeMccCode,
    MAX(DATE(created_on)) as txn_date,
    MAX(amount) AS txn_amount,
    MAX(created_on) AS txn_time
    FROM switch.txn_participants_snapshot_v3
    WHERE DATE(dl_last_updated) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    AND DATE(created_on) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    GROUP BY 1)B
inner join
    (select txn_id, category
    from switch.txn_info_snapshot_v3
    where DATE(dl_last_updated) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    and DATE(created_on) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    and upper(status) = 'SUCCESS'
    AND category = 'RECHARGE_LITE_TOP_UP') C
on B.txn_id = C.txn_id
INNER JOIN
    (SELECT txnid
    , regexp_replace(cast(json_extract(request, '$.requestPayload.payerType') AS varchar),'"','') AS payerType
    , regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') AS payeeType
    , regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') AS upi_subtype
    , json_extract_scalar(request, '$.requestPayload.requestType') as requestType
    FROM tpap_hss.upi_switchv2_dwh_risk_data_snapshot_v3
    WHERE DATE(dl_last_updated) BETWEEN DATE'2025-01-01' AND DATE'2025-01-31'
    AND json_extract_scalar(response, '$.action_recommended') <> 'BLOCK'
    AND json_extract_scalar(response, '$.requestPayload.requestType') IN ('INITIAL_LITE_TOP_UP', 'RECHARGE_LITE_TOP_UP')
    AND regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') = 'UPI_LITE_TRANSACTION')D
ON B.txn_id = D.txnid
WHERE txn_amount > 5000;
import pandas as pd
dict = {"Population": {"Delhi":10927986, "Mumbai":12691836, "Kolkata":4631392, "Chennai":4328063}, 
        "Hospitals":{"Delhi":189, "Mumbai":208, "Kolkata":149, "Chennai":157},
        "Schools":{"Delhi":7916, "Mumbai":8508, "Kolkata":7226, "Chennai":7617}}
df = pd.DataFrame(dict)
print("Before Adding Column")
print(df)
print("-------------------------")

df["Students"]="12K"
print("After Adding Column Students")
print(df)
print("-------------------------")


df["Teachers"]=["10k", "20k", "30k", "40k"]
print("After Adding Column Teachers")
print(df)
print("-------------------------")

df.iat[3,3]="10000K"
df.at["Delhi","Schools"]=555555
print(df)
print("-----------------------------------")

df.loc["Agra"]=10
df.loc["Mathura"]=[10, 20,30, 40, 50]
print(df)

df.loc["Rohta",["Hospitals", "Schools"]]=20000
print(df)

del df["Hospitals"]

print(df)

df.loc["Agra",["Schools", "Students"]]=[1000000, 200000]
df.loc["Ajmer",["Schools", "Students"]]=[10541,5874125]
print(df)

print("-----------Bye----------------------")
'# print(df.index)
# print(df.columns)
# print(df.loc[["Delhi", "Mumbai"],["Students", "Teachers"]])

# x =' df.drop(["Mumbai", "Agra"], axis=0)
# y = df.drop(["Students", "Teachers"], axis=1)
# print(x)
# print(y)
# print(df)

# print("New DataFrame------------------------------------------")
# newdf = df.rename(index={"Delhi":"D"})
# print(newdf)
# print(df)
# print("Old Data Frame -----------------------------------------")
# df.rename(index={"Delhi":"D"}, inplace=True)
# print(df)


newdf=df.rename(columns={"Population":"P"})
print(newdf)
df.rename(columns={"Population":"P"}, inplace=True)
print(df)
df.rename(index={"Delhi":"Agra"}, columns={"Schools":"College"}, inplace=True)
print(df)
def generate_random_number():
    x = id(0)
    x = id(x)
    x = str(x)[1]
    return x

print(generate_random_number())
function howMany(){
  console.log(arguments); // 
}


howMany(3,4,5,6,7,8,90,)



//prints
Arguments(7) [3, 4, 5, 6, 7, 8, 90, callee: (...), Symbol(Symbol.iterator): ƒ]
// shows an array and we can do something like



function howMany() {
  let total = 0;
  for (let value of arguments) {
    total += value;
  }
  console.log(total);
  return total;
}

howMany(3, 4, 5, 6, 7, 8, 90);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document Download</title>
    <style>
        body {
            font-family: Cambria, sans-serif;
            background: #E0F7FA;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .form-box {
            background: #00FFFF;
            padding: 20px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
            border-radius: 10px;
            text-align: center;
            width: 350px;
            max-width: 90%;
        }

        input, button {
            padding: 10px;
            margin: 10px 0;
            width: 100%;
            box-sizing: border-box;
        }

        a button {
            background: #007BFF;
            color: white;
            border: none;
            cursor: pointer;
            padding: 10px 20px;
            width: auto;
            margin-top: 5px;
        }

        a button:hover {
            background: #0056b3;
        }

        #result {
            margin-top: 20px;
            font-weight: bold;
        }

        .not-available {
            color: red;
            margin: 5px 0;
        }

        .loader {
            width: 50px;
            height: 50px;
            position: relative;
            margin: 20px auto;
            display: none;
        }

        .loader::before {
            content: '';
            position: absolute;
            border: 5px solid #007BFF;
            border-radius: 50%;
            width: 30px;
            height: 30px;
            top: 0;
            left: 0;
            animation: spin 1s linear infinite;
            border-right-color: transparent;
        }

        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
    </style>
</head>
<body>

<div class="form-box">
    <h2>Download Important Documents of the Trainees<br>Session 2025–2027</h2>

    <input type="text" id="regNo" placeholder="Enter Registration Number"><br>
    <input type="text" id="traineeName" placeholder="Enter Your Name"><br>
    <button id="submitBtn" onclick="checkDocuments()">Submit</button>

    <div class="loader" id="loader"></div>
    <div id="result"></div>
</div>

<script>
function checkDocuments() {
    const regNo = document.getElementById("regNo").value.trim();
    const traineeName = document.getElementById("traineeName").value.trim().toLowerCase();
    const resultDiv = document.getElementById("result");
    const submitBtn = document.getElementById("submitBtn");
    const loader = document.getElementById("loader");

    if (!regNo || !traineeName) {
        alert("Please enter both Registration Number and Trainee Name");
        return;
    }

    resultDiv.innerHTML = "";
    loader.style.display = "block";
    submitBtn.disabled = true;

    const apiUrl = `https://script.google.com/macros/s/AKfycbxIEcEHZ2gokJPGLeU6y8mrjJG4rbJoOfSubjqfqxw46i3ilXc-t2Bl13e1jOfabJ7L/exec?regNo=${encodeURIComponent(regNo)}&traineeName=${encodeURIComponent(traineeName)}`;

    fetch(apiUrl)
        .then(response => response.json())
        .then(data => {
            if (Object.keys(data).length > 0) {
                let links = `<p>Hello, ${traineeName.toUpperCase()}!</p>`;

                // Get all keys ending with ' Link'
                const linkKeys = Object.keys(data).filter(key => key.endsWith(' Link'));

                if (linkKeys.length === 0) {
                    links += `<p class="not-available">No downloadable documents found.</p>`;
                } else {
                    linkKeys.forEach(key => {
                        const label = key.replace(" Link", "");

                        if (data[key]) {
                            links += `<a href="${data[key]}" target="_blank" rel="noopener noreferrer">
                                        <button>Download ${label}</button>
                                      </a>`;
                        } else {
                            links += `<p class="not-available">${label}: Document not available yet.</p>`;
                        }
                    });
                }

                resultDiv.innerHTML = links;
            } else {
                resultDiv.innerHTML = "<p class='not-available'>No documents found for this registration number and name.</p>";
            }
        })
        .catch(error => {
            console.error(error);
            resultDiv.innerHTML = "<p class='not-available'>Documents not Available.</p>";
        })
        .finally(() => {
            loader.style.display = "none";
            submitBtn.disabled = false;
        });
}
</script>

</body>
</html>
function doGet(e) {
  // Check if 'e' and 'e.parameter' exist to avoid errors
  if (!e || !e.parameter) {
    return ContentService
      .createTextOutput("No parameters received")
      .setMimeType(ContentService.MimeType.TEXT);
  }

  const regNo = (e.parameter.regNo || "").toString().trim();
  const traineeName = (e.parameter.traineeName || "").toLowerCase().trim();

  if (!regNo || !traineeName) {
    return ContentService
      .createTextOutput("Missing parameters: regNo and traineeName are required")
      .setMimeType(ContentService.MimeType.TEXT);
  }

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  const data = sheet.getDataRange().getValues();

  const headers = data[0];
  const rows = data.slice(1);

  const regIndex = headers.indexOf("Registration Number");
  const nameIndex = headers.indexOf("Trainee Name");

  if (regIndex === -1 || nameIndex === -1) {
    return ContentService
      .createTextOutput("Required columns (Registration Number, Trainee Name) missing in sheet")
      .setMimeType(ContentService.MimeType.TEXT);
  }

  const links = {};

  rows.forEach(row => {
    if (row[regIndex].toString().trim() === regNo && row[nameIndex].toLowerCase().trim() === traineeName) {
      headers.forEach((header, i) => {
        if (header.toLowerCase().includes("link")) {
          links[header] = row[i];
        }
      });
    }
  });

  if (Object.keys(links).length === 0) {
    return ContentService
      .createTextOutput("No matching record found")
      .setMimeType(ContentService.MimeType.TEXT);
  }

  return ContentService
    .createTextOutput(JSON.stringify(links))
    .setMimeType(ContentService.MimeType.JSON);
}

// Test function to simulate a GET request inside the editor
function testDoGet() {
  const e = {
    parameter: {
      regNo: "12345",
      traineeName: "John Doe"
    }
  };
  const response = doGet(e);
  Logger.log(response.getContent());
}
1. Usando pg_dump (fuera de psql)
Este es el método más común y recomendado para respaldar una base de datos PostgreSQL.

Respaldar una base de datos completa:
pg_dump -U usuario -h localhost -p 5432 -F c -b -v -f "backup_file.backup" nombre_basedatos

-U: Usuario de PostgreSQL.
-h: Host del servidor (usar localhost si es local).
-p: Puerto (por defecto es 5432).
-F c: Formato personalizado (compacto y comprimido, ideal para restauración).
-b: Incluye objetos grandes (BLOBs).
-v: Modo verbose (muestra detalles del proceso).
-f: Ruta del archivo de salida.
nombre_basedatos: Nombre de la base de datos a respaldar.

Respaldar en formato SQL plano (legible):
pg_dump -U usuario -h localhost -p 5432 -f "backup_file.sql" nombre_basedatos
Sin -F c, se genera un archivo SQL plano (puede ser grande).

Respaldar solo el esquema (sin datos):
pg_dump -U usuario -h localhost -p 5432 -s -f "esquema.sql" nombre_basedatos
-s: Solo estructura (schema), sin datos.

Respaldar tablas específicas:
pg_dump -U usuario -h localhost -p 5432 -t tabla1 -t tabla2 -f "tablas.sql" nombre_basedatos
-t: Especifica las tablas a incluir.

2. Desde la consola psql (exportar datos)
Si ya estás dentro de psql, puedes exportar datos con \copy (pero no es un backup completo como pg_dump):

Exportar una tabla a CSV:
\copy (SELECT * FROM tabla) TO 'ruta/archivo.csv' WITH CSV HEADER;

Exportar resultados de una consulta:
\copy (SELECT col1, col2 FROM tabla WHERE condicion) TO 'ruta/resultado.csv' WITH CSV;

3. Restaurar un backup
Para restaurar un backup creado con pg_dump:
Restaurar backup en formato personalizado (-F c):
pg_restore -U usuario -h localhost -p 5432 -d nombre_basedatos -v "backup_file.backup"

Restaurar backup SQL plano:
psql -U usuario -h localhost -p 5432 -d nombre_basedatos -f "backup_file.sql"

Notas importantes:
PostgreSQL debe estar en el PATH para que funcionen los comandos pg_dump y pg_restore.
Si tienes problemas de permisos, usa sudo -u postgres antes del comando (en Linux).
Para respaldar todas las bases de datos de un cluster, usa pg_dumpall.



$usuarios = User::with(['persona', 'persona.genero', 'institutos'])
              ->select('users.*')
              ->take(5) // o ->limit(5)
              ->get();

Si necesitas paginación manual (avanzar de 5 en 5):
Si quieres controlar el "offset" (desplazamiento) manualmente, puedes combinar skip() y take():

$page = request('page', 1); // Página actual, por defecto 1
$perPage = 5; // Registros por página

$usuarios = User::with(['persona', 'persona.genero', 'institutos'])
              ->select('users.*')
              ->skip(($page - 1) * $perPage) // Salta los registros anteriores
              ->take($perPage) // Toma solo 5
              ->get();

Diferencia con paginate():
paginate() es más completo (maneja automáticamente la lógica de paginación y genera enlaces)

take()/limit() con skip() es más manual pero te da control directo
$usuarios = User::with(['persona', 'persona.genero', 'institutos'])
              ->select('users.*')
              ->paginate(5);

Alternativas:
Paginar con parámetro desde request (para que el cliente pueda cambiar el tamaño de página):

$usuarios = User::with(['persona', 'persona.genero', 'institutos'])
              ->select('users.*')
              ->paginate(request('per_page', 5)); // 5 por defecto

Simple paginación (solo next/previous, sin números de página):
$usuarios = User::with(['persona', 'persona.genero', 'institutos'])
              ->select('users.*')
              ->simplePaginate(5);

Cómo usar en la vista:
En tu controlador:
return view('tu_vista', ['usuarios' => $usuarios]);

En tu vista Blade:
@foreach($usuarios as $usuario)
    <!-- Mostrar datos del usuario -->
@endforeach

{{ $usuarios->links() }} <!-- Esto mostrará los enlaces de paginación -->
  
  Diferencia con paginate():
paginate() es más completo (maneja automáticamente la lógica de paginación y genera enlaces)

take()/limit() con skip() es más manual pero te da control directo
1.-si tienes esto: 

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tu título aquí</title>

    <!-- Aquí agregas el token CSRF -->
     <meta name="csrf-token" content="{{ csrf_token() }}"> 

    <!-- Otros estilos y scripts -->
    <link rel="stylesheet" href="...">
</head>

puedes hacer simplemente esto segun esta es la manera estandar y mas sencilla:
$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
}); 

2.- si tienes esto: 

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tu título aquí</title>

    <!-- Aquí agregas el token CSRF -->
     <meta name="csrf-token" content="{{ csrf_token() }}"> 

    <!-- Otros estilos y scripts -->
    <link rel="stylesheet" href="...">
</head>

puedes hacer dos cosas capturar una variable dentro de una script asi:

const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

luego haces esto:
$('#usuarios').DataTable({
  ajax: {
    url: '/usuarios/data',   // URL al método que devuelve JSON
    type: 'POST'  ,
     data: {
      _token: token, // CSRF token
    } //linea relevante es esta

  },
  processing: true,
  serverSide: true,
  columns: [
    { data: 'persona.nombres' },
    { data: 'persona.apellidos' },
    { data: 'persona.email' },
    { data: 'institutos' },
    { data: 'persona.genero.nombre' },
    { data: 'fecha_nacimiento2' },
    { data: 'acciones' }
  ],
  language: {
    url: "/js/es-ES.json",


  },
  pageLength: 3,

});

3.- @push('scripts')
            <script>
                const token = '{{ csrf_token() }}';
  			 </script>

            @stack('scripts')
        @endpush

luego haces esto:
$('#usuarios').DataTable({
  ajax: {
    url: '/usuarios/data',   // URL al método que devuelve JSON
    type: 'POST'  ,
     data: {
      _token: token, // CSRF token
    } //linea relevante es esta

  },
  processing: true,
  serverSide: true,
  columns: [
    { data: 'persona.nombres' },
    { data: 'persona.apellidos' },
    { data: 'persona.email' },
    { data: 'institutos' },
    { data: 'persona.genero.nombre' },
    { data: 'fecha_nacimiento2' },
    { data: 'acciones' }
  ],
  language: {
    url: "/js/es-ES.json",


  },
  pageLength: 3,

});


Transform your organization with the power of decentralized governance! DAOs are revolutionizing traditional corporate structures with transparency, inclusivity, and efficiency. Overcome challenges like scalability and regulatory complexities with expert solutions tailored to your needs. Whether you're building a DAO from scratch or optimizing an existing one, Maticz, the best DAO development company ensure seamless implementation for a future-ready business. Embrace innovation and take the first step toward decentralized success today!

Get Started:
Contact Us: +91 9384587998 | sales@maticz.com

<t t-name="website.chatbot-service">
  <t t-call="website.layout">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"/>
    
    &lt;style&gt;
      
      <!--header {background: linear-gradient(135deg, #4f46e5, #06b6d4); color: white; padding: 3rem 2rem; text-align: center;}-->
      header h1 {font-size: 2.5rem; margin-bottom: 1rem;}
      header p {font-size: 1.1rem;}
      .sec {padding: 3rem 2rem; max-width: 1200px; margin: auto;}
      h2 {color: #111827; margin-bottom: 1rem; font-size: 2rem; text-align: center;}
      .features, .benefits, .pricing, .use-cases, .why-choose {display: grid; gap: 1.5rem; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));}
      .card {background: white; border-radius: 12px; padding: 2rem; box-shadow: 0 5px 20px rgba(0,0,0,0.05); transition: transform 0.3s ease;}
      .card:hover {transform: translateY(-5px);}
      .icon {font-size: 2rem; margin-bottom: 1rem; color: #4f46e5;}
      .pricing .card {border-top: 5px solid #4f46e5;}
      .btn {display: inline-block; padding: 0.8rem 1.5rem; background: #4f46e5; color: white; border-radius: 30px; text-decoration: none; margin-top: 1rem; transition: background 0.3s;}
      .btn:hover {background: #4338ca;}
      footer {background: #1f2937; color: white; text-align: center; padding: 1.5rem;}
    &lt;/style&gt;
    

    <section class="sec">
      <h2>Our Services</h2>
      <div class="features">
        <div class="card"><div class="icon"><i class="fa-solid fa-comments"/></div><h3>Custom Chatbot Widget</h3><p>Fully tailored chatbot for your website with branding and flow customization.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-brain"/></div><h3>AI &amp; Rule-Based Options</h3><p>Choose between static (rule-based) or dynamic (AI-powered) conversation flows.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-cogs"/></div><h3>Odoo Integration</h3><p>Seamless integration to create tickets, check orders, or fetch CRM data.</p></div>
      </div>
    </section>

    <section class="sec">
      <h2>Business Benefits</h2>
      <div class="benefits">
        <div class="card"><div class="icon"><i class="fa-solid fa-clock"/></div><h3>24/7 Response</h3><p>Instant answers for customers anytime, reducing wait times.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-bolt"/></div><h3>Lead Generation</h3><p>Capture emails, phone numbers, and inquiries with ease.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-piggy-bank"/></div><h3>Cost Reduction</h3><p>Minimize support agent workload for repetitive queries.</p></div>
      </div>
    </section>

    <section class="sec">
      <h2>Pricing Plans</h2>
      <div class="pricing">
        <div class="card"><h3>Starter</h3><p>Static chatbot, up to 10 FAQs, website embed</p><h4>₹3,000/month</h4><a href="#" class="btn">Get Started</a></div>
        <div class="card"><h3>Smart</h3><p>AI chatbot (GPT), lead form, email alerts</p><h4>₹8,000/month</h4><a href="#" class="btn">Get Started</a></div>
        <div class="card"><h3>Pro (Odoo)</h3><p>AI chatbot + Odoo integration</p><h4>₹15,000/month + Setup</h4><a href="#" class="btn">Get Started</a></div>
      </div>
    </section>

    <section class="sec">
      <h2>Use Cases</h2>
      <div class="use-cases">
        <div class="card"><div class="icon"><i class="fa-solid fa-cart-shopping"/></div><h3>E-Commerce</h3><p>Track orders, recommend products, and answer FAQs.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-school"/></div><h3>Education</h3><p>Handle course inquiries, fee details, and contact collection.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-briefcase"/></div><h3>Service Businesses</h3><p>Book appointments and handle pricing queries instantly.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-stethoscope"/></div><h3>Healthcare</h3><p>Assist patients with appointment booking, doctor availability, and basic health info.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-plane"/></div><h3>Travel &amp; Hospitality</h3><p>Help customers with bookings, itineraries, and travel recommendations.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-building"/></div><h3>Real Estate</h3><p>Provide property details, arrange viewings, and answer buyer/seller queries.</p></div>
      </div>
    </section>

    <section class="sec">
      <h2>Why Choose Us?</h2>
      <div class="why-choose">
        <div class="card"><div class="icon"><i class="fa-solid fa-award"/></div><h3>Proven Expertise</h3><p>Years of experience in Odoo customization, AI integrations, and chatbot development.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-layer-group"/></div><h3>End-to-End Solutions</h3><p>From design to launch, we handle every step of the chatbot implementation process.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-expand"/></div><h3>Scalable Technology</h3><p>Our solutions grow with your business, ready to handle more users and features anytime.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-hand-holding-heart"/></div><h3>Customer-Centric Approach</h3><p>We focus on delivering value and improving customer satisfaction through fast, accurate support.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-tag"/></div><h3>Competitive Pricing</h3><p>High-quality chatbot solutions at prices designed to fit your budget.</p></div>
      </div>
    </section>

    <footer>
      <p>© 2025 AI Chatbot Solutions – Powered by OpenAI, Groq &amp; Odoo Integration</p>
    </footer>
  </t>
</t>
<t t-name="website.ai-services">
  <t t-call="website.layout">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"/>
    <![CDATA[
    <style>
      body {font-family: 'Poppins', sans-serif; color: #333; background: #f9fafc; line-height: 1.6;}
      header.hero {background: url('https://source.unsplash.com/1600x600/?ai,technology') center/cover no-repeat; color: #fff; padding: 5rem 2rem; text-align: center; position: relative;}
      header.hero::after {content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.4);}
      header.hero h1, header.hero p {position: relative; z-index: 2;}
      section {padding: 3rem 2rem; max-width: 1200px; margin: auto;}
      h2 {text-align: center; margin-bottom: 1rem; color: #111827;}
      .services, .industries, .benefits {display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem;}
      .card {background: white; border-radius: 12px; padding: 2rem; box-shadow: 0 5px 20px rgba(0,0,0,0.05); transition: transform 0.3s ease;}
      .card:hover {transform: translateY(-5px);}
      .icon {font-size: 2rem; color: #4f46e5; margin-bottom: 1rem;}
    </style>
    ]]>

    <header class="hero">
      <h1><i class="fa-solid fa-microchip"></i> AI Solutions for Your Business</h1>
      <p>We provide cutting-edge AI services to automate, optimize, and innovate your business processes.</p>
    </header>

    <section>
      <h2>Our AI Services</h2>
      <div class="services">
        <div class="card"><div class="icon"><i class="fa-solid fa-robot"></i></div><h3>AI Chatbots</h3><p>Custom chatbots powered by GPT for support, sales, and engagement.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-chart-line"></i></div><h3>Predictive Analytics</h3><p>Forecast trends, demand, and risks with AI-driven insights.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-language"></i></div><h3>Natural Language Processing</h3><p>Extract meaning, sentiment, and automate language-based tasks.</p></div>
      </div>
    </section>

    <section>
      <h2>Industries We Serve</h2>
      <div class="industries">
        <div class="card"><div class="icon"><i class="fa-solid fa-heart-pulse"></i></div><h3>Healthcare</h3><p>AI diagnostics, patient support chatbots, and health monitoring.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-store"></i></div><h3>Retail</h3><p>Personalized recommendations, inventory prediction, and customer insights.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-graduation-cap"></i></div><h3>Education</h3><p>Automated grading, virtual tutors, and personalized learning paths.</p></div>
      </div>
    </section>

    <section>
      <h2>Why Choose Our AI Solutions?</h2>
      <div class="benefits">
        <div class="card"><div class="icon"><i class="fa-solid fa-bolt"></i></div><h3>Faster Decision Making</h3><p>Empower your team with real-time AI insights.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-scale-balanced"></i></div><h3>Scalable  Flexible</h3><p>Our AI solutions grow with your business needs.</p></div>
        <div class="card"><div class="icon"><i class="fa-solid fa-hand-holding-dollar"></i></div><h3>Cost-Effective</h3><p>Automate repetitive tasks and reduce operational costs.</p></div>
      </div>
    </section>

    <footer>
      <p>© 2025 AI Solutions – Innovating Your Business with Artificial Intelligence</p>
    </footer>
  </t>
</t>
%%[
var @url_factura, @documento_id 

set @url_factura = Concat(@entornoDescargaFactura,@downloadInvoice,'?id=',@urlDescargaFactura,@eml,@fechaEnvio,@nad,@descargafactura) 
set @documento_id = AttributeValue("CIF_FACTURA")  

set @password = "e2a80fe9-5ad6-4e94-8c35-481ae69b8a7a"  
set @saltVal = "77a43623-feb2-4c41-99d9-54ea77cd424b"  
set @initVectorVal = "2d6ed376-b312-4b1e-9545-5c7c0e71134a"  

set @factura_encriptada=EncryptSymmetric(@url_factura,"AES",@password,@null,@saltVal,@null,@initVectorVal,@null)  
set @documento_encriptado=EncryptSymmetric(@documento_id,"AES",@password,@null,@saltVal,@null,@initVectorVal,@null)  


SET @encFactura = URLEncode(@factura_encriptada, 1, 1)
SET @encDocumento = URLEncode(@documento_encriptado, 1, 1)

SET @LandingURL = Concat("https://cloud.dev.notificaciones.endesaclientes.com/validacion-doc-aviso-ml-es?f=",@encFactura,"&d=",@encDocumento) 

]%%


 <a target="_blank" href="%%=Redirectto(@LandingURL)=%%" title="descargar factura" alias="">DESCARGAR FACTURA</a>
var documentErrorMessage = "El documento identificativo no es válido";
var nifErrorMessage = "NIF no es válido";
var nieErrorMessage = "NIE no es válido";
var cifErrorMessage = "CIF no es válido";
var passaportErrorMessage = "Pasaporte no es válido";

var docNoFound = "Por favor, revisa que los datos introducidos sean correctos.";
var conInvalidDocMx = "Por favor, revisa que los datos introducidos sean correctos.";
var docInvalid = "Por favor, revisa que los datos introducidos sean correctos.";
var docNoRel = "Por favor, revisa que los datos introducidos sean correctos.";
<script runat="server">

  Platform.Load("Core", "1.1.1")
  try {
    var data = Request.GetFormField("data");

    JSON = Platform.Function.ParseJSON(data);

    Documento = JSON.Documento;
    encDocumento = JSON.encDocumento;
    encFactura = JSON.encFactura;  
    today = new Date();
    password = "e2a80fe9-5ad6-4e94-8c35-481ae69b8a7a";
    saltVal = "77a43623-feb2-4c41-99d9-54ea77cd424b";
    initVectorVal = "2d6ed376-b312-4b1e-9545-5c7c0e71134a";
    
    Variable.SetValue("@password", password);
    Variable.SetValue("@saltVal", saltVal);
    Variable.SetValue("@initVectorVal", initVectorVal);
    Variable.SetValue("@encDocumento", encDocumento);
    Variable.SetValue("@encFactura", encFactura);
    
    </script>

%%[

 SET @desEncDocumento = DecryptSymmetric(@encDocumento,"AES",@password,@null,@saltVal,@null,@initVectorVal,@null) 

]%%
   

<script runat="server">

    var desEncDocumento = Variable.GetValue("@desEncDocumento");

    if (Documento == desEncDocumento) {

</script>

%%[

 SET @desEncFactura = DecryptSymmetric(@encFactura,"AES",@password,@null,@saltVal,@null,@initVectorVal,@null) 

]%%
   

<script runat="server">        
      
     var desEncFactura = Variable.GetValue("@desEncFactura"); 
     Write(desEncFactura) 
      
  }

  }

  catch (error) {
    Write('false')    
  }
</script>
/*Refrescador de pagina por seguridad*/
setTimeout(securityReload, 3600000);
      function securityReload() {
        location.reload();
}

/*Muestra los mensajes de error del formulario*/
function showError(inputError, subError) {
    stopSending();
    switch (inputError) {
        case 2:
            document.getElementById('documentGroup').classList.add("endesa-form__group--invalid");
            switch (subError) {
                case 1:
                    document.getElementById('documentError').innerHTML = nifErrorMessage;
                    break;
                case 2:
                    document.getElementById('documentError').innerHTML = nieErrorMessage;
                    break;
                case 3:
                    document.getElementById('documentError').innerHTML = cifErrorMessage;
                    break;
                case 4:
                    document.getElementById('documentError').innerHTML = passaportErrorMessage;
                    break;
                default:
                    document.getElementById('documentError').innerHTML = documentErrorMessage;
            }
            break;
        default:
            document.getElementById('documentGroup').classList.add("endesa-form__group--invalid");
            document.getElementById('documentError').innerHTML = documentErrorMessage;
    }
}

/*Oculta Mensajes de Error del formulario*/
function hiddenErrors(inputError) {
    switch (inputError) {
        case 2:
            document.getElementById('documentGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentError').innerHTML = "";
            document.getElementById('documentSupraGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentSupraError').innerHTML = "";
            break;
      
        default:

            document.getElementById('documentGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentError').innerHTML = "";

            document.getElementById('documentSupraGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentSupraError').innerHTML = "";
    }
};

function changeDocument() {
    validDocument();
    validFormat();
}
                                                  
/*
 * Document validation
 */
function validDocument() {
    var select = document.getElementById("documentType");
    var opc = select.options[select.selectedIndex].value;
    var userDocument = document.getElementById('document').value;
    userDocument = userDocument.replace('-','');
    userDocument = userDocument.replace('-','');
    document.getElementById("documentHidden").value = userDocument;
                      
    switch (opc) {
        case "nif":
            if (!validateDNI(userDocument)) {
                showError(2, 1);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        case "nie":
            if (!validateNIE(userDocument)) {
                showError(2, 2);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        case "cif":
            if (!validateCIF(userDocument)) {
                showError(2, 3);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        case "pasaporte":
            if (!validatePASSAPORT(userDocument)) {
                showError(2, 4);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        default:
            showError(2);
            lockButton();
            return false
    };
};

function validateDNI(dni) {
    if (dni.length == 9) {
        var letras = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z',
            'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E', 'T'
        ];
        var numero = dni.substring(0, 8);
        var letra = dni.substring(8, 9);
        letra = letra.toUpperCase();
        if (numero < 0 || numero > 99999999) {
            return false;
        } else {
            var letraCalculada = letras[numero % 23];
            if (letraCalculada != letra) {
                return false;
            } else {
                return true;
            }
        }
    } else {
        return false;
    }
};

function validateNIE(nie) {
    nie = nie.toUpperCase();
    // Basic format test
    if (!nie.match(
            '((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)')) {
        return false;
    }
    // Test NIE
    //T
    if (/^[T]{1}/.test(nie)) {
        return (nie[8] === /^[T]{1}[A-Z0-9]{8}$/.test(nie));
    }
    //XYZ
    if (/^[XYZ]{1}/.test(nie)) {
        return (
            nie[8] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt(
                nie.replace('X', '0')
                .replace('Y', '1')
                .replace('Z', '2')
                .substring(0, 8) % 23));
    }
    return false;
}

function validateCIF(cif) {
    
    var sum, num = [],
        value, controlDigit, validar, result;
    var valueCif = cif.substr(1, cif.length - 2);
    var suma = 0;
    value = cif.toUpperCase();
   
    for (var i = 1; i < valueCif.length; i = i + 2) {
        suma = suma + parseInt(valueCif.substr(i, 1));
    }
    for (var i = 0; i < 9; i++) {
        num[i] = parseInt(cif.charAt(i), 10);
    }
    var suma2 = 0;
   
    for (var i = 0; i < valueCif.length; i = i + 2) {
        result = parseInt(valueCif.substr(i, 1)) * 2;
        if (String(result).length == 1) {
         
            suma2 = suma2 + parseInt(result);
        } else {
          
            suma2 = suma2 + parseInt(String(result).substr(0, 1)) + parseInt(String(result)
                .substr(1, 1));
        }
    }
   
    suma = suma + suma2;
    var unidad = String(suma).substr(1, 1);
    unidad = 10 - parseInt(unidad);
    var primerCaracter = cif.substr(0, 1).toUpperCase();
    if (primerCaracter.match(/^[FJKNPQRSUVW]$/)) {
        suma += '';
        controlDigit = 10 - parseInt(suma.charAt(suma.length - 1), 10);
        value += controlDigit;
        validar = num[8].toString() === String.fromCharCode(64 + controlDigit) || num[8]
            .toString() === value.charAt(value.length - 1);
        if (validar == true) return true;
        if (String.fromCharCode(64 + unidad).toUpperCase() == cif.substr(cif.length - 1, 1)
            .toUpperCase()) return true;
    }
    if (primerCaracter.match(/^[ABCDEFGHLM]$/)) {
        // Se revisa que el ultimo valor coincida con el calculo 
        if (unidad == 10) unidad = 0;
        suma += '';
        controlDigit = 10 - parseInt(suma.charAt(suma.length - 1), 10);
        value += controlDigit;
        validar = num[8].toString() === String.fromCharCode(64 + controlDigit) || num[8]
            .toString() === value.charAt(value.length - 1);
        if (validar == true) return true;
        if (String.fromCharCode(64 + unidad).toUpperCase() == cif.substr(cif.length - 1, 1)
            .toUpperCase()) return true;
    }
    return false;
};

function validatePASSAPORT(passport) {
    "use strict";
    return passport.length > 6 && passport.length < 18;
}
                                                       
                                                       
function unlockButton() {
    var btnSubmit = document.getElementById('btnSubmit');
    btnSubmit.removeAttribute("disabled");
    btnSubmit.classList.remove("endesa-form__btn--disable");
}

function lockButton() {
    var btnSubmit = document.getElementById('btnSubmit');
    btnSubmit.setAttribute("disabled", true);
    btnSubmit.classList.add("endesa-form__btn--disable");
}
                                                       
                                                       
function validFormat() {
    if (validDocument()) {
        unlockButton();
        console.log("Formulario Valido");
        return true;
    } else {
        lockButton();
        console.log("Error en el formulario");
        return false;
    }
} 
                                                       
 /*Detecta si se han cambiado un check*/
function changeInput(input) {
    /*Recupera todos los inputs*/
    var documentInput = document.getElementById('document');

        if (documentInput.value) {
            validFormat();
        } else {
            switch (input) {
                case 2:
                    validDocument();
                    console.log("Con Documento");
                    break;             
                default:
                    lockButton();
                    console.log("Sin datos");
            }
        }
    
}



function stopSending() {
        var form = document.getElementById('SCForm');
        unlockButton();
        form.classList.add("no-spinner");
        form.classList.remove("endesa-form--sending");
}
 
function ajaxPass() { 

 var ajaxResponse;
    var ajax = new XMLHttpRequest();


       ajax.onreadystatechange = function () {

            if (this.readyState == 4 && this.status == 200) {
                    
                   stopSending()                                    
                                                        
                   ajaxResponse = this.responseText;
             
                    ajaxResponse = String(ajaxResponse)
              
   
              
if (ajaxResponse.indexOf('https') >= 0) {

  window.location.href = ajaxResponse
} else if (idioma == 'ES') { 
  document.getElementById('error-container').innerHTML = `
    <div class="error-banner">
      <p class="error-text">
        El documento introducido no corresponde con el titular del contrato
      </p>
    </div>
  `;                   
 } else if (idioma == 'EN') { 
  document.getElementById('error-container').innerHTML = `
    <div class="error-banner">
      <p class="error-text">
        The document submitted does not correspond to the contract holder
      </p>
    </div>
  `;                   
 } else if (idioma == 'CA') { 
  document.getElementById('error-container').innerHTML = `
    <div class="error-banner">
      <p class="error-text">
        El document introduït no correspon amb el titular del contracte
      </p>
    </div>
  `;                   
 }
          
              
                         }
               }
 
var paramsFormsToSent =  {     'Documento': document.getElementById('document').value,
                               'encDocumento': encDocumento,
                               'encFactura': encFactura                               
                             }       
          
     console.log(paramsFormsToSent);                                          
               
     var ajaxUrl = "https://cloud.dev.notificaciones.endesaclientes.com/ajax-validacion-doc-aviso"
     
                     
     ajax.open("POST", ajaxUrl, "true");
     ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     ajax.send("data=" + encodeURIComponent(JSON.stringify(paramsFormsToSent)));;
 
 }


function visualSending() {
        if (validFormat()) {
            if (validFormat()) {
             lockButton();
             document.getElementById('SCForm').classList.add("endesa-form--sending");
             document.getElementById('SCForm').classList.remove("no-spinner");      
             ajaxPass();        


        } else {
            stopSending();
        }
    }   
} 
    * {
      box-sizing: border-box;
    }
    body {
      margin: 0;
      font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
      background-color: #ffffff;
      color: #000;
    }
    .header {
      background-color: #0066FF;
      padding: 20px;
    }
    .header img {
      height: 30px;
    }
    .container {
      padding: 40px 20px;
      max-width: 800px;
      margin: auto;
      text-align: center;
    }
    .container .title {
      font-size: 28px;
      margin-bottom: 10px;
    }
    .container > p {
      font-size: 16px;
      color: #333;
      margin-bottom: 30px;
    }
    .bold {
      font-weight: bold;
    }
   
    .error-banner {
      border-radius: 10px;
      background-color: #F6D5DD;
      display: inline-block;
}

    .error-text {
      margin: 0;
      font-weight: normal;
      font-style: normal;
      font-size: 16px;
      line-height: 1.5;
      letter-spacing: -0.2px;
      font-family: inherit;
      text-decoration: none;
      color: #000000;
      padding: 15px 40px;
      
}

.text-bold {
      font-weight: bold;
      font-size: 20px
}

.text-light {
      font-weight: 200;
      font-size: 16px
}

.image-error {
padding: 20px 0
}

    .endesa-form {
      display: inline-block;
      position: relative;
      margin: 0;
      padding: 30px;
      background: #ffffff;
      width: 100%;
      margin-bottom: 65px;
      max-width: 512px;
}

.endesa-form__group {
  display: block;
  width: 100%;
  position: relative;
  text-align: left;
  margin-bottom: 25px;
}

.endesa-form__group--invalid input {
  border: 2px solid #d42c54;
    border-radius: 0;
    box-shadow: none;
    outline: none;
}

.endesa-form__group--invalid span {
  width: 100%;
    position: relative;
    display: block;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: normal;
    font-size: 14px;
    color: #d42c54;
    font-style: normal;
    font-stretch: normal;
    line-height: 1.29;
    letter-spacing: -0.2px;
    text-align: left;
}

      .endesa-form__group--col-2-lf {
  display: inline-block;
  width: calc(50% - 2.5px);
  margin: 0;
  position: relative;
  left: 0;
  padding-right: 10px;
  text-align: left;
  vertical-align: top;
}

.endesa-form__group--col-2-rg {
  display: inline-block;
  width: calc(50% - 2.5px);
  margin: 0;
  position: relative;
  left: 0;
  text-align: left;
  padding-left: 10px;
  vertical-align: top;
}


.endesa-form__label--visible {
  display: block;
    border: none;
    font-weight: normal;
    font-style: normal;
    font-size: 16px;
    line-height: 1.5;
    letter-spacing: -0.2px;
    font-family: inherit;
    text-decoration: none;
    box-sizing: border-box;
    padding-right: 10px;
    color: #000000;
    margin-bottom: 5px;
}

.endesa-form__select {
  position: relative;
    display: block;
    width: 100%;
    height: 44px;
    font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
    font-size: 16px;
    font-weight: normal;
    font-style: normal;
    font-stretch: normal;
    line-height: 1.33;
    letter-spacing: normal;
    color: #757575;
    border-radius: 0px;
    border: none;
    border: 2px solid #dddddd;
    box-shadow: none;
    margin-bottom: 23px;
    padding: 9px 14px;
    padding-right: 35px;
    margin: 0;
    background: url(https://image.digital.endesaclientes.com/lib/fe341570756405757c1478/m/1/e7e44424-f980-4bdd-a536-3cbbfec0ab0f.png) 95% center no-repeat, linear-gradient(#ffffff, #ffffff);
    background-size: 10px 5px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    outline: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
}

select::-ms-expand {
  display: none;
}

.endesa-form__input {
  position: relative;
    display: block;
    width: 100%;
    height: 44px;
    font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
    font-size: 16px;
    font-weight: normal;
    font-style: normal;
    font-stretch: normal;
    line-height: 1.33;
    letter-spacing: normal;
    color: #000000;
    background: #ffffff;
    border-radius: 0;
    border: 2px solid #dddddd;
    box-shadow: none;
    padding: 1rem;
    margin-bottom: 5px;
}

.submit-wrapper {
  max-width: 800px;
  margin: 0 auto;
  text-align: right;
}

.endesa-form__btn {
  position: relative;
  display: inline-block;
  width: auto;
  height: 46px;
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
  font-size: 15px;
  color: #ffffff;
  letter-spacing: 1px;
  text-align: left;
  border-radius: 0;
  border: none;
  background: #d3135a;
  text-align: center;
  height: auto;
  min-height: 46px;
  overflow: hidden;
  cursor: pointer;
  text-transform: uppercase;
  margin: 23px 0;
}

.endesa-form--sending .endesa-form__btn {
  display: inline-block;
}

.endesa-form--sending .endesa-form__btn-text {
  padding-right: 10px;
}

.endesa-form--sending .endesa-form__btn:after {
content: "";
  display: inline-block;
  position: relative;
  width: 20px;
  height: 20px;
  margin-left: 8px;
  border: 3px solid #ffffff;
  border-radius: 50%;
  border-top-color: transparent;
  animation-name: spin;
  animation-duration: 1s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  vertical-align: middle;
}

.endesa-form__btn {
  position: relative;
  padding: 0 30px;
}

@keyframes spin {
  0% {
      transform: rotate(0deg);
  }

  100% {
      transform: rotate(360deg);
  }
}

.endesa-form__btn--disable {
  background: #FFE5EE;
  cursor: not-allowed;
}

.endesa-form--sending {
  display: block;
}

.endesa-form--sending:after {
  content: "";
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #ffffff;
  opacity: 0.5;
}
    
    .footer {
      background-color: #000;
      color: #fff;
      padding: 40px 20px;
      font-size: 14px;
    }

.footer-content {
  max-width: 1000px;
  margin: 0 auto;
  padding: 0 40px; /* controla márgenes laterales */
}


.footer-title {
  font-size: 16px;
  font-weight: bold;
  margin: auto;
  margin-bottom: 20px;
}

.footer-divider {
  width: 100%;
  height: 1px;
  background-color: white;
  margin: 20px 0;
}
    .footer-columns {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start; 
  gap: 40px;
  max-width: 1000px;
  margin: auto;
}
    .footer-column {
      min-width: 200px;
      margin-bottom: 20px;
    }
    .footer-column h4 {
      font-size: 16px;
      margin-bottom: 10px;
    }
    .footer-column ul {
      list-style: none;
      padding: 0;
    }
    .footer-column ul li {
      margin-bottom: 6px;
    }
    .footer-links {
      text-align: center;
      margin-top: 20px;
    }
    .footer-links a {
      color: #00AEEF;
      text-decoration: none;
      margin: 0 10px;
    }
.footer-links .separator {
  color: #999;
}
%%[

    SET @encFactura = RequestParameter("f")
    
    SET @encDocumento =  RequestParameter("d")
    
    SET @idioma = 'ES'
    

]%%

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Endesa Energía</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="https://cloud.dev.notificaciones.endesaclientes.com/css-fuente-validacion-doc-aviso"/>
    <link rel="stylesheet" type="text/css" href="https://cloud.dev.notificaciones.endesaclientes.com/css-validacion-doc-aviso-ml"/>
</head>
<body> 
  
  <div class="header">
    <a href="https://www.endesa.com" title="https://www.endesa.com" target="_blank"><span class="endesa-logo__accesible"><img src="https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/5b5b4049-ad5c-4e19-a09f-4ed2545327e9.png" alt="Endesa logo"></span>
        </a>
  </div>

  <div class="container">
    <p class="title">Descargar factura</p>
    <p>Para garantizar la seguridad de tus datos, necesitamos que nos indiques el DNI/NIE/CIF/Pasaporte del <span class="bold">titular del contrato</span> de la factura a consultar:</p>
    
    <div id="error-container">
    </div>

    <form action="" method="POST" align="left" id="SCForm" class="endesa-form" novalidate="novalidate">
     <div class="endesa-form__group endesa-form__group--col-2" id="documentSupraGroup">
              <span id="documentSupraError"></span>
              <div class="endesa-form__group--col-2-lf">
                <label class="endesa-form__label endesa-form__label--visible" for="documentType">Tipo de documento
                  </label>
                <select class="endesa-form__select" id="documentType" name="documentType" onchange="changeDocument()">
                  <option value="nif" selected="selected">
                    NIF
                    del
                    titular
                  </option>
                  <option value="nie">
                    NIE
                    del
                    titular
                  </option>
                  <option value="cif">
                    CIF
                    del
                    titular
                  </option>
                  <option value="pasaporte">
                    Pasaporte
                    del
                    titular
                  </option>
                </select>
              </div>
              <div class="endesa-form__group--col-2-rg" id="documentGroup">      
                <label class="endesa-form__label endesa-form__label--visible" for="document">Número de documento
                  </label>
                <input class="endesa-form__input" name="document" id="document" value="%%=v(@documento)=%%" placeholder="Documento" type="text" onchange="changeInput(2)" required>
                <span id="documentError"></span>
              </div>
            </div>
      <input type="hidden" name="documentHidden" id="documentHidden" data-field-type="Text">
      <div id="buttonContainer" class="submit-wrapper">
              <button type="button" class="endesa-form__btn endesa-form__btn--disable" id="btnSubmit" onclick="visualSending()"><span class="endesa-form__btn-text" disabled>ACEPTAR</span></button>
            </div>
    </form>
  </div>

  <div class="footer">
    <div class="footer-content">
    <div class="footer-title">Tu energía</div>
    <div class="footer-divider"></div>
    <div class="footer-columns">
      <div class="footer-column">
        <h4>Luz y Gas</h4>
        <ul>
          <li>Encuentra tu oferta</li>
          <li>Productos de Luz</li>
          <li>Productos de Gas</li>
          <li>Productos de Luz + Gas</li>
          <li>Ofertas Endesa</li>
          <li>Consejos de ahorro</li>
          <li>Autoconsumo</li>
        </ul>
      </div>
      <div class="footer-column">
        <h4>Otros productos</h4>
        <ul>
          <li>Ventajas para clientes endesa</li>
          <li>Mantenimiento</li>
          <li>Calefacción</li>
          <li>Aire acondicionado</li>
          <li>Diagnóstico energético</li>
          <li>infoEnergía</li>
          <li>Promociones y Ganadores</li>
          <li>Pólizas de seguros</li>
        </ul>
      </div>
    </div>
    <div class="footer-links">
  <a href="#">Aviso legal</a>
  <span class="separator">|</span>
  <a href="#">Política de Cookies</a>
  <span class="separator">|</span>
  <a href="#">Política de Protección de Datos</a>
  <span class="separator">|</span>
  <a href="#">Accesibilidad</a>
  <span class="separator">|</span>
  <a href="#">Contacto</a>
</div>

  </div>
  </div>

  <script>
  var encDocumento = "%%=v(@encDocumento)=%%";
  var encFactura = "%%=v(@encFactura)=%%";
  var idioma = "%%=v(@idioma)=%%";
</script>
<script id="js-script" src="https://cloud.dev.notificaciones.endesaclientes.com/javascript-validacion-doc-aviso"></script>
<script id="js-errores" src="https://cloud.dev.notificaciones.endesaclientes.com/javascript-validacion-doc-aviso-errores-es"></script>

</body>
</html>
.color-blue {
   color: blue;
}
.endesa-bold-text {
 font-weight: bold;
}
.endesa-padding-activation-text {
 padding-left: 25%;
}
.endesa-activation-table {
  margin-left: 3rem;
    margin-right: 3rem;
    border: 2px solid #1C78E2;
}
.endesa-activation-table th {
    width: 145px;
    background: #1C78E2;
    padding: 10px;
    color: white;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1rem;
    line-height: 20px;
}
.endesa-activation-table td {
  width: 145px;
    padding: 10px;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1rem;
    line-height: 20px;
}
.endesa-activation-table td:first-child {
  border: 2px solid #1C78E2;
}
.table-check {
 color: #00883d;
 padding-right: 5px;
}
.endesa-checkbox {
 width: 17px;
 height: 17px;
 border: 1px solid #000;
 margin-left: 3rem;
 margin-right: 10px;
}
.endesa-checkbox-label-text {
 font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1.125rem;
    line-height: 23px;
    padding: 10px 0 10px 0;
}
.endesa-activate-button {
    width: 55%;
    float: right;
    margin-right: 3rem;
    height: 46px;
    font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
    font-size: 15px;
    color: #ffffff;
    letter-spacing: 1px;
    border-radius: 0;
    border: none;
    background: #d42c54;
    padding: 10px 20px;
    overflow: hidden;
    cursor: pointer;
    text-transform: uppercase;
    margin-top: 25px;
}
.endesa-condition-checkbox-block {
    position: relative;
    display: block;
    margin-left: 11rem;
    margin-top: 1rem;
}
.endesa-condition-checkbox {
    border: 2px solid black;
    width: 17px;
    height: 17px;
    margin-right: 10px;
}
.endesa-submit-button {
    position: relative;
    display: block;
    float: right;
    margin-right: 12rem;
    padding: 0.6875rem 1.875rem;
    width: 60%;
    height: auto;
    font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
    font-size: 0.9375rem;
    color: #fff;
    letter-spacing: 1px;
    border-radius: 0;
    border: none;
    background: #d42c54;
    text-align: center;
    min-height: 2.875rem;
    overflow: hidden;
    text-transform: uppercase;
    margin-top: 25px;
}


///////////////////////////////////////////////////////////////////////
td.responsive-td{
  display: block !important;
  width: 100% !important;
}

.endesa-header {
  display: block;
  width: 100%;
  min-height:90vh;
  position: relative;
  background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
  background-repeat: no-repeat;
  background-position: top center;
  background-size: cover;
}

.endesa-logo {
  position: relative;
  display: block;
  margin: 54px 0;
}

.endesa-logo--footer {
  position: relative;
  display: inline-block;
  text-align: right;
  width: 100%;
  margin: 0;
}

.endesa-logo__link {
  display: block;
  position: relative;
  background-image: url(https://image.digital.endesaclientes.com/lib/fe3a15707564057b741078/m/1/c32833db-1fe9-457e-abc7-3311181d42fc.png);
  width: 100px;
  height: 26px;
  background-repeat: no-repeat;
  background-size: 100% auto;
}

.endesa-logo__link--footer {
  display: inline-block;
}

.endesa-logo__accesible {
  position: absolute !important;
  width: 0px;
  height: 0px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  clip-path: inset(50%);
  border: 0;
  box-sizing: border-box;
}

.stylingblock-table-wrapper {
  min-width: 100%;
}

#fcMenu {
  display: none;
}

/* IDIOMAS */
.endesa-header-language {
    position: relative;
    display: block;
    text-align: right;
 margin: 54px 0;
}

.endesa-header-language__menu {
    position: relative;
    display: inline-block;
}

.endesa-header-language__active {
    position: relative;
    display: block;
    text-transform: uppercase;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-size: 18px;
    font-size: 1.125rem;
    font-weight: normal;
    color: black;
}

.endesa-header-language__active:after {
    content: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/6caa03fd-6376-4566-b160-faf007d85d0a.png);
    width: 10px;
    width: 0.625rem;
    height: 10px;
    height: 0.625rem;
    margin-left: 15px;
    margin-left: 0.9375rem;
}

.endesa-header-language__active:hover,
.endesa-header-language__active:active,
.endesa-header-language__active:visited,
.endesa-header-language__active:focus {
    text-decoration: none;
    color: black;
}

.endesa-header-language__active--black {
    color: black !important;
}

.endesa-header-language__active--black:after {
    content: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/6caa03fd-6376-4566-b160-faf007d85d0a.png);
    width: 10px;
    width: 0.625rem;
    height: 10px;
    height: 0.625rem;
    margin-left: 15px;
    margin-left: 0.9375rem;
}

.endesa-header-language__active--black:hover,
.endesa-header-language__active--black:active,
.endesa-header-language__active--black:visited,
.endesa-header-language__active--black:focus {
    text-decoration: none;
    color: black !important;
}


.endesa-header-language__active--black2 {
    color: black !important;
}

.endesa-header-language__active--black2:after {
    content: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/6caa03fd-6376-4566-b160-faf007d85d0a.png);
    width: 10px;
    width: 0.625rem;
    height: 10px;
    height: 0.625rem;
    margin-left: 15px;
    margin-left: 0.9375rem;
}

.endesa-header-language__active--black2:hover,
.endesa-header-language__active--black2:active,
.endesa-header-language__active--black2:visited,
.endesa-header-language__active--black2:focus {
    text-decoration: none;
    color: black !important;
}

.endesa-header-language__link {
    display: block;
    padding: 3px 30px 3px 20px;
    white-space: nowrap;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 400;
    font-size: 14px;
    font-size: 0.875rem;
    color: #262626;
    text-decoration: none;
    text-align: right;
}

.endesa-header-language__link:active,
.endesa-header-language__link:visited,
.endesa-header-language__link:focus {
    text-decoration: none;
    color: #000000;
    background: #ffffff;
}

.endesa-header-language__link:hover {
    text-decoration: none;
    color: #000000;
    background: #00000011;
    transition-delay: 0.1s;

}

.endesa-header-language__list {
    display: none;
    position: absolute !important;
    top: 25px;
    top: 1.5625rem;
    right: 0;
    padding: 5px 0;
    padding: 0.3125rem 0;
    z-index: 100;
    color: #000000;
    background: #ffffff;
    text-transform: uppercase;
}

.endesa-header-language__item {
    position: relative;
    display: block;
}

.endesa-link--clientes{ color: #d42c54; font-weight: bold;}

.endesa-title {
  position: absolute;
  bottom: 25%;
  width: 100%;
  max-width: 570px;
  margin-bottom: 50px;
  right: 25px;
}

.endesa-title__container {
  position: relative;
  display: block;
  padding-right: 40px;
}

.endesa-title__title {
  color: #ffffff;
  font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
  font-size: 40px;
  line-height: normal;
  text-align: right;
  text-transform: uppercase;
}

.endesa-title__text{
  color: #ffffff;
  font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
  font-size: 30px;
  line-height: normal;
  text-align: right;
  margin-bottom: 37px;
  margin-top: 20px;
}

.endesa-title__text--bold {
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
}

.endesa-title__title--bold {
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
}

.endesa-title__title--mobile{
  display: none;
}

.endesa-title__title--desktop{
  display: inline-block;
}

#btnSubmit:disabled {
  cursor: default;
}

.endesa-cursor {
    padding-bottom: 2.5rem;
    padding-right: 40px;
}

.endesa-cursor__content {
  text-shadow: none;
  position: relative;
  padding-left: 64px;
}

.endesa-cursor__content:before {
  content: "";
  position: absolute;
  display: inline-block;
  vertical-align: top;
  top: 11px;
  top: -0.3125rem;
  left: 0;
  width: 34px;
  width: 2.125rem;
  height: 114px;
  height: 7.125rem;
  background: #ffffff;
}

.endesa-cursor__text {
    display: inline;
    color: #ffffff;
    font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
    font-size: 2rem;
    line-height: normal;
    max-width: 20rem;
}

.endesa-bold-text {
    font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
}


.endesa-promo-info {
  display: block;
  position: relative;
  max-width: 600px;
  padding-right: 25px;
  padding-bottom: 1rem;
}

.endesa-promo-info__text-container {
  display: block;
  position: relative;
}

.endesa-promo-info__list-container {
  display: block;
  position: relative;
}

.endesa-promo-info__list-title {
  color: #000000;
  font-size: 18px;
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
  padding: 0 45px 10px;
}

.endesa-promo-info__list {
  color: #000000;
  font-size: 16px;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
}

.endesa-promo-info__list-item {
  padding-bottom: 25px;
  font-family: 'RoobertENEL Bold', Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 20px;
  color: white;
}

.endesa-promo-info__list-item:before {
  font-family: 'check-icon';
  font-weight: normal;
  font-style: normal;
  font-size: 16px;
  color: #d42c54;
  content: "\e800";
  position: relative;
  display: inline-block;
  padding: 6px;
  height: 30px;
  width: 30px;
  text-align: center;
  vertical-align: middle;
  border-radius: 50%;
  line-height: 1.2;
  margin: 0;
}

.endesa-promo-info__list-text {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 300;
  font-size: 16px;
  line-height: 23px;
  color: white;
  padding: 0 0 0 37px;
}

.endesa-info-text {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 300;
  font-size: 16px;
  line-height: 23px;
  color: white;
  padding: 0 0 1.8rem 0;
}


.endesa-info-campaign{
  position: relative;
  display: block;
  background: #0244c8;
  padding: 20px 0px;
}
.endesa-info-campaign__text{
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 32px;
  color: white;
}

.endesa-info-campaign__text--bold{
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
}

.endesa-form-container {
  display: block;
  position: relative;
  width: 100%;
  text-align: right;
}
.endesa-form {
  display: inline-block;
  position: relative;
  margin: 0;
  padding: 30px;
  background: #ffffff;
  width: 100%;
  margin-bottom: 65px;
  max-width: 512px;
}


.endesa-form--sending {
  display: block;
}

.endesa-form--sending:after {
  content: "";
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #ffffff;
  opacity: 0.5;
}

.endesa-form--blocked {
  display: block;
}

.endesa-form--blocked:after {
  content: "";
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #ffffff;
  opacity: 0.5;
}

.endesa-form__fieldset {
  position: relative;
  display: block;
}

input:disabled {
    Border: 2px solid #A3A3A3;
    background-color: #E9E9E9;
    color: #404040;
}

.endesa-form__legend {
  display: block;
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
  font-size: 24px;
  line-height: 1.64;
  color: #000000;
  text-align: center;
  padding: 20px 0;
}

.endesa-form__group {
  display: block;
  width: 100%;
  position: relative;
  text-align: left;
  margin-bottom: 25px;
}

.endesa-form__group--col-2-lf {
  display: inline-block;
  width: calc(50% - 2.5px);
  margin: 0;
  position: relative;
  left: 0;
  padding-right: 10px;
  text-align: left;
  vertical-align: top;
}


.endesa-form__group--col-2-rg {
  display: inline-block;
  width: calc(50% - 2.5px);
  margin: 0;
  position: relative;
  left: 0;
  text-align: left;
  padding-left: 10px;
  vertical-align: top;
}

.endesa-form__group--invalid input {
  border: 2px solid #d42c54;
    border-radius: 0;
    box-shadow: none;
    outline: none;
}

.endesa-form__group--invalid span {
  width: 100%;
    position: relative;
    display: block;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: normal;
    font-size: 14px;
    color: #d42c54;
    font-style: normal;
    font-stretch: normal;
    line-height: 1.29;
    letter-spacing: -0.2px;
    text-align: left;
}

/*
.endesa-form__label {
  display: none;
}
*/

.endesa-form__label--visible {
  display: block;
    border: none;
    font-weight: normal;
    font-style: normal;
    font-size: 16px;
    line-height: 1.5;
    letter-spacing: -0.2px;
    font-family: inherit;
    text-decoration: none;
    box-sizing: border-box;
    padding-right: 10px;
    color: #000000;
    margin-bottom: 5px;
}

.endesa-form__input {
  position: relative;
    display: block;
    width: 100%;
    height: 44px;
    font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
    font-size: 16px;
    font-weight: normal;
    font-style: normal;
    font-stretch: normal;
    line-height: 1.33;
    letter-spacing: normal;
    color: #000000;
    background: #ffffff;
    border-radius: 0;
    border: 2px solid #dddddd;
    box-shadow: none;
    padding: 1rem;
    margin-bottom: 5px;
}

.endesa-form__select {
  position: relative;
    display: block;
    width: 100%;
    height: 44px;
    font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
    font-size: 16px;
    font-weight: normal;
    font-style: normal;
    font-stretch: normal;
    line-height: 1.33;
    letter-spacing: normal;
    color: #757575;
    border-radius: 0px;
    border: none;
    border: 2px solid #dddddd;
    box-shadow: none;
    margin-bottom: 23px;
    padding: 9px 14px;
    padding-right: 35px;
    margin: 0;
    background: url(https://image.digital.endesaclientes.com/lib/fe341570756405757c1478/m/1/e7e44424-f980-4bdd-a536-3cbbfec0ab0f.png) 95% center no-repeat, linear-gradient(#ffffff, #ffffff);
    background-size: 10px 5px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    outline: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
}

select::-ms-expand {
  display: none;
}

.endesa-form__btn-check {
  position: relative;
  display: block;
  width: 100%;
  font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
  font-size: 14px;
  color: #757575;
  border-radius: 0;
  border: none;
  border: 1px solid #757575;
  box-shadow: none;
  padding: 6px 14px;
  text-align: left;
  padding-right: 40px;
}

.endesa-form__btn-check:after {
  font-family: "Font Awesome 5 Free";
  content: "\f107";
  display: inline-block;
  padding-right: 3px;
  vertical-align: middle;
  font-weight: 900;
  position: absolute;
  right: 15px;
  top: 7px;
  color: #ffffff;
}

.endesa-form__check {
  position: relative;
  display: block;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 14px;
  line-height: 20px;
  color: #757575;
  font-size: 12px;
  line-height: 16px;
  text-align: left;
}

.endesa-form__check input {
  webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  position: absolute;
  display: inline-block;
  margin: 0;
  padding: 0;
  width: 0;
  height: 0;
  font-size: 0;
  line-height: 0;
  border: 0;
}

.endesa-form__check-text {
  position: relative;
  display: inline-block;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 13px;
  color: #757575;
  text-decoration: none;
  margin-bottom: 6px;
}

.endesa-form__check-text--big {
  font-size: 18px;
  padding-top: 5px;
  margin-bottom: 12px;

}

.endesa-form__check-text--link {
  color: #d42c54;
  text-decoration: underline;
}

.endesa-form__check input+label {
  position: relative;
    display: inline-block;
    padding-left: 25px;
    min-height: 18px;
    color: #000;
}

.endesa-form__check--big {
  margin-bottom: 25px;
  line-height: 1.45;
}

.endesa-form__check--big input+label {
  padding-left: 48px;
}

.endesa-form__check input+label:before {
  content: "";
    position: absolute;
    display: inline-block;
    vertical-align: top;
    top: 0;
    left: 0;
    font-size: 8px;
    line-height: 0.95rem;
    text-align: center;
    font-weight: bold;
    border: 2px solid #cecece;
    overflow: hidden;
    width: 16px;
    height: 16px;
    font-family: 'check-icon';
    background: #ffffff;
}

.endesa-form__check--big input+label:before {
  width: 28px;
  height: 28px;
  line-height: 1.8;
  font-size: 14px;
}

.endesa-form__check input:checked+label:before {
  content: "\e800";
  color: #000;
}

.endesa-form__check-link {
  position: relative;
  display: inline-block;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 13px;
  font-size: 0.8125rem;
  color: #d42c54;
  text-decoration: underline;
  padding-right: 1px;
}

.endesa-form__link {
  position: relative;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 400;
    font-size: 14px;
    color: #d42c54;
    text-decoration: none;
    text-align: left;
}

.endesa-form__link:hover {
  text-decoration: none;
    color: #b32446;
}


.endesa-form__text {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 14px;
  line-height: normal;
  color: #757575;
  margin-bottom: 10px;
}

.endesa-form__text--strong {
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
  font-size: 24px;
}



.endesa-form__btn {
  position: relative;
  display: block;
  width: 100%;
  height: 46px;
  height: 2.875rem;
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
  font-size: 15px;
  font-size: 0.9375rem;
  color: #ffffff;
  letter-spacing: 1px;
  text-align: left;
  border-radius: 0;
  border: none;
  background: #d42c54;
  padding: 11px 30px;
  padding: 0.6875rem 1.875rem;
  text-align: center;
  height: auto;
  min-height: 46px;
  min-height: 2.875rem;
  overflow: hidden;
  cursor: pointer;
  text-transform: uppercase;
  margin: 23px 0;
}

.endesa-form--sending .endesa-form__btn {
  display: inline-block;
}

.endesa-form--sending .endesa-form__btn-text {
  padding-right: 10px;
}

.endesa-form--sending .endesa-form__btn:after {
content: "";
  display: inline-block;
  position: relative;
  width: 20px;
  height: 20px;
  margin-left: 8px;
  border: 3px solid #ffffff;
  border-radius: 50%;
  border-top-color: transparent;
  animation-name: spin;
  animation-duration: 1s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  vertical-align: middle;
}

.endesa-form__btn {
  position: relative;
  padding-right: 30px;
}

@keyframes spin {
  0% {
      transform: rotate(0deg);
  }

  100% {
      transform: rotate(360deg);
  }
}

.confirm__text {
  font: "Font Awesome 5 Free";
  font-weight: 900;
  color: #ffffff;
  transition: all 0.2s;
}

.endesa-form__btn--disable {
  background: #FFE5EE;
}


.endesa-banner {
  position: relative;
  display: block;
  background: #0244c8;
}

.endesa-banner .col-md-9, .endesa-banner .col-md-3, .endesa-banner .row, .endesa-banner .container-fluid {
  padding: 0;
}

.endesa-banner__wrapper {
  max-width: 1440px;
  display: block;
  position: relative;
  margin: 0 auto;
}

.endesa-banner__img-cnt {
  position: relative;
  display: inline-block;
  width: 100%;
}

.endesa-banner__figure {
  margin: 25px;
  position: relative;
  display: block;
  max-width: 209px;
  width: 100%;
}

.endesa-banner__img {
  position: relative;
  display: block;
  width: 100%;
  margin: 0;
  padding: 0;
}

.endesa-banner__text-cnt {
  position: relative;
  display: inline-block;
  min-height: 259px;
  vertical-align: middle;
  padding: 25px 56px 25px 25px;
  width: 100%;
}

.endesa-banner__text {
  font-family: "RoobertENEL Bold", Arial, Helvetica, sans-serif;
  color: #ffffff;
  font-size: 38px;
  line-height: 54px;
  vertical-align: top;
}

.endesa-banner__text--light {
  font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
}

.endesa-banner__text--small {
  font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
  font-size: 25px;
  padding-top: 48px;
}

.endesa-banner__link {
  font-family: "RoobertENEL Light", Arial, Helvetica, sans-serif;
  color: #ffffff;
  font-size: 30px;
  text-decoration: underline !important;
}

.endesa-banner__link:hover {
  color: #ffffff;
}



.endesa-main__title {
  padding: 1.5rem 0;
    color: #000000;
    position: relative;
    display: inline-block;
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-size: 1.4rem;
    font-weight: bold;
    line-height: 1.4;
    letter-spacing: 1px;
    text-align: center;
    font-style: normal;
    width: 100%;
    margin: 0 auto;
}
.col-md-12 p {
   font-size: 1rem;
}

.endesa-main__title--strong {
  font-weight: 700;
}

.endesa-main__title--second {
  padding: 50px 0 98px 0;
}

.endesa-main__section {
  position: relative;
  display: block;
  padding: 0 0 50px;
}

.endesa-advantajes {
  display: block;
  position: relative;
  padding: 10px 0;
  max-width: 385px;
  margin: 0 auto;
}

.endesa-advantajes__container-img {
  display: block;
  min-height: 240px;
  position: relative;
}

.endesa-advantajes__container-img-bottom {
  position: absolute;
  display: block;
  bottom: 0;
  width: 100%;
}

.endesa-advantajes__container-text {
  display: block;
  position: relative;
  padding: 10px;
  margin: 0 auto;
}

.endesa-advantajes__figure {
  display: block;
  position: relative;
  margin: 0 auto;
  width: 100%;
  max-width: 300px;
}

/*
.endesa-advantajes__figure--a {
    max-width: 190px;
    max-width: 11.875rem;
}
.endesa-advantajes__figure--b {
    max-width: 186px;
    max-width: 11.625rem;
}
*/
.endesa-image-second {
   width: 70% !important;
   padding-bottom: 20px;
}
.endesa-image-down {
    width: 50% !important;
    padding-bottom: 20px;
    margin: 0 auto;
}

.endesa-advantajes__img {
  display: block;
  width: 100%;
}

.endesa-advantajes__title {
  text-align: center;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 18px;
  color: #000000;
  text-align: center;
  padding: 10px 45px;
}

.endesa-advantajes__text {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 14px;
  line-height: 20px;
  text-align: center;
  color: #838383;
}

.endesa-container-grey {
  background: whitesmoke;
}
.endesa-container--faqs .container-fluid {
    width: 75%;
}
.endesa-container--faqs {
  position: relative;
  display: block;
  width: 100%;
  padding: 0 0 6rem;
}
.endesa-container--faqs ul {
    margin-bottom: 1rem;
    list-style-position: outside;
    line-height: 1.5;
}
.op-bullet {
    padding-left: 1rem;
}
.op-bullet li {
    position: relative;
    list-style: none;
    font-family: 'RoobertENEL';
    font-size: 1rem;
    line-height: 1.5;
    letter-spacing: normal;
    /* color: #000; */
    color: #353535;
    margin-bottom: 1.44rem;
}
.op-bullet li:before {
    content: '';
    width: 8px;
    height: 8px;
    background: #ddd;
    left: -20px;
    top: calc(0.82em - 4px);
    position: absolute;
}
.endesa-check-container .endesa-confirmacion-text {
    width:75%;
}


.endesa-check-container .op-bullet  {
    padding-left: 6rem;
}
.endesa-check-container .op-bullet li {
    position: relative;
    list-style: none;
    font-family: 'RoobertENEL';
    font-size: 1.5rem;
    line-height: 1.5;
    letter-spacing: normal;
    /* color: #000; */
    color: #353535;
    margin-bottom: 1.44rem;
}

#contact-data-div {
    display: none;
}

#landing-idioma-div {
    display: none;
}

.e-footer {
            width: 100%;
            margin: 0 auto;
            display: flex;
            align-items: flex-start;
            background-color: #000000;
        }
.subfooter {
            max-width: 1200px;
            margin: 0 auto;
            width: 95%;
        }
.footer-in {
            max-width: 1200px;
            width: 90%;
            padding: 25px 0;
            display: flex;
            flex-direction: column;
        }
.footer-in .footerUp {
            display: flex;
            flex-wrap: wrap;
        }

.footer-in .footerUp .separate {
            padding: 0 10px;
            
        }
.footer-in .footerDown {
            padding-top: 5px;
            font-size: 15px;
            font-weight: 300;
            color: #6f7f96;
            font-family:'RoobertENEL Light';
}

#text-footer1, #text-footer2 {
            font-size: 15px;
            color: #ffffff;
            font-family:'RoobertENEL';
}


@keyframes spin {
  0% {
      transform: rotate(0deg);
  }

  100% {
      transform: rotate(360deg);
  }
}


@keyframes cross {
  0% {
      background-size: 11px 3px, 3px 3px;
      height: 43px;
      background-position: 50% calc(50% - 2px);
  }

  25% {
      background-size: 11px 3px, 3px 3px;
      height: 43px;
      background-position: 50% calc(50% - 2px);
  }

  65% {
      background-size: 11px 3px, 3px 11px;
      height: 43px;
      /*
background-position: 50% calc(50% - 2px);
*/
  }

  100% {
      background-size: 11px 3px, 3px 11px;
      height: 39px;
      background-position: 50% 50%;
  }
}

@keyframes crossReverse {
  0% {
      background-size: 11px 3px, 3px 11px;
      height: 39px;
      background-position: 50% 50%;
  }

  25% {
      background-size: 11px 3px, 3px 11px;
      height: 39px;
      background-position: 50% 50%;
  }

  65% {
      background-size: 11px 3px, 3px 3px;
      height: 39px;
      /*
background-position: 50% 50%;
*/
  }

  100% {
      background-size: 11px 3px, 3px 3px;
      height: 43px;
      background-position: 50% calc(50% - 2px);
  }
}

@keyframes closeAccordionn {
  0% {
      opacity: 0;
      display: block;
  }

  100% {
      opacity: 1;
      display: none;
  }
}

@keyframes openAccordionn {
  0% {
      opacity: 1;
      display: none;
  }

  100% {
      opacity: 0;
      display: block;
  }
}


/* COOKIES */
/*
#modalCookies .modal-dialog {
  width: 630px;
  max-width: 82%;
  margin-top: 5rem;
}

#modalCookies .modal-header {
  padding: 16px 16px 0 16px;
  border: none;
}

#modalCookies .modal-body {
  padding: 0;
}

#modalCookies .modal-content {
  border: none;
  border-radius: 0;
}

.endesa-cookies {
  display: inline-block;
  background: rgba(0, 0, 0, 0.5);
  text-align: center;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 999;
}

.endesa-cookies--accepted {
  display: none;
}

.endesa-cookies__content {
  display: inline-block;
  max-height: calc(100vh - 120px);
  padding: 45px 40px;
  background: #ffffff;
  text-align: left;
  box-sizing: border-box;
  overflow-x: hidden;
  overflow-y: auto;
  position: relative;
  top: 0;
  right: 0;
  left: 0;
}

.endesa-cookies__title {
  margin: 0 0 25px 0;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 27px;
  font-weight: 600;
  line-height: 1.2222222222;
  text-rendering: optimizeLegibility;
  letter-spacing: -0.01em;
  color: #000000;
}

.endesa-cookies__title--small {
  display: inline-block;
  font-size: 16px;
}

.endesa-cookies__tab-nav {
  display: block;
  position: relative;
}

.endesa-cookies__tab-nav:after {
  display: block;
  border-bottom: 1px solid #C2CDDD;
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
}

.endesa-cookies__tab-nav-content {
  display: block;
  margin: 0;
  padding: 0;
  position: relative;
}

.endesa-cookies__tab-nav-item {
  display: inline-block;
  margin: 0 32px 0 0;
  padding: 0;
  font-size: 16px;
  text-align: left;
  line-height: 1.5;
  border-bottom: 1px solid transparent;
  position: relative;
  z-index: 2;
}

.endesa-cookies__tab-nav-item--active {
  font-weight: 700;
  border-bottom: 1px solid #0E141A;
}

button.endesa-cookies__tab-nav-button {
  margin: 0;
  padding: 12px 0;
  background: transparent;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  cursor: pointer;
  font-size: inherit;
  font-weight: inherit;
  text-align: left;
  outline-offset: -1px;
  color: #000;
}

button.endesa-cookies__tab-nav-button:hover,
button.endesa-cookies__tab-nav-button:focus,
button.endesa-cookies__tab-nav-button:visited {
  background: transparent;
  color: #000;
}

.endesa-cookies__tab-nav-item--active button.endesa-cookies__tab-nav-button {
  font-weight: 700;
}

.endesa-cookies__tab {
  display: block;
  padding: 30px 0 0;
}

.endesa-cookies__tab--hidden {
  display: none;
}

.endesa-cookies__tab-content {
  display: block;
  margin-bottom: 40px;
  padding-bottom: 40px;
  border-bottom: 1px solid #C2CDDD;
  position: relative;
}

.endesa-cookies__text {
  margin: 0;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 16px;
  line-height: 20px;
  text-rendering: optimizeLegibility;
  color: #667790;
}

.endesa-cookies__btn {
  display: inline-block;
  width: auto;
  margin: 1px 15px 0 0;
  padding: 0 20px;
  background: #D3135A;
  appearance: none;
  box-shadow: none;
  border: 1px solid #D3135A;
  border-radius: 0.2rem;
  font-size: 16px;
  line-height: 45px;
  color: #ffffff;
  cursor: pointer;
  transition: all 0.2s linear;
  position: relative;
}

.endesa-cookies__btn:hover {
  background: #ad1457;
  color: #fff;
}

.endesa-cookies__btn--save {
  background: transparent;
  border: 1px solid #C2CDDD;
  color: #0E141A;
  opacity: 0.3;
  transition: opacity 0.2s;
}

.endesa-cookies__btn--save:hover {
  background: transparent;
  border: 1px solid #C2CDDD;
  color: #0E141A;
  opacity: 1;
}

.endesa-cookies__link {
  margin-top: 2.5rem;
  box-sizing: border-box !important;
}

.endesa-cookies__link-text {
  display: inline-block;
  margin: -0.55rem 0;
  padding: 0.55rem 0;
  font-size: 16px;
  line-height: 1.5;
  text-decoration: none;
  color: #D3135A;
  position: relative;
}

.endesa-cookies__link-text:hover {
  text-decoration: underline;
  color: #D3135A;
}

.endesa-cookies__link-text:after {
  display: inline-block;
  width: 8px;
  height: 12px;
  padding-left: 20px;
  background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
  background-repeat: no-repeat;
  background-size: 8px 12px;
  background-position: center;
  content: "";
  position: absolute;
  bottom: 10px;
}

.endesa-cookies__tab-input {
  display: inline-block;
  padding: 0;
  text-align: right;
  position: absolute;
  right: 0;
}

.endesa-cookies__tab-input-label {
  font-size: 16px;
}

.endesa-cookies__tab-input-label input[type=radio] {
  display: inline-block;
  width: 16px;
  min-width: 16px;
  height: 16px;
  vertical-align: middle;
  font-size: 0;
  cursor: pointer;
  background: transparent;
  border: 0.1rem solid #C2CDDD;
  border-radius: 50%;
  appearance: none;
  outline: 0;
  -webkit-appearance: none;
  position: relative;
}

.endesa-cookies__tab-input-label input[type=radio] {
  margin: 0 0.25rem 0 15px;
  transform: translateY(-0.1rem);
  -webkit-appearance: none;
}

.endesa-cookies__tab-input-label input[type=radio]:checked {
  background: #D3135A;
  border-color: #D3135A;
}

.endesa-cookies__tab-input-label input[type=radio]:checked:after {
  width: 5px;
  height: 5px;
  background: #ffffff;
  border-radius: 50%;
  content: "";
  visibility: visible;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  opacity: 1;
}

.endesa-cookies__close {
  display: block;
  width: 46px;
  height: 46px;
  margin: 0;
  padding: 0;
  font-size: 0;
  cursor: pointer;
  border: 0;
  position: absolute;
  right: 0;
  z-index: 1;
}

.endesa-cookies__close:before,
.endesa-cookies__close:after {
  content: '';
  display: block;
  width: 20px;
  height: 2px;
  background: #666;
  position: absolute;
  top: 22px;
  left: 13px;
}

.endesa-cookies__close:before {
  transform: rotate(45deg);
}

.endesa-cookies__close:after {
  transform: rotate(-45deg);
}

.endesa-cookies__accesible {
  width: 0;
  height: 0;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  clip-path: inset(50%);
  border: 0;
  box-sizing: border-box;
  position: absolute !important;
}

.endesa-cookies-faldon {
  width: 100%;
  padding: 1.5rem;
  background: #0E141A;
  color: #FFFFFF;
  transform: translateY(100%);
  transition: all 0.8s ease-in-out, opacity 2s ease-out;
  transform: translateY(0);
  transition: all 0.8s ease-in-out, opacity 2ms;
  position: fixed;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 998;
}

.endesa-cookies-faldon--close {
  display: none;
}

.endesa-cookies-faldon__container {
  display: block;
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 30px 0px 0;
  position: relative;
}

.endesa-cookies-faldon__container-close {
  display: block;
  position: absolute;
  top: 0;
  right: 0;
}

.endesa-cookies-faldon__close,
.endesa-cookies-faldon__close:hover {
  display: block;
  width: 16px;
  height: 16px;
  padding: 0;
  border: 0;
  background: transparent;
  background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
  background-repeat: no-repeat;
  background-size: 16px 16px;
  background-position: center;
  position: relative;
}

.endesa-cookies-faldon__close--link {
  display: inline;
  text-decoration: underline;
  color: #ffffff;
  background: transparent;
}

.endesa-cookies-faldon__close--link:visited,
.endesa-cookies-faldon__close--link:hover,
.endesa-cookies-faldon__close--link:active,
.endesa-cookies-faldon__close--link:focus {
  color: #ffffff;
}

.endesa-cookies-faldon__accesible {
  width: 0;
  height: 0;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  clip-path: inset(50%);
  border: 0;
  box-sizing: border-box;
  position: absolute !important;
}

.endesa-cookies-faldon__text {
  width: 100%;
  max-width: 1092px;
  margin: 0;
  padding: 0;
  font-size: 13px;
  line-height: 1.3846;
  color: #fff;
}
*/

.ui-dialog .endesa-modal {
  border: none;
  background: white;
  padding: 15px;
  padding: 0.9375rem;
}

.ui-dialog .endesa-modal__title {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400 !important;
  font-size: 24px;
  font-size: 1.5rem;
  color: #d42c54;
  padding-left: 25px;
  padding-left: 1.5625rem;
}

.ui-dialog .endesa-modal__text {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 14px;
  font-size: 0.875rem;
  color: #333333;
  padding-left: 25px;
  padding-left: 1.5625rem;
  line-height: 27px;
  line-height: 1.6875rem;
}

.ui-dialog .endesa-modal__figure {
  display: inline-block;
  margin: 0 25px;
  margin: 0 1.5625rem;
}

.ui-dialog .endesa-modal__img {
  display: block;
  width: 100%;
}

.ui-dialog .ui-dialog-titlebar {
  border: none;
  background: white;
  padding: 15px;
  padding: 0.9375rem;
}

.ui-dialog .ui-dialog-title {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 24px;
  font-size: 1.5rem;
  color: #d42c54;
  padding-left: 25px;
  padding-left: 1.5625rem;
}

.ui-dialog .ui-dialog-titlebar-close {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 24px;
  font-size: 1.5rem;
  color: #c9c9c9;
  border: none;
  background: white;
  float: right;
}

.ui-widget-overlay {
  position: fixed;
  top: 0;
  left: 0;
  background: rgba(0, 0, 0, 0.5);
}


.modal-header,
.modal-footer {
  border: none;
}

.endesa-alert-popup {
  padding: 0 1rem 4rem 1rem;
}


.endesa-modal {
  display: none;
}

.endesa-modal__text {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 14px;
  font-size: 0.875rem;
  color: #333333;
  padding-left: 25px;
  padding-left: 1.5625rem;
  line-height: 27px;
  line-height: 1.6875rem;
}

.endesa-modal__text--strong {
  font-weight: 800;
}

.endesa-modal__title {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 14px;
  font-size: 0.875rem;
  color: #333333;
  padding: 15px 0 20px 25px;
  padding: 0.9375rem 0 1.25rem 1.5625rem;
  line-height: 27px;
  line-height: 1.6875rem;
  text-transform: uppercase;
}

.endesa-modal__figure {
  display: inline-block;
  margin: 0 25px;
  margin: 0 1.5625rem;
}

.endesa-modal__img {
  display: block;
  width: 100%;
}

.endesa-modal__btn-container {
  position: relative;
  display: block;
  margin: 15px 0;
  margin: 0.9375rem 0;
  text-align: center;
}

.endesa-modal__btn {
  position: relative;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 600;
  font-size: 15px;
  font-size: 0.9375rem;
  color: white;
  letter-spacing: 1px;
  letter-spacing: 0.0625rem;
  border-radius: 0.25rem;
  border: none;
  background: #f16101;
  padding: 11px 30px;
  padding: 0.6875rem 1.875rem;
  text-align: center;
  height: auto;
  min-height: 46px;
  min-height: 2.875rem;
  overflow: hidden;
  cursor: pointer;
  display: inline-block;
  width: auto;
  line-height: initial;
}



.endesa-footer {
  display: block;
  width: 100%;
  background: #000000;
  padding: 10px 10px;
  height: 10vh;
}

.endesa-footer__content {
  position: relative;
  display: block;
}

.endesa-footer__text {
  position: relative;
  display: block;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 14px;
  font-size: 0.875rem;
  color: #FFFFFF;
  text-decoration: none;
  text-align: left;
}

.endesa-footer__link {
  position: relative;
  display: inline-block;
  vertical-align: bottom;
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-weight: 400;
  font-size: 14px;
  font-size: 0.875rem;
  color: #FFFFFF;
  text-decoration: underline;
  padding-bottom: 8px;
}

.endesa-footer__link:hover,
.endesa-footer__link:active,
.endesa-footer__link:focus {
  color: #757575;
}

.endesa-footer__link:visited {
  color: #FFFFFF;
}



.endesa-fixed-footer--thanks {
  padding-bottom: 220px;
  min-height: calc(100vh - 180px);
}


.endesa-header--thanks {
  background: #FFFFFF;
}

.endesa-thanks__title {
  font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 46px;
  font-size: 2.875rem;
  line-height: 50px;
  line-height: 3.125rem;
  font-weight: 700;
  color: #d42c54;
  text-align: center;
  margin-bottom: 30px;
  margin-bottom: 1.875rem;
}

.endesa-thanks__text {
  /*font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 20px;
  font-size: 1.25rem;
  line-height: 20px;
  font-weight: 400;
  color: #d42c54;
  text-align: center;*/
  width: 75%;
  margin: 0 0 1.5rem 3rem;
  font-family: RoobertENEL;
  font-size: 1.875rem;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: normal;
  color: #000000;
}

.endesa-confirmacion__list-text {
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1.125rem;
    line-height: 23px;
    padding: 10px 0 10px 0;
    margin-left: 3rem;
    width: 75%;
}
.endesa-confirmacion__list-text2 {
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1.125rem;
    line-height: 23px;
    padding: 10px 0 10px 0;
    margin-left: 3rem;
    width: 75%;
}
.endesa-confirmacion-text {
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1.4rem;
    line-height: 23px;
    margin-left: 3rem;
    padding-bottom: 1.875rem;
}
.endesa-confirmacion-text2 {
    font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
    font-weight: 300;
    font-size: 1.4rem;
    line-height: 23px;
    margin-left: 3rem;
    padding-bottom: 1.875rem;
    width: 75%;
}
  
.endesa-thanks__text_verde {
  /*font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 1.25rem;
  line-height: 20px;
  font-weight: 400;
  color: #00883d;
  text-align: left;
  padding-bottom: 0.5rem;*/
  margin: 0 0 1.5rem 3rem;
  font-family: RoobertENEL;
  font-size: 1.875rem;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: normal;
  color: #00883d;
}
.endesa-thanks__text_verde2 {
  /*font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 1.25rem;
  line-height: 20px;
  font-weight: 400;
  color: #00883d;
  text-align: left;
  padding-bottom: 0.5rem;*/
  margin: 0 0 1.5rem 3rem;
  font-family: RoobertENEL;
  font-size: 1.875rem;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: normal;
  color: #00883d;
}

.endesa-thanks__text_rojo {
  /*font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
  font-size: 1.25rem;
  line-height: 20px;
  font-weight: 400;
  color: #d42c54;
  text-align: left;
  margin-bottom: 3rem;*/
  margin: 0 0 1.5rem 3rem;
  font-family: RoobertENEL;
  font-size: 1.875rem;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: normal;
  color: #d42c54;
}

.check {
  color: #00883d;
  font-size: 300%;
  margin-left: 3rem;
}

.icon_check {
  background: url('https://image.digital.endesaclientes.com/lib/fe4115707564047f751d72/m/1/3b9637b1-df76-4b60-937c-24bda8fa65a2.png');
  height: 42px;
  width: 42px;
  display: block;
}

.icon_error {
  background: url('https://image.digital.endesaclientes.com/lib/fe4115707564047f751d72/m/1/6ae5e71a-1041-449f-818d-ce21cf6d2686.png');
  height: 54px;
  width: 67px;
  display: block;
  margin-bottom: 1rem;
}

.error {
  color: #d42c54;
  font-size: 300%;
  margin-left: 3rem;
}

.endesa-check-container {
  display: block;
  position: relative;
  width: 75%;
  text-align: left;
}

.endesa-btn__volver{
  width: 75%;
  margin-left: 3rem;
}

.endesa-thanks {
  position: relative;
  display: block;
  margin: 200px 0 0 0;
  padding: 0 20px;
}

.endesa-logo__link--thanks {
  display: block;
  position: relative;
  background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
  width: 200px;
  height: 52px;
  background-repeat: no-repeat;
  background-size: 100% auto;

}
.endesa-logo__link--thanks2 {
  display: block;
  position: relative;
  background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
  width: 200px;
  height: 52px;
  background-repeat: no-repeat;
  background-size: 100% auto;

}

.endesa-footer--thanks {
  bottom: 0;
}






@media only screen and (min-width: 992px) and (max-width: 1299.5px) {
  .endesa-header-language {
    margin: 0 0 54px;
  }

  .endesa-thanks {
      margin: 50px 0;
  }

  .endesa-header {
      padding: 50px;
  }

  .endesa-header--thanks {
      background: none;
  }

  .endesa-title {
      bottom: 15%;
  }

  .endesa-logo{
      margin: 0 0 54px;
  }
  .endesa-logo--footer{
      margin: 0;
  }
  .endesa-info-campaign{
    padding: 10px 50px;
  }
  .endesa-banner{
    padding: 40px;
  }
  /*.endesa-main {
      padding: 50px;
  }*/

  .endesa-footer {
      padding: 50px;
  }
  .endesa-form__label--visible {
    padding-right:0;
  }

}

@media only screen and (min-width: 768px) and (max-width: 991.5px) {
 
   /*
  .endesa-btn__volver{
    width: 40%;
    margin-left: 3rem;
    margin-top: 5rem;
    float: right;
  }
  */

  .endesa-header-language {
     margin: 10px 0;
  } 

  .endesa-thanks {
      margin: 50px 0;
  }

  .endesa-header {
      background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
      background-repeat: no-repeat;
      background-position: top center;
      background-size: cover;
  }

  .endesa-header--thanks {
      background: none;
  }

  .endesa-logo{
      margin: 0 0 54px;
  }

  .endesa-title {
      position: relative;
      width: 100%;
      max-width: 100%;
      right: 0;
      left: 0;
      bottom: 0;
  }

  .endesa-title__title {
      font-size: 40px;
  }
  .endesa-title__container{
      padding: 0;
  }
  .endesa-container--faqs {
      padding: 0 50px 30px;
  }

  .endesa-info-campaign{
    padding: 10px 50px;
  }
  .endesa-banner{
    padding: 40px;
  }
  .endesa-banner__text-cnt {
      padding: 25px 50px 25px 25px;
      width: 100%;
  }

  .endesa-banner__text {
      font-size: 28px;
      line-height: 38px;
  }

  .endesa-banner__link {
      font-size: 26px;
  }

  .endesa-header {
      padding: 50px;
  }

  /*.endesa-main {
      padding: 50px;*/
  }
  .endesa-main__title{
    padding: 0;
  }

  .endesa-main__title--second{
    padding: 50px;
  }

  .endesa-footer {
      padding: 50px;
  }

  .endesa-promo-info {
      display: block;
      position: relative;
      max-width: 100%;
      padding-right: 0;
      padding-bottom: 1rem;
  }

  .endesa-promo-info__text {
      font-size: 24px;
  }

  .endesa-promo-info__list-title {
      font-size: 26px;
  }

  .endesa-promo-info__list {
      font-size: 24px;
  }

  .endesa-logo--footer{
      margin: 0;
  }

  .endesa-form {
      max-width: 100%;
  }
}

@media only screen and (max-width: 767.5px) {
  .endesa-header-language__active--black2:focus {
      text-decoration: none;
      color: white !important;
    }
  .endesa-thanks__text_rojo { margin: 0 0 1.438rem 0;}
  .error{margin-left: 0;}
  .endesa-link--clientes{ color: #d42c54; }
  .endesa-thanks__text { margin-left: 0;  width: 100%; }
  .endesa-thanks__text_verde { margin-left: 0;  width: 100%;}
  .endesa-confirmacion-text { margin-left: 0; width: 100%;}
  .endesa-confirmacion__list-text { margin-left: 0;  width: 100%;}
  .endesa-thanks__text_verde2 { color: white; margin-left: 0;  width: 100%;}
  .endesa-confirmacion-text2 { color: white; margin-left: 0; width: 100%;}
  .endesa-confirmacion__list-text2 { color: white; margin-left: 0;  width: 100%;}
  .check { color: white; margin-left: 0;}
  .endesa-header-language__active--black2{ color: white !important; }
  .endesa-logo__link--thanks2{ background-image:url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg)}
  .endesa-body--thanks{ 
      background:#008c5a;
 }

 .endesa-btn__volver{
      width: 100%;
      margin-top: 5rem;
      margin-left: 3rem;
      float: right;
    }

    .endesa-header-language__active:after {
        content: url(https://image.digital.endesaclientes.com/lib/fe341570756405757c1478/m/1/0db5525e-25cc-40c1-a91c-6e4e7069f77d.png);
        width: 8px;
        height: 9px;
        margin-left: 7px;
    }
    .endesa-header-language__active {
        font-size: 11px;
    }

    .endesa-header-language {
     margin: 20px 15px 54px;
  }

  .endesa-title{
      right: 0;
      left: 0;
  }
  .endesa-title__container{
      padding: 0;
  }
  .endesa-thanks {
      margin: 50px 0;
  }

  .endesa-header {
      background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
      background-repeat: no-repeat;
      background-position: top center;
      background-size: cover;
  }

  .endesa-header--thanks {
      background: none;
  }

  .endesa-logo{
      margin: 10px 15px 54px;
  }

  .endesa-title {
      position: relative;
      width: 100%;
      max-width: 100%;
      margin-bottom: 50px;
  }

  .endesa-title__text{
    text-align: center;
    font-size: 24px;
  }

  .endesa-title__title {
      font-size: 28px !important;
      text-align: center;
  }
  .endesa-title__title--mobile{
    display: block;
  }
  
  .endesa-title__title--desktop{
    display: none;
  }

  .endesa-form {
      max-width: 100%;
  }
  .endesa-info-campaign{
    padding: 10px 50px;
  }

  .endesa-info-campaign__text{
    font-size: 24px;
  }

  .endesa-banner{
    display: block;
    padding: 40px;
  }

  .endesa-banner__img-cnt {
      margin: 0 auto;
      max-width: 100%;
      min-height: auto;
      width: 100%;
      height: auto;
      text-align: center;
  }

  .endesa-banner__figure {
      max-width: 100%;
      margin: 0;
  }

  .endesa-banner__text-cnt {
      padding: 20px;
  }

  .endesa-banner__text {
      font-size: 24px;
      line-height: normal;
  }

  .endesa-banner__text--small {
      font-size: 24px;
  }


  .endesa-cursor__content:before {
      top: 10px;
      width: 16px;
      height: 56px;
  }

  .endesa-cursor__content {
      padding-left: 37px;
  }

  .endesa-promo-info {
      padding-bottom: 25px;
  }

  .endesa-header {
      padding: 0;
  }

  .endesa-main {
      padding: 0;
  }

  .endesa-footer {
      padding: 25px;
  }

  .endesa-promo-info__list-container {
      padding: 0 0 25px;
  }

  .endesa-advantajes{
      padding-bottom: 50px;
  }
  .endesa-faq__title-link{
      min-height: 75px;
  }

  .endesa-form {
      margin-bottom: 25px;
  }

  .endesa-form__group {
      height: auto;
  }

  .endesa-form__group--col-2-lf {
      display: block;
      width: 100%;
      position: relative;
      text-align: center;
      margin-bottom: 25px;
      padding: 0;
  }


  .endesa-form__group--col-2-rg {
      display: block;
      width: 100%;
      position: relative;
      text-align: center;
      margin-bottom: 25px;
      padding: 0;
  }

  .endesa-footer {
      bottom: -215px;
  }

  .endesa-footer__text {
      text-align: center;
  }

  .endesa-logo--footer {
      text-align: center;
      margin: 25px 0 0;
  }

  .endesa-popUpHelp__container {
      top: 25px;
  }


  .endesa-cookies__content {
      margin: 0;
      overflow: auto;
      max-width: 100%;
      padding: 80px 40px;
      max-height: 100vh;
  }

  .endesa-cookies__container-close {
      top: 0;
      right: 0;
      left: 0;
      width: 100%;
      border-bottom: 1px solid #C2CDDD;
  }

  .endesa-cookies__close {
      background-size: 20px 20px;
  }

  .endesa-cookies__tab-input {
      width: 100%;
      text-align: left;
      position: relative;
      padding: 0 0 10px;
  }

  .endesa-cookies__tab-nav-item {
      width: 100%;
      border-bottom: 1px solid #C2CDDD;
  }

  .endesa-cookies__tab-nav-item--active {
      border-color: #0E141A;
  }

  .endesa-cookies__tab-input-label input[type=radio] {
      margin: 0 0.25rem 0 0;
  }

  .endesa-cookies__btn {
      margin: 1px 0 25px 0;
      padding: 0 20px;
      max-width: 100%;
  }

  .endesa-cookies-faldon {
      padding: 0.6rem 1rem 1.5rem;
  }

  .endesa-cookies-faldon__text {
      padding-top: 27px;
  }

  .endesa-footer {
      bottom: -164px;
  }

  .endesa-container--faqs {
      padding: 0 17px 50px;
  }

  .endesa-faq__title-link {
      padding: 16px 30px 17px 69px;
  }

  .endesa-faq__item a:first-child {
      padding-top: 16px;
  }

  .endesa-fixed-footer--thanks {
      padding-bottom: 245px;
      min-height: calc(100vh - 57px);
  }

  .endesa-thanks {
      margin: 45px 0 0 0;
  }

  .endesa-fixed-footer--thanks {
      padding-bottom: 120px;
      min-height: 0;
  }
  .col-lg-6, .col-sm-6, .col-md-6, .col-md-12{
      flex: 100%;
      -ms-flex: 100%;
      width: 100%;
  }

}


@media only screen and (max-width: 480px) {
   .endesa-header-language__active--black2:focus {
      text-decoration: none;
      color: white !important;
    }
  .endesa-thanks__text_rojo { margin: 0 0 1.438rem 0;}
  .error{margin-left: 0;}
  .endesa-header {
      background-image: url(https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/fa483f50-4a34-4275-959e-b7435a52d346.jpg);
      background-repeat: no-repeat;
      background-position: top center;
      background-size: cover;
  }

  .endesa-header--thanks {
      background: none;
  }

  .endesa-title {
      position: relative;
      width: 100%;
      max-width: 100%;
      margin-bottom: 25px;
      margin-top: 32px;
  }

  .endesa-title__title {
      text-align: center;
  }

  .endesa-title__title--mobile{
    display: block;
  }
  
  .endesa-title__title--desktop{
    display: none;
  }

  h1 {
      font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
      font-size: 18px !important;
      line-height: 1.2 !important;
  }

  H2 {
      font-family: "RoobertENEL", Arial, Helvetica, sans-serif;
      font-size: 16px !important;
      line-height: 1.2 !important;
  }

  .endesa-popUpHelp__container-text ol,
  .endesa-popUpHelp__container-text ol li .endesa-popUpHelp__title {
      font-size: 14px;
  }

  .endesa-popUpHelp__container-text ol li ol {
      margin: 0 0 50px 20px;
  }
  .endesa-link--clientes{ color: white; }
  .endesa-thanks__text { margin-left: 0;  width: 100%; }
  .endesa-thanks__text_verde { margin-left: 0;  width: 100%;}
  .endesa-confirmacion-text { margin-left: 0; width: 100%;}
  .endesa-confirmacion__list-text { margin-left: 0;  width: 100%;}
  .endesa-thanks__text_verde2 { color: white; margin-left: 0;  width: 100%;}
  .endesa-confirmacion-text2 { color: white; margin-left: 0; width: 100%;}
  .endesa-confirmacion__list-text2 { color: white; margin-left: 0;  width: 100%;}
  .check { margin-left: 0;}
  .endesa-check-container{
    display: block;
    position: relative;
    text-align: left;
 }

 
}
(function ($) {
    /*
     * Accordion jquery 
     */
    $.accordion = (function () {
        var init = function (element) {
            $('[data-toggle="expand"]').click(function (e) {
                e.preventDefault();
                if (!$(this).hasClass('collapsed')) {
                    $(this).addClass('collapsed');
                } else {
                    $(this).removeClass('collapsed');
                }
            });
        };
        return {
            init: init
        };
    })();

    $(document).ready(function () {
        if ($('[data-function="fc-accordion"]').length > 0) {
            $.accordion.init();
        }
    });
})(jQuery);

/*Refrescador de pagina por seguridad*/
setTimeout(securityReload, 3600000);
      function securityReload() {
        location.reload();
}

/*Desplegable de idiomas*/
$(document).ready(function() {
  var selectLang = 0;
  
  loadLanguageOptions();
  
  $(".endesa-header-language").click(function(e) {
    e.stopPropagation(); // Evitar que el evento se propague
    $(".endesa-header-language__list").slideToggle("fast");
    selectLang = !selectLang; // Alternar el estado
  });
  
  $(document).on("click", function() {
    $(".endesa-header-language__list").slideUp("fast");
    selectLang = 0;
  });
});

function loadLanguageOptions() {
  var languageOpt1Url = document.getElementById('landing1').value;
  var languageOpt1Name = document.getElementById('landing1name').value;
  var languageOpt2Url = document.getElementById('landing2').value;
  var languageOpt2Name = document.getElementById('landing2name').value;
  
  var languageOptionsHTML = 
    '<li class="endesa-header-language__item" data-function="fc-item">' +
      '<a class="endesa-header-language__link" data-function="fc-link" href="' + languageOpt1Url + '" title="' + languageOpt1Name + '">' + 
        languageOpt1Name + 
      '</a>' +
    '</li>' +
    '<li class="endesa-header-language__item" data-function="fc-item">' +
      '<a class="endesa-header-language__link" data-function="fc-link" href="' + languageOpt2Url + '" title="' + languageOpt2Name + '">' + 
        languageOpt2Name + 
      '</a>' +
    '</li>';
  
  document.getElementById('fcMenu').innerHTML += languageOptionsHTML;
  
  document.getElementById('fcMenu').style.display = "none";
}


/*Muestra los mensajes de error del formulario*/
function showError(inputError, subError) {
    stopSending();
    switch (inputError) {
        case 2:
            document.getElementById('documentGroup').classList.add("endesa-form__group--invalid");
            switch (subError) {
                case 1:
                    document.getElementById('documentError').innerHTML = nifErrorMessage;
                    break;
                case 2:
                    document.getElementById('documentError').innerHTML = nieErrorMessage;
                    break;
                case 3:
                    document.getElementById('documentError').innerHTML = cifErrorMessage;
                    break;
                case 4:
                    document.getElementById('documentError').innerHTML = passaportErrorMessage;
                    break;
                default:
                    document.getElementById('documentError').innerHTML = documentErrorMessage;
            }
            break;
        case 3:
            switch (subError) {
                case 1:
                    document.getElementById('emailGroup').classList.add("endesa-form__group--invalid");
                    document.getElementById('emailError').innerHTML = emailErrorMessage;
                    break;
                case 2:
                    document.getElementById('emailCGroup').classList.add("endesa-form__group--invalid");
                    document.getElementById('emailCError').innerHTML = emailErrorMessage;
                    break;
                case 3:
                    document.getElementById('emailsGroup').classList.add("endesa-form__group--invalid");
                    document.getElementById('emailsError').innerHTML = emailSameErrorMessage;
                    break;
                default:
                    document.getElementById('emailsGroup').classList.add("endesa-form__group--invalid");
                    document.getElementById('emailCError').innerHTML = emailErrorMessage;
            }
            break;
      case 4:
            break;
        default:
            document.getElementById('documentGroup').classList.add("endesa-form__group--invalid");
            document.getElementById('documentError').innerHTML = documentErrorMessage;

            document.getElementById('emailsGroup').classList.add("endesa-form__group--invalid");
            document.getElementById('emailsError').innerHTML = emailErrorMessage;
    }
}

/*Oculta Mensajes de Error del formulario*/
function hiddenErrors(inputError) {
    switch (inputError) {
        case 2:
            document.getElementById('documentGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentError').innerHTML = "";
            document.getElementById('documentSupraGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentSupraError').innerHTML = "";
            break;
        case 3:
            document.getElementById('emailGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('emailCGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('emailsGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('emailsError').innerHTML = "";
            document.getElementById('emailError').innerHTML = "";
            document.getElementById('emailCError').innerHTML = "";
            break;
        case 5:
            document.getElementById('emailCError').innerHTML = "";
        case 6: 
            document.getElementById('emailError').innerHTML = "";
        default:

            document.getElementById('documentGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentError').innerHTML = "";

            document.getElementById('documentSupraGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('documentSupraError').innerHTML = "";

            document.getElementById('emailGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('emailCGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('emailsGroup').classList.remove("endesa-form__group--invalid");
            document.getElementById('emailsError').innerHTML = "";
            document.getElementById('emailError').innerHTML = "";
            document.getElementById('emailCError').innerHTML = "";
    }
};

function changeDocument() {
    validDocument();
    validFormat();
}
                                                  
/*
 * Document validation
 */
function validDocument() {
    var select = document.getElementById("documentType");
    var opc = select.options[select.selectedIndex].value;
    var userDocument = document.getElementById('document').value;
    userDocument = userDocument.replace('-','');
    userDocument = userDocument.replace('-','');
    document.getElementById("documentHidden").value = userDocument;
                      
    switch (opc) {
        case "nif":
            if (!validateDNI(userDocument)) {
                showError(2, 1);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        case "nie":
            if (!validateNIE(userDocument)) {
                showError(2, 2);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        case "cif":
            if (!validateCIF(userDocument)) {
                showError(2, 3);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        case "pasaporte":
            if (!validatePASSAPORT(userDocument)) {
                showError(2, 4);
                lockButton();
                return false
            } else {
                hiddenErrors(2);
                return true
            }
            break;
        default:
            showError(2);
            lockButton();
            return false
    };
};

function validateDNI(dni) {
    if (dni.length == 9) {
        var letras = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z',
            'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E', 'T'
        ];
        var numero = dni.substring(0, 8);
        var letra = dni.substring(8, 9);
        letra = letra.toUpperCase();
        if (numero < 0 || numero > 99999999) {
            return false;
        } else {
            var letraCalculada = letras[numero % 23];
            if (letraCalculada != letra) {
                return false;
            } else {
                return true;
            }
        }
    } else {
        return false;
    }
};

function validateNIE(nie) {
    nie = nie.toUpperCase();
    // Basic format test
    if (!nie.match(
            '((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)')) {
        return false;
    }
    // Test NIE
    //T
    if (/^[T]{1}/.test(nie)) {
        return (nie[8] === /^[T]{1}[A-Z0-9]{8}$/.test(nie));
    }
    //XYZ
    if (/^[XYZ]{1}/.test(nie)) {
        return (
            nie[8] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt(
                nie.replace('X', '0')
                .replace('Y', '1')
                .replace('Z', '2')
                .substring(0, 8) % 23));
    }
    return false;
}

function validateCIF(cif) {
    // Quitamos el primer caracter y el ultimo digito
    var sum, num = [],
        value, controlDigit, validar, result;
    var valueCif = cif.substr(1, cif.length - 2);
    var suma = 0;
    value = cif.toUpperCase();
    // Sumamos las cifras pares de la cadena 
    for (var i = 1; i < valueCif.length; i = i + 2) {
        suma = suma + parseInt(valueCif.substr(i, 1));
    }
    for (var i = 0; i < 9; i++) {
        num[i] = parseInt(cif.charAt(i), 10);
    }
    var suma2 = 0;
    // Sumamos las cifras impares de la cadena
    for (var i = 0; i < valueCif.length; i = i + 2) {
        result = parseInt(valueCif.substr(i, 1)) * 2;
        if (String(result).length == 1) {
            // Un solo caracter
            suma2 = suma2 + parseInt(result);
        } else {
            // Dos caracteres. Los sumamos... 
            suma2 = suma2 + parseInt(String(result).substr(0, 1)) + parseInt(String(result)
                .substr(1, 1));
        }
    }
    // Sumamos las dos sumas que hemos realizado
    suma = suma + suma2;
    var unidad = String(suma).substr(1, 1);
    unidad = 10 - parseInt(unidad);
    var primerCaracter = cif.substr(0, 1).toUpperCase();
    if (primerCaracter.match(/^[FJKNPQRSUVW]$/)) {
        suma += '';
        controlDigit = 10 - parseInt(suma.charAt(suma.length - 1), 10);
        value += controlDigit;
        validar = num[8].toString() === String.fromCharCode(64 + controlDigit) || num[8]
            .toString() === value.charAt(value.length - 1);
        if (validar == true) return true;
        if (String.fromCharCode(64 + unidad).toUpperCase() == cif.substr(cif.length - 1, 1)
            .toUpperCase()) return true;
    }
    if (primerCaracter.match(/^[ABCDEFGHLM]$/)) {
        // Se revisa que el ultimo valor coincida con el calculo 
        if (unidad == 10) unidad = 0;
        suma += '';
        controlDigit = 10 - parseInt(suma.charAt(suma.length - 1), 10);
        value += controlDigit;
        validar = num[8].toString() === String.fromCharCode(64 + controlDigit) || num[8]
            .toString() === value.charAt(value.length - 1);
        if (validar == true) return true;
        if (String.fromCharCode(64 + unidad).toUpperCase() == cif.substr(cif.length - 1, 1)
            .toUpperCase()) return true;
    }
    return false;
};

function validatePASSAPORT(passport) {
    "use strict";
    return passport.length > 6 && passport.length < 18;
}

/*Valida uno u otro email*/
function validEmail(emailInput) {
    var validEmailValate = false;
    if (emailInput == 2) {
        var emailToValidate = document.getElementById('emailC').value;
    } else {
        var emailToValidate = document.getElementById('email').value;
    }
    var isEmail =
        /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    validEmailValate = isEmail.test(String(emailToValidate).toLowerCase());
    if (validEmailValate) {
        return true
    } else {
        return false
    };

}

/*Valida uno u otro email*/
function validEmails(emailInput) {
    var emailCToCompare = document.getElementById('emailC').value;
    var emailToCompare = document.getElementById('email').value;
    /*Si se ha modificado un imput de los emails*/
    if (emailInput) {
        console.log("Se ha modificado un input");
        if (emailInput == 2) {
            console.log("Se ha modificado el Email C");
            if (validEmail(2)) {
                console.log("El email C es valido");
                hiddenErrors(5);
                if (emailToCompare) {
                    console.log("Hay email A");
                    if (emailToCompare == emailCToCompare) {
                        console.log("Emails C iguales");
                        hiddenErrors(3);
                        return true
                    } else {
                        console.log("Email C no iguales");
                        showError(3, 3);
                        if(!validEmail(1)){
                            showError(3, 1);
                            console.log("Email A no valido");
                        }
                        lockButton();
                        return false
                    }
                } else {
                    console.log("No hay email A");
                    hiddenErrors(3);
                    lockButton();
                    return false
                }
            } else {
                console.log("El email C no es valido");
                showError(3, 2);
                lockButton();
                return false
            }
  } else {
            console.log("Se ha modificado el Email A");
            if (validEmail(1)) {
                console.log("El email A es valido");
                document.getElementById('emailError').innerHTML = "";
                if (emailCToCompare) {
                    console.log("Hay email C");
                    if (emailToCompare == emailCToCompare) {
                        console.log("Emails A iguales");
                        hiddenErrors(3);
                        return true
                    } else {
                        console.log("Email A no iguales");
                        showError(3, 3);
                        lockButton();
                        return false
                    }
                } else {
                    console.log("No hay email C");
                    hiddenErrors(3);
                    lockButton();
                    return false
                }
            } else {
                console.log("El email A no es valido");
                showError(3, 1);
                lockButton();
                return false
            }
        }

    } else {
        console.log("No se ha pasado ningun input");
        if (validEmail(1) && validEmail(2)) {
            if (emailToCompare == emailCToCompare) {
                console.log("Emails iguales");
                hiddenErrors(3);
                return true
            } else {
                showError(3, 3);
                lockButton();
                return false
            }
        } else {
            if(!validEmail(1)) {
    showError(3,1);
   } else {
    showError(3,2);
   }
            lockButton();
            return false
        }
    }
}

function proteccionDatosCheck() {
    console.log("Valida Proteccion Datos");
    if (document.getElementById('proteccionDatos').checked == true) {
        return true;
    } else {
        lockButton();
        return false;
    }
}


function otrasComunicacionesCheck() {
    console.log("Otras Comunicaciones");
    if (document.getElementById('otrasComunicaciones').checked == true) {
        return true;
    } else {
        lockButton();
        return false;
    }
}


function validFormat() {
    if ((validDocument()) && (validEmails()) && (proteccionDatosCheck())) {
        unlockButton();
        console.log("Formulario Valido");
        return true;
    } else {
        lockButton();
        console.log("Error en el formulario");
        return false;
    }
}

function unlockButton() {
    var btnSubmit = document.getElementById('btnSubmit');
    btnSubmit.removeAttribute("disabled");
    btnSubmit.classList.remove("endesa-form__btn--disable");
}

function lockButton() {
    var btnSubmit = document.getElementById('btnSubmit');
    btnSubmit.setAttribute("disabled", true);
    btnSubmit.classList.add("endesa-form__btn--disable");
}


/*Detecta si se han cambiado un check*/
function changeInput(input) {
    /*Recupera todos los inputs*/
    var documentInput = document.getElementById('document');
    var emailInput = document.getElementById('email');
    var emailCInput = document.getElementById('emailC');

        if ((documentInput.value) && (emailInput.value) && (emailCInput.value) && (proteccionDatosCheck())) {
            console.log("Con todos los datos");
            validFormat();
        } else {
            switch (input) {
                case 2:
                    validDocument();
                    console.log("Con Documento");
                    break;
                case 3:
                    validEmails(1);
                    console.log("Con Email");
                    break;
                case 4:
                    validEmails(2);
                    console.log("Con CEmail");
                    break;
                case 6:
                    proteccionDatosCheck();
                    console.log("Con Condiciones");
                    break;
                case 7:
                    otrasComunicacionesCheck();
                    console.log("Con Otras Comunicaciones");
                    break;
                default:
                    lockButton();
                    console.log("Sin datos");
            }
        }
    
}

function stopSending() {
    document.getElementById('SCForm').classList.remove("endesa-form--sending");
}
                                       
function visualSending() {
        if (validFormat()) {
            document.getElementById('SCForm').classList.add("endesa-form--sending");          
            /*ajax();*/
        } else {
            stopSending();
        }
    }   

/*Aviso Error Contrato y Documento*/
function errorContractDoc(errorType) {
    stopSending();
/*Muestra el error*/
   
        switch (errorType) {
            case 5:
                document.getElementById('documentSupraGroup').classList.add("endesa-form__group--invalid");
                document.getElementById('documentSupraError').innerHTML = docNoFound;
                //document.getElementById('documentSupraError').innerHTML = docInvent;
                break;
            case 11:
                document.getElementById('documentSupraGroup').classList.add("endesa-form__group--invalid");
                document.getElementById('documentSupraError').innerHTML = docInvalid;
                break;
            case 17:
                document.getElementById('documentSupraGroup').classList.add("endesa-form__group--invalid");
                /*document.getElementById('documentError').innerHTML = docNoRel;*/
                document.getElementById('documentSupraError').innerHTML = docInvalid;
                break;

            default:
                showError();
        }
    }
          
          
let ajaxFunction = document.getElementById('btnSubmit').addEventListener('click', ajaxPass);

var div = document.getElementById('contact-data-div');        

function ajaxPass() { 
 var idioma = document.getElementById('idiomaLanding').value;
 var ajaxResponse;
    var ajax = new XMLHttpRequest();


       ajax.onreadystatechange = function () {

            if (this.readyState == 4 && this.status == 200) {
 
                   ajaxResponse = this.responseText;
             
                    ajaxResponse = String(ajaxResponse)
              
   
              
if (ajaxResponse.indexOf('true') >= 0) {
  if (idioma == 'EN') { window.location.href = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-gracias-ML-EN";
          } 
  else if (idioma == 'CA') { window.location.href = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-gracias-ML-CA";
          }
  else { window.location.href = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-gracias-ML-ES";
          }
} else { 
  if (idioma == 'EN') { window.location.href = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-error-ML-EN";
          } 
  else if (idioma == 'CA') { window.location.href = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-error-ML-CA";
          }
  else { window.location.href = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-error-ML-ES";
          }
 }
             
              
                         }
               }
 
var paramsFormsToSent =  {     'Email':document.getElementById('email').value,
                               'Documento':document.getElementById('document').value,
                               'AccountId': div.getAttribute('data-account-id'),
                               'ContactId': div.getAttribute('data-contact-id'),
                               'otrasComunicaciones': document.getElementById("otrasComunicaciones").checked,
                               'proteccionDatos': document.getElementById("proteccionDatos").checked
          
                             }       
     console.log(paramsFormsToSent);                                          
               
     var ajaxUrl = "https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-Ajax"
     
                     
     ajax.open("POST", ajaxUrl, "true");
     ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     ajax.send("data="+JSON.stringify(paramsFormsToSent));
 
 }

          
    <script runat="server">
        Platform.Response.SetResponseHeader("Content-Security-Policy", "default-src 'self'; img-src 'self' https://image.digital.endesaclientes.com https://image.dev.notificaciones.endesaclientes.com;style-src 'self' https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-CSS https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-CSS-Fuente https://cloud.digital.endesaclientes.com/css-bootstrap-ml; font-src 'self' https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-CSS-Fuente data:; script-src 'self' 'unsafe-inline' https://code.jquery.com/jquery-3.7.1.min.js https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-JS https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-JS-errores-es;")
        Platform.Response.SetResponseHeader("X-Frame-Options", "DENY");
        Platform.Response.SetResponseHeader("X-Content-Type-Options", "nosniff");
        Platform.Response.SetResponseHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
        Platform.Response.SetResponseHeader("Referrer-Policy", "no-referrer");
        Platform.Response.SetResponseHeader("Permissions-Policy", "geolocation=(), microphone=()");
  </script>

<script runat="server">

  Platform.Load("Core", "1.1.1")
  try {
    var data = Request.GetFormField("data");

    JSON = Platform.Function.ParseJSON(data);

    Email = JSON.Email;
    nDocumento = JSON.Documento;
    AccountId = JSON.AccountId;
    ContactId = JSON.ContactId;  
    otrasComunicaciones = JSON.otrasComunicaciones;
    proteccionDatos = JSON.proteccionDatos;
    today = new Date();
 
    
    Variable.SetValue("@accountIdAmpscript", AccountId);
    Variable.SetValue("@contactIdAmpscript", ContactId);
    Variable.SetValue("@emailAmpscript", Email);

</script>

%%[

SET @retrieveAcc = RetrieveSalesforceObjects('Account', 'Id, Identifier_Type__c, NIF_CIF_Customer_NIE__c', 'Id', '=', @accountIdAmpscript)
SET @accountId = Field(Row(@retrieveAcc, 1), 'Id')
SET @tipoDocumento = Field(Row(@retrieveAcc, 1), 'Identifier_Type__c')
SET @numDocumento = Field(Row(@retrieveAcc, 1), 'NIF_CIF_Customer_NIE__c')
SET @responseAcc = Concat(@accountId, ',', @tipoDocumento, ',', @numDocumento)

SET @retrieveCont = RetrieveSalesforceObjects('Contact', 'Id, NIF_CIF_Customer_NIE__c', 'Id', '=', @contactIdAmpscript)
SET @contactId = Field(Row(@retrieveCont, 1), 'Id')
SET @contactDocumento = Field(Row(@retrieveCont, 1), 'NIF_CIF_Customer_NIE__c')
SET @responseCont = Concat(@contactId, ',', @contactDocumento)

]%%

<script runat="server">

    var responseAcc = Variable.GetValue("@responseAcc");
    var responseCont = Variable.GetValue("@responseCont");

    if (responseAcc && responseCont) {
      var responseAccRowData = responseAcc.split(',');
      var accountData = {
        id: responseAccRowData[0],
        tipoDocumento: responseAccRowData[1],
        numDocumento: responseAccRowData[2]
      };
      var responseContRowData = responseCont.split(',');
      var contactData = {
        id: responseContRowData[0],
        contactDocumento: responseContRowData[1]
      };      


      if (accountData.id == AccountId && accountData.numDocumento == nDocumento && contactData.id == ContactId && contactData.contactDocumento == nDocumento) {

</script>

%%[

SET @updateEmailAcc = UpdateSingleSalesforceObject('Account', @accountIdAmpscript, 'Email_con__c', @emailAmpscript, 'No_Email_flg__c', 'false')
SET @updateEmailCon = UpdateSingleSalesforceObject('Contact', @contactIdAmpscript, 'Email', @emailAmpscript, 'Validate_email__c', 'false', 'No_Email_flg__c', 'false')
SET @updateResponse = Concat(@updateEmailAcc, ',', @updateEmailCon)

]%%

<script runat="server">

          var updateResponse = Variable.GetValue("@updateResponse")


          var updateResponseRowData = updateResponse.split(',');
          var updateResponseData = {
            AccEmail: updateResponseRowData[0],
            ContEmail: updateResponseRowData[1]
          };


          if (updateResponseData.AccEmail == 1 && updateResponseData.ContEmail == 1) {

</script>

%%[

SET @createCase = CreateSalesforceObject('Case', 4, 'Subject', 'Modificación de cliente', 'AccountId', @accountIdAmpscript, 'RecordTypeId', '0121r000000Vl8IAAS', 'Status', 'New')


]%%

<script runat="server">

             var createCase = Variable.GetValue("@createCase") //Devuelve el ID

             if (createCase) {

</script>

%%[

SET @createTask = CreateSalesforceObject('Task', 6, 'RecordTypeId', '0121r000000Vl90AAC', 'Type', 'Action', 'Subject','Modificación de cliente', 'Status', 'Completed', 'WhatId', @createCase, 'FII_ACT_LKP_RelatedClient__c', @accountIdAmpscript)


]%%

<script runat="server">

            var createTask = Variable.GetValue("@createTask") //Devuelve el ID

            if (createTask) {

              if (otrasComunicaciones) {


</script>

%%[

SET @retrieveIndividual = RetrieveSalesforceObjects('Individual', 'Id', 'Contact__c', '=', @contactIdAmpscript)

IF RowCount(@retrieveIndividual) > 0 THEN

SET @individualId = Field(Row(@retrieveIndividual, 1), 'Id')
SET @updateIndividual = UpdateSingleSalesforceObject('Individual', @individualId, 'FII_IND_SEL_Molestar__c', 'No Ofertas', 'FII_IND_SEL_Iden_Evi__c', 'Landing SFMC')

ELSE

SET @retrieveNames = RetrieveSalesforceObjects('Contact', 'FirstName, LastName', 'Id', '=', @contactIdAmpscript)
SET @firstName = Field(Row(@retrieveNames, 1), 'FirstName')
SET @lastName = Field(Row(@retrieveNames, 1), 'LastName')
SET @createIndividual = CreateSalesforceObject('Individual', 5, 'Contact__c', @contactIdAmpscript, 'FII_IND_SEL_Molestar__c', 'No Ofertas', 'FII_IND_SEL_Iden_Evi__c', 'Landing SFMC', 'FirstName', @firstName, 'LastName', @lastName)

ENDIF

]%%

<script runat="server">

                var individualId = Variable.GetValue("@individualId")
                var updateIndividual = Variable.GetValue("@updateIndividual")
                var createIndividual = Variable.GetValue("@createIndividual")

                var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "Tipo_Documento", "Numero_Documento", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "CaseId", "TaskId", "IndividualId", "NewIndividualId"], [Email, AccountId, accountData.tipoDocumento, nDocumento, today, proteccionDatos, otrasComunicaciones, createCase, createTask, individualId, createIndividual]);
                Write('true')

              } else {
                var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "Tipo_Documento", "Numero_Documento", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "CaseId", "TaskId"], [Email, AccountId, accountData.tipoDocumento, nDocumento, today, proteccionDatos, otrasComunicaciones, createCase, createTask]);
                Write('true');
              }

            } else {
              var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "Tipo_Documento", "Numero_Documento", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "Error", "CaseId"], [Email, AccountId, accountData.tipoDocumento, nDocumento, today, proteccionDatos, otrasComunicaciones, 'La Task no ha podido crearse', createCase]);
              Write('false')
            }

          } else {
            var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "Tipo_Documento", "Numero_Documento", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "Error"], [Email, AccountId, accountData.tipoDocumento, nDocumento, today, proteccionDatos, otrasComunicaciones, 'El Case no ha podido crearse']);
            Write('false')
          }

        } else {
          var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "Tipo_Documento", "Numero_Documento", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "Error"], [Email, AccountId, accountData.tipoDocumento, nDocumento, today, proteccionDatos, otrasComunicaciones, 'Ha habido un error al modificar el email']);
          Write('false');
        }

      } else {
        var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "Tipo_Documento", "Numero_Documento", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "Error"], [Email, AccountId, accountData.tipoDocumento, nDocumento, today, proteccionDatos, otrasComunicaciones, 'El número de documento no coincide']);
        Write('false');
      }
    } else {
      var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "Error"], [Email, AccountId, today, proteccionDatos, otrasComunicaciones, 'No se pudo recuperar información de la cuenta.']);
      Write('false');
    }

  }

  catch (error) {
    var rows = Platform.Function.UpsertData("DE_S010528_ATC_CAM_DIG_ML_Captacion_Email_Registros_Landing", ["SubscriberKey"], [ContactId], ["Email", "AccountId", "CurrentDate", "CheckboxPolProtDatos", "CheckboxOtrasCom", "Error"], [Email, AccountId, today, proteccionDatos, otrasComunicaciones, 'Se ha producido un error en el proceso'])
    Write('false')    
  }
</script>
<!--%%[
  VAR @widthQS, @uriSMS
]%%-->
 <script language="javascript" runat="server">
    Platform.Load("Core", "1.1");
   
    var url = String(Request.URL());
    var widthQS;
    var uriSMS;
    var uri = url.split("?qs=");
    var qs = uri[1];

    if (qs) {
      widthQS = 1;
    } else {
      widthQS = 0;
      uriSMS = url.split("?")[1];
    }
    Variable.SetValue("@widthQS", widthQS);
    Variable.SetValue("@uriSMS", uriSMS);
  </script>

<script runat="server">
Platform.Load("Core","1.1.1");
try{
</script>
<!--%%[
   VAR @contactId, @accountId, @fechaEnvio

   IF (@widthQS == 0) AND (NOT EMPTY(@uriSMS)) THEN
   SET @password = "C0BAE23DF8B51807"

   SET @regSubscriberKey = '.*SubscriberKey=([^&]*)'
   SET @regAccountId = '.*AccountId=([^&]*)'
   SET @regFechaEnvio = '.*Fecha_Envio=([^&]*)'


   SET @decodedStr = DecryptSymmetric(@uriSMS,'des;mode=cbc;padding=pkcs7','',@password,'','','','')

   SET @contactId = RegExMatch(@decodedStr, @regSubscriberKey, 1)
   SET @accountId = RegExMatch(@decodedStr, @regAccountId, 1)
   SET @fechaEnvio = RegExMatch(@decodedStr, @regFechaEnvio, 1)

ENDIF
]%%-->
<script runat="server">
}catch(e){
  //Write(Stringify(e));
}
</script>


%%[
var @facturaDigital, @firstName, @name, @idioma, @landing1, @landing2

SET @currentDate = SystemDateToLocalDate(Now())
SET @diasDesdeEnvio = dateDiff(@fechaEnvio, @currentDate, "D")

IF @diasDesdeEnvio > 15 THEN
    Redirect("https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-expirado-ML-ES")

ELSE

SET @retrieveValidateEmail = RetrieveSalesforceObjects('Contact', 'Validate_email__c', 'Id', '=', @contactId)

SET @validateEmail = Field(Row(@retrieveValidateEmail, 1), 'Validate_email__c')

IF @retrieveValidateEmail == 'true' THEN 
    Redirect("https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-expirado-ML-ES")
ELSE

SET @idioma = 'ES'

SET @landing1 = CloudPagesUrl(5950, 'SubscriberKey', @contactId, 'AccountId', @accountId)
SET @landing1name = 'Català'
SET @landing2 = CloudPagesUrl(5949, 'SubscriberKey', @contactId, 'AccountId', @accountId)
SET @landing2name = 'English'



SET @facturaDigital = LookUp('DE_S010528_ATC_CAM_DIG_ML_Captacion_Email', 'Factura_Digital', 'SubscriberKey', @contactId)

SET @firstName = ProperCase(LookUp('DE_S010528_ATC_CAM_DIG_ML_Captacion_Email', 'FirstName', 'SubscriberKey', @contactId))

IF Length(@firstName) > 1 THEN 
SET @name = @firstName
ELSE 
SET @name = ProperCase(LookUp('DE_S010528_ATC_CAM_DIG_ML_Captacion_Email', 'LastName', 'SubscriberKey', @contactId))
ENDIF
]%%

<!DOCTYPE html>
<html lang="es" dir="ltr">
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
    <title>Endesa Energía</title>
  
    <link rel="icon" type="image/png" href=" https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/f2aba635-8483-40bc-8475-fac5e8280efc.png" sizes="32x32"/>
    <link rel="icon" type="image/png" href=" https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/368c288a-7f51-42b6-8fee-07387bbf0349.png" sizes="192x192"/>
    <link rel="apple-touch-icon-precomposed" type="image/png" href="https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/589cd57f-33a0-417b-a820-004c3798ad0a.png"/>
    <meta name="msapplication-TileImage" content=" https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/935d83f7-1300-4e4a-b237-46a71f331d82.png"/>

    <link id="fd-simple-bootstrap-css-ml" rel="stylesheet" type="text/css" href="https://cloud.digital.endesaclientes.com/css-bootstrap-ml"/>
    <link id="fd-simple-import-fonts-ml" rel="stylesheet" type="text/css" href="https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-CSS-Fuente"/>
    <link id="fd-simple-css-ml" rel="stylesheet" type="text/css" href="https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-CSS"/>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
    <script runat="server">
        Platform.Response.SetResponseHeader("Content-Security-Policy", "default-src 'self'; img-src 'self' https://image.digital.endesaclientes.com https://image.dev.notificaciones.endesaclientes.com;style-src 'self' https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-CSS https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-CSS-Fuente https://cloud.digital.endesaclientes.com/css-bootstrap-ml; font-src 'self' https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-CSS-Fuente data:; script-src 'self' 'unsafe-inline' https://code.jquery.com/jquery-3.7.1.min.js https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-JS https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-JS-errores-es;")
        Platform.Response.SetResponseHeader("X-Frame-Options", "DENY");
        Platform.Response.SetResponseHeader("X-Content-Type-Options", "nosniff");
        Platform.Response.SetResponseHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
        Platform.Response.SetResponseHeader("Referrer-Policy", "no-referrer");
        Platform.Response.SetResponseHeader("Permissions-Policy", "geolocation=(), microphone=()");
  </script>
   
  </head>
  <body id="bodyCookie" class="endesa-body" data-function="fc-body">
    <div id="consent_blackbar">
    </div>

    <div class="endesa-header">
      <div class="wrapper">
        <table cellpadding="0" cellspacing="0" width="100%" role="presentation" class="stylingblock-table-wrapper"><tr><td class="stylingblock-content-wrapper camarker-inner">
  <div class="container container-fluid">
  <div class="row">
    <div class="col-sm-6 col-xs-6">

      <div class="endesa-logo">
        <a class="endesa-logo__link" href="https://www.endesa.com" title="https://www.endesa.com" target="_blank"><span class="endesa-logo__accesible"> endesa.com</span>
        </a>
      </div>
    </div>
    
    <div class="col-sm-6 col-xs-6">
      <div class="endesa-header-language">
        <span class="endesa-header-language__menu">
          <a class="endesa-header-language__active" href="javascript:void(0);" data-function="fc-select" title="Español">Español</a></span>
        <ul class="endesa-header-language__list" id="fcMenu" data-function="fc-menu">
         <input id="landing1" type="hidden" value="%%=v(@landing1)=%%">
         <input id="landing1name" type="hidden" value="%%=v(@landing1name)=%%">
         <input id="landing2" type="hidden" value="%%=v(@landing2)=%%">
         <input id="landing2name" type="hidden" value="%%=v(@landing2name)=%%">
         <input id="idiomaLanding" type="hidden" value="%%=v(@idioma)=%%">
        </ul>
      </div>
    </div>
    
  </div>
</div>
</td></tr></table><table cellpadding="0" cellspacing="0" width="100%" role="presentation" class="stylingblock-table-wrapper"><tr><td class="stylingblock-content-wrapper camarker-inner">
<div class="container">
  <div class="row">
    <div class="col-md-6 order-12">
      <div class="endesa-form-container">
        <form action="" method="POST" align="left" id="SCForm" class="endesa-form" novalidate="novalidate">
          <fieldset id="fieldsetForm" class="endesa-form__fieldset">
            <legend class="endesa-form__legend">
              Actualiza y confirma tu dirección de email
            </legend>
             
            <div class="endesa-form__group endesa-form__group--col-2" id="documentSupraGroup">
              <span id="documentSupraError"></span>
              <div class="endesa-form__group--col-2-lf">
                <label class="endesa-form__label endesa-form__label--visible" for="documentType">Documento
                  </label>
                <select class="endesa-form__select" id="documentType" name="documentType" onchange="changeDocument()">
                  <option value="nif" selected="selected">
                    NIF
                    del
                    titular
                  </option>
                  <option value="nie">
                    NIE
                    del
                    titular
                  </option>
                  <option value="cif">
                    CIF
                    del
                    titular
                  </option>
                  <option value="pasaporte">
                    Pasaporte
                    del
                    titular
                  </option>
                </select>
              </div>
              <div class="endesa-form__group--col-2-rg" id="documentGroup">      
                <label class="endesa-form__label endesa-form__label--visible" for="document">Número de Documento
                  </label>
                <input class="endesa-form__input" name="document" id="document" value="%%=v(@documento)=%%" placeholder="Documento" type="text" onchange="changeInput(2)" required>
                <span id="documentError"></span>
              </div>
            </div>
            <div class="endesa-form__group endesa-form__group--col-2" id="emailsGroup">
              <span id="emailsError"></span>
              <div class="endesa-form__group--col-2-lf" id="emailGroup">
                
                <label class="endesa-form__label endesa-form__label--visible" for="email">E-mail
                  </label>
                <input class="endesa-form__input" name="email" id="email" value="%%=v(@email)=%%" placeholder="E-mail" type="email" onchange="changeInput(3)" required>
                <span id="emailError"></span>
              </div>
              <div class="endesa-form__group--col-2-rg" id="emailCGroup">
               
                <label class="endesa-form__label endesa-form__label--visible" for="emailC">E-mail
                  </label>
                <input class="endesa-form__input" name="emailC" id="emailC" value="%%=v(@email)=%%" placeholder="Confirma E-mail" type="email" onchange="changeInput(4)" onpaste="return false" required>
                 <span id="emailCError"></span>
              </div>
            </div>
            
           <div class="endesa-form__check endesa-form__check">
      <input type="checkbox" id="proteccionDatos" name="proteccionDatos" data-field-type="Text" onchange="changeInput(6)" required>
      <label class="endesa-form__text" for="proteccionDatos">Acepto
        la        
        <a id="conditions" class="endesa-form__link" href="https://www.endesa.com/es/proteccion-datos-endesa" data-toggle="modal" data-target="#endesa-popUpFacturaDigital" title="Condiciones de la Factura Digital">política</a> de protección de datos
      </label>
    </div>
    <div class="endesa-form__check endesa-form__check">
      <input type="checkbox" id="otrasComunicaciones" name="otrasComunicaciones" data-field-type="Text" onchange="changeInput(7)">
      <label class="endesa-form__text" for="otrasComunicaciones">No quiero recibir otras comunicaciones de asesoramiento comercial
      </label>
    </div>
            <input type="hidden" name="documentHidden" id="documentHidden" data-field-type="Text">
            <div id="buttonContainer">
              <button type="button" class="endesa-form__btn endesa-form__btn--disable" id="btnSubmit" onclick="visualSending()"><span class="endesa-form__btn-text">Actualizar dirección de email</span></button>
            </div>
          </fieldset>
          <div id="contact-data-div" data-account-id="%%=v(@accountId)=%%" data-contact-id="%%=v(@contactId)=%%"></div>
        </form>
      </div>
      

    </div>
 <div class="col-md-6 order-1">
  <div class="endesa-cursor">
    
   <p class="endesa-cursor__text">
     <b>Por tu seguridad y comodidad, actualiza y confirma tu dirección de email.</b>
   </p>
   
  </div>
 
 
  <div class="endesa-promo-info">
  
   <p class="endesa-info-text">
     Hola %%=v(@name)=%%,
   </p>
      <p class="endesa-info-text">
        En Endesa hemos identificado que, <span class="endesa-bold-text"> la dirección de email que tenemos tuya puede ser errónea.</span>
   </p>
    %%[IF @facturaDigital == true THEN]%%
      <p class="endesa-info-text">
     Por este motivo, hemos detectado que<span class="endesa-bold-text"> no estás recibiendo el aviso de tu factura </span> cuando está disponible.
   </p>
      <p class="endesa-info-text">
     Por favor, para que te podamos enviar tu factura por correo electrónico, es necesario que <span class="endesa-bold-text"> nos facilites una dirección de email correcta.</span>
   </p>
    %%[ELSE]%%
    <p class="endesa-info-text">
     Por este motivo, hemos detectado que<span class="endesa-bold-text"> no estás recibiendo las comunicaciones informativas sobre tu contrato:</span> modificaciones de contrato, novedades, actualizaciones de precios, etc.
   </p>
      <p class="endesa-info-text">
     Por favor, para que te podamos enviar este tipo de comunicaciones, es importante que <span class="endesa-bold-text"> nos facilites una dirección de email correcta.</span>
   </p>
    %%[ENDIF]%%
     <p class="endesa-info-text">
     Para tu seguridad, <span class="endesa-bold-text"> una vez cumplimentes el formulario</span> facilitándonos el NIF y la nueva dirección de email, <span class="endesa-bold-text"> te enviaremos un correo a la dirección facilitada, para tu verificación.</span> 
   </p>
   </div>
  </div>

    </div>
  </div>

</td></tr></table>
      </div>
    </div>    
      <footer class="e-footer">
        <div class="subfooter">
            <div class="footer-in">
                <div class="footerUp">
                    <div>
                        <a id="text-footer1" href="https://www.endesa.com/es/accesibilidad" target="_blank">
                      <img src="https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/73214472-4f2f-42b8-8f9a-5f1d7f7a4996.png" alt="Accesibilidad">  Accesibilidad </a>&nbsp;&nbsp;|&nbsp;&nbsp;
                    </div>
                    <div>
                        <a id="text-footer2" href="https://www.endesa.com/es/politica-cookies" target="_blank"><img src="https://image.dev.notificaciones.endesaclientes.com/lib/fe3111737364047c711778/m/1/73214472-4f2f-42b8-8f9a-5f1d7f7a4996.png" alt="Política de Cookies">  Política de Cookies </a>
                    </div>
                </div>
                <div class="footerDown">
                    &copy; %%xtyear%% Endesa Energ&iacute;a, Endesa&nbsp;S.A.
                </div>
            </div>
        </div>
    </footer>
    <script id="js-script" src="https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-ML-JS"></script>
    <script id="js-errores" src="https://cloud.dev.notificaciones.endesaclientes.com/Captacion-email-JS-errores-es"></script>


  </body>
</html>
%%[ENDIF]%%
%%[ENDIF]%%
star

Tue Aug 12 2025 16:00:41 GMT+0000 (Coordinated Universal Time)

@jrg_300i ##pascal

star

Tue Aug 12 2025 16:00:13 GMT+0000 (Coordinated Universal Time)

@jrg_300i #php #laravel

star

Tue Aug 12 2025 15:54:47 GMT+0000 (Coordinated Universal Time)

@jrg_300i #php #laravel

star

Tue Aug 12 2025 15:19:23 GMT+0000 (Coordinated Universal Time)

@jrg_300i #php #laravel

star

Tue Aug 12 2025 15:15:46 GMT+0000 (Coordinated Universal Time)

@jrg_300i #php #laravel

star

Tue Aug 12 2025 15:01:32 GMT+0000 (Coordinated Universal Time)

@enojiro7

star

Tue Aug 12 2025 15:01:06 GMT+0000 (Coordinated Universal Time)

@enojiro7

star

Tue Aug 12 2025 11:07:34 GMT+0000 (Coordinated Universal Time) https://www.opris.exchange/cryptocurrency-wallet-development/

@valentinavalen

star

Tue Aug 12 2025 10:49:27 GMT+0000 (Coordinated Universal Time) https://crossdex.web5.nexus/

@Clarapeters #crossdex #defi #cryptotrading #blockchain #dex

star

Tue Aug 12 2025 10:24:53 GMT+0000 (Coordinated Universal Time)

@enite

star

Tue Aug 12 2025 08:53:16 GMT+0000 (Coordinated Universal Time)

@MinaTimo

star

Tue Aug 12 2025 07:42:24 GMT+0000 (Coordinated Universal Time)

@enite

star

Tue Aug 12 2025 06:08:01 GMT+0000 (Coordinated Universal Time)

@usman13

star

Tue Aug 12 2025 02:44:08 GMT+0000 (Coordinated Universal Time)

@root1024 ##python

star

Tue Aug 12 2025 02:42:04 GMT+0000 (Coordinated Universal Time)

@root1024 ##python

star

Tue Aug 12 2025 02:39:53 GMT+0000 (Coordinated Universal Time)

@root1024 ##python

star

Tue Aug 12 2025 02:12:42 GMT+0000 (Coordinated Universal Time)

@root1024 ##python ##pandas ##dataframe

star

Mon Aug 11 2025 12:05:09 GMT+0000 (Coordinated Universal Time) https://www.plurance.com/bet365-clone-script

@Auroraceleste

star

Mon Aug 11 2025 07:33:40 GMT+0000 (Coordinated Universal Time)

@shubhangi.b

star

Mon Aug 11 2025 06:21:57 GMT+0000 (Coordinated Universal Time)

@shubhangi.b

star

Mon Aug 11 2025 03:42:40 GMT+0000 (Coordinated Universal Time)

@root1024 ##python ##pandas ##dataframe

star

Sun Aug 10 2025 02:46:40 GMT+0000 (Coordinated Universal Time)

@davidmchale #functional #args #arguments

star

Sat Aug 09 2025 12:00:58 GMT+0000 (Coordinated Universal Time) https://trio321.de/

@lunnajennifer #hausmeisterdienstein der nähe

star

Sat Aug 09 2025 07:02:09 GMT+0000 (Coordinated Universal Time) https://www.proxy4free.com/

@proxy4free

star

Sat Aug 09 2025 07:02:08 GMT+0000 (Coordinated Universal Time) https://www.proxy4free.com/

@proxy4free

star

Fri Aug 08 2025 15:13:30 GMT+0000 (Coordinated Universal Time)

@jrg_300i #php #laravel

star

Fri Aug 08 2025 13:50:25 GMT+0000 (Coordinated Universal Time)

@jrg_300i #php #laravel

star

Fri Aug 08 2025 12:10:24 GMT+0000 (Coordinated Universal Time) https://maticz.com/dao-development-services

@Maeve43 #blockchain #web3 #crypto

star

Fri Aug 08 2025 10:43:18 GMT+0000 (Coordinated Universal Time)

@vishalkoriya125

star

Fri Aug 08 2025 10:42:22 GMT+0000 (Coordinated Universal Time)

@vishalkoriya125

star

Fri Aug 08 2025 07:46:43 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:43:47 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:42:58 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:42:30 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:42:00 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:41:42 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:40:10 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:39:38 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:36:41 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:35:58 GMT+0000 (Coordinated Universal Time)

@andresrivera #ampscript

star

Fri Aug 08 2025 07:24:26 GMT+0000 (Coordinated Universal Time) https://www.nyamericanjacket.com/product-category/fur-jackets-and-coats-collection/

@MarkJohnson

star

Fri Aug 08 2025 07:23:17 GMT+0000 (Coordinated Universal Time) https://www.thecryptoape.com/cryptocurrency-exchange-script

@Davidbrevis

star

Fri Aug 08 2025 07:22:28 GMT+0000 (Coordinated Universal Time) https://www.thecryptoape.com/ico-development-company

@Davidbrevis

star

Fri Aug 08 2025 07:22:03 GMT+0000 (Coordinated Universal Time) https://www.leatherjacketblack.com/category/halloween-sales-and-discounts/

@MarkJohnson

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension