{"id":10834,"date":"2026-09-08T13:44:13","date_gmt":"2026-09-08T13:44:13","guid":{"rendered":"https:\/\/www.switchfleet.com\/os\/"},"modified":"2026-09-08T14:00:35","modified_gmt":"2026-09-08T14:00:35","slug":"os","status":"publish","type":"page","link":"https:\/\/www.switchfleet.com\/en\/os\/","title":{"rendered":"Switch OS"},"content":{"rendered":"<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n<style>\n  html, body {\n    width: 100% !important;\n    height: 100% !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow: hidden !important;\n    background-color: #0B111E !important;\n    font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;\n    color: #FFFFFF !important;\n  }\n\n  \/* Fullscreen background with subtle gradient glow *\/\n  .auth-wrapper {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100vw;\n    height: 100vh;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    background: radial-gradient(circle at 50% 25%, #16243D 0%, #0B111E 75%);\n    z-index: 999999;\n    box-sizing: border-box;\n    transition: opacity 0.35s ease, visibility 0.35s ease;\n  }\n\n  .auth-wrapper.hidden {\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n  }\n\n  \/* Card *\/\n  .auth-card {\n    width: 100%;\n    max-width: 400px;\n    background: rgba(17, 25, 43, 0.88);\n    backdrop-filter: blur(20px);\n    -webkit-backdrop-filter: blur(20px);\n    border: 1px solid rgba(255, 255, 255, 0.12);\n    border-radius: 24px;\n    padding: 42px 32px;\n    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.05);\n    text-align: center;\n    box-sizing: border-box;\n  }\n\n  .brand-logo {\n    max-width: 190px;\n    height: auto;\n    margin: 0 auto 16px auto;\n    display: block;\n    filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.3));\n  }\n\n  .badge {\n    display: inline-block;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #FFC700;\n    background: rgba(255, 199, 0, 0.12);\n    border: 1px solid rgba(255, 199, 0, 0.25);\n    padding: 4px 12px;\n    border-radius: 999px;\n    margin-bottom: 12px;\n  }\n\n  .auth-title {\n    font-size: 22px;\n    font-weight: 700;\n    color: #FFFFFF;\n    margin: 0 0 6px 0;\n    letter-spacing: -0.02em;\n  }\n\n  .auth-subtitle {\n    font-size: 13.5px;\n    color: #94A3B8;\n    margin: 0 0 26px 0;\n    line-height: 1.5;\n  }\n\n  .form-group {\n    margin-bottom: 20px;\n    position: relative;\n    text-align: left;\n  }\n\n  .form-label {\n    display: block;\n    font-size: 12px;\n    font-weight: 600;\n    color: #E2E8F0;\n    margin-bottom: 8px;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n  }\n\n  .input-wrapper {\n    position: relative;\n    display: flex;\n    align-items: center;\n  }\n\n  .auth-input {\n    width: 100%;\n    padding: 14px 16px;\n    padding-right: 46px;\n    background: rgba(30, 41, 65, 0.85);\n    border: 1.5px solid rgba(255, 255, 255, 0.22);\n    border-radius: 12px;\n    color: #FFFFFF !important;\n    -webkit-text-fill-color: #FFFFFF !important;\n    font-size: 16px;\n    font-family: inherit;\n    outline: none;\n    box-sizing: border-box;\n    transition: all 0.2s ease;\n  }\n\n  .auth-input::placeholder {\n    color: #94A3B8;\n    opacity: 0.8;\n  }\n\n  .auth-input:focus {\n    border-color: #FFC700;\n    background: rgba(36, 49, 78, 0.95);\n    box-shadow: 0 0 0 4px rgba(255, 199, 0, 0.22);\n  }\n\n  .toggle-pwd {\n    position: absolute;\n    right: 10px;\n    background: none;\n    border: none;\n    color: #CBD5E1;\n    cursor: pointer;\n    padding: 6px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 6px;\n    transition: color 0.2s ease;\n  }\n\n  .toggle-pwd:hover {\n    color: #FFFFFF;\n  }\n\n  .toggle-pwd svg {\n    width: 20px;\n    height: 20px;\n  }\n\n  .btn-submit {\n    width: 100%;\n    padding: 14px 20px;\n    background: #FFC700;\n    color: #000000 !important;\n    border: none;\n    border-radius: 12px;\n    font-size: 15px;\n    font-weight: 700;\n    font-family: inherit;\n    cursor: pointer;\n    transition: all 0.2s ease;\n    box-shadow: 0 4px 14px rgba(255, 199, 0, 0.35);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    box-sizing: border-box;\n  }\n\n  .btn-submit span {\n    color: #000000 !important;\n    font-weight: 700;\n  }\n\n  .btn-submit svg {\n    stroke: #000000 !important;\n  }\n\n  .btn-submit:hover {\n    background: #FFD433;\n    transform: translateY(-1px);\n    box-shadow: 0 6px 20px rgba(255, 199, 0, 0.45);\n  }\n\n  .btn-submit:active {\n    transform: translateY(0);\n  }\n\n  .error-message {\n    display: none;\n    font-size: 12.5px;\n    color: #FF6B6B;\n    background: rgba(255, 107, 107, 0.1);\n    border: 1px solid rgba(255, 107, 107, 0.2);\n    border-radius: 8px;\n    padding: 9px 12px;\n    margin-bottom: 16px;\n    text-align: left;\n    align-items: center;\n    gap: 8px;\n    animation: shake 0.4s ease-in-out;\n  }\n\n  @keyframes shake {\n    0%, 100% { transform: translateX(0); }\n    20%, 60% { transform: translateX(-6px); }\n    40%, 80% { transform: translateX(6px); }\n  }\n\n  \/* Iframe Container *\/\n  .switch-os-container {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100vw;\n    height: 100vh;\n    margin: 0;\n    padding: 0;\n    overflow: hidden;\n    background-color: #0E172B;\n    display: none;\n    z-index: 100;\n  }\n\n  .switch-os-container.active {\n    display: block;\n  }\n\n  .switch-os-iframe {\n    width: 100%;\n    height: 100%;\n    border: none;\n    display: block;\n  }\n<\/style>\n\n<div id=\"authWrapper\" class=\"auth-wrapper\">\n  <div class=\"auth-card\">\n    <img decoding=\"async\" data-src=\"https:\/\/www.switchfleet.com\/comp\/uploads\/2019\/01\/Logo-Switch-negativo-sin-fondo-1024x576.png\" alt=\"Switch Logo\" class=\"brand-logo lazyload\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/576;\">\n    <span class=\"badge\">Acceso Seguro<\/span>\n    <h1 class=\"auth-title\">Switch OS<\/h1>\n    <p class=\"auth-subtitle\">Introduce tu clave de acceso para entrar a la plataforma<\/p>\n\n    <div id=\"errorMsg\" class=\"error-message\">\n      <svg width=\"15\" height=\"15\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n      <span>Contrase\u00f1a incorrecta. Int\u00e9ntalo de nuevo.<\/span>\n    <\/div>\n\n    <form id=\"authForm\" onsubmit=\"return handleAuth(event)\" action=\"\">\n      <div class=\"form-group\">\n        <label for=\"passInput\" class=\"form-label\">Contrase\u00f1a<\/label>\n        <div class=\"input-wrapper\">\n          <input type=\"password\" id=\"passInput\" class=\"auth-input\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\" autofocus required autocomplete=\"current-password\">\n          <button type=\"button\" class=\"toggle-pwd\" onclick=\"togglePasswordVisibility()\" aria-label=\"Mostrar contrase\u00f1a\">\n            <svg id=\"eyeIcon\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n      <button type=\"submit\" class=\"btn-submit\">\n        <span>Entrar<\/span>\n        <svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#000000\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><polyline points=\"12 5 19 12 12 19\"><\/polyline><\/svg>\n      <\/button>\n    <input type=\"hidden\" name=\"trp-form-language\" value=\"en\"\/><\/form>\n  <\/div>\n<\/div>\n\n<div id=\"osContainer\" class=\"switch-os-container\"><\/div>\n\n<script>\n  const VALID_HASH = \"06f2c3d10951afb1e335f98cf5167ff8031fa391ceb13fdbd0891829b444e2b6\";\n  const APP_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbz4jeEuUQyE_2G2aBMUlCpZJyS6tGPWuLTg0Cr8KjjmZGf9pBNA2_G4U2irdwYTE2nORg\/exec\";\n\n  async function sha256(message) {\n    const msgBuffer = new TextEncoder().encode(message);\n    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n    return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n  }\n\n  function grantAccess() {\n    const authWrapper = document.getElementById('authWrapper');\n    const osContainer = document.getElementById('osContainer');\n    \n    osContainer.innerHTML = '<iframe class=\"switch-os-iframe\" src=\"' + APP_URL + '\" allow=\"clipboard-write\" allowfullscreen><\/iframe>';\n    osContainer.classList.add('active');\n    authWrapper.classList.add('hidden');\n    \/\/ Save persistently in localStorage and sessionStorage\n    try {\n      localStorage.setItem('switch_os_authorized', '1');\n      sessionStorage.setItem('switch_os_authorized', '1');\n    } catch(e) {}\n  }\n\n  async function handleAuth(e) {\n    if (e) e.preventDefault();\n    const input = document.getElementById('passInput');\n    const errorMsg = document.getElementById('errorMsg');\n    const entered = input.value.trim();\n\n    try {\n      const hash = await sha256(entered);\n      if (hash === VALID_HASH || entered === \"Switch2026!\") {\n        errorMsg.style.display = 'none';\n        grantAccess();\n        return false;\n      }\n    } catch(err) {\n      if (entered === \"Switch2026!\") {\n        grantAccess();\n        return false;\n      }\n    }\n\n    errorMsg.style.display = 'flex';\n    input.value = '';\n    input.focus();\n    return false;\n  }\n\n  function togglePasswordVisibility() {\n    const input = document.getElementById('passInput');\n    const icon = document.getElementById('eyeIcon');\n    if (input.type === 'password') {\n      input.type = 'text';\n      icon.innerHTML = '<path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"><\/path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"><\/line>';\n    } else {\n      input.type = 'password';\n      icon.innerHTML = '<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle>';\n    }\n  }\n\n  \/\/ Check persistent session in localStorage or sessionStorage\n  try {\n    if (localStorage.getItem('switch_os_authorized') === '1' || sessionStorage.getItem('switch_os_authorized') === '1') {\n      grantAccess();\n    }\n  } catch(e) {}\n<\/script>","protected":false},"excerpt":{"rendered":"<p>Acceso Seguro Switch OS Introduce tu clave de acceso para entrar a la plataforma Contrase\u00f1a incorrecta. Int\u00e9ntalo de nuevo. Contrase\u00f1a Entrar<\/p>","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"content-type":"","wpai_generated_summary":"","ocean_front_end_style_editor":"no","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","footnotes":""},"class_list":["post-10834","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/pages\/10834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/comments?post=10834"}],"version-history":[{"count":5,"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/pages\/10834\/revisions"}],"predecessor-version":[{"id":10839,"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/pages\/10834\/revisions\/10839"}],"wp:attachment":[{"href":"https:\/\/www.switchfleet.com\/en\/wp-json\/wp\/v2\/media?parent=10834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}