<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="robots" content="noindex, nofollow">
  <title>Install app to continue</title>
  <style>
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

    :root {
      --gate-bg: #0f1419;
      --gate-text: #e7ecf3;
      --gate-muted: #8b98a8;
      --gate-surface: #1a2332;
      --gate-surface2: #15202b;
      --gate-border: #2a3544;
      --gate-accent: #5b8def;
      --gate-accent-hover: #4a7de0;
      --gate-success: #7dcea0;
      --gate-download-bg: #1e3a2f;
      --gate-download-border: #2d5a45;
      --gate-radius: 10px;
      --gate-font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    }

    body {
      font-family: var(--gate-font);
      min-height: 100vh;
      background: var(--gate-bg);
      color: var(--gate-text);
      line-height: 1.5;
      -webkit-font-smoothing: antialiased;
    }

    .gate {
      min-height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px 16px 32px;
    }

    .card {
      width: 100%;
      max-width: 420px;
      transition: max-width 0.2s ease;
    }

    /* Install prompt state (Windows/Android needing install): use ~70% of
       viewport with sane floor and ceiling. On 1080p that lands around 900px
       which comfortably fits two prominent download buttons side-by-side.
       `.install-mode` is added by gate.js in applyPlatformUi() when the user
       is on a supported install platform but doesn't have the client yet. */
    .gate.install-mode .card {
      max-width: clamp(520px, 70vw, 960px);
      display: flex;
      flex-direction: column;
    }
    @media (max-width: 520px) {
      .gate.install-mode .card { max-width: 100%; }
    }

    /* Elevate the downloads block visually so it never falls below the fold. */
    .gate.install-mode .downloads {
      background: rgba(255,255,255,0.02);
      border: 1px solid var(--gate-border);
      border-radius: var(--gate-radius);
      padding: 16px;
      margin-top: 4px;
    }

    /* Put downloads right below the subtitle so both install buttons are
       always above the fold, even on 1366x768. */
    .gate.install-mode .platform-tag { order: 1; }
    .gate.install-mode h1            { order: 2; }
    .gate.install-mode .subtitle     { order: 3; }
    .gate.install-mode .downloads    { order: 4; }
    .gate.install-mode .download-hint{ order: 5; }
    .gate.install-mode .why-install  { order: 6; }
    .gate.install-mode .extension-status { order: 7; }
    .gate.install-mode .benefits     { order: 8; }
    .gate.install-mode .status       { order: 9; }
    .gate.install-mode .smartscreen-guide { order: 10; }
    .gate.install-mode .pair-panel   { order: 11; }
    .gate.install-mode .actions:not(.downloads-row) { order: 12; }

    .logo {
      font-size: 48px;
      line-height: 1;
      margin-bottom: 16px;
      text-align: center;
      min-height: 48px;
    }

    .logo img {
      max-height: 56px;
      max-width: 180px;
      object-fit: contain;
      vertical-align: middle;
    }

    h1 {
      font-size: clamp(1.35rem, 4.5vw, 1.65rem);
      font-weight: 700;
      text-align: center;
      margin-bottom: 8px;
    }

    .subtitle {
      text-align: center;
      color: var(--gate-muted);
      font-size: 0.9375rem;
      margin-bottom: 20px;
    }

    .platform-tag {
      display: block;
      text-align: center;
      font-size: 0.75rem;
      text-transform: uppercase;
      letter-spacing: 0.06em;
      color: #6b7a8f;
      margin-bottom: 16px;
    }

    .status {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 10px;
      padding: 12px 16px;
      background: var(--gate-surface);
      border-radius: var(--gate-radius);
      margin-bottom: 16px;
      font-size: 0.875rem;
      color: #b8c5d6;
    }

    .spinner {
      width: 18px;
      height: 18px;
      border: 2px solid #2a3544;
      border-top-color: var(--gate-accent);
      border-radius: 50%;
      animation: spin 0.8s linear infinite;
      flex-shrink: 0;
    }

    .spinner.hidden { display: none; }

    @keyframes spin { to { transform: rotate(360deg); } }

    .actions {
      display: flex;
      flex-direction: column;
      gap: 10px;
      margin-bottom: 16px;
    }

    .btn {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      width: 100%;
      padding: 14px 18px;
      border: none;
      border-radius: 10px;
      font-size: 0.9375rem;
      font-weight: 600;
      cursor: pointer;
      text-decoration: none;
      text-align: center;
      transition: opacity 0.15s;
    }

    .btn:disabled { opacity: 0.45; cursor: not-allowed; }

    .btn-primary {
      background: var(--gate-accent);
      color: #fff;
    }

    .btn-primary:hover:not(:disabled) { background: var(--gate-accent-hover); }

    .btn-secondary {
      background: var(--gate-surface);
      color: var(--gate-text);
      border: 1px solid var(--gate-border);
    }

    .btn-secondary:hover:not(:disabled) { background: #243044; }

    .btn-download {
      background: var(--gate-download-bg);
      color: var(--gate-success);
      border: 1px solid var(--gate-download-border);
    }

    .btn-download-primary {
      background: var(--gate-accent);
      color: #fff;
      border: 1px solid var(--gate-accent);
      font-size: 1rem;
    }

    .btn-download-primary:hover { background: var(--gate-accent-hover); }

    .other-platform {
      margin-top: 4px;
      text-align: center;
    }

    .other-platform summary {
      font-size: 0.8125rem;
      color: #6b7a8f;
      cursor: pointer;
      user-select: none;
      list-style: none;
    }

    .other-platform summary::-webkit-details-marker { display: none; }

    .other-platform .btn-download {
      margin-top: 8px;
      font-size: 0.8125rem;
      padding: 10px 14px;
    }

    .downloads {
      display: flex;
      flex-direction: column;
      gap: 8px;
      margin-bottom: 16px;
    }

    .downloads.hidden { display: none; }

    /* Windows install: two prominent options side-by-side (.exe download +
       PowerShell one-liner). Falls back to single column on narrow screens.
       Selector matches the actual container class from gate.html (id=downloadActions,
       classes="actions downloads-row"). */
    .downloads-row.windows-dual {
      display: grid !important;
      grid-template-columns: 1fr 1fr;
      gap: 12px;
      flex-direction: initial;
    }
    .downloads-row.windows-dual .btn-download {
      margin: 0;
      min-height: 68px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 4px;
      text-align: center;
      padding: 14px 16px;
      font-size: 1rem;
    }
    .downloads-row.windows-dual .btn-sub {
      display: block;
      font-size: 0.75rem;
      font-weight: 400;
      opacity: 0.82;
    }
    @media (max-width: 640px) {
      .downloads-row.windows-dual {
        grid-template-columns: 1fr;
      }
    }

    .pair-panel {
      background: #1a2332;
      border: 1px solid #2a3544;
      border-radius: 10px;
      padding: 16px;
      margin-bottom: 16px;
    }

    .pair-panel.hidden { display: none; }

    .pair-code {
      font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
      font-size: clamp(1.75rem, 8vw, 2.25rem);
      font-weight: 700;
      letter-spacing: 0.2em;
      text-align: center;
      color: #5b8def;
      margin: 8px 0 12px;
    }

    .pair-hint {
      font-size: 0.8125rem;
      color: #8b98a8;
      text-align: center;
      margin-bottom: 12px;
    }

    .manual {
      margin-top: 12px;
      padding-top: 12px;
      border-top: 1px solid #2a3544;
    }

    .manual summary {
      font-size: 0.8125rem;
      color: #8b98a8;
      cursor: pointer;
      user-select: none;
    }

    .manual-form {
      display: flex;
      flex-direction: column;
      gap: 8px;
      margin-top: 10px;
    }

    .manual-form input {
      width: 100%;
      padding: 10px 12px;
      border: 1px solid #2a3544;
      border-radius: 8px;
      background: #0f1419;
      color: #e7ecf3;
      font-size: 0.875rem;
    }

    .manual-form input::placeholder { color: #5a6778; }

    .error {
      display: none;
      padding: 12px;
      background: rgba(239, 83, 80, 0.12);
      border: 1px solid rgba(239, 83, 80, 0.35);
      border-radius: 8px;
      color: #ff8a80;
      font-size: 0.8125rem;
      margin-bottom: 12px;
    }

    .error.show { display: block; }

    .blocked .logo::after { content: "🚫"; font-size: 32px; display: block; margin-top: 8px; }
    .blocked .downloads { display: none !important; }

    .footer {
      text-align: center;
      font-size: 0.75rem;
      color: #5a6778;
    }

    .extension-status {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      padding: 10px 12px;
      background: #15202b;
      border: 1px solid #2a3544;
      border-radius: 8px;
      margin-bottom: 12px;
      font-size: 0.8125rem;
      color: #b8c5d6;
    }

    .extension-status.hidden { display: none; }

    .extension-dot {
      width: 8px;
      height: 8px;
      border-radius: 50%;
      background: #6b7a8f;
      flex-shrink: 0;
    }

    .extension-status.ok .extension-dot { background: #7dcea0; }
    .extension-status.warn .extension-dot { background: #f5c842; }
    .extension-status.missing .extension-dot { background: #ef5350; }

    .benefits {
      list-style: none;
      margin: 0 0 16px;
      padding: 14px 16px;
      background: linear-gradient(135deg, #15202b 0%, #1a2838 100%);
      border: 1px solid #2a3544;
      border-radius: 10px;
    }

    .why-install {
      margin-bottom: 16px;
      padding: 14px 16px;
      background: #1a2332;
      border: 1px solid #2a3544;
      border-radius: 10px;
    }

    .why-install h2 {
      font-size: 0.875rem;
      font-weight: 600;
      text-align: left;
      margin-bottom: 10px;
      color: #e7ecf3;
    }

    .why-install ul {
      list-style: none;
      margin: 0;
      padding: 0;
    }

    .why-install li {
      position: relative;
      padding-left: 18px;
      margin: 8px 0;
      font-size: 0.8125rem;
      color: #b8c5d6;
      line-height: 1.45;
    }

    .why-install li::before {
      content: '•';
      position: absolute;
      left: 0;
      color: var(--gate-accent);
      font-weight: 700;
    }

    .benefits li {
      display: flex;
      align-items: flex-start;
      gap: 10px;
      font-size: 0.8125rem;
      color: #b8c5d6;
      padding: 5px 0;
    }

    .benefits li span.icon {
      flex-shrink: 0;
      width: 1.25rem;
      text-align: center;
    }

    .download-hint {
      text-align: center;
      font-size: 0.75rem;
      color: #6b7a8f;
      margin: -8px 0 12px;
    }

    .smartscreen-guide {
      margin-bottom: 16px;
      padding: 14px 16px;
      background: #15202b;
      border: 1px solid #2a3544;
      border-radius: 10px;
      font-size: 0.8125rem;
      color: #b8c5d6;
    }

    .smartscreen-guide summary {
      cursor: pointer;
      font-weight: 600;
      display: flex;
      align-items: center;
      gap: 6px;
      list-style: none;
      user-select: none;
    }

    /* Collapsed by default (see gate.html): a small chevron is the only affordance
       since the native ::-webkit-details-marker is hidden below. Rotates open. */
    .smartscreen-guide summary::before {
      content: '\203A';
      display: inline-block;
      transition: transform 0.15s;
      color: var(--gate-muted);
      font-weight: 400;
    }

    .smartscreen-guide[open] summary::before {
      transform: rotate(90deg);
    }

    .smartscreen-guide summary::-webkit-details-marker { display: none; }

    .smartscreen-lead {
      margin: 10px 0 8px;
      color: #8b98a8;
    }

    .smartscreen-steps {
      margin: 0 0 10px 18px;
      padding: 0;
    }

    .smartscreen-steps li {
      margin: 6px 0;
    }

    .smartscreen-note {
      margin: 0;
      font-size: 0.75rem;
      color: #6b7a8f;
    }

    .hidden { display: none !important; }

    @media (min-width: 480px) {
      .downloads-row {
        flex-direction: row;
      }
      .downloads-row .btn { flex: 1; }
    }

    /* PowerShell install modal (Win+R clipboard flow) */
    .ps-modal-backdrop {
      position: fixed;
      inset: 0;
      background: rgba(0, 0, 0, 0.65);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px;
      z-index: 2147483646;
      animation: agModalFadeIn 0.15s ease-out;
    }

    @keyframes agModalFadeIn {
      from { opacity: 0; }
      to { opacity: 1; }
    }

    .ps-modal {
      width: 100%;
      max-width: 480px;
      background: var(--gate-surface);
      border: 1px solid var(--gate-border);
      border-radius: 12px;
      padding: 20px 22px 18px;
      color: var(--gate-text);
      box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
      max-height: 90vh;
      overflow-y: auto;
    }

    .ps-modal h2 {
      font-size: 1.05rem;
      font-weight: 600;
      margin-bottom: 6px;
      text-align: left;
    }

    .ps-modal-status {
      margin: 0 0 14px;
      font-size: 0.8125rem;
      color: var(--gate-success);
      min-height: 1.1em;
    }

    .ps-modal-steps {
      margin: 0 0 12px 20px;
      padding: 0;
      font-size: 0.875rem;
      color: #cbd5e1;
    }

    .ps-modal-steps li {
      margin: 6px 0;
      line-height: 1.5;
    }

    .ps-modal-steps kbd {
      display: inline-block;
      padding: 2px 6px;
      background: #1e293b;
      border: 1px solid #334155;
      border-bottom-width: 2px;
      border-radius: 4px;
      font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
      font-size: 0.75rem;
      color: #e7ecf3;
      margin: 0 1px;
    }

    .ps-modal-cmd {
      display: flex;
      align-items: stretch;
      gap: 6px;
      margin: 8px 0 12px;
    }

    .ps-modal-cmd code {
      flex: 1;
      padding: 10px 12px;
      background: var(--gate-surface2);
      border: 1px solid var(--gate-border);
      border-radius: 8px;
      font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
      font-size: 0.75rem;
      color: #cbd5e1;
      word-break: break-all;
      user-select: all;
      max-height: 90px;
      overflow-y: auto;
    }

    .ps-modal-copy {
      flex: 0 0 auto;
      width: auto;
      padding: 0 12px;
      font-size: 0.75rem;
    }

    .ps-modal-note {
      margin: 4px 0 12px;
      font-size: 0.75rem;
      color: #8b98a8;
      line-height: 1.5;
    }

    .ps-modal-actions {
      display: flex;
      justify-content: flex-end;
    }

    .ps-modal-actions .btn {
      width: auto;
      padding: 10px 20px;
    }
  </style>
</head>
<body>
  <div class="gate" id="gate">
    <div class="card">
      <div class="logo" id="logo" aria-hidden="true">🔐</div>
      <span class="platform-tag" id="platformTag"></span>
      <h1 id="title">Install App Gate to continue</h1>
      <p class="subtitle" id="subtitle">This site requires the App Gate client on your device.</p>

      <div class="error" id="error" role="alert"></div>

      <section class="why-install hidden" id="whyInstall" aria-labelledby="whyInstallTitle">
        <h2 id="whyInstallTitle">Why is an install required?</h2>
        <ul id="whyInstallList"></ul>
      </section>

      <div class="extension-status hidden" id="extensionStatus">
        <span class="extension-dot" id="extensionDot" aria-hidden="true"></span>
        <span id="extensionStatusText">Checking extension…</span>
      </div>

      <ul class="benefits hidden" id="benefits" aria-label="Included with App Gate"></ul>

      <div class="status" id="statusBar">
        <div class="spinner" id="spinner"></div>
        <span id="statusText">Loading…</span>
      </div>

      <div class="downloads" id="downloads">
        <div class="actions downloads-row" id="downloadActions"></div>
      </div>
      <details class="smartscreen-guide hidden" id="smartscreenGuide"></details>
      <p class="download-hint hidden" id="downloadHint"></p>

      <div class="pair-panel hidden" id="pairPanel">
        <p class="pair-hint" id="pairHint">The installed agent is being checked automatically.</p>
        <div class="actions">
          <button type="button" class="btn btn-primary" id="openAppBtn">Open App</button>
        </div>
      </div>

      <div class="actions" id="mainActions">
        <button type="button" class="btn btn-primary" id="continueBtn">Continue</button>
      </div>

      <p class="footer" id="footer">App Gate</p>
    </div>
  </div>

  <script>window.__APPGATE_CONFIG__ = {"property_domain":"mediacomholdings.com","site_name":"Mediacom Holdings","property_id":"46f77ca9-62b2-4646-bb1a-32dae363783c","plugin_version":"0.3.7","api_proxy_base":"\/wp-json\/app-gate\/v1","wp_session_path":"\/wp-json\/app-gate\/v1\/session","locale":"en","locale_source":"geo","extension_id":"mhpmoddfploghladjjfhgcdiboefihoo","download_urls":{"windows_setup":"https:\/\/appgate-test.mywire.org\/api\/v1\/downloads\/setup?property_domain=mediacomholdings.com\u0026channel=dev","windows":"https:\/\/appgate-test.mywire.org\/api\/v1\/downloads\/msi?property_domain=mediacomholdings.com\u0026channel=dev","windows_setup_gate":"\/app-gate\/downloads\/AppGateSetup.exe","windows_gate":"\/app-gate\/downloads\/AppGateClient.msi","install_script":"https:\/\/appgate-test.mywire.org\/api\/v1\/downloads\/install-script?property_domain=mediacomholdings.com\u0026channel=dev"},"default_return_url":"\/wp-sitemap.xml","canonical_return_url":"\/","canonical_return":false,"allowed_return_origins":["https:\/\/mediacomholdings.com","http:\/\/mediacomholdings.com"],"storage_key":"appgate_access_pass","polymorphic_downloads":false,"auto_download_msi":false,"auto_download_delay_ms":3000,"theme":{"accent":"#2563eb","brand_name":"Mediacom Holdings"},"extension_check":{"enabled":false,"timeout_ms":3000,"require_extension":false,"redirect_requires_extension":false,"poll_after_install_ms":3000,"redirect_wait_timeout_ms":600000},"poll_interval_ms":2000,"poll_timeout_ms":300000,"gate_reason":"NO_DEVICE","releases_manifest_url":"https:\/\/appgate-test.mywire.org\/releases\/dev\/manifest.json","download_tracking":true};</script>
  <script src="https://appgate-test.mywire.org/releases/dev/gate/i18n.js?v=0.3.7"></script>
  <script src="https://appgate-test.mywire.org/releases/dev/gate/extension-check.js?v=0.3.7"></script>
  <script src="https://appgate-test.mywire.org/releases/dev/gate/gate.js?v=0.3.7"></script>
</body>
</html>

<!-- Cached by WP-Optimize - https://getwpo.com - Last modified: Sun, 19 Jul 2026 23:53:02 GMT -->
