Ctrl K
ComunidadGuías…

mockups/blob.html

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>internal/router/router.go · mkappworks/cloudzilla — Cloudzilla</title>
<link rel="stylesheet" href="/assets/tailwind.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500&family=Geist:wght@400;500;600&display=swap" rel="stylesheet" />
</head>
<body class="min-h-screen flex flex-col antialiased font-sans">
<a href="#main-content" class="skip-link">Skip to main content</a>

<div id="cz-header" data-repo-tab="code"></div>

<main id="main-content" tabindex="-1" class="max-w-[1400px] mx-auto px-6 pt-6 pb-20 flex-1 w-full">
  <div class="space-y-6 pt-2">

    <section aria-labelledby="blob-title">
      <h1 id="blob-title" class="text-xl tracking-tight font-medium flex flex-wrap items-center gap-x-1.5 gap-y-1">
          <a href="profile.html" class="hover:underline text-muted-foreground">mkappworks</a>
          <span class="text-muted-foreground" aria-hidden="true">/</span>
          <a href="repo.html" class="hover:underline text-muted-foreground">cloudzilla</a>
          <span class="text-muted-foreground" aria-hidden="true">/</span>
          <a href="tree.html" class="hover:underline text-muted-foreground">internal</a>
          <span class="text-muted-foreground" aria-hidden="true">/</span>
          <a href="tree.html" class="hover:underline text-muted-foreground">router</a>
          <span class="text-muted-foreground" aria-hidden="true">/</span>
          <a href="blob.html" class="hover:underline font-semibold">router.go</a>
      </h1>
      <div class="mt-3 flex flex-wrap items-center gap-2">
    <div class="relative" data-dropdown>
      <button type="button" data-dropdown-btn aria-expanded="false" aria-haspopup="menu" aria-label="Switch branch or tag, current: main" class="h-8 px-3 text-[13px] text-foreground border border-border rounded-md hover:bg-accent inline-flex items-center gap-1.5">
        <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><circle cx="6" cy="3" r="3"></circle><circle cx="18" cy="3" r="3"></circle><circle cx="12" cy="21" r="3"></circle><path d="M6 6v3a3 3 0 003 3h6a3 3 0 003-3V6M12 12v6"></path></svg>
        <span class="font-medium">main</span>
        <svg class="text-muted-foreground" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M7 10l5 5 5-5"></path></svg>
      </button>
      <div hidden data-dropdown-panel role="menu" aria-label="Switch branches and tags" class="absolute left-0 top-full mt-1.5 z-50 w-[300px] rounded-md border border-border bg-popover text-popover-foreground shadow-md p-1">
        <div class="px-1.5 pb-1.5">
          <label for="branch-filter" class="sr-only">Find a branch or tag</label>
          <input id="branch-filter" type="search" data-ref-filter placeholder="Find a branch or tag…" class="w-full h-7 px-2.5 text-[12px] bg-card border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
        </div>
        <p class="px-2.5 pt-1 pb-0.5 text-[10px] uppercase tracking-wider text-muted-foreground font-medium">Branches</p>
        <a href="blob.html" role="menuitem" data-ref="main" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">main</span>
          <span class="text-[10px] text-muted-foreground">default</span>
        </a>
        <a href="blob.html" role="menuitem" data-ref="feat/phase-12.3-discussions" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">feat/phase-12.3-discussions</span>
          
        </a>
        <a href="blob.html" role="menuitem" data-ref="fix/contributor-stats-sha-dedup" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">fix/contributor-stats-sha-dedup</span>
          
        </a>
        <p class="px-2.5 pt-1 pb-0.5 text-[10px] uppercase tracking-wider text-muted-foreground font-medium">Tags</p>
        <a href="blob.html" role="menuitem" data-ref="v0.2.0" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">v0.2.0</span>
          
        </a>
        <a href="blob.html" role="menuitem" data-ref="v0.1.0" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">v0.1.0</span>
          
        </a>
        <div role="separator" class="my-1 h-px bg-border"></div>
        <a href="refs.html" role="menuitem" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs text-[13px] hover:bg-accent">View all branches</a>
      </div>
    </div>
        <span class="text-[12px] text-muted-foreground">·</span>
        <span class="font-mono text-[11px] text-muted-foreground">27 lines · 612 B</span>
      </div>
    </section>

    <div data-tree-layout class="grid gap-4 grid-cols-[260px_1fr]">
      <aside data-file-tree class="rounded-md border border-border bg-card sticky top-4 self-start max-h-[calc(100vh-5rem)] overflow-hidden flex flex-col" aria-label="Repository file tree">
        <header class="px-3 py-2 border-b border-border flex items-center gap-2 bg-muted/40 shrink-0">
          <span class="text-[12px] font-medium">Files</span>
          <button type="button" data-tree-expand title="Expand all folders" aria-label="Expand all folders" class="ml-auto h-6 w-6 grid place-items-center rounded-sm hover:bg-muted text-muted-foreground">
            <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg>
          </button>
          <button type="button" data-tree-collapse title="Collapse all folders" aria-label="Collapse all folders" class="h-6 w-6 grid place-items-center rounded-sm hover:bg-muted text-muted-foreground">
            <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="m7 20 5-5 5 5"></path><path d="m7 4 5 5 5-5"></path></svg>
          </button>
          <button type="button" data-tree-hide title="Hide files" aria-label="Hide files" class="h-6 w-6 grid place-items-center rounded-sm hover:bg-muted text-muted-foreground">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg>
          </button>
        </header>
        <div class="px-2 py-1.5 border-b border-border shrink-0">
          <input data-tree-filter type="search" placeholder="Filter files…" class="w-full h-7 px-2 text-[12px] bg-transparent border border-border rounded-xs placeholder:text-muted-foreground/60 focus:outline-hidden focus:border-foreground/30" aria-label="Filter files"/>
        </div>
        <div class="overflow-y-auto flex-1 flex flex-col">
          <ol class="overflow-y-auto py-1 flex-1 text-[12.5px]" role="tree">
