mittens-engine 0.7.0

A Vulkan and OpenXR scene engine with ECS, reactive signals, and Meow Meow scripting
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>World Panel Reference</title>
  <style>
    :root {
      --gu: 12px;
      --panel-width: calc(29.5 * var(--gu));
      --content-height: calc(54 * var(--gu));
      --status-height: calc(2.5 * var(--gu));
      --title-height: calc(3 * var(--gu));
      --gap: calc(0.5 * var(--gu));
      --title-label-width: calc(14.5 * var(--gu));
      --title-label-padding-x: calc(0.25 * var(--gu));
      --button-width: calc(6.875 * var(--gu));
      --button-height: calc(2.4 * var(--gu));
      --button-margin-y: calc(0.3 * var(--gu));
      --button-margin-left: calc(0.625 * var(--gu));
      --row-margin-x: calc(0.25 * var(--gu));
      --row-margin-y: calc(0.2 * var(--gu));
      --row-padding-y: calc(0.55 * var(--gu));
      --row-padding-x: calc(0.45 * var(--gu));
      --status-padding-y: calc(0.25 * var(--gu));
      --status-padding-x: calc(0.45 * var(--gu));
      --title-padding-y: calc(0.25 * var(--gu));
      --panel-green: rgba(46, 199, 56, 0.95);
      --button-green: rgba(26, 140, 46, 1);
      --button-text: rgba(191, 255, 115, 1);
      --status-green: rgba(20, 61, 28, 0.92);
      --status-text: rgba(235, 255, 235, 1);
      --content-yellow: rgba(245, 235, 46, 0.8);
      --row-bg: rgba(235, 247, 235, 1);
      --row-text: rgba(15, 23, 20, 1);
      --title-text: rgba(230, 255, 235, 1);
      --page-bg: linear-gradient(180deg, #dfe8dc 0%, #c5d6c0 100%);
      --panel-shadow: 0 18px 40px rgba(18, 37, 17, 0.22);
      --border: rgba(18, 37, 17, 0.18);
      --font: "IBM Plex Sans", "Segoe UI", sans-serif;
      --mono: "IBM Plex Mono", "Cascadia Mono", monospace;
    }

    * {
      box-sizing: border-box;
    }

    body {
      margin: 0;
      min-height: 100vh;
      display: grid;
      place-items: center;
      background: var(--page-bg);
      color: #102013;
      font-family: var(--font);
    }

    .stage {
      padding: 32px;
      width: 100%;
      display: grid;
      place-items: center;
    }

    .panel {
      width: min(var(--panel-width), calc(100vw - 32px));
      background: rgba(240, 246, 238, 0.85);
      border: 1px solid var(--border);
      box-shadow: var(--panel-shadow);
      backdrop-filter: blur(6px);
      padding: calc(0.35 * var(--gu));
    }

    .status-bar {
      min-height: var(--status-height);
      margin-bottom: var(--gap);
      padding: var(--status-padding-y) var(--status-padding-x);
      background: var(--status-green);
      color: var(--status-text);
      display: flex;
      align-items: center;
      justify-content: flex-start;
      font-size: 14px;
      line-height: 1.2;
      letter-spacing: 0.01em;
    }

    .title-bar {
      min-height: var(--title-height);
      margin-bottom: var(--gap);
      background: var(--panel-green);
      display: flex;
      align-items: stretch;
      gap: 0;
    }

    .title-label {
      width: var(--title-label-width);
      padding: var(--title-padding-y) var(--title-label-padding-x);
      display: flex;
      align-items: center;
      justify-content: flex-start;
      color: var(--title-text);
      font-size: 16px;
      font-weight: 600;
      letter-spacing: 0.01em;
    }

    .panel-button {
      width: var(--button-width);
      min-height: var(--button-height);
      margin: var(--button-margin-y) 0 var(--button-margin-y) var(--button-margin-left);
      padding: 0 calc(0.45 * var(--gu));
      border: 0;
      background: var(--button-green);
      color: var(--button-text);
      font: 600 14px/1 var(--font);
      display: inline-flex;
      align-items: center;
      justify-content: center;
      text-align: center;
      cursor: default;
    }

    .content-slot {
      height: min(var(--content-height), 60vh);
      overflow: auto;
      background: var(--content-yellow);
      padding: calc(0.25 * var(--gu)) 0;
    }

    .rows {
      width: 100%;
    }

    .row {
      margin: var(--row-margin-y) var(--row-margin-x);
      padding: var(--row-padding-x) var(--row-padding-y);
      background: var(--row-bg);
      color: var(--row-text);
      font: 500 14px/1.3 var(--mono);
    }

    .row + .row {
      margin-top: var(--row-margin-y);
    }
  </style>
</head>
<body>
  <main class="stage">
    <section class="panel" aria-label="World panel reference">
      <div class="status-bar">selected item_3</div>

      <header class="title-bar">
        <div class="title-label">World</div>
        <button class="panel-button" type="button">Save</button>
        <button class="panel-button" type="button">Load</button>
      </header>

      <div class="content-slot">
        <div class="rows">
          <div class="row">Root</div>
          <div class="row">Camera Rig</div>
          <div class="row">Directional Light</div>
          <div class="row">VTuber Desktop Avatar</div>
          <div class="row">World Panel Content Root</div>
          <div class="row">Inspector Mount Placeholder</div>
          <div class="row">Layout Root</div>
          <div class="row">Renderer Stats Debug Node</div>
        </div>
      </div>
    </section>
  </main>
</body>
</html>