diff --git a/PanTS-Demo/src/routes/UploadPage.tsx b/PanTS-Demo/src/routes/UploadPage.tsx index a4d41063..a158fe79 100644 --- a/PanTS-Demo/src/routes/UploadPage.tsx +++ b/PanTS-Demo/src/routes/UploadPage.tsx @@ -62,21 +62,26 @@ const MODEL_OPTIONS: { { value: "Abdominal", label: "Best for" }, ], details: [ - "Segments 25 structures in one pass: major abdominal organs (liver, spleen, kidneys, stomach, etc.), the surrounding vasculature, and the pancreas region in particular.", - "Within the pancreas, it separately identifies the gland, duct, and three tumor subtypes (PDAC, cyst, PNET) - this is its main focus, not an afterthought.", - "Best suited to a standard abdominal CT; not a whole-body scanner.", + "25 structures in one pass", + "Major organs, vasculature, pancreas region", + "Pancreas gland, duct, and 3 tumor subtypes (PDAC, cyst, PNET)", + "Built for abdominal CT, not whole-body scans", ], }, { id: "Atlas-Net", label: "Atlas-Net", - desc: "For anatomically consistent results", + desc: "For anatomically consistent results, with the same organ and tumor coverage as ePAI", quickFacts: [ - { value: "Atlas-matched", label: "Shape accuracy" }, + { value: "25", label: "Structures segmented" }, + { value: "3", label: "Pancreas tumor subtypes" }, { value: "Plausibility", label: "Optimized for" }, ], details: [ - "Segments organs against an anatomical atlas, favoring shapes and positions that are physically plausible over raw per-voxel accuracy.", + "25 structures in one pass, same nnU-Net-based coverage as ePAI", + "Major organs, vasculature, pancreas region", + "Pancreas gland, duct, and 3 tumor subtypes (PDAC, cyst, PNET)", + "Matches segmentations to a known anatomical atlas", ], }, { @@ -89,9 +94,10 @@ const MODEL_OPTIONS: { { value: "Fast", label: "Speed" }, ], details: [ - "Computes lesions in four organs in one pass - pancreatic, liver, kidney, and colon - you pick which one to feature as the primary result.", - "Pancreatic lesion detection is validated against ground truth; the other three are not yet.", - "Optimized for speed over the broader organ coverage ePAI or Atlas-Net provide.", + "Lesions in 4 organs in one pass", + "Pick which organ to feature as the primary result", + "Pancreatic lesion detection validated against ground truth", + "Optimized for speed over broader organ coverage", ], }, ]; @@ -2871,7 +2877,15 @@ const UploadPage: React.FC = () => { background: "#fff", border: isCurrent ? "1.5px solid #002d72" : "1px solid rgba(0,0,0,0.08)", boxShadow: isCurrent ? "0 6px 24px rgba(0,45,114,0.12)" : "0 1px 2px rgba(0,0,0,0.04)", - borderRadius: "16px", padding: "24px 20px", display: "flex", flexDirection: "column", + borderRadius: "18px", padding: "32px 28px", + // subgrid: each row below (icon, name, badge, desc, button, + // divider, stats, divider, bullets) shares its height with the + // same row in the other cards, sized to the tallest one - so a + // 3-line description in one card doesn't just push that card's + // own button down, it grows the desc row for every card and + // everything below stays aligned. The parent grid declares the + // 9 row tracks; grid-row: span 9 hands them all to this card. + display: "grid", gridTemplateRows: "subgrid", gridRow: "span 9", rowGap: 0, cursor: "pointer", textAlign: "center", minWidth: 0, height: "100%", transition: "border-color 0.15s, box-shadow 0.15s", }} @@ -2881,7 +2895,7 @@ const UploadPage: React.FC = () => { background: isCurrent ? "rgba(0,45,114,0.08)" : "rgba(0,0,0,0.05)", border: `1px solid ${isCurrent ? "rgba(0,45,114,0.18)" : "rgba(0,0,0,0.1)"}`, display: "flex", alignItems: "center", justifyContent: "center", - margin: "0 auto 16px", + margin: "0 auto 20px", }}> @@ -2889,15 +2903,15 @@ const UploadPage: React.FC = () => { -
+
{m.label}
-
+
{isCurrent && modelBadge("Selected", "#002d72")} {locked && modelBadge("Donate", "#8f6a00")}
-
+
{m.desc}
@@ -2905,7 +2919,7 @@ const UploadPage: React.FC = () => { type="button" tabIndex={-1} style={{ - marginTop: "16px", width: "100%", padding: "9px 16px", borderRadius: "999px", + alignSelf: "start", marginTop: "24px", width: "100%", padding: "11px 16px", borderRadius: "999px", fontFamily: "'Space Grotesk', sans-serif", fontSize: "13px", fontWeight: 600, background: isCurrent ? "#002d72" : "#fff", color: isCurrent ? "#fff" : "#002d72", @@ -2915,37 +2929,42 @@ const UploadPage: React.FC = () => { {isCurrent ? "Currently selected" : locked ? "Donate to unlock" : "Select this model"} - {m.quickFacts && ( - <> -
-
+
+ +
+ {m.quickFacts && ( +
{m.quickFacts.map((f) => (
-
+
{f.value}
-
+
{f.label}
))}
- - )} + )} +
- {m.details && ( -
    - {m.details.map((line, i) => ( -
  • - · - {line} -
  • - ))} -
- )} +
+ +
+ {m.details && ( +
    + {m.details.map((line, i) => ( +
  • + · + {line} +
  • + ))} +
+ )} +
); }); @@ -2954,13 +2973,13 @@ const UploadPage: React.FC = () => { <>
Choose a model -
+
Compare what each model does and click one to pick it - or use the Model dropdown above.
{modelCards}