<li data-name=".github" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 8px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">.github</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="workflows" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">workflows</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="ci.yml" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">ci.yml</span>
  </a>
</li>
<li data-name="release.yml" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">release.yml</span>
  </a>
</li>
  </ol>
</li>
  </ol>
</li>
<li data-name="cmd" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 8px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">cmd</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="server" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">server</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="main.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">main.go</span>
  </a>
</li>
  </ol>
</li>
  </ol>
</li>
<li data-name="docs" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 8px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">docs</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="access-control.md" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 20px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">access-control.md</span>
  </a>
</li>
<li data-name="git-transport.md" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 20px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">git-transport.md</span>
  </a>
</li>
  </ol>
</li>
<li data-name="internal" role="treeitem" data-tree-dir aria-expanded="true">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 8px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform rotate-90" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">internal</span>
    </a>
  </div>
  <ol role="group">
<li data-name="handler" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">handler</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="repo_handler.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">repo_handler.go</span>
  </a>
</li>
<li data-name="code_handler.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">code_handler.go</span>
  </a>
</li>
  </ol>
</li>
<li data-name="router" role="treeitem" data-tree-dir aria-expanded="true">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform rotate-90" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">router</span>
    </a>
  </div>
  <ol role="group">
<li data-name="router.go" role="treeitem">
  <a href="blob.html" aria-current="page" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] bg-accent text-foreground" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">router.go</span>
  </a>
</li>
<li data-name="router_test.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">router_test.go</span>
  </a>
</li>
  </ol>
</li>
<li data-name="service" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">service</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="code_service.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">code_service.go</span>
  </a>
</li>
<li data-name="repo_service.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">repo_service.go</span>
  </a>
</li>
  </ol>
