diff --git a/src/components/blocks/FileTabs.astro b/src/components/blocks/FileTabs.astro
new file mode 100644
index 0000000..4022b6f
--- /dev/null
+++ b/src/components/blocks/FileTabs.astro
@@ -0,0 +1,97 @@
+---
+// FileTabs — the package-file switcher inside the preview surface.
+//
+// A horizontal scroll of buttons, one per file in the submitted package
+// (SKILL.md + references + scripts + templates). Click handling and the
+// fetch-state machine are task 16's job; this component ships zero JS.
+//
+// `aria-label` is on the nav itself so the tablist announces as a unit.
+// The `active` class on the selected file mirrors the legacy CSS so the
+// verification engineer can re-point scripts/verify.mjs assertions without
+// renaming.
+
+interface PackageFile {
+ /** File name without directory prefix; the row label. */
+ name: string;
+ /** Kind tag rendered as the small uppercase eyebrow above the name. */
+ kind: string;
+ /** Absolute or repo-relative path used to fetch the source. */
+ path: string;
+}
+
+interface Props {
+ files: PackageFile[];
+ /** Name of the currently-selected file. */
+ currentFile?: string;
+ /** Accessible label for the tablist. Defaults to the skill-package label. */
+ ariaLabel?: string;
+}
+
+const { files, currentFile, ariaLabel = 'Skill package files' } = Astro.props;
+---
+
+
+
+