📄 src/routes/+layout.svelte
<script lang="ts">
  import favicon from "$lib/assets/favicon.svg";
  let { children } = $props();
</script>

<svelte:head>
  <link rel="icon" href={favicon} />
</svelte:head>

<main>
  {@render children()}
</main>

<nav>
  <ul>
    <li>
      <a href="/" aria-label="Home">
        <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
          <path
            d="M21 8.5c-2.1-.7-4.5.1-6.1 1.8L12 12 9.1 10.3C7.5 8.6 5.1 7.8 3 8.5c.9 1.9 2.7 3.4 4.8 3.8l-2.3.8C6.8 15 9.2 15.4 11 14l1-.5 1 .5c1.8 1.4 4.2 1 5.5-.9l-2.3-.8C18.3 11.9 20.1 10.4 21 8.5z"
          />
        </svg>
      </a>
    </li>
  </ul>
</nav>

<style>
  :global(*) {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }

  :global(html) {
    --bg: #0e1a10;
    --nav-bg: #162419;
    --accent: #5cb85c;
    --text: #e8f0e9;
    --nav-height: 5rem;
  }

  :global(body) {
    background: var(--bg);
    color: var(--text);
    font-family: system-ui, sans-serif;
    overscroll-behavior: none;
    -webkit-tap-highlight-color: transparent;
  }

  main {
    min-height: 100dvh;
    padding-bottom: calc(var(--nav-height) + env(safe-area-inset-bottom));
  }

  nav {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: calc(var(--nav-height) + env(safe-area-inset-bottom));
    overflow: hidden;

    &::before {
      content: "";
      position: absolute;
      bottom: 0;
      left: 50%;
      transform: translateX(-50%);
      width: 140vw;
      height: 100%;
      border-radius: 70vw 70vw 0 0 / 5vw 5vw 0 0;
      background: var(--nav-bg);
    }

    ul {
      position: relative;
      z-index: 1;
      height: var(--nav-height);
      display: flex;
      align-items: center;
      justify-content: center;
      list-style: none;

      a {
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--text);
        text-decoration: none;
        padding: 0.75rem;
        opacity: 0.6;
        transition: opacity 0.2s;

        &:hover,
        &:focus-visible,
        &[aria-current="page"] {
          opacity: 1;
        }

        svg {
          width: 1.75rem;
          height: 1.75rem;
        }
      }
    }
  }
</style>