Cargando rodillo
"config": { "tplBaseVersion": 5, "type": "template", "title": "Horarios Rodillo", "duration": 30, "defaultPreviewOrientation": "portrait", "responsive": true, "scaledPreview": true, "screenshot": "portrait" }, "vars": { "scheduleUrl": { "name": "URL del JSON de horarios", "type": "text", "value": "https://innplay.site/screen-payload/HkLy1_A_Esejbt8T3KEJMai3S1S0dJbI", "placeholder": "https://innplay.site/screen-payload/...", "description": "URL que devuelve el JSON con la estructura meta/config/timetable. Se refresca cada 5 minutos.", "optional": false }, "orientation": { "name": "Orientación", "type": "text", "value": "portrait", "selectable": { "values": ["portrait", "landscape"], "customizable": false }, "description": "Orientación de la pantalla donde se mostrará el rodillo.", "optional": false }, "headerText": { "name": "Texto del encabezado (título)", "type": "text", "value": "", "placeholder": "(auto según idioma)", "description": "Título grande del encabezado. Déjalo vacío para que se traduzca automáticamente según el idioma (es: PRÓXIMAS CLASES, en: UPCOMING CLASSES, ca: PROPERES CLASSES, gl: PRÓXIMAS CLASES, eu: HURRENGO KLASEAK, pt: PRÓXIMAS AULAS).", "optional": true }, "headerSubtitle": { "name": "Subtítulo del encabezado", "type": "text", "value": "", "placeholder": "(auto según idioma)", "description": "Subtítulo pequeño debajo del título. Déjalo vacío para usar la traducción automática (es: 'Horario semanal', en: 'Weekly schedule', etc.).", "optional": true }, "logo": { "name": "Logo", "type": "image", "value": "./assets/logo.png", "description": "Imagen del logo del cliente. Por defecto viene un placeholder neutro — sube aquí el logo real del club. Si se deja vacío, no se muestra logo.", "optional": true }, "qrUrl": { "name": "URL del código QR", "type": "text", "value": "", "placeholder": "https://ejemplo.com/mi-url", "description": "Si introduces una URL, aparecerá un código QR en la cabecera. Déjalo vacío para ocultar el QR. Requiere conexión a internet (usa api.qrserver.com).", "optional": true }, "headerTextSize": { "name": "Escala global texto cabecera (x)", "type": "number", "value": "1", "number": { "max": 2, "min": 0.5, "slider": true }, "description": "Multiplicador GLOBAL aplicado a los textos del header. Escala hora, fecha, título y subtítulo a la vez conservando las proporciones individuales. Por encima está headerTimeSize, headerDateSize, headerTitleSize y headerSubtitleSize para ajustes finos.", "optional": false }, "headerTimeSize": { "name": "Tamaño HORA en cabecera (em)", "type": "number", "value": "1.9", "number": { "max": 4, "min": 0.6, "slider": true }, "description": "Altura de la hora del reloj en em. Default 1.9. Se multiplica por el multiplicador global headerTextSize.", "optional": false }, "headerDateSize": { "name": "Tamaño FECHA en cabecera (em)", "type": "number", "value": "0.75", "number": { "max": 2.5, "min": 0.4, "slider": true }, "description": "Altura de la fecha en em. Default 0.75. Se multiplica por headerTextSize.", "optional": false }, "headerTitleSize": { "name": "Tamaño TÍTULO en cabecera (em)", "type": "number", "value": "1.9", "number": { "max": 4, "min": 0.6, "slider": true }, "description": "Altura del título (PRÓXIMAS CLASES…) en em. Default 1.9. Se multiplica por headerTextSize.", "optional": false }, "headerSubtitleSize": { "name": "Tamaño SUBTÍTULO en cabecera (em)", "type": "number", "value": "0.78", "number": { "max": 2.5, "min": 0.4, "slider": true }, "description": "Altura del subtítulo en em. Default 0.78. Se multiplica por headerTextSize.", "optional": false }, "qrSize": { "name": "Tamaño del QR (em)", "type": "number", "value": "10", "number": { "max": 16, "min": 3, "slider": true }, "description": "Altura y anchura del código QR en em. Independiente del tamaño del logo. Con fontSize 28: 10 ≈ 280 px, 3 ≈ 84 px, 16 ≈ 448 px.", "optional": false }, "logoSize": { "name": "Tamaño del logo (em)", "type": "number", "value": "10", "number": { "max": 16, "min": 3, "slider": true }, "description": "Altura del logo en em (relativa al tamaño de fuente base). Con fontSize 28: 7 ≈ 196 px, 10 ≈ 280 px, 12 ≈ 336 px, 16 ≈ 448 px. Default 10 = caja de logo grande. Si el logo es más grande que el resto del contenido del header, el header crece para acomodarlo.", "optional": false }, "fontFamily": { "name": "Tipo de letra", "type": "text", "value": "Ubuntu", "selectable": { "values": [ "Ubuntu", "Montserrat", "Inter", "Roboto", "Poppins", "Oswald", "Bebas Neue", "Raleway", "Open Sans", "Barlow", "Rubik" ], "customizable": false }, "description": "Familia tipográfica (Google Fonts).", "optional": false }, "fontSize": { "name": "Tamaño de fuente base (px)", "type": "number", "value": "28", "number": { "max": 48, "min": 16, "slider": true }, "description": "Tamaño base para textos secundarios. El título y otros textos escalan en proporción.", "optional": false }, "cardTones": { "name": "Tonos de tarjeta (3 variantes)", "type": "object", "value": "{\"dark\":\"#214686\",\"mid\":\"#2c60a5\",\"light\":\"#659cd5\"}", "properties": { "dark": { "name": "Tono oscuro", "type": "color", "optional": false }, "mid": { "name": "Tono medio", "type": "color", "optional": false }, "light": { "name": "Tono claro", "type": "color", "optional": false } }, "description": "Las tarjetas alternan entre estos 3 tonos siguiendo un patrón pseudo-aleatorio determinista (no se repite el mismo tono en tarjetas consecutivas). Cada tarjeta se pinta con un degradado desde su tono base hacia el color del 'Fin del degradado (común)'.", "optional": false }, "cardGradientShade": { "name": "Color de fin del degradado (común a todas las tarjetas)", "type": "color", "value": "#0F2545", "description": "Color único hacia el que degrada cada tarjeta, independientemente de su tono base. Usa un tono oscuro del color principal para que todas las tarjetas compartan una 'sombra' visual común.", "optional": false }, "cardTextColors": { "name": "Colores de texto (dentro de tarjeta)", "type": "object", "value": "{\"primary\":\"#FFFFFF\",\"secondary\":\"#DCE8F5\"}", "properties": { "primary": { "name": "Texto principal", "type": "color", "optional": false }, "secondary": { "name": "Texto secundario", "type": "color", "optional": false } }, "description": "Colores del texto dentro de cada tarjeta (título, hora, técnico, etc.).", "optional": false }, "pageTextColors": { "name": "Colores de texto (fuera de tarjeta)", "type": "object", "value": "{\"primary\":\"#1C3163\",\"secondary\":\"#5A5A5A\"}", "properties": { "primary": { "name": "Texto principal", "type": "color", "optional": false }, "secondary": { "name": "Texto secundario", "type": "color", "optional": false } }, "description": "Colores de texto fuera de las tarjetas (cabecera, fecha, hora).", "optional": false }, "roomColors": { "name": "Colores de la píldora Sala", "type": "object", "value": "{\"bg\":\"#FFFFFF\",\"text\":\"#214686\"}", "properties": { "bg": { "name": "Fondo de la píldora", "type": "color", "optional": false }, "text": { "name": "Texto de la píldora", "type": "color", "optional": false } }, "description": "Colores de la píldora blanca que muestra la sala en cada tarjeta.", "optional": false }, "pageBackground": { "name": "Color de fondo de página", "type": "color", "value": "#F0F4FA", "description": "Color de fondo general del rodillo.", "optional": false }, "headerBackground": { "name": "Color de fondo de cabecera", "type": "color", "value": "#FFFFFF", "description": "Color de fondo de la cabecera (detrás del logo y título).", "optional": true }, "showRoom": { "name": "Mostrar sala", "type": "text", "value": "yes", "selectable": { "values": ["yes", "no"], "customizable": false }, "description": "Si se muestra el nombre de la sala en cada tarjeta.", "optional": false }, "showInstructor": { "name": "Mostrar técnico", "type": "text", "value": "yes", "selectable": { "values": ["yes", "no"], "customizable": false }, "description": "Si se muestra el nombre del técnico/instructor en cada tarjeta.", "optional": false }, "showCountdown": { "name": "Mostrar cuenta atrás (comienzo de clase)", "type": "text", "value": "yes", "selectable": { "values": ["yes", "no"], "customizable": false }, "description": "Cuenta atrás que aparece solo cuando faltan menos de 15 minutos para el inicio de la clase.", "optional": false }, "showCategory": { "name": "Mostrar categoría de actividad", "type": "text", "value": "yes", "selectable": { "values": ["yes", "no"], "customizable": false }, "description": "Etiqueta con el nombre de la categoría (activityKey) y color de la agrupación.", "optional": false }, "classesVisible": { "name": "Clases visibles a la vez", "type": "number", "value": "8", "number": { "max": 12, "min": 2, "slider": true }, "description": "Número de clases que se muestran en el rodillo simultáneamente. Las tarjetas se reparten el alto disponible automáticamente.", "optional": false }, "activeMinutes": { "name": "Duración 'En curso' en minutos", "type": "number", "value": "10", "number": { "max": 60, "min": 1, "slider": true }, "description": "Cuántos minutos se mantiene visible una clase después de su hora de inicio, destacada como 'EN CURSO'. Pasado ese tiempo, desaparece y sube la siguiente. Default 10 min.", "optional": false }, "refreshMinutes": { "name": "Intervalo de refresco del JSON (min)", "type": "number", "value": "60", "number": { "max": 180, "min": 5, "slider": true }, "description": "Cada cuántos minutos se vuelve a pedir el JSON de horarios. El payload se mantiene en memoria, así que las clases y el reloj se siguen actualizando cada segundo sin tocar la red. Si una llamada falla, se reintenta en 30s hasta 3 veces antes de esperar el intervalo completo.", "optional": false }, "emptyMessage": { "name": "Mensaje cuando no hay clases (override)", "type": "text", "value": "", "placeholder": "Próximas clases en breve", "description": "Déjalo vacío para usar la traducción automática según el Idioma. Si lo rellenas, se usa ese texto tal cual (útil para mensajes personalizados).", "optional": true }, "language": { "name": "Idioma", "type": "text", "value": "es", "selectable": { "values": ["es", "ca", "gl", "eu", "en", "pt"], "customizable": false }, "description": "Idioma de los textos internos del template: días de la semana, 'Próxima clase:', 'hoy', 'mañana' y el sufijo del reloj. No afecta al texto del encabezado ni al mensaje de vacío si los has rellenado manualmente. Valores: es=Español, ca=Català, gl=Galego, eu=Euskara, en=English, pt=Português.", "optional": false } }