{
  "version": 1,
  "reviewed": "2026-10-01",
  "sections": {
    "stage": {
      "es": "Escenas",
      "en": "Stage"
    },
    "media": {
      "es": "Medios",
      "en": "Media"
    },
    "text": {
      "es": "Texto",
      "en": "Text"
    },
    "master": {
      "es": "Máster",
      "en": "Master"
    },
    "account": {
      "es": "Cuenta y herramientas",
      "en": "Account and tools"
    }
  },
  "controls": [
    {
      "id": "scene-auto",
      "section": "stage",
      "label": "AUTO escenas / Auto-scene",
      "selector": "[data-app-click=\"toggle-scene-auto\"]",
      "description": {
        "es": "Preescucha automática de escenas. El AUTO del Máster tiene prioridad y apaga este reloj local.",
        "en": "Automatic scene preview. Master AUTO takes priority and stops this local timer."
      },
      "access": "free"
    },
    {
      "id": "scene-interval",
      "section": "stage",
      "label": "SCN",
      "selector": "#sl-sc",
      "description": {
        "es": "Duración solicitada por escena. El conductor del Máster decide el cambio en su rejilla de beats; no es una garantía de cambio exacto cada 0,33 s.",
        "en": "Requested scene duration. The Master conductor schedules changes on its beat grid; this is not a guarantee of an exact 0.33-second change."
      },
      "access": "free",
      "range": {
        "min": 0.33,
        "max": 600,
        "step": 0.01,
        "unit": "s"
      },
      "writable": true
    },
    {
      "id": "transition-cut",
      "section": "stage",
      "label": "CUT",
      "selector": "#tr-cut",
      "description": {
        "es": "Cambio directo.",
        "en": "Immediate cut."
      },
      "access": "free"
    },
    {
      "id": "transition-morph",
      "section": "stage",
      "label": "MORPH",
      "selector": "#tr-morph",
      "description": {
        "es": "Interpolación entre escenas compatibles.",
        "en": "Interpolation between compatible scenes."
      },
      "access": "free"
    },
    {
      "id": "transition-flash",
      "section": "stage",
      "label": "FLASH",
      "selector": "#tr-flash",
      "description": {
        "es": "Transición con destello.",
        "en": "Flash transition."
      },
      "access": "free"
    },
    {
      "id": "morph",
      "section": "stage",
      "label": "MORPH",
      "selector": "#sl-morph",
      "description": {
        "es": "Preferencia de duración de entrada. El máximo efectivo se adapta a SCN: hasta 1 s permite como máximo 240 ms; por encima deja 760 ms estables, hasta el techo de 6000 ms.",
        "en": "Preferred entry duration. The effective maximum follows SCN: up to 1 s it allows at most 240 ms; above that it leaves 760 ms stable, up to a 6000 ms ceiling."
      },
      "access": "free",
      "range": {
        "min": 0,
        "max": 6000,
        "step": 10,
        "unit": "ms"
      },
      "writable": false
    },
    {
      "id": "moods",
      "section": "stage",
      "label": "Techno · Rave · Ambient · Hip-Hop · Laser · Festival",
      "selector": "#scene-pads .mood-btn",
      "description": {
        "es": "Selecciona la familia visual. Un candado puede corresponder a contenido no comprado; Pro no incluye packs.",
        "en": "Select a visual family. A lock may indicate content you do not own; Pro does not include packs."
      },
      "access": "free"
    },
    {
      "id": "scene-pads",
      "section": "stage",
      "label": "Pads · Editar / Edit",
      "selector": "#scene-pads .stage-row-pads",
      "description": {
        "es": "Dispara la escena asignada. El editor permite elegir entre escenas disponibles. Free: 24 pads de sesión; Pro: 48 pads y banco por cuenta.",
        "en": "Trigger the assigned scene. The editor selects available scenes. Free: 24 session pads; Pro: 48 pads and an account-owned bank."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "reactivity",
      "section": "stage",
      "label": "Reactividad / Reactivity · NRG",
      "selector": "#sl-s, #sl-s-m",
      "description": {
        "es": "Intensidad de respuesta visual; no es volumen de salida de audio.",
        "en": "Visual response intensity; this is not audio output volume."
      },
      "access": "free",
      "range": {
        "min": 1,
        "max": 10,
        "step": 1,
        "unit": ""
      },
      "writable": true
    },
    {
      "id": "bloom",
      "section": "stage",
      "label": "Bloom · BLM",
      "selector": "#sl-bloom, #sl-bloom-m",
      "description": {
        "es": "Resplandor de la composición.",
        "en": "Composition glow."
      },
      "access": "free",
      "range": {
        "min": 0,
        "max": 100,
        "step": 5,
        "unit": "%"
      },
      "writable": true
    },
    {
      "id": "video-blend",
      "section": "stage",
      "label": "Video blend · MIX",
      "selector": "#sl-b, #sl-b-m",
      "description": {
        "es": "Mezcla entre escena y medio del bus principal. La CAPA se ajusta en su propio editor.",
        "en": "Blend between scene and main-bus media. LAYER has its own editor."
      },
      "access": "free",
      "range": {
        "min": 0,
        "max": 100,
        "step": 1,
        "unit": "%"
      },
      "writable": true
    },
    {
      "id": "load-media",
      "section": "media",
      "label": "Cargar / Load",
      "selector": "#fin",
      "description": {
        "es": "Selecciona imágenes, vídeos o .luma locales. Free: 1 medio de hasta 15 MB; Pro: 21 de hasta 30 MB cada uno. El códec debe ser compatible con el navegador.",
        "en": "Select local images, videos or .luma files. Free: 1 media item up to 15 MB; Pro: 21 up to 30 MB each. The browser must support the codec."
      },
      "access": "free"
    },
    {
      "id": "generator",
      "section": "media",
      "label": "Generative only",
      "selector": "[data-app-click=\"media-generator\"]",
      "description": {
        "es": "Vuelve al generador de escenas como visual principal.",
        "en": "Return to generated scenes as the main visual."
      },
      "access": "free"
    },
    {
      "id": "media-navigation",
      "section": "media",
      "label": "Anterior / Siguiente · Previous / Next",
      "selector": "[data-app-click=\"prev-media\"], [data-app-click=\"next-media\"]",
      "description": {
        "es": "Recorre los medios cargados.",
        "en": "Step through loaded media."
      },
      "access": "free"
    },
    {
      "id": "sequential",
      "section": "media",
      "label": "Sequential",
      "selector": "[data-app-click=\"toggle-seq\"]",
      "description": {
        "es": "Activa el recorrido secuencial de medios.",
        "en": "Enable sequential media selection."
      },
      "access": "free"
    },
    {
      "id": "media-auto",
      "section": "media",
      "label": "Auto-cycle",
      "selector": "[data-app-click=\"toggle-auto\"]",
      "description": {
        "es": "Alterna medios según su programación. El AUTO del Máster coordina el programa global.",
        "en": "Cycle media according to their schedule. Master AUTO coordinates the overall program."
      },
      "access": "free"
    },
    {
      "id": "beat-cut",
      "section": "media",
      "label": "Beat cut",
      "selector": "[data-app-click=\"toggle-beat\"]",
      "description": {
        "es": "Habilita cortes de vídeo asociados al beat.",
        "en": "Enable beat-related video cuts."
      },
      "access": "free"
    },
    {
      "id": "crossfade",
      "section": "media",
      "label": "Crossfade",
      "selector": "#sl-xf",
      "description": {
        "es": "Fundido entre medios del bus principal. Es distinto del morph de escenas.",
        "en": "Main-bus media crossfade. Separate from scene morph."
      },
      "access": "free",
      "range": {
        "min": 0,
        "max": 2000,
        "step": 100,
        "unit": "ms"
      },
      "writable": true
    },
    {
      "id": "media-cycle",
      "section": "media",
      "label": "Cycle every",
      "selector": "#sl-cy",
      "description": {
        "es": "Cadencia solicitada de medios; el conductor respeta sus reglas de duración y finalización.",
        "en": "Requested media cadence; the conductor also respects duration and completion rules."
      },
      "access": "free",
      "range": {
        "min": 4,
        "max": 60,
        "step": 2,
        "unit": "s"
      },
      "writable": true
    },
    {
      "id": "media-row",
      "section": "media",
      "label": "Medio · AUTO · NORMAL/CAPA · AJUSTAR · retirar",
      "selector": "#mlist",
      "description": {
        "es": "El nombre dispara el medio. AUTO elige su participación; NORMAL ocupa el bus principal y CAPA lo superpone. AJUSTAR abre posición/estilo; retirar libera el medio de esta sesión.",
        "en": "The name triggers media. AUTO controls participation; NORMAL uses the main bus and LAYER overlays it. ADJUST opens position/style; remove releases the item from this session."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "layer-placement",
      "section": "media",
      "label": "CAPA: posición / LAYER: position",
      "selector": "#media-layer-editor",
      "description": {
        "es": "Arrastra para colocar y usa tiradores para tamaño. Hay posiciones rápidas, centro, esquinas y lower third. La capa admite x/y de −0,2 a 1,2; ancho de 0,08 a 1,4 del máster.",
        "en": "Drag to position and use handles to size. Presets include centre, corners and lower third. Layer x/y range: −0.2 to 1.2; width: 0.08 to 1.4 of the master."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "layer-style",
      "section": "media",
      "label": "CAPA: estilo / LAYER: style",
      "selector": "#media-layer-editor",
      "description": {
        "es": "Rotación −180…180°, opacidad 0…100%, mezcla Normal/Screen/Add y reactividad Off/Energy/Beat/Both. Mantiene proporciones; la transparencia del archivo ayuda a integrar logos.",
        "en": "Rotation −180…180°, opacity 0…100%, Normal/Screen/Add blend and Off/Energy/Beat/Both reactivity. Aspect ratio is preserved; file transparency helps integrate logos."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "layer-time",
      "section": "media",
      "label": "CAPA: FX · Visible · Mostrar cada / Show every",
      "selector": "#media-layer-editor",
      "description": {
        "es": "Entrada Glow/Flash/Zoom/Slide/Wave/Glitch/Fade/Pulse; visible 3–30 s y repetición 10–120 s. Requiere PLAY y participación AUTO. OCULTAR retira la capa visible; LISTO cierra el editor.",
        "en": "Entry Glow/Flash/Zoom/Slide/Wave/Glitch/Fade/Pulse; visible 3–30 s, repeat 10–120 s. Requires PLAY and AUTO participation. HIDE removes the visible layer; DONE closes the editor."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "dj-name",
      "section": "text",
      "label": "DJ name",
      "selector": "#djn",
      "description": {
        "es": "Nombre del artista, hasta 28 caracteres. Edita el borrador del cue seleccionado.",
        "en": "Artist name, up to 28 characters. Edits the selected cue draft."
      },
      "access": "free",
      "maxLength": 28,
      "writable": true
    },
    {
      "id": "event-name",
      "section": "text",
      "label": "Event / Venue",
      "selector": "#evn",
      "description": {
        "es": "Nombre del evento o local, hasta 40 caracteres.",
        "en": "Event or venue name, up to 40 characters."
      },
      "access": "free",
      "maxLength": 40,
      "writable": true
    },
    {
      "id": "text-fonts",
      "section": "text",
      "label": "Tipografía / Font",
      "selector": "#djn-font, #evn-font",
      "description": {
        "es": "Cada línea tiene su propio selector de fuente. Usa las opciones presentes en el desplegable.",
        "en": "Each line has its own font selector. Use the options actually offered in the dropdown."
      },
      "access": "free"
    },
    {
      "id": "dj-size",
      "section": "text",
      "label": "DJ size",
      "selector": "#djn-size",
      "description": {
        "es": "Tamaño del nombre del artista, combinado con el tamaño global.",
        "en": "Artist name size, combined with global size."
      },
      "access": "free",
      "range": {
        "min": 40,
        "max": 200,
        "step": 5,
        "unit": ""
      },
      "writable": true
    },
    {
      "id": "event-size",
      "section": "text",
      "label": "Event size",
      "selector": "#evn-size",
      "description": {
        "es": "Tamaño de la línea de evento.",
        "en": "Event line size."
      },
      "access": "free",
      "range": {
        "min": 20,
        "max": 120,
        "step": 5,
        "unit": ""
      },
      "writable": true
    },
    {
      "id": "text-size",
      "section": "text",
      "label": "Global size",
      "selector": "#sl-fontsize",
      "description": {
        "es": "Escala conjunta de ambas líneas.",
        "en": "Scale both lines together."
      },
      "access": "free",
      "range": {
        "min": 40,
        "max": 200,
        "step": 5,
        "unit": "%"
      },
      "writable": true
    },
    {
      "id": "text-colors",
      "section": "text",
      "label": "Color",
      "selector": "#djn-color, #evn-color",
      "description": {
        "es": "Color por línea. Blanco recupera el color del mood.",
        "en": "Per-line colour. White restores the mood colour."
      },
      "access": "free"
    },
    {
      "id": "text-gradients",
      "section": "text",
      "label": "Degradado / Gradient",
      "selector": "#djn-grad-btn, #evn-grad-btn",
      "description": {
        "es": "Abre el degradado de esa línea: activar, color inicial, final y ángulo.",
        "en": "Open this line’s gradient: enable, start/end colours and angle."
      },
      "access": "free"
    },
    {
      "id": "text-fx",
      "section": "text",
      "label": "Glow · Flash · Zoom · Slide · Wave · Glitch · Fade · Pulse",
      "selector": ".fx-btn",
      "description": {
        "es": "Efecto de entrada del texto. Es independiente del FX global del Máster.",
        "en": "Text entry effect. Separate from global Master post FX."
      },
      "access": "free"
    },
    {
      "id": "text-interval",
      "section": "text",
      "label": "Show every",
      "selector": "#sl-f",
      "description": {
        "es": "Intervalo del texto automático.",
        "en": "Automatic text interval."
      },
      "access": "free",
      "range": {
        "min": 10,
        "max": 120,
        "step": 5,
        "unit": "s"
      },
      "writable": true
    },
    {
      "id": "text-duration",
      "section": "text",
      "label": "Visible for",
      "selector": "#sl-brandDur",
      "description": {
        "es": "Tiempo visible por aparición.",
        "en": "Visible time per appearance."
      },
      "access": "free",
      "range": {
        "min": 3,
        "max": 30,
        "step": 1,
        "unit": "s"
      },
      "writable": true
    },
    {
      "id": "text-cues",
      "section": "text",
      "label": "TEXT CUES",
      "selector": "#t-text-cues, #m-text-cues",
      "description": {
        "es": "Selecciona, edita y organiza textos preparados. SHOW NOW dispara el cue seleccionado; SAVE CHANGES confirma su edición, no guarda el show cloud. Free conserva los cues durante la sesión; Pro los guarda localmente por cuenta.",
        "en": "Select, edit and organise prepared texts. SHOW NOW fires the selected cue; SAVE CHANGES commits its edit, not a cloud show. Free cues last for the session; Pro saves them locally per account."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "show-text",
      "section": "text",
      "label": "SHOW NOW",
      "selector": "#t-cue-show-now, #m-cue-show-now",
      "description": {
        "es": "Muestra el texto seleccionado ahora.",
        "en": "Show the selected text now."
      },
      "access": "free"
    },
    {
      "id": "save-text",
      "section": "text",
      "label": "SAVE CHANGES",
      "selector": "#t-cue-save",
      "description": {
        "es": "Confirma cambios del cue en edición. Guardar el show es una acción distinta.",
        "en": "Commit the edited cue. Saving the show is a separate action."
      },
      "access": "free"
    },
    {
      "id": "format",
      "section": "master",
      "label": "Program format",
      "selector": "#program-format",
      "description": {
        "es": "Relación de aspecto: 16:9, 4:3, 21:9, 1:1 o 9:16. Comprueba el encaje en tu pantalla.",
        "en": "Aspect ratio: 16:9, 4:3, 21:9, 1:1 or 9:16. Check the fit on your screen."
      },
      "access": "free"
    },
    {
      "id": "quality",
      "section": "master",
      "label": "Resolution",
      "selector": "#program-quality",
      "description": {
        "es": "Auto, 1080 o 720. Auto ajusta recursos y demanda; las cifras de salida no garantizan detalle de origen ni rendimiento constante.",
        "en": "Auto, 1080 or 720. Auto follows resources and demand; output dimensions do not guarantee source detail or steady performance."
      },
      "access": "free"
    },
    {
      "id": "cast",
      "section": "master",
      "label": "Cast",
      "selector": "#m-cast",
      "description": {
        "es": "Selector de receptor compatible en la red local; vídeo sin audio. Free conserva watermark.",
        "en": "Choose a compatible receiver on the local network; video without audio. Free retains the watermark."
      },
      "access": "free"
    },
    {
      "id": "blackout",
      "section": "master",
      "label": "Blackout",
      "selector": "#btn-blackout",
      "description": {
        "es": "Oscurece el máster mientras actúa el control.",
        "en": "Black out the master while the control is active."
      },
      "access": "free"
    },
    {
      "id": "strobe",
      "section": "master",
      "label": "Strobe",
      "selector": "#btn-strobe",
      "description": {
        "es": "Destellos del máster. Control de actuación manual; no se activa mediante la asistencia inicial.",
        "en": "Master flashes. A manual performance control; the initial assistant does not activate it."
      },
      "access": "free"
    },
    {
      "id": "full-light",
      "section": "master",
      "label": "Full Light",
      "selector": "#btn-fulllight",
      "description": {
        "es": "Luz plena del máster mientras actúa el control.",
        "en": "Full master light while the control is active."
      },
      "access": "free"
    },
    {
      "id": "freeze",
      "section": "master",
      "label": "Freeze",
      "selector": "#btn-freeze",
      "description": {
        "es": "Congela el movimiento visual; no equivale a guardar el show.",
        "en": "Freeze visual motion; this does not save the show."
      },
      "access": "free"
    },
    {
      "id": "post-glitch",
      "section": "master",
      "label": "glitch",
      "selector": "#btn-glitch-fx",
      "description": {
        "es": "FX global glitch sobre la composición.",
        "en": "Global glitch post FX on the composition."
      },
      "access": "pro"
    },
    {
      "id": "auto-glitch",
      "section": "master",
      "label": "AUTO glitch",
      "selector": "[data-app-click=\"toggle-auto-fx-eligible-glitch\"]",
      "description": {
        "es": "Permite que el conductor utilice este efecto.",
        "en": "Allow the conductor to use this effect."
      },
      "access": "pro"
    },
    {
      "id": "post-mirror",
      "section": "master",
      "label": "mirror",
      "selector": "#btn-mirror-fx",
      "description": {
        "es": "FX global mirror sobre la composición.",
        "en": "Global mirror post FX on the composition."
      },
      "access": "pro"
    },
    {
      "id": "auto-mirror",
      "section": "master",
      "label": "AUTO mirror",
      "selector": "[data-app-click=\"toggle-auto-fx-eligible-mirror\"]",
      "description": {
        "es": "Permite que el conductor utilice este efecto.",
        "en": "Allow the conductor to use this effect."
      },
      "access": "pro"
    },
    {
      "id": "post-rainbow",
      "section": "master",
      "label": "rainbow",
      "selector": "#btn-rainbow-fx",
      "description": {
        "es": "FX global rainbow sobre la composición.",
        "en": "Global rainbow post FX on the composition."
      },
      "access": "pro"
    },
    {
      "id": "auto-rainbow",
      "section": "master",
      "label": "AUTO rainbow",
      "selector": "[data-app-click=\"toggle-auto-fx-eligible-rainbow\"]",
      "description": {
        "es": "Permite que el conductor utilice este efecto.",
        "en": "Allow the conductor to use this effect."
      },
      "access": "pro"
    },
    {
      "id": "strobe-speed",
      "section": "master",
      "label": "Speed · STR",
      "selector": "#sl-strobe, #sl-strobe-m",
      "description": {
        "es": "Intervalo de destello; un valor menor produce cambios más rápidos.",
        "en": "Flash interval; lower values change faster."
      },
      "access": "free",
      "range": {
        "min": 20,
        "max": 500,
        "step": 10,
        "unit": "ms"
      },
      "writable": false
    },
    {
      "id": "play",
      "section": "master",
      "label": "Play / Stop",
      "selector": "#m-playpause",
      "description": {
        "es": "Arranca o detiene el transporte del show. Algunos permisos requieren un gesto del usuario.",
        "en": "Start or stop show transport. Some permissions require a user gesture."
      },
      "access": "free"
    },
    {
      "id": "next-scene",
      "section": "master",
      "label": "Scene",
      "selector": "#cv-scene-next",
      "description": {
        "es": "Avanza a la siguiente escena elegible.",
        "en": "Advance to the next eligible scene."
      },
      "access": "free"
    },
    {
      "id": "brand",
      "section": "master",
      "label": "Brand",
      "selector": "[data-app-click=\"show-brand\"]",
      "description": {
        "es": "Muestra la marca/texto configurado.",
        "en": "Display the configured brand/text."
      },
      "access": "free"
    },
    {
      "id": "master-auto",
      "section": "master",
      "label": "AUTO",
      "selector": "#btn-m-autopilot",
      "description": {
        "es": "Conductor del show. Coordina dominios elegibles respetando configuración y actuación manual. Los chips SCN/LPS/TXT/FX eligen qué participa.",
        "en": "Show conductor. Coordinates eligible domains respecting settings and manual performance. SCN/LPS/TXT/FX chips choose what participates."
      },
      "access": "free"
    },
    {
      "id": "audio-source",
      "section": "master",
      "label": "Audio",
      "selector": "#src-audio",
      "description": {
        "es": "Elige micro o entrada disponible y concede permiso. Para Spotify u otro reproductor debe llegar su señal a esa entrada; no existe conexión automática a Spotify.",
        "en": "Choose a microphone or available input and grant permission. Spotify or another player must feed that input; there is no automatic Spotify connection."
      },
      "access": "free"
    },
    {
      "id": "sync",
      "section": "master",
      "label": "SYNC",
      "selector": "#src-d",
      "description": {
        "es": "Fuente interna al BPM seleccionado. Sirve para programar sin micro; no está escuchando la canción.",
        "en": "Internal source at the selected BPM. Program without a microphone; it is not listening to the song."
      },
      "access": "free"
    },
    {
      "id": "ndi",
      "section": "master",
      "label": "NDI OUT",
      "selector": "#m-ndi",
      "description": {
        "es": "Salida de vídeo con Output Bridge y runtime NDI en el mismo ordenador. Requiere Pro.",
        "en": "Video output using Output Bridge and the NDI runtime on the same computer. Requires Pro."
      },
      "access": "pro"
    },
    {
      "id": "tempo-nudge",
      "section": "master",
      "label": "BPM −1 / −0,1 / +0,1 / +1",
      "selector": "#pane-master [data-bpm-dir]",
      "description": {
        "es": "Ajuste fino del tempo interno.",
        "en": "Fine adjustment of internal tempo."
      },
      "access": "free"
    },
    {
      "id": "tap",
      "section": "master",
      "label": "TAP",
      "selector": "#dbpm-tap",
      "description": {
        "es": "Marca el tempo con golpes repetidos; también tecla T fuera de campos de texto.",
        "en": "Tap repeatedly to set tempo; also T outside text inputs."
      },
      "access": "free"
    },
    {
      "id": "dimmer",
      "section": "master",
      "label": "DIM",
      "selector": "#sl-dim, #sl-dim-m",
      "description": {
        "es": "Brillo final del máster. Un 0 deja la salida negra.",
        "en": "Final master brightness. Zero leaves the output black."
      },
      "access": "free",
      "range": {
        "min": 0,
        "max": 100,
        "step": 1,
        "unit": "%"
      },
      "writable": false
    },
    {
      "id": "color-swatches",
      "section": "master",
      "label": "RED · PINK · MAG · PURP · BLUE · CYAN · GRN · YEL",
      "selector": "#pane-master .csw",
      "description": {
        "es": "Selecciona un color de la paleta.",
        "en": "Select a palette colour."
      },
      "access": "free"
    },
    {
      "id": "custom-color",
      "section": "master",
      "label": "PICK",
      "selector": "#custom-color",
      "description": {
        "es": "Selector de color personalizado.",
        "en": "Custom colour picker."
      },
      "access": "free"
    },
    {
      "id": "auto-color",
      "section": "master",
      "label": "Auto color",
      "selector": "#btn-autocolor",
      "description": {
        "es": "Alternancia automática de color.",
        "en": "Automatic colour changes."
      },
      "access": "free"
    },
    {
      "id": "video-tint",
      "section": "master",
      "label": "Tint",
      "selector": "#btn-vidtint",
      "description": {
        "es": "Aplica el tratamiento de color también al vídeo.",
        "en": "Apply colour treatment to video too."
      },
      "access": "free"
    },
    {
      "id": "hue",
      "section": "master",
      "label": "Hue",
      "selector": "#sl-hue",
      "description": {
        "es": "Posición en la rueda de tono, mostrada en grados (0–360°). OFF desactiva el desplazamiento; con Auto color encendido el fader sólo indica el valor y no toma control.",
        "en": "Position on the hue wheel, displayed in degrees (0–360°). OFF disables the shift; with Auto colour enabled the fader is a display and does not take control."
      },
      "access": "free",
      "range": {
        "min": 0,
        "max": 100,
        "step": 1,
        "unit": ""
      },
      "writable": false
    },
    {
      "id": "master-media",
      "section": "master",
      "label": "Video pads",
      "selector": "#vid-pads",
      "description": {
        "es": "Dispara los medios ya cargados; el minimonitor muestra el máster compuesto.",
        "en": "Trigger loaded media; the monitor shows the composed master."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "brand-auto",
      "section": "master",
      "label": "Brand Auto",
      "selector": "#btn-brand-toggle",
      "description": {
        "es": "Alterna la aparición automática del texto/marca.",
        "en": "Toggle automatic brand/text appearances."
      },
      "access": "free"
    },
    {
      "id": "brand-now",
      "section": "master",
      "label": "Now",
      "selector": "#btn-brand-now",
      "description": {
        "es": "Dispara la marca ahora.",
        "en": "Fire the brand now."
      },
      "access": "free"
    },
    {
      "id": "outputs",
      "section": "master",
      "label": "Dual screen · Fullscreen",
      "selector": "#vo-newwin, #vo-maximize",
      "description": {
        "es": "Abre la salida separada o pantalla completa. El usuario coloca la ventana en la pantalla del público.",
        "en": "Open a separate output or fullscreen. The user places the window on the audience screen."
      },
      "access": "free"
    },
    {
      "id": "cloud-save",
      "section": "account",
      "label": "Guardar show / Save show",
      "selector": "[data-app-click=\"save-current-show\"]",
      "description": {
        "es": "Guarda configuración y referencias de medios en tu cuenta Pro. Los archivos permanecen locales. Actualiza el show cargado; un error no equivale a guardado.",
        "en": "Save configuration and media references to your Pro account. Files stay local. Updates the loaded show; an error is not a successful save."
      },
      "access": "pro"
    },
    {
      "id": "shows",
      "section": "account",
      "label": "My Shows",
      "selector": "[data-app-click=\"switch-dash-tab-shows\"]",
      "description": {
        "es": "Lista y recupera shows de tu cuenta Pro. Si faltan medios, selecciónalos de nuevo. Al caducar Pro se conservan los shows pero se bloquea su uso.",
        "en": "List and restore your Pro account’s shows. Reselect missing media. When Pro expires, shows remain stored but their use is locked."
      },
      "access": "pro"
    },
    {
      "id": "shader-lab",
      "section": "account",
      "label": "Shader Lab",
      "selector": "#dash-pane-pads",
      "description": {
        "es": "Carga GLSL propio desde el editor de pads. Free admite 1 shader propio; Pro 21. La biblioteca se conserva por cuenta en este navegador; sin iniciar sesión es temporal. Código y archivos permanecen locales.",
        "en": "Load custom GLSL from the pad editor. Free allows 1 custom shader; Pro 21. The library persists per account in this browser; signed-out work is temporary. Source and files remain local."
      },
      "access": "free",
      "dynamic": true
    },
    {
      "id": "midi",
      "section": "account",
      "label": "MIDI Learn",
      "selector": "#ctrl-view",
      "description": {
        "es": "Asigna controles MIDI compatibles a funciones del instrumento. Pro dispone de 94 destinos; los mapeos se guardan localmente por cuenta. El navegador y el dispositivo deben admitir MIDI.",
        "en": "Map compatible MIDI controls to instrument actions. Pro has 94 targets; mappings are saved locally per account. Browser and hardware must support MIDI."
      },
      "access": "pro",
      "dynamic": true
    }
  ],
  "limits": {
    "free": {
      "scenes": 48,
      "pads": 24,
      "media": 1,
      "mediaMB": 15,
      "customShaders": 1,
      "cloudSave": false,
      "watermark": true
    },
    "pro": {
      "pads": 48,
      "media": 21,
      "mediaMB": 30,
      "customShaders": 21,
      "cloudSave": true,
      "watermark": false,
      "includesContentPacks": false
    },
    "videoExport": false,
    "mediaUploads": false
  },
  "layerLabels": {
    "x": {
      "es": "Posición horizontal",
      "en": "Horizontal position"
    },
    "y": {
      "es": "Posición vertical",
      "en": "Vertical position"
    },
    "width": {
      "es": "Ancho",
      "en": "Width"
    },
    "rotation": {
      "es": "Rotación",
      "en": "Rotation"
    },
    "opacity": {
      "es": "Opacidad",
      "en": "Opacity"
    },
    "blend": {
      "es": "Mezcla",
      "en": "Blend"
    },
    "reactivity": {
      "es": "Reactividad",
      "en": "Reactivity"
    },
    "fx": {
      "es": "Entrada",
      "en": "Entry"
    },
    "durationSec": {
      "es": "Visible (s)",
      "en": "Visible (s)"
    },
    "intervalSec": {
      "es": "Intervalo (s)",
      "en": "Interval (s)"
    }
  }
}
