templates/public/homepage.html.twig line 1

Open in your IDE?
  1. {% extends '@!SymfonyAdmin/base.html.twig' %}
  2. {% block stylesheets %}
  3.   {{ parent() }}
  4.   <style>
  5.     html,
  6.     body {
  7.       min-height: 100%;
  8.       overflow-y: auto !important;
  9.     }
  10.     .portal-page {
  11.       min-height: 100vh;
  12.       background: #f4f7fb;
  13.       display: flex;
  14.       align-items: center;
  15.       justify-content: center;
  16.       padding: 40px 20px;
  17.       font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  18.     }
  19.     .portal-card {
  20.       width: 100%;
  21.       max-width: 700px;
  22.       background: #ffffff;
  23.       border: 1px solid #d8dee8;
  24.       border-radius: 12px;
  25.       box-shadow: 0 14px 35px rgba(15, 23, 42, 0.12);
  26.       padding: 40px 44px 42px;
  27.       text-align: center;
  28.     }
  29.     .portal-logo img {
  30.       height: 42px;
  31.       margin-bottom: 20px;
  32.     }
  33.     .portal-card h1 {
  34.       margin: 0;
  35.       font-size: 38px;
  36.       line-height: 1.12;
  37.       font-weight: 800;
  38.       color: #070b16;
  39.       letter-spacing: -0.035em;
  40.     }
  41.     .portal-subtitle {
  42.       margin: 16px 0 30px;
  43.       font-size: 18px;
  44.       line-height: 1.5;
  45.       color: #6f7782;
  46.       font-weight: 400;
  47.     }
  48.     .info-row {
  49.       display: grid;
  50.       grid-template-columns: 76px 1fr;
  51.       gap: 16px;
  52.       align-items: center;
  53.       text-align: left;
  54.       max-width: 610px;
  55.       margin: 0 auto;
  56.     }
  57.     .info-row p {
  58.       margin: 0;
  59.       font-size: 16px;
  60.       line-height: 1.6;
  61.       color: #111827;
  62.     }
  63.     .info-row strong {
  64.       font-weight: 800;
  65.     }
  66.     .icon-circle {
  67.       width: 60px;
  68.       height: 60px;
  69.       border-radius: 50%;
  70.       display: flex;
  71.       align-items: center;
  72.       justify-content: center;
  73.       margin: 0 auto;
  74.     }
  75.     .icon-circle svg {
  76.       width: 32px;
  77.       height: 32px;
  78.       display: block;
  79.     }
  80.     .icon-circle.blue {
  81.       background: #edf4ff;
  82.       color: #3b82f6;
  83.     }
  84.     .icon-circle.green {
  85.       background: #eff7ea;
  86.       color: #76a83b;
  87.     }
  88.     .divider {
  89.       max-width: 610px;
  90.       height: 1px;
  91.       background: #dfe5ee;
  92.       margin: 22px auto;
  93.     }
  94.     .notice-box {
  95.       max-width: 610px;
  96.       margin: 26px auto 26px;
  97.       border: 1px solid #f1dc9a;
  98.       background: #fffaf0;
  99.       border-radius: 10px;
  100.       padding: 18px 20px;
  101.       display: grid;
  102.       grid-template-columns: 48px 1px 1fr;
  103.       gap: 16px;
  104.       align-items: center;
  105.       text-align: left;
  106.       color: #b3871f;
  107.     }
  108.     .notice-icon {
  109.       display: flex;
  110.       align-items: center;
  111.       justify-content: center;
  112.     }
  113.     .notice-icon svg {
  114.       width: 30px;
  115.       height: 30px;
  116.       display: block;
  117.     }
  118.     .notice-divider {
  119.       width: 1px;
  120.       height: 38px;
  121.       background: #efdfb3;
  122.     }
  123.     .notice-box strong {
  124.       font-size: 15px;
  125.       line-height: 1.45;
  126.       font-weight: 800;
  127.       color: #a57a1d;
  128.     }
  129.     .signin-button {
  130.       border: 0;
  131.       background: #3b82f6;
  132.       color: #ffffff;
  133.       font-size: 18px;
  134.       font-weight: 700;
  135.       padding: 15px 56px;
  136.       border-radius: 10px;
  137.       cursor: pointer;
  138.       box-shadow: 0 8px 18px rgba(59, 130, 246, 0.25);
  139.       display: inline-flex;
  140.       align-items: center;
  141.       justify-content: center;
  142.       gap: 10px;
  143.       min-width: 210px;
  144.     }
  145.     .signin-button:hover {
  146.       background: #0575eb;
  147.       color: #fff;
  148.       text-decoration: none;
  149.     }
  150.     .signin-button__label {
  151.       line-height: 1;
  152.     }
  153.     .signin-button__icon {
  154.       width: 20px;
  155.       height: 20px;
  156.       flex: 0 0 20px;
  157.       display: block;
  158.     }
  159.     @media (max-width: 768px) {
  160.       .portal-page {
  161.         padding: 28px 16px;
  162.       }
  163.       .portal-card {
  164.         padding: 34px 22px;
  165.       }
  166.       .portal-logo img {
  167.         height: 38px;
  168.         margin-bottom: 20px;
  169.       }
  170.       .portal-card h1 {
  171.         font-size: 30px;
  172.       }
  173.       .portal-subtitle {
  174.         font-size: 17px;
  175.         margin-bottom: 28px;
  176.       }
  177.       .info-row {
  178.         grid-template-columns: 1fr;
  179.         text-align: center;
  180.         justify-items: center;
  181.         gap: 14px;
  182.       }
  183.       .info-row p {
  184.         font-size: 16px;
  185.       }
  186.       .icon-circle {
  187.         width: 64px;
  188.         height: 64px;
  189.       }
  190.       .icon-circle svg {
  191.         width: 34px;
  192.         height: 34px;
  193.       }
  194.       .notice-box {
  195.         grid-template-columns: 1fr;
  196.         text-align: center;
  197.         gap: 12px;
  198.         padding: 18px;
  199.       }
  200.       .notice-divider {
  201.         display: none;
  202.       }
  203.       .notice-box strong {
  204.         font-size: 16px;
  205.       }
  206.       .signin-button {
  207.         width: 100%;
  208.         min-width: 0;
  209.         padding: 16px 20px;
  210.         font-size: 17px;
  211.       }
  212.     }
  213.   </style>
  214. {% endblock %}
  215. {% block layout %}
  216.   <div class="portal-page">
  217.     <div class="portal-card">
  218.       <div class="portal-logo">
  219.         <img src="{{ asset('images/ledger-logo.png') }}" alt="Ledger" />
  220.       </div>
  221.       <h1>Client Support Portal</h1>
  222.       <p class="portal-subtitle">
  223.         Secure portal for client communication, document access, <br /> and account management.
  224.       </p>
  225.       <div class="info-row">
  226.         <div class="icon-circle blue" aria-hidden="true">
  227.           <svg viewBox="0 0 24 24" fill="none">
  228.             <path d="M12 3l7 3v5c0 4.9-3.1 8.9-7 10-3.9-1.1-7-5.1-7-10V6l7-3z" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/>
  229.             <rect x="9.2" y="10.2" width="5.6" height="4.8" rx="1.1" stroke="currentColor" stroke-width="1.9"/>
  230.             <path d="M10.4 10.2V8.9a1.6 1.6 0 013.2 0v1.3" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/>
  231.           </svg>
  232.         </div>
  233.         <p>
  234.           <strong>{{ app.request.host }}</strong> is our dedicated secure client portal domain for existing clients, authorized users, and internal team members.
  235.         </p>
  236.       </div>
  237.       <div class="divider"></div>
  238.       <div class="info-row">
  239.         <div class="icon-circle green" aria-hidden="true">
  240.           <svg viewBox="0 0 24 24" fill="none">
  241.             <rect x="6.5" y="10" width="11" height="8" rx="1.8" stroke="currentColor" stroke-width="1.9"/>
  242.             <path d="M8.5 10V7.8A3.5 3.5 0 0112 4.5a3.5 3.5 0 013.5 3.3V10" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/>
  243.             <path d="M12 13.2v1.8" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/>
  244.           </svg>
  245.         </div>
  246.         <p>
  247.           Access requires login credentials. Information shared inside the portal is protected within this secure environment and is only available to authorized users.
  248.         </p>
  249.       </div>
  250.       <div class="notice-box">
  251.         <div class="notice-icon" aria-hidden="true">
  252.           <svg viewBox="0 0 24 24" fill="none">
  253.             <path d="M8.2 11.1a2.6 2.6 0 100-5.2 2.6 2.6 0 000 5.2z" stroke="currentColor" stroke-width="1.9"/>
  254.             <path d="M15.8 10.4a2.2 2.2 0 100-4.4 2.2 2.2 0 000 4.4z" stroke="currentColor" stroke-width="1.9"/>
  255.             <path d="M3.8 18.2v-1c0-2.1 1.8-3.8 4-3.8h.8c2.2 0 4 1.7 4 3.8v1" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/>
  256.             <path d="M13.7 18.2v-.6c0-1.8 1.4-3.1 3.2-3.1h.4c1.8 0 3.2 1.3 3.2 3.1v.6" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/>
  257.           </svg>
  258.         </div>
  259.         <div class="notice-divider"></div>
  260.         <strong>For existing clients, authorized users, and internal team members only.</strong>
  261.       </div>
  262.       <a href="{{ path('portal_redirect') }}" class="signin-button">
  263.         <span class="signin-button__label">Sign in</span>
  264.         <svg class="signin-button__icon" viewBox="0 0 20 20" fill="none" aria-hidden="true">
  265.           <path d="M4 10h10.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
  266.           <path d="M10.5 5.5L15 10l-4.5 4.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  267.         </svg>
  268.       </a>
  269.     </div>
  270.   </div>
  271. {% endblock %}