    html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: #f7faff; }
    #innocad_canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }

    /* Loading screen, in InnoCode's colours: white type and the wordmark on the menu-bar blue. */
    #innocad_loading { position: absolute; inset: 0; z-index: 10; display: flex; flex-direction: column;
      align-items: center; justify-content: center; padding: 24px; box-sizing: border-box; text-align: center;
      background: #4c97ff; color: #fff; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
      transition: opacity 300ms cubic-bezier(0.16, 1, 0.3, 1); }
    #innocad_loading.done { opacity: 0; pointer-events: none; }
    #innocad_loading ::selection { background: #fff; color: #3373cc; }
    #innocad_loading .wordmark { width: min(64vmin, 340px); height: auto; margin-bottom: 40px; }
    #innocad_loading .title { margin: 20px 0 6px; font-size: 2rem; line-height: 1.2; font-weight: 700; }
    #innocad_loading .message { margin: 0; min-height: 1.5em; font-size: 1.125rem; line-height: 1.5; font-weight: 500;
      transition: opacity 250ms ease; }
    #innocad_loading .message.swap { opacity: 0; }

    /* Three InnoKit bricks drop onto each other, bottom first, then the stack starts over. */
    #innocad_loading .bricks { width: 112px; height: 116px; overflow: visible; }
    #innocad_loading .brick { animation: innocad-brick 2.4s cubic-bezier(0.16, 1, 0.3, 1) infinite both; }
    #innocad_loading .brick-2 { animation-name: innocad-brick-2; }
    #innocad_loading .brick-3 { animation-name: innocad-brick-3; }
    @keyframes innocad-brick { 0% { transform: translateY(-36px); opacity: 0; } 22%, 92% { transform: none; opacity: 1; } 100% { transform: none; opacity: 0; } }
    @keyframes innocad-brick-2 { 0%, 22% { transform: translateY(-36px); opacity: 0; } 44%, 92% { transform: none; opacity: 1; } 100% { transform: none; opacity: 0; } }
    @keyframes innocad-brick-3 { 0%, 44% { transform: translateY(-36px); opacity: 0; } 66%, 92% { transform: none; opacity: 1; } 100% { transform: none; opacity: 0; } }
    @media (prefers-reduced-motion: reduce) {
      #innocad_loading .brick { animation: none; }
      #innocad_loading .message { transition: none; }
    }
    .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