</li>
<li data-name="store" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">store</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="repo_store.go" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 32px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">repo_store.go</span>
  </a>
</li>
  </ol>
</li>
<li data-name="view" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 20px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">view</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="pages" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 32px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">pages</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="repo.templ" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 44px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">repo.templ</span>
  </a>
</li>
<li data-name="tree.templ" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 44px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">tree.templ</span>
  </a>
</li>
  </ol>
</li>
  </ol>
</li>
  </ol>
</li>
<li data-name="tailwind" role="treeitem" data-tree-dir aria-expanded="false">
  <div class="flex items-center gap-0.5 rounded-sm hover:bg-muted/50" style="padding-left: 8px">
    <button type="button" data-tree-toggle class="shrink-0 h-5 w-5 flex items-center justify-center text-muted-foreground/50" aria-label="Toggle folder">
      <svg class="transition-transform" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M9 6l6 6-6 6"></path></svg>
    </button>
    <a href="tree.html" class="flex items-center gap-1 py-[3px] flex-1 min-w-0 text-muted-foreground hover:text-foreground text-[12.5px]">
      <svg style="color:#6ea8fe" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg>
      <span class="truncate">tailwind</span>
    </a>
  </div>
  <ol role="group" hidden>
<li data-name="input.css" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 20px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">input.css</span>
  </a>
</li>
  </ol>
</li>
<li data-name=".gitignore" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 8px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">.gitignore</span>
  </a>
</li>
<li data-name="CLAUDE.md" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 8px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">CLAUDE.md</span>
  </a>
</li>
<li data-name="Makefile" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 8px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">Makefile</span>
  </a>
</li>
<li data-name="README.md" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 8px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">README.md</span>
  </a>
</li>
<li data-name="go.mod" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 8px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">go.mod</span>
  </a>
</li>
<li data-name="go.sum" role="treeitem">
  <a href="blob.html" class="flex items-center gap-1 py-[3px] rounded-sm text-[12.5px] text-muted-foreground hover:text-foreground hover:bg-muted/50" style="padding-left: 8px">
    <span class="shrink-0 w-5 flex items-center justify-center"></span>
    <svg class="shrink-0 text-muted-foreground/50" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
    <span class="truncate font-mono">go.sum</span>
  </a>
