diff --git a/frontend/src/App.css b/frontend/src/App.css index 96dba6d..1a6ae49 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1845,8 +1845,8 @@ a.app-footer__repo:hover { .technique-columns { display: grid; - grid-template-columns: 1fr 22rem; - gap: 2rem; + grid-template-columns: 1fr 16rem; + gap: 1.5rem; align-items: start; } @@ -1861,6 +1861,7 @@ a.app-footer__repo:hover { top: 3.5rem; /* below sticky title bar */ max-height: calc(100vh - 4rem); overflow-y: auto; + margin-left: auto; /* right-align within column */ } @media (max-width: 768px) { @@ -2108,7 +2109,7 @@ a.app-footer__repo:hover { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; - color: #c084fc; + color: var(--color-text-secondary); margin-bottom: 0.75rem; } diff --git a/frontend/src/pages/TechniquePage.tsx b/frontend/src/pages/TechniquePage.tsx index 8e473a3..5e8e34c 100644 --- a/frontend/src/pages/TechniquePage.tsx +++ b/frontend/src/pages/TechniquePage.tsx @@ -314,105 +314,6 @@ export default function TechniquePage() { - {/* Stats + version switcher */} -
- {(() => { - const sourceCount = new Set( - technique.key_moments - .map((km) => km.video_filename) - .filter(Boolean), - ).size; - const momentCount = technique.key_moments.length; - const updated = new Date(technique.updated_at).toLocaleDateString( - "en-US", - { year: "numeric", month: "short", day: "numeric" }, - ); - const parts = [ - `Compiled from ${sourceCount} source${sourceCount !== 1 ? "s" : ""}`, - `${momentCount} key moment${momentCount !== 1 ? "s" : ""}`, - ]; - if (technique.version_count > 0) { - parts.push( - `${technique.version_count} version${technique.version_count !== 1 ? "s" : ""}`, - ); - } - parts.push(`Last updated ${updated}`); - return parts.join(" · "); - })()} -
- -
- {versions.length > 0 && ( -
- - - {versionLoading && ( - Loading… - )} -
- )} -
- - {/* Pipeline metadata for historical versions */} - {isHistorical && versionDetail.pipeline_metadata && ( -
-

Pipeline metadata (v{versionDetail.version_number})

-
- {"model" in versionDetail.pipeline_metadata && ( -
- Model - - {String(versionDetail.pipeline_metadata.model)} - -
- )} - {"captured_at" in versionDetail.pipeline_metadata && ( -
- Captured - - {formatDate(String(versionDetail.pipeline_metadata.captured_at))} - -
- )} - {typeof versionDetail.pipeline_metadata.prompt_hashes === "object" && - versionDetail.pipeline_metadata.prompt_hashes !== null && ( -
- Prompt hashes -
- {Object.entries( - versionDetail.pipeline_metadata.prompt_hashes as Record< - string, - string - >, - ).map(([file, hash]) => ( -
- - {file.replace(/^.*\//, "")} - - - {hash.slice(0, 12)}… - -
- ))} -
-
- )} -
-
- )} - {/* Report modal */} {showReport && ( )} - {/* Tags + plugin pills */} - {((displayTags && displayTags.length > 0) || (displayPlugins && displayPlugins.length > 0)) && ( -
- {displayTags && displayTags.map((tag) => ( - - {tag} - - ))} - {displayPlugins && displayPlugins.length > 0 && displayPlugins.map((plugin) => ( - - {plugin} - - ))} -
- )} - {/* Two-column layout: main content + ToC sidebar */}
+ {/* Stats + version switcher */} +
+ {(() => { + const sourceCount = new Set( + technique.key_moments + .map((km) => km.video_filename) + .filter(Boolean), + ).size; + const momentCount = technique.key_moments.length; + const updated = new Date(technique.updated_at).toLocaleDateString( + "en-US", + { year: "numeric", month: "short", day: "numeric" }, + ); + const parts = [ + `Compiled from ${sourceCount} source${sourceCount !== 1 ? "s" : ""}`, + `${momentCount} key moment${momentCount !== 1 ? "s" : ""}`, + ]; + if (technique.version_count > 0) { + parts.push( + `${technique.version_count} version${technique.version_count !== 1 ? "s" : ""}`, + ); + } + parts.push(`Last updated ${updated}`); + return parts.join(" · "); + })()} +
+ +
+ {versions.length > 0 && ( +
+ + + {versionLoading && ( + Loading… + )} +
+ )} +
+ + {/* Pipeline metadata for historical versions */} + {isHistorical && versionDetail.pipeline_metadata && ( +
+

Pipeline metadata (v{versionDetail.version_number})

+
+ {"model" in versionDetail.pipeline_metadata && ( +
+ Model + + {String(versionDetail.pipeline_metadata.model)} + +
+ )} + {"captured_at" in versionDetail.pipeline_metadata && ( +
+ Captured + + {formatDate(String(versionDetail.pipeline_metadata.captured_at))} + +
+ )} + {typeof versionDetail.pipeline_metadata.prompt_hashes === "object" && + versionDetail.pipeline_metadata.prompt_hashes !== null && ( +
+ Prompt hashes +
+ {Object.entries( + versionDetail.pipeline_metadata.prompt_hashes as Record< + string, + string + >, + ).map(([file, hash]) => ( +
+ + {file.replace(/^.*\//, "")} + + + {hash.slice(0, 12)}… + +
+ ))} +
+
+ )} +
+
+ )} + + {/* Tags + plugin pills */} + {((displayTags && displayTags.length > 0) || (displayPlugins && displayPlugins.length > 0)) && ( +
+ {displayTags && displayTags.map((tag) => ( + + {tag} + + ))} + {displayPlugins && displayPlugins.length > 0 && displayPlugins.map((plugin) => ( + + {plugin} + + ))} +
+ )} + {/* Summary */} {displaySummary && (