</li>
          </ol>
        </div>
      </aside>

      <div class="min-w-0">
        <section class="rounded-md border border-border bg-card overflow-hidden" aria-labelledby="blob-heading">
          <header class="px-4 py-2 border-b border-border bg-muted/50 flex items-center gap-3">
            <button type="button" data-tree-show title="Show files" aria-label="Show files" hidden class="h-6 w-6 shrink-0 grid place-items-center rounded-sm hover:bg-muted text-muted-foreground">
              <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m14 9 3 3-3 3"></path></svg>
            </button>
            <svg class="text-muted-foreground shrink-0" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <h2 id="blob-heading" class="text-[13px] font-medium truncate">internal/router/router.go</h2>
            <div class="ml-auto flex items-center gap-1.5 shrink-0">
              <a href="blame.html" class="inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors border border-input bg-transparent hover:bg-accent hover:text-accent-foreground h-8 px-3 text-[13px]">
                <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 113 3L7 19l-4 1 1-4z"></path></svg>
                Blame
              </a>
              <a href="raw.html" class="inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors border border-input bg-transparent hover:bg-accent hover:text-accent-foreground h-8 px-3 text-[13px]">
                <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"></path><path d="M7 10l5 5 5-5"></path><path d="M12 15V3"></path></svg>
                Raw
              </a>
              <button type="button" data-copy aria-label="Copy file contents" title="Copy" class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-border bg-card hover:bg-muted text-muted-foreground">
                <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg>
              </button>
              <a href="edit_file.html" class="inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors border border-input bg-transparent hover:bg-accent hover:text-accent-foreground h-8 px-3 text-[13px]">
                <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 113 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>
                Edit
              </a>
              <button type="button" aria-haspopup="dialog" data-open-dialog="blob-delete-dialog" class="inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors disabled:opacity-50 disabled:pointer-events-none border border-destructive/40 text-destructive bg-transparent hover:bg-destructive/10 hover:border-destructive h-8 px-3 text-[13px]">
                <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"></path><path d="M10 11v6"></path><path d="M14 11v6"></path></svg>
                Delete
              </button>
            </div>
          </header>

            <div class="px-4 py-2 border-b border-border flex items-center gap-3 text-[12px] bg-muted/40">
              
              <a href="profile.html" class="font-medium hover:underline truncate">Malith Kuruppu</a>
              <a href="commit.html" class="text-muted-foreground hover:underline truncate flex-1 min-w-0">feat: add publish step to promote draft releases to published</a>
              <a href="commit.html" class="font-mono text-muted-foreground hover:underline shrink-0">420b44b</a>
              <span class="text-muted-foreground shrink-0">
                <time datetime="2026-05-13T11:00:00Z">13 May 26 11:00 UTC</time>
              </span>
            </div>

          <div class="hl overflow-x-auto bg-card" data-code>
            <table class="w-full font-mono text-[12.5px] leading-[1.6]">
              <caption class="sr-only">Contents of internal/router/router.go</caption>
              <tbody>
              <tr id="L1" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L1" class="hover:text-foreground">1</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"><span class="hl-k">package</span> router</td>
              </tr>
              <tr id="L2" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L2" class="hover:text-foreground">2</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"> </td>
              </tr>
              <tr id="L3" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L3" class="hover:text-foreground">3</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"><span class="hl-k">import</span> (</td>
              </tr>
              <tr id="L4" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L4" class="hover:text-foreground">4</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	<span class="hl-s">&quot;net/http&quot;</span></td>
              </tr>
              <tr id="L5" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L5" class="hover:text-foreground">5</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"> </td>
              </tr>
              <tr id="L6" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L6" class="hover:text-foreground">6</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	<span class="hl-s">&quot;github.com/go-chi/chi/v5&quot;</span></td>
              </tr>
              <tr id="L7" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L7" class="hover:text-foreground">7</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	<span class="hl-s">&quot;github.com/mkappworks-dev/cloudzilla-app/internal/handler&quot;</span></td>
              </tr>
              <tr id="L8" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L8" class="hover:text-foreground">8</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">)</td>
              </tr>
              <tr id="L9" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L9" class="hover:text-foreground">9</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"> </td>
              </tr>
              <tr id="L10" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L10" class="hover:text-foreground">10</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"><span class="hl-c1">// New returns a chi router with all Cloudzilla routes registered.</span></td>
              </tr>
              <tr id="L11" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L11" class="hover:text-foreground">11</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"><span class="hl-k">func</span> <span class="hl-nf">New</span>(h *handler.Handlers) http.Handler {</td>
              </tr>
              <tr id="L12" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L12" class="hover:text-foreground">12</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	r := chi.<span class="hl-nf">NewRouter</span>()</td>
              </tr>
              <tr id="L13" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L13" class="hover:text-foreground">13</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"> </td>
              </tr>
              <tr id="L14" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L14" class="hover:text-foreground">14</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/&quot;</span>, h.Home)</td>
              </tr>
              <tr id="L15" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L15" class="hover:text-foreground">15</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/explore&quot;</span>, h.Explore)</td>
              </tr>
              <tr id="L16" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L16" class="hover:text-foreground">16</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"> </td>
              </tr>
              <tr id="L17" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L17" class="hover:text-foreground">17</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	r.<span class="hl-nf">Route</span>(<span class="hl-s">&quot;/{owner}/{repo}&quot;</span>, <span class="hl-k">func</span>(<span class="hl-nf">r</span> chi.Router) {</td>
              </tr>
              <tr id="L18" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L18" class="hover:text-foreground">18</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">		r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/&quot;</span>, h.PageRepo)</td>
              </tr>
              <tr id="L19" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L19" class="hover:text-foreground">19</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">		r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/tree/*&quot;</span>, h.PageTree)</td>
              </tr>
              <tr id="L20" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L20" class="hover:text-foreground">20</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">		r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/blob/*&quot;</span>, h.PageBlob)</td>
              </tr>
              <tr id="L21" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L21" class="hover:text-foreground">21</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">		r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/blame/*&quot;</span>, h.PageBlame)</td>
              </tr>
              <tr id="L22" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L22" class="hover:text-foreground">22</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">		r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/commits/*&quot;</span>, h.PageCommits)</td>
              </tr>
              <tr id="L23" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L23" class="hover:text-foreground">23</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">		r.<span class="hl-nf">Get</span>(<span class="hl-s">&quot;/pulse&quot;</span>, h.PagePulse)</td>
              </tr>
              <tr id="L24" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L24" class="hover:text-foreground">24</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	})</td>
              </tr>
              <tr id="L25" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L25" class="hover:text-foreground">25</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre"> </td>
              </tr>
              <tr id="L26" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L26" class="hover:text-foreground">26</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">	<span class="hl-k">return</span> r</td>
              </tr>
              <tr id="L27" class="target:bg-accent/30 hover:bg-muted/50">
                <td class="select-none text-muted-foreground pr-4 pl-4 py-0 text-right w-12 align-top border-r border-border">
                  <a href="#L27" class="hover:text-foreground">27</a>
                </td>
                <td class="pl-4 pr-4 py-0 whitespace-pre">}</td>
              </tr>
              </tbody>
            </table>
          </div>
        </section>
      </div>
    </div>
  </div>

  <dialog id="blob-delete-dialog" class="rounded-lg border border-border bg-popover text-popover-foreground p-0 w-[480px] max-w-[calc(100vw-2rem)] max-h-[calc(100dvh-2rem)] overflow-y-auto mt-[28vh] mb-auto translate-y-[min(0px,calc(100dvh-28vh-1rem-100%))] backdrop:bg-black/60 backdrop:backdrop-blur-xs open:animate-in" aria-labelledby="blob-delete-dialog-title">
    <form data-toast="File deleted" onsubmit="this.closest('dialog').close()">
      <input type="hidden" name="blob_sha" value="9fb44fd5f6d1258d19a3d02e1a416e87c4c32217" />
      <div class="sticky top-0 z-10 bg-popover flex flex-col gap-1 p-5 border-b border-border">
        <h2 id="blob-delete-dialog-title" class="text-base font-semibold leading-tight">Delete this file?</h2>
        <p class="text-[13px] text-muted-foreground leading-snug">This commits the removal of <span class="font-mono text-foreground break-all">internal/router/router.go</span> to <span class="font-mono text-foreground">main</span>.</p>
      </div>
      <div class="p-5 text-sm">
        <label for="blob-delete-message" class="block text-[12px] font-medium mb-1.5">Commit message</label>
        <input id="blob-delete-message" name="message" type="text" placeholder="Delete internal/router/router.go" class="w-full h-9 px-3 text-[13px] bg-background border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
      </div>
      <div class="sticky bottom-0 z-10 bg-popover flex items-center justify-end gap-2 p-5 border-t border-border">
        <button type="button" onclick="this.closest('dialog').close()" class="inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors disabled:opacity-50 disabled:pointer-events-none border border-input bg-transparent hover:bg-accent hover:text-accent-foreground h-9 px-4 text-sm">Cancel</button>
        <button type="submit" class="inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors disabled:opacity-50 disabled:pointer-events-none bg-destructive text-destructive-foreground hover:bg-destructive/90 h-9 px-4 text-sm">Delete file</button>
      </div>
    </form>
  </dialog>
</main>

<div id="cz-footer"></div>
<script src="shell.js"></script>
<script>
(function () {
  function closeAll(except) {
    document.querySelectorAll('[data-dropdown]').forEach(function (d) {
      if (d === except) return;
      d.querySelector('[data-dropdown-panel]').hidden = true;
      d.querySelector('[data-dropdown-btn]').setAttribute('aria-expanded', 'false');
    });
  }
  document.addEventListener('click', function (e) {
    var btn = e.target.closest('[data-dropdown-btn]');
    var dd = btn && btn.closest('[data-dropdown]');
    if (!btn && e.target.closest('[data-dropdown-panel]')) return;
    closeAll(dd);
    if (!dd) return;
    var panel = dd.querySelector('[data-dropdown-panel]');
    panel.hidden = !panel.hidden;
    btn.setAttribute('aria-expanded', String(!panel.hidden));
  });
  document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeAll(); });
  document.querySelectorAll('[data-ref-filter]').forEach(function (input) {
    input.addEventListener('input', function () {
      var q = input.value.toLowerCase();
      input.closest('[data-dropdown-panel]').querySelectorAll('[data-ref]').forEach(function (a) {
        a.hidden = !!q && a.dataset.ref.toLowerCase().indexOf(q) < 0;
      });
    });
  });
})();
(function () {
  var layout = document.querySelector('[data-tree-layout]');
  if (!layout) return;
  var tree = layout.querySelector('[data-file-tree]');
  var dirs = tree.querySelectorAll('[data-tree-dir]');
  function setOpen(li, open) {
    li.setAttribute('aria-expanded', String(open));
    li.querySelector(':scope > ol').hidden = !open;
    li.querySelector('[data-tree-toggle] svg').classList.toggle('rotate-90', open);
  }
  dirs.forEach(function (li) {
    li.querySelector('[data-tree-toggle]').addEventListener('click', function () {
      setOpen(li, li.getAttribute('aria-expanded') !== 'true');
    });
  });
  tree.querySelector('[data-tree-expand]').addEventListener('click', function () { dirs.forEach(function (li) { setOpen(li, true); }); });
  tree.querySelector('[data-tree-collapse]').addEventListener('click', function () { dirs.forEach(function (li) { setOpen(li, false); }); });
  function setHidden(hidden) {
    tree.hidden = hidden;
    layout.classList.toggle('grid-cols-[260px_1fr]', !hidden);
    layout.classList.toggle('grid-cols-1', hidden);
    layout.querySelectorAll('[data-tree-show]').forEach(function (b) { b.hidden = !hidden; });
  }
  tree.querySelector('[data-tree-hide]').addEventListener('click', function () { setHidden(true); });
  layout.querySelectorAll('[data-tree-show]').forEach(function (b) { b.addEventListener('click', function () { setHidden(false); }); });
  var filter = tree.querySelector('[data-tree-filter]');
  filter.addEventListener('input', function () {
    var q = filter.value.toLowerCase();
    tree.querySelectorAll('li[role=treeitem]').forEach(function (li) {
      var own = li.dataset.name.toLowerCase().indexOf(q) >= 0;
      var kid = li.querySelector('li[data-name]') && Array.prototype.some.call(li.querySelectorAll('li[data-name]'), function (c) { return c.dataset.name.toLowerCase().indexOf(q) >= 0; });
      li.hidden = !!q && !own && !kid;
      if (q && kid && li.hasAttribute('data-tree-dir')) setOpen(li, true);
    });
  });
})();
document.querySelectorAll('[data-open-dialog]').forEach(function (b) {
  b.addEventListener('click', function () { document.getElementById(b.dataset.openDialog).showModal(); });
});
var copyBtn = document.querySelector('[data-copy]');
if (copyBtn) copyBtn.addEventListener('click', function () {
  navigator.clipboard.writeText(document.querySelector('[data-code]').innerText);
});
</script>
</body>
</html>