diff --git a/404.html b/404.html index dec7ea9..18c76f2 100644 --- a/404.html +++ b/404.html @@ -7,29 +7,31 @@ - - + + -
-
- Error 404 -

Page not found

-

The page you requested does not exist. It may have been moved, or the link may be out of date.

-
- Back to sambim.xyz - SAM-BIM on GitHub +
+
+
+ Error 404 +

Page not found

+

The page you requested does not exist. It may have been moved, or the link may be out of date.

+
diff --git a/README.md b/README.md index af241e0..ec4c050 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ # sam-bim.github.io SAM-BIM official website +## Evidence assets + +Screenshots referenced by the homepage live in +[`assets/evidence/`](assets/evidence/README.md). That manifest lists the exact +filenames (E01–E04), where each is used and its provenance. Never commit +dummy, mocked-up or AI-generated imagery. + ## License Site content (text and imagery) is licensed under [CC-BY-4.0](LICENSE). The SAM software it describes is licensed separately under LGPL-3.0-or-later — see [SAM-BIM/SAM](https://github.com/SAM-BIM/SAM). diff --git a/assets/SAM_BIM_logo_180.png b/assets/SAM_BIM_logo_180.png new file mode 100644 index 0000000..a0843a9 Binary files /dev/null and b/assets/SAM_BIM_logo_180.png differ diff --git a/assets/SAM_BIM_logo_64.png b/assets/SAM_BIM_logo_64.png new file mode 100644 index 0000000..9a5762a Binary files /dev/null and b/assets/SAM_BIM_logo_64.png differ diff --git a/assets/css/site.css b/assets/css/site.css index 126b86c..2796ec4 100644 --- a/assets/css/site.css +++ b/assets/css/site.css @@ -1,160 +1,281 @@ /* SAM - Sustainable Analytical Model | sambim.xyz - Extracted from index.html (Phase 3). Design tokens unchanged. */ + Editorial / technical system: white ground, dark type, SAM blue as the one accent, + hairline structure instead of boxes, real screenshots as the visual lead. */ :root{ --bg:#ffffff; - --text:#111111; - --muted:#424242; - --soft:#f5f5f5; - --line:#111111; - --red:#d32f2f; - --blue:#1565c0; - --yellow:#f6c90e; - --green:#277a45; + --bg-soft:#f6f8fa; + --ink:#0e1621; + --text:#1f2a37; + --muted:#4b5767; + --faint:#5d6977; + --line:#e2e7ed; + --line-strong:#c9d1db; + --blue:#1558b0; + --blue-ink:#0e447f; + --blue-soft:#eef4fb; + --green-ink:#1d6b3b; + --green-soft:#e9f5ee; + --amber-ink:#7a4d00; + --amber-soft:#fcf3e2; + --focus:#1558b0; + --radius:6px; + --shadow:0 1px 2px rgba(14,22,33,.05),0 12px 32px -12px rgba(14,22,33,.14); + --sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; + --mono:"IBM Plex Mono",ui-monospace,"Cascadia Mono",Consolas,monospace; + --wide:1240px; } -*{box-sizing:border-box} -html,body{margin:0;padding:0;color:var(--text);background:var(--bg);font:16px/1.6 Montserrat,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif} -html{scroll-behavior:smooth} -a{color:var(--text);text-decoration:none;border-bottom:1px solid transparent} -a:hover{border-bottom-color:var(--text)} -.container{max-width:1120px;margin:0 auto;padding:0 20px} +*,*::before,*::after{box-sizing:border-box} +html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:72px} +body{margin:0;background:var(--bg);color:var(--text);font:400 17px/1.6 var(--sans);text-rendering:optimizeLegibility} +img{max-width:100%;height:auto;display:block} +a{color:var(--blue);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:rgba(21,88,176,.35)} +a:hover{color:var(--blue-ink);text-decoration-color:currentColor} +:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px} +h1,h2,h3{color:var(--ink);margin:0;font-weight:600;letter-spacing:-.01em} +h1{font-size:clamp(34px,4.6vw,56px);line-height:1.06;letter-spacing:-.025em} +h2{font-size:clamp(28px,3.2vw,40px);line-height:1.12;letter-spacing:-.02em} +h3{font-size:18px;line-height:1.35} +p{margin:0 0 14px} +ul{margin:0;padding-left:20px} +strong{color:var(--ink);font-weight:600} + +.container{max-width:var(--wide);margin:0 auto;padding:0 32px} /* Accessibility: skip link (hidden until focused) */ -.skip-link{position:absolute;left:-9999px;top:0;background:#fff;border:2px solid var(--line);padding:8px 12px;z-index:30;font-weight:700} +.skip-link{position:absolute;left:-9999px;top:0;z-index:50;background:#fff;color:var(--ink);border:2px solid var(--ink);padding:8px 12px;font-weight:600} .skip-link:focus{left:12px;top:12px} -/* Header / navigation */ -.nav{position:sticky;top:0;z-index:20;background:#fff;border-bottom:2px solid var(--line)} -.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:13px 0} -.logo{display:flex;align-items:center;gap:12px;min-width:235px} -.logo img{width:30px;height:30px;filter:grayscale(100%) contrast(120%)} -.logo .word{font-weight:800;letter-spacing:.04em;text-transform:uppercase;font-size:13px} +/* ---------- Navigation ---------- */ +.nav{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.96);border-bottom:1px solid var(--line)} +@supports (backdrop-filter:blur(8px)){.nav{background:rgba(255,255,255,.88);backdrop-filter:blur(8px)}} +.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:64px} +.logo{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;font-weight:600;letter-spacing:-.01em} +.logo:hover{color:var(--ink)} +.logo img{width:32px;height:32px;border-radius:4px} +.logo .word{font-size:15px;white-space:nowrap} +.logo .word span{color:var(--faint);font-weight:400} .nav-menu{display:flex} -.nav-menu>summary{display:none;list-style:none;cursor:pointer;border:2px solid var(--line);padding:8px 12px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;font-size:12px;background:#fff} +.nav-menu>summary{display:none;list-style:none;cursor:pointer;font:500 14px/1 var(--sans);color:var(--ink);padding:10px 14px;border:1px solid var(--line-strong);border-radius:var(--radius);background:#fff} .nav-menu>summary::-webkit-details-marker{display:none} -.nav-links{display:flex;align-items:center;justify-content:flex-end;gap:14px;flex-wrap:wrap} -.nav-links a{font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:700} - -/* Hero */ -.hero{border-bottom:2px solid var(--line);padding:58px 0 28px} -.hero-grid{display:grid;grid-template-columns:minmax(0,1.35fr) 300px;gap:34px;align-items:center} -.hero h1{font-size:clamp(31px,5vw,58px);line-height:1.04;margin:12px 0;text-transform:uppercase;letter-spacing:0} -.hero h1::after{content:"";display:block;width:118px;height:7px;margin:18px 0 0;background:linear-gradient(90deg,var(--red) 0 33%,var(--yellow) 33% 66%,var(--blue) 66% 100%)} -.hero p{max-width:760px;margin:18px 0 0;color:var(--muted);font-size:18px} -.hero-media{border:2px solid var(--line);padding:18px;background:#fff;display:grid;place-items:center;min-height:260px} -.hero-media img{max-width:210px;width:72%;height:auto} -.hero-media .caption{margin-top:16px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;text-align:center;font-size:12px} -.cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px} -.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 15px;border:2px solid var(--line);font-weight:800;text-transform:uppercase;letter-spacing:.04em;font-size:13px;background:#fff} -.btn.primary{background:var(--red);color:#fff} -.btn.primary:hover{border-bottom-color:var(--line)} - -/* Layout primitives */ -main{padding:26px 0 80px} -section{margin:28px 0} -.band{border:2px solid var(--line);padding:20px;background:#fff} -.band.soft{background:var(--soft)} -.grid{display:grid;gap:18px} -.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))} -.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))} -.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))} -.card{border:2px solid var(--line);background:#fff;padding:16px;min-width:0} -.card h3{margin:0 0 7px;font-size:15px;line-height:1.35;text-transform:uppercase;letter-spacing:.04em} -.card p{margin:0;color:var(--muted);font-size:14px} -.kicker{display:inline-flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:800;margin-bottom:8px} -.kicker::before{content:"";display:inline-block;width:10px;height:10px;background:var(--yellow)} -h2{font-size:22px;line-height:1.2;margin:0 0 12px;text-transform:uppercase;letter-spacing:.05em} -h3{font-size:16px;margin:0 0 8px;text-transform:uppercase;letter-spacing:.04em} -p{margin:0 0 12px} +.nav-links{display:flex;align-items:center;gap:26px} +.nav-links a{color:var(--muted);text-decoration:none;font-size:14.5px;font-weight:500} +.nav-links a:hover{color:var(--ink)} +.nav-links a.nav-gh{color:var(--ink);padding:7px 12px;border:1px solid var(--line-strong);border-radius:var(--radius)} +.nav-links a.nav-gh:hover{border-color:var(--ink)} + +/* ---------- Shared type ---------- */ +.kicker{display:block;font:500 12.5px/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--blue);margin-bottom:14px} +.lead{font-size:19px;line-height:1.55;color:var(--muted);max-width:720px;margin:18px 0 0} .muted{color:var(--muted)} -.lead{font-size:18px;max-width:880px;color:var(--muted)} -ul,ol{margin:0;padding-left:20px} -li{margin:5px 0} -.note{font-size:14px;color:var(--muted)} -.metric-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:16px} -.metric{border:2px solid var(--line);padding:14px;background:#fff} -.metric strong{display:block;font-size:23px;line-height:1.1} -.metric span{display:block;margin-top:6px;color:var(--muted);font-size:13px} - -/* Workflow steps */ -.workflow{display:grid;grid-template-columns:1fr auto 1fr auto 1fr auto 1fr;gap:10px;align-items:stretch;margin-top:18px} -.step{border:2px solid var(--line);background:#fff;padding:14px;min-height:116px;display:flex;flex-direction:column;justify-content:space-between} -.step .num{font-weight:800;color:var(--red);font-size:13px} -.step strong{text-transform:uppercase;letter-spacing:.04em;line-height:1.3} -.step span{color:var(--muted);font-size:13px} -.connector{display:grid;place-items:center;font-weight:800;color:var(--blue)} - -/* Roadmap timeline */ -.timeline{display:grid;gap:12px;margin-top:14px} -.milestone{display:grid;grid-template-columns:145px 1fr;gap:16px;border-top:2px solid var(--line);padding-top:12px} -.milestone strong{font-size:15px;text-transform:uppercase;letter-spacing:.04em} -.milestone p{margin:0;color:var(--muted)} - -/* Ecosystem */ -.module-group{margin-top:18px} -.module-group h3{display:flex;align-items:center;gap:8px;margin-bottom:10px} -.module-group h3::before{content:"";width:10px;height:10px;background:var(--blue)} -.repo-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px} -.repo{border:2px solid var(--line);padding:12px;background:#fff} -.repo a{font-weight:800} -.repo span{display:block;margin-top:4px;color:var(--muted);font-size:13px} - -/* Publications */ -.publication{border-top:2px solid var(--line);padding:14px 0} -.publication:first-of-type{border-top:0} -.publication h3{margin-bottom:4px} -.coming{color:var(--muted);font-size:13px;font-style:italic} - -/* Tags and status chips */ -.tag{display:inline-block;border:1px solid #bdbdbd;color:var(--muted);padding:2px 7px;margin:4px 6px 0 0;font-size:11px;font-weight:600;text-transform:none;letter-spacing:0;background:#fafafa} -.tag.shipped{background:var(--green);border-color:var(--green);color:#ffffff;font-weight:700} -.tag.dev{background:var(--yellow);border-color:var(--yellow);color:#111111;font-weight:700} -.tag.future{background:#ffffff;border-color:var(--blue);color:var(--blue);font-weight:700} - -/* Figures (used by workflow screenshots) */ -figure{margin:18px 0} -figure img{max-width:100%;height:auto;border:2px solid var(--line);display:block} -figcaption{margin-top:8px;font-size:13px;color:var(--muted)} - -footer{border-top:2px solid var(--line);padding:24px 0 58px;color:var(--muted)} - -/* Motion preferences */ +.note{font-size:14.5px;color:var(--muted);max-width:820px} +.section{padding:112px 0;--sbg:var(--bg)} +.section + .section{border-top:1px solid var(--line)} +.section.soft{background:var(--bg-soft);--sbg:var(--bg-soft)} +.section-head{max-width:780px;margin-bottom:56px} + +/* ---------- Buttons ---------- */ +.cta{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:32px} +.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:11px 18px;border-radius:var(--radius);border:1px solid var(--line-strong);background:#fff;color:var(--ink);font:500 15.5px/1.2 var(--sans);text-decoration:none;transition:border-color .15s ease,background-color .15s ease,color .15s ease} +.btn:hover{border-color:var(--ink);color:var(--ink)} +.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff} +.btn.primary:hover{background:var(--blue-ink);border-color:var(--blue-ink);color:#fff} +.btn.quiet{border-color:transparent;padding-left:6px;padding-right:6px;color:var(--blue)} +.btn.quiet:hover{border-color:transparent;color:var(--blue-ink);text-decoration:underline;text-underline-offset:3px} +.arrow-r::after{content:"\2192";font-family:var(--sans)} + +/* ---------- Hero ---------- */ +.hero{padding:80px 0 96px;border-bottom:1px solid var(--line);background:var(--bg)} +.hero-grid{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:end} +.hero h1{max-width:700px} +.hero .lead{margin-top:0;font-size:19.5px} +.hero .cta{margin-top:26px} +.hero .hero-media{margin-top:56px} +.legend{display:inline-flex;gap:6px 14px;flex-wrap:wrap;margin-left:6px;white-space:nowrap} +.legend b{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 4px;border:1px solid var(--line-strong);border-radius:3px;background:#fff;font:600 12px/1 var(--sans)} +.legend b.f{color:#b3261e} +.legend b.d{color:#1558b0} + +/* ---------- Evidence figures (real screenshots) ---------- */ +.shot{margin:0;max-width:100%} +.shot.w-1095{max-width:760px;margin-left:auto} +.shot.w-1116{max-width:1118px} +.shot .frame{background:#fff;border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden} +.shot .frame img{width:100%;height:auto} +.shot figcaption{display:flex;gap:12px;align-items:baseline;margin-top:14px;font-size:14px;line-height:1.5;color:var(--muted)} +.shot figcaption .eid{flex:none;font:500 12px/1.5 var(--mono);color:var(--faint);letter-spacing:.04em} +.shot figcaption a.full{white-space:nowrap;margin-left:4px} + +/* ---------- Evidence, not claims ---------- */ +.proof{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 48px} +.proof-item{padding:28px 0 32px;border-top:1px solid var(--line-strong);display:flex;flex-direction:column} +.proof-item h3{font-size:17px;margin-bottom:8px} +.proof-item p{color:var(--muted);font-size:15.5px;margin:0 0 16px;flex:1} +.proof-item .link{font:500 14.5px/1.4 var(--sans);text-decoration:none;align-self:flex-start} +.proof-item .link:hover{text-decoration:underline} + +/* ---------- Flagship workflow ---------- */ +.flow{list-style:none;margin:0;padding:0;display:grid;gap:0} +.step{position:relative;padding:0 0 96px} +.step:last-child{padding-bottom:0} +.step + .step{padding-top:0} +.step:not(:last-child)::after{content:"";position:absolute;left:17px;bottom:24px;height:48px;border-left:1px solid var(--line-strong)} +.step-head{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:24px 56px;align-items:end;margin-bottom:32px} +.step-head p{color:var(--muted);font-size:17px;margin:0 0 14px;max-width:640px} +.step-no{display:flex;align-items:center;gap:14px;font:500 13px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--blue);margin-bottom:16px} +.step-no b{display:inline-grid;place-items:center;width:34px;height:34px;border:1px solid var(--blue);border-radius:50%;font-weight:500;letter-spacing:0;background:#fff} +.step-head h3{font-size:clamp(24px,2.4vw,30px);line-height:1.2;letter-spacing:-.015em} +.authority{display:inline-flex;gap:8px;font:500 12.5px/1.4 var(--mono);color:var(--muted);padding:6px 10px;border:1px solid var(--line-strong);border-radius:999px;background:#fff} +.authority b{font-weight:500;color:var(--ink)} + +.chain{list-style:none;margin:28px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px 0;font:500 13px/1.4 var(--mono);color:var(--ink)} +.chain li{display:flex;align-items:center} +.chain li + li::before{content:"\2192";margin:0 10px;color:var(--faint);font-family:var(--sans)} +.scope{margin-top:88px;padding-top:28px;border-top:1px solid var(--line-strong);max-width:820px} +.scope p{margin:0 0 10px;font-size:16px} +.scope p.muted{font-size:14.5px} + +/* Four quantities, four authorities: separate concepts, not a pipeline */ +.quantities{margin-top:128px;padding-top:56px;border-top:1px solid var(--line-strong)} +.qgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:40px} +.q{position:relative;padding:4px 28px 0} +.q:first-child{padding-left:0} +.q + .q{border-left:1px solid var(--line-strong)} +.q + .q::before{content:"\2260";position:absolute;left:-11px;top:0;width:22px;height:26px;display:grid;place-items:center;background:var(--sbg,var(--bg));color:var(--faint);font:400 20px/1 var(--sans)} +.q .qn{font:500 12.5px/1 var(--mono);color:var(--faint)} +.q h3{font-size:19px;margin:12px 0 6px} +.q p{font-size:15px;color:var(--muted);margin:0 0 14px} +.q .by{font:500 12.5px/1.4 var(--mono);color:var(--blue)} + +/* ---------- Platform ---------- */ +.platform{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:72px;align-items:start} +.arch{display:grid;gap:0;justify-items:stretch} +.arch .tier{display:grid;grid-template-columns:180px minmax(0,1fr);gap:20px;align-items:baseline;padding:18px 22px;border:1px solid var(--line);border-radius:var(--radius);background:#fff} +.arch .tier h3{font:500 12.5px/1.5 var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--muted)} +.arch .tier p{margin:0;color:var(--text);font-size:15.5px} +.arch .chip .status{padding:1px 7px;margin-left:4px;font-size:11px} +.arch .tier.core{padding:30px 26px;border:1.5px solid var(--blue);background:var(--blue-soft)} +.arch .tier.core h3{color:var(--blue-ink)} +.arch .tier.core .core-title{display:block;font:600 22px/1.25 var(--sans);color:var(--ink);letter-spacing:-.01em;margin-bottom:6px} +.arch .down{height:26px;position:relative} +.arch .down::before{content:"";position:absolute;left:50%;top:4px;bottom:9px;border-left:1px solid var(--line-strong)} +.arch .down::after{content:"";position:absolute;left:calc(50% - 4px);bottom:4px;border:4px solid transparent;border-top:5px solid var(--line-strong);border-bottom:0} +.chips{display:flex;flex-wrap:wrap;gap:6px} +.chip{display:inline-block;font:500 13px/1.4 var(--sans);color:var(--text);padding:3px 9px;border:1px solid var(--line-strong);border-radius:4px;background:#fff} +.principles{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-strong)} +.principles li{padding:16px 0;border-bottom:1px solid var(--line)} +.principles strong{display:block;font-size:16px} +.principles span{display:block;margin-top:2px;font-size:15px;color:var(--muted)} +.aside-title{font:500 12.5px/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 14px} + +/* ---------- Status chips ---------- */ +.status{display:inline-flex;align-items:center;gap:6px;font:500 12px/1.3 var(--mono);letter-spacing:.02em;padding:4px 9px;border-radius:999px;white-space:nowrap} +.status::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor} +.status.dev{color:var(--amber-ink);background:var(--amber-soft)} + +/* ---------- Capabilities ---------- */ +.families{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px} +.family{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:26px 26px 24px;display:flex;flex-direction:column;gap:12px;min-width:0} +.family h3{font-size:18px} +.family p{margin:0;color:var(--muted);font-size:15.5px;flex:1} +.mods{list-style:none;margin:6px 0 0;padding:14px 0 0;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:4px 14px} +.mods a{font:500 13px/1.6 var(--mono);text-decoration:none} +.mods a:hover{text-decoration:underline} + +/* ---------- Research / people ---------- */ +.pubs{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-strong)} +.pubs li{display:grid;grid-template-columns:120px minmax(0,1fr);gap:24px;padding:22px 0;border-bottom:1px solid var(--line)} +.pubs .venue{font:500 13px/1.6 var(--mono);color:var(--faint)} +.pubs h3{font-size:17px;line-height:1.4;font-weight:500} +.pubs h3 a{color:var(--ink);text-decoration-color:var(--line-strong)} +.pubs h3 a:hover{color:var(--blue-ink);text-decoration-color:currentColor} +.pubs p{margin:4px 0 0;font-size:14.5px;color:var(--muted)} +.people{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:72px} +.person-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-strong)} +.person-list li{padding:20px 0;border-bottom:1px solid var(--line)} +.person-list strong{display:block;font-size:17px} +.person-list .role{display:block;color:var(--muted);font-size:15.5px;margin:2px 0 6px} +.person-list .links{font-size:14.5px} +.start{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:72px} +.start a.tile{display:block;padding:24px 26px;border:1px solid var(--line);border-radius:var(--radius);background:#fff;text-decoration:none;color:var(--text);transition:border-color .15s ease} +.start a.tile:hover{border-color:var(--blue)} +.start a.tile strong{display:flex;justify-content:space-between;gap:10px;font-size:17px;color:var(--ink)} +.start a.tile strong::after{content:"\2192";color:var(--blue)} +.start a.tile span{display:block;margin-top:6px;font-size:15px;color:var(--muted)} + +/* ---------- Footer ---------- */ +footer{border-top:1px solid var(--line);padding:36px 0 56px;color:var(--faint);font-size:14px} +footer .container{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px} +footer a{color:var(--muted)} + +/* ---------- 404 ---------- */ +.error-wrap{padding:120px 0 140px} +.error-title{font-size:clamp(34px,4.6vw,52px);margin:0 0 8px} + +/* ---------- Motion ---------- */ @media (prefers-reduced-motion:reduce){ html{scroll-behavior:auto} + *,*::before,*::after{transition:none !important} } -/* Responsive */ -@media (max-width:980px){ - .hero-grid{grid-template-columns:1fr} - .hero-media{min-height:180px} - .workflow{grid-template-columns:1fr} - .connector{min-height:16px} - .connector::before{content:"down"} - .connector{font-size:0} - .metric-row,.cols-4{grid-template-columns:repeat(2,minmax(0,1fr))} - .repo-list,.cols-3{grid-template-columns:repeat(2,minmax(0,1fr))} +/* ---------- Responsive ---------- */ +@media (max-width:1100px){ + .platform,.people{grid-template-columns:1fr;gap:56px} +} +@media (max-width:960px){ + .container{padding:0 24px} + .section{padding:84px 0} + .hero{padding:56px 0 72px} + .hero-grid{grid-template-columns:1fr;gap:20px} + .hero h1,.hero .lead{max-width:680px} + .hero .hero-media{margin-top:40px} + .step{padding-bottom:80px} + .step-head{grid-template-columns:1fr;gap:4px;margin-bottom:24px} + .proof,.families{grid-template-columns:repeat(2,minmax(0,1fr))} + .qgrid{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:36px} + .q:nth-child(3){padding-left:0;border-left:0} + .q:nth-child(3)::before{display:none} + .start{grid-template-columns:1fr} } -@media (min-width:721px){ +@media (min-width:821px){ + .nav-menu::details-content{content-visibility:visible;display:contents} .nav-menu>.nav-links{display:flex !important} } -@media (max-width:720px){ - .container{padding:0 16px} - .nav-inner{align-items:flex-start;flex-direction:column} - .nav-menu{width:100%} +@media (max-width:820px){ + .nav-inner{position:relative;min-height:60px;padding:10px 0;gap:12px} + .nav-menu{margin-left:auto} .nav-menu>summary{display:inline-block} .nav-menu:not([open])>.nav-links{display:none} - .nav-menu>.nav-links{padding:10px 0;justify-content:flex-start;gap:10px} - .hero{padding-top:36px} - .hero h1{font-size:33px} - .cols-2,.cols-3,.cols-4,.metric-row,.repo-list{grid-template-columns:1fr} - .milestone{grid-template-columns:1fr;gap:6px} - .btn{width:100%} + .nav-menu>.nav-links{position:absolute;left:0;right:0;top:100%;flex-direction:column;align-items:flex-start;gap:0;padding:6px 24px 14px;background:#fff;border-bottom:1px solid var(--line);box-shadow:0 12px 24px -16px rgba(14,22,33,.25)} + .nav-links a{display:block;padding:10px 0;font-size:16px} + .nav-links a.nav-gh{border:0;padding:10px 0} +} +@media (max-width:640px){ + body{font-size:16.5px} + .container{padding:0 16px} + .section{padding:68px 0} + .section-head{margin-bottom:40px} + .hero{padding:40px 0 56px} + .legend{display:flex;margin:6px 0 0} + .step{padding-bottom:64px} + .step:not(:last-child)::after{display:none} + .lead,.hero .lead{font-size:17.5px} + .cta{margin-top:26px} + .cta .btn{flex:1 1 100%} + .cta .btn.quiet{flex:0 1 auto} + .proof,.families{grid-template-columns:1fr} + .qgrid{grid-template-columns:1fr;row-gap:0} + .q,.q:first-child,.q:nth-child(3){padding:22px 0;border-left:0;border-top:1px solid var(--line-strong)} + .q + .q::before,.q:nth-child(3)::before{display:block;left:0;top:-13px;width:26px} + .arch .tier{grid-template-columns:1fr;gap:6px;padding:16px 18px} + .arch .tier.core{padding:22px 18px} + .pubs li{grid-template-columns:1fr;gap:4px} + .family{padding:22px 20px} + .nav-menu>.nav-links{padding:6px 16px 14px} + .logo .word span{display:none} + .quantities,.scope{margin-top:72px} } -/* Spacing utilities (replace inline styles) */ -.mt-10{margin-top:10px} -.mt-14{margin-top:14px} +/* Spacing utilities (no inline styles) */ .mt-16{margin-top:16px} -.mt-22{margin-top:22px} -.mt-40{margin-top:40px} -.error-title{font-size:clamp(28px,4vw,44px);text-transform:uppercase;margin:12px 0} +.mt-72{margin-top:96px} diff --git a/assets/evidence/E01_SAM_PartF_Design_Airflow_Overlay.png b/assets/evidence/E01_SAM_PartF_Design_Airflow_Overlay.png new file mode 100644 index 0000000..8918111 Binary files /dev/null and b/assets/evidence/E01_SAM_PartF_Design_Airflow_Overlay.png differ diff --git a/assets/evidence/E01_SAM_PartF_Design_Airflow_Overlay_Detail.png b/assets/evidence/E01_SAM_PartF_Design_Airflow_Overlay_Detail.png new file mode 100644 index 0000000..008777c Binary files /dev/null and b/assets/evidence/E01_SAM_PartF_Design_Airflow_Overlay_Detail.png differ diff --git a/assets/evidence/E02_SAM_PartO_Review_Iteration_Authority.png b/assets/evidence/E02_SAM_PartO_Review_Iteration_Authority.png new file mode 100644 index 0000000..6cf41fa Binary files /dev/null and b/assets/evidence/E02_SAM_PartO_Review_Iteration_Authority.png differ diff --git a/assets/evidence/E03_SAM_PartO_Prepare_Run_Status.png b/assets/evidence/E03_SAM_PartO_Prepare_Run_Status.png new file mode 100644 index 0000000..786ff99 Binary files /dev/null and b/assets/evidence/E03_SAM_PartO_Prepare_Run_Status.png differ diff --git a/assets/evidence/E04_SAM_PartO_TM59_Result.png b/assets/evidence/E04_SAM_PartO_TM59_Result.png new file mode 100644 index 0000000..e85def2 Binary files /dev/null and b/assets/evidence/E04_SAM_PartO_TM59_Result.png differ diff --git a/assets/evidence/README.md b/assets/evidence/README.md new file mode 100644 index 0000000..64116d7 --- /dev/null +++ b/assets/evidence/README.md @@ -0,0 +1,74 @@ +# Evidence assets manifest + +This directory holds the curated evidence captures referenced by the SAM +website. Every image here is a real screenshot of SAM software. Nothing is +mocked up, AI-generated or edited beyond cropping. + +## Manifest + +Every file listed is committed in this directory and wired into the page. + +| ID | Filename | Website location | Caption (as published) | Priority | +|---|---|---|---|---| +| E01 | `E01_SAM_PartF_Design_Airflow_Overlay.png` | Hero; social preview image | The SAM analytical model in the SAM Analytical desktop app: engineering data reviewed directly on the model, here ventilation requirements beside design airflows. (Legend: F = Part F requirement, D = design airflow.) | Primary | +| E01 (detail) | `E01_SAM_PartF_Design_Airflow_Overlay_Detail.png` | Workflow step 01 | Bedroom supply: Part F requires 63 l/s; the design holds 143 l/s. Two quantities on one plan. | Primary | +| E02 | `E02_SAM_PartO_Review_Iteration_Authority.png` | Workflow step 02 | The regulatory requirement, engineering design and selected equipment capacity remain separate decisions. | Primary | +| E03 | `E03_SAM_PartO_Prepare_Run_Status.png` | Workflow step 03 | SAM materialises the engineering design into a deterministic simulation scenario and records the run state. | Primary | +| E04 | `E04_SAM_PartO_TM59_Result.png` | Workflow step 04 | Example TM59 assessment showing the recorded room-level outcome; SAM reports the result rather than forcing a pass. | Primary | + +## Provenance of E01–E04 (captured 2026-09-16) + +All four were captured in one continuous session on 2026-09-16, from the real +`SAM Analytical.exe` desktop app driven through its own UI (the same UI +Automation route as the SAM#111 Part O acceptance harness). Nothing was +simulated, typed into a result or edited outside the application. + +| Item | Value | +|---|---| +| Build | Release, `/t:Rebuild`, 0 errors, 2026-09-16 22:41, from `sow/2026-Q3` tips: SAM `e2c0e2c0`, SAM_Systems `05ca0c18`, SAM_Tas `c267f52f`, SAM_UI `9f515c4c` | +| Simulation engine | EDSL Tas 9.5.7 (licensed), full year, days 1–365 | +| Model | Three-dwelling residential model (Flat 1 / 2 / 3 + corridor, 8 assessed rooms): a fresh copy of the model used for the SAM#111 real-project acceptance (source SHA-256 `a7e09a25…`). Model name `000000_SAM_AnalyticalModel-It1a-futureZ1`; no client, address or project identifiers. | +| Weather | The model's own CIBSE DSY 2050s design weather (`Z1_DSY1_2050s_HIGH90`) | +| Route | Simulate → Part O Prepare & Run → Iteration 2 (automatic catalogue selection) → Tas → TM59 → Optimise (Iteration 2B, 5 l/s step, limit 10) | +| Outcome | TM59 **FAIL** after Iteration 2 (6 of 8 rooms) and after the last valid 2B round, run 10 (6 of 8 rooms). Room figures reproduce the SAM#111 acceptance record exactly. | + +| File | Pixels | Screen | What it shows | +|---|---|---|---| +| E01 | 1604 × 568 | Main window, plan view `Level 0`, *Part F Airflow* overlay (annotation scale 1:150) + *Ventilation Design* overlay, after 2B | Flat 1 and Flat 2: F tags = Approved Document F requirement, D tags = design airflow held by the model (e.g. bedroom supply F 63 / D 143 l/s). Transfer tags carry SAM's own "?" status (no modelled transfer opening identified). | +| E01 detail | 1095 × 532 | Same view, zoomed on Flat 2 | Bedroom, kitchen and ensuite tags at legible size | +| E02 | 1116 × 368 | *Part O — Iteration 2B — TM59 optimisation* window, grids scrolled to run 10 | Design airflow history (design before / requested / achieved / Part F required / TM59) and serving-unit history (duty 143/143 vs max 150/150, headroom 7/7, product kept) | +| E03 | 1345 × 904 | Main window plan + *Part O — Prepare & Run* hub, Iteration 2 selected, after the run | Scenario, automatic catalogue selection, Max as capability ceiling, configuration status and Simulation / Results READY | +| E04 | 1345 × 730 | Main window plan + *Part O — Overheating (TM59)* window for run 10, report scrolled to the verdict | TM59 occupied-space assessment FAIL and the per-room mechanical-ventilation table | + +Preparation: crop only, from window captures (`PrintWindow`) or a 1920 × 1080 +screen frame with no scaling, annotation or retouching. Crops remove the +Windows title bar and taskbar, and in E04 the window's summary line, which +held a local output path. E03 and E04 are single real screen states (a dialog +over the main window), not composites. The Review-iteration notes panel and +the 2B notes panel, which list local paths, are outside the crops. +Source frames were 1920 × 1080 at 100 % Windows scaling, so the E01–E04 +widths are native pixels and have not been upscaled. + +## Rules + +- Captures are real screenshots of capability merged on the `sow/2026-Q3` + release line, taken from a Release build of that line. +- Allowed preparation: crop, scale, and captions/annotation *outside* the + software image. A composite of two legitimate views must be labelled as one. +- Part O Iterations 1a / 1b / 2 / 2B (frozen 2026-09-08) may be shown as + validated capability. Do not show an Iteration 2 acoustic-restriction, bypass + or boost result: those behaviours are not implemented. +- Part O Iteration 3 may be shown as validated capability only for what the + [SAM#111](https://github.com/SAM-BIM/SAM/issues/111) final closeout + (2026-09-16) accepts: the explicit Systems/TPD ventilation route and the + selected-product cooling mode. Never show manufacturer heat-recovery, fan + or bypass behaviour: that work is tracked separately in + [SAM#123](https://github.com/SAM-BIM/SAM/issues/123) and is not accepted. +- Never caption a failing TM59 run as a pass. +- The homepage presents SAM as a platform; Part F / Part O is its flagship + example. Keep programme detail (tracker state, open technical questions, + evidence gates) in the linked GitHub records, not in homepage copy. +- No client or project-identifying data, personal or employer file paths, + usernames, taskbars or other desktop chrome in frame. +- PNG source captures; keep them legible at ~1100 px rendered width. +- Do not commit dummy or AI-generated imagery. diff --git a/assets/favicon-32.png b/assets/favicon-32.png new file mode 100644 index 0000000..646509a Binary files /dev/null and b/assets/favicon-32.png differ diff --git a/cspell.json b/cspell.json index 04aa99a..18b0400 100644 --- a/cspell.json +++ b/cspell.json @@ -8,35 +8,58 @@ ".github/**" ], "words": [ + "AECV", "airside", + "Arup", "ASHRAE", + "behaviour", "BHoM", "BILT", "Bozen", "BSA", + "Buro", + "Cascadia", "CESBP", + "CIBSE", "Dengusiak", + "DSY", "EDSL", "EnergyPlus", + "futureZ1", "gbXML", "Grasshopper", + "Happold", "HelixToolkit", + "HIGH90", + "Hoare", "Honeybee", "HVAC", "IAPWS", "IESVE", "IF97", "IGES", + "inspectable", "ISHVAC", "Jakub", "Ladybug", "LGPL", + "licence", + "materialises", "Michal", "Michalina", "Mollier", + "MRXBOXAB", "Multitasker", + "MVHR", + "Nuaire", "OCCT", "OpenStudio", + "Opt10", + "optimisation", + "organisation", + "organisations", + "Plex", + "PrintWindow", "PsychroLib", "psychrometric", "psychrometrics", @@ -44,6 +67,7 @@ "Rhino", "sambim", "scriptable", + "SQLite", "SharpDX", "T3D", "TBD", @@ -56,6 +80,7 @@ "watertight", "WCAG", "WCAG2AA", + "XBC15", "Ziolkowski" ] } diff --git a/index.html b/index.html index d20ed73..1f6672f 100644 --- a/index.html +++ b/index.html @@ -4,21 +4,23 @@ SAM - Sustainable Analytical Model - + - - + + + - + - + + - - - + + + @@ -31,7 +33,7 @@ "name":"Sustainable Analytical Model (SAM)", "applicationCategory":"EngineeringApplication", "operatingSystem":"Windows", - "description":"Open-source analytical model toolkit connecting Revit, Rhino/Grasshopper, and Tas EDSL for BIM-to-BEM and HVAC workflow automation.", + "description":"Open-source computational-engineering platform built around a shared analytical building model, connecting BIM, building physics, HVAC systems and simulation.", "publisher":{"@id":"https://sambim.xyz/#org"}, "offers":{"@type":"Offer","price":"0","priceCurrency":"USD"}, "license":"https://www.gnu.org/licenses/lgpl-3.0.html", @@ -43,7 +45,7 @@ "@id":"https://sambim.xyz/#org", "name":"SAM-BIM", "url":"https://sambim.xyz", - "logo":"https://sambim.xyz/assets/SAM_BIM_logo.png", + "logo":"https://sambim.xyz/assets/SAM_BIM_logo_180.png", "sameAs":[ "https://github.com/SAM-BIM", "https://www.linkedin.com/company/sambim" @@ -57,398 +59,453 @@ -
-
-
- Open source · BIM to BEM · HVAC -

From BIM geometry to simulation-ready analytical models

-

SAM (Sustainable Analytical Model) is an open-source .NET toolkit that turns Revit and Rhino/Grasshopper geometry into reusable analytical building models — validated, attributed, and simulated with Tas as the primary engine, with psychrometric HVAC design workflows alongside.

- -
-
- SAM BIM emblem -
Analytical model as the shared engineering layer
-
-
-
+
-
-
- Overview -

What SAM Is

-

SAM is a modular, open-source .NET/C# toolkit for creating, cleaning, enriching, exchanging, and simulating analytical building models — the watertight panels, spaces, and adjacency data that energy and HVAC simulation needs. One shared JSON analytical model carries the project from BIM geometry to results, so information is reused instead of rebuilt for every study.

-
-
-

BIM to BEM

-

Generate analytical panels, spaces, shells, and adjacency clusters from Revit, Rhino, and Grasshopper workflows.

-
-
-

Simulation Ready

-

Attribute constructions, profiles, internal conditions, openings, and systems before connecting to Tas and results workflows.

-
-
-

Reusable Research Platform

-

Use JSON-based analytical objects, validation routines, and extension modules to test repeatable methods across projects and papers.

-
-
-

Core Analytical Concepts

-
-
-

Geometry

-

Planar geometry, faces, shells, apertures, and boundary representations used to derive simulation-ready spaces.

-
-
-

Panels

-

Walls, floors, roofs, apertures, constructions, and thermal properties represented as analytical objects.

-
-
-

Adjacency Cluster

-

The relationship layer for spaces, zones, panels, and their spatial/topological connections.

-
-
-

Analytical Model

-

The project container for geometry, location, profiles, materials, internal conditions, systems, and results.

-
-
-
-
1shared JSON analytical model
-
Revit + RhinoBIM hosts: Revit 2020–2026, Rhino 8/9
-
LGPL-3.0open-source core and modules
-
2021→peer-reviewed research lineage
+ +
+
+
+
+ Open-source computational engineering +

From BIM geometry to auditable engineering workflows

+
+
+

SAM is an open-source computational-engineering platform built around a shared analytical building model. It connects BIM, building physics, HVAC systems and simulation through reusable, traceable workflows.

+ +
+
+ +
+
+ SAM analytical model plan view with ventilation requirement and design airflow values for dwelling spaces. +
+
+ E01 + The SAM analytical model in the SAM Analytical desktop app: engineering data reviewed directly on the model, here ventilation requirements beside design airflows. F Part F requirement D design airflow Full size +
+
-
- Workflow -

How SAM Works

-

Project inputs become one SAM analytical model, then move through validation, attribution, simulation, and HVAC comparison in a repeatable workflow.

-
-
- 01 - Inputs - Revit, Rhino, Grasshopper, IFC, gbXML, and project geometry. + +
+
+
+ Platform +

One analytical model at the centre

+

Design tools feed a shared analytical building model. Engineering logic, systems and simulation all work on that model, and their results return to it.

- -
- 02 - SAM Analytical Model - Panels, spaces, apertures, adjacency clusters, location, profiles, and libraries. -
- -
- 03 - Validation + Attribution - Watertight shells, cleaned geometry, constructions, loads, schedules, and system intent. -
- -
- 04 - Simulation + Results - Tas dynamic simulation, HVAC scenarios, result extraction, and post-processing. -
-
-
-
- Capabilities -

Capabilities Today

-

Every capability links to the public repository that implements it. Status chips distinguish what is shipped from what is in active development — nothing in development is presented as finished.

-

- Shipped - In development - Roadmap -

+
+
+
+
+

Hosts & exchange

+
RevitRhinoGrasshopperIFCgbXMLLadybug ToolsBHoM
+
+ +
+

Shared core

+

SAM analytical modelSpaces, panels, apertures, adjacency, constructions, profiles, internal conditions, systems and results — one open JSON model, reused rather than rebuilt.

+
+ +
+

Engineering & systems

+
Geometry processingLoadsVentilationOverheatingHVAC systemsPsychrometrics
+
+ +
+

Simulation adapters

+
TasOpenStudio In development
+
+ +
+

Results, review & data

+
Results on the modelPlan overlaysAssessmentsReportsExcel & SQLite
+
+
+

Grasshopper is one host for SAM, not SAM itself. Tas is one simulation integration, not SAM itself.

+
-

Shipped and in daily use

-
-
-

BIM hosts: Revit & Rhino

-

Analytical-model generation in Revit 2020–2026 (SAM add-in and Rhino.Inside.Revit) and in Rhino 8/9 with a large Grasshopper component library. SAM_Revit · SAM_Rhino_UI

- Shipped -
-
-

Tas simulation & HVAC scenarios

-

Primary engine pathway: Tas TBD/TSD/T3D/TPD model exchange, overheating and compliance-oriented workflows (TM52, TM59, Part L), and reusable plant-room (EnergyCentre) templates for automated HVAC scenario comparison. SAM_Tas · SAM_Systems

- Shipped -
-
-

Psychrometrics & Mollier HVAC design

-

Moist-air calculations, Mollier chart plotting, air-process loads, and concept-stage HVAC exploration — numerically validated against published reference data (ASHRAE, PsychroLib, IAPWS). SAM_Mollier · SAM_Validation

- Shipped -
-
-

Model exchange

-

IFC, gbXML, IES VE GEM, BHoM, and Excel import/export, plus bidirectional Honeybee schema 2.6 round-trip exchange for Ladybug Tools workflows. SAM_IFC · SAM_gbXML · SAM_LadybugTools

- Shipped -
-
-

Desktop applications

-

Four Windows desktop apps — SAM Analytical, SAM Analytical Mollier, SAM Geometry, and SAM Weather — for model inspection, psychrometric design, geometry work, and weather data. SAM_UI

- Shipped -
-
-

One analytical model core

-

Panels, spaces, apertures, adjacency clusters, profiles, materials, internal conditions, and systems in a single JSON model, scriptable from Grasshopper. SAM

- Shipped -
-
- -

In active development (2026)

-
-
-

SAM_OCCT — native watertight geometry

-

An Open Cascade geometry kernel inside SAM: sewing and healing of open shells into watertight solids, booleans, STEP/IGES exchange, cell complexes, and a 3D solver — with tests and CI, not yet wired into the SAM core model. SAM_OCCT

- In development -
-
-

Native OpenStudio conversion

-

Direct SAM-to-OpenStudio model generation: geometry, constructions, schedules, and thermostats with ideal-air loads (airside and plant HVAC not yet covered). OpenStudio remains a secondary, EnergyPlus-oriented pathway alongside Tas. SAM_OpenStudio

- In development -
-
-

SharpDX 3D viewport

-

A new GPU-accelerated viewport for the desktop apps, replacing HelixToolkit, with undo/redo support across the interface. SAM_UI

- In development -
-
-

Systems ↔ Mollier plant-room bridge

-

Connecting SAM_Systems plant-room schematics with Mollier psychrometric processes for air-handling and plant design workflows. SAM_Systems

- In development -
+
+

What makes it different

+
    +
  • One model, many workflowsGeometry, constructions, systems and results live in one analytical model that every workflow reads and extends.
  • +
  • Explicit engineering dataSpaces, adjacency, systems and their relationships are named, inspectable objects — not hidden tool state.
  • +
  • Deterministic and auditableWorkflows are repeatable and record what they used, so results can be reviewed and reproduced.
  • +
  • BIM and simulation connectedAuthoring tools and simulation engines are adapters around the model, not separate islands of data.
  • +
  • Decisions keep their authorityRegulatory requirements, engineering design and equipment capability stay distinct. See the principle
  • +
  • Open, scriptable, extensibleLGPL-licensed .NET code, scriptable from Grasshopper and C#, extended through independent modules.
  • +
+
+
-

SAM supports engineering workflows that contribute to assessment methods. Compliance still depends on the complete project methodology and toolchain.

-
- Roadmap -

Research-Backed Maturity

-

Platform stages follow the published research line. SAM 4.0 and 5.0 are future directions; SAM_Mollier develops in parallel as a module, not a platform version.

-
-
- SAM 1.0 -

Geometry creation, multi-method model generation, adjacency clusters, shell creation, and watertight boundary preparation. Shipped

-
-
- SAM 2.0 -

Loads, attribution, material/profile/internal-condition libraries, dynamic simulation connectors, and BIM-to-BEM research validation. Shipped

-
-
- SAM 3.0 -

Reusable HVAC system generation, JSON system references, Tas EnergyCentre templates, automated scenario execution, and result extraction. Shipped

-
-
- SAM_Mollier Parallel module -

Psychrometric points, Mollier and psychrometric charts, air processes, HVAC loads, and concept-stage system exploration.

-
-
- SAM 4.0 -

Controls and control-strategy testing for HVAC system operation and scenario analysis. Roadmap

+ +
+
+
+ Capabilities +

What SAM does

+

Six capability families, each built on the same analytical model and implemented in public repositories.

-
- SAM 5.0 -

Digital twin direction: an updatable building representation with geometry, systems, assumptions, results, and project data. Roadmap

+ +
+
+

Analytical modelling

+

Spaces, panels, apertures, adjacency, materials, constructions, profiles, internal conditions, systems and results in one model — inspected and edited in the SAM desktop apps.

+ +
+ +
+

Building performance

+

Loads, ventilation, overheating and thermal-simulation workflows on the model, including Part F ventilation traced to Approved Document F and Part O overheating assessed with CIBSE TM59.

+ +
+
+

HVAC & systems

+

Building systems as explicit engineering networks: plant rooms, air handling and ventilation, catalogue equipment selection, and psychrometric air processes on the Mollier chart.

+ +
+
+

Simulation interoperability

+

Tas integration for zone and systems simulation, with results read back onto the analytical model. Native OpenStudio conversion is in development.

+ +
+
+

Automation & computational engineering

+

Repeatable, scriptable workflows: a large Grasshopper component library, .NET APIs, scenarios run in series or in parallel, and data exchange for large models.

+ +
+

More modules, including the installer and release pipeline, are in the SAM-BIM organisation.

-
- Ecosystem -

SAM Ecosystem

-

Public repositories, grouped by their role in the analytical workflow. Modules that are currently private return here once they are public.

- -
-

Core model

-
-
SAMCore analytical model objects and workflows.
-
SAM_ValidationNumerical validation against published reference data (ASHRAE, PsychroLib, IAPWS).
+ +
+
+
+ Flagship workflow +

One example of SAM in practice: Part F to Part O

+

A three-dwelling model taken from ventilation requirement to overheating result. The analytical model, engineering logic, equipment data and simulation work together; each image is a real SAM screen.

+
    +
  1. Analytical model
  2. +
  3. Regulatory requirement
  4. +
  5. Engineering design
  6. +
  7. Equipment decision
  8. +
  9. Simulation
  10. +
  11. Engineering result
  12. +
-
-
-

Geometry and solvers

-
-
SAM_OCCTNative Open Cascade geometry: watertight sew-and-heal, booleans, STEP/IGES, 3D solver. In development
-
SAM_TopologicTopological space and building representations.
-
-
+
    +
  1. +
    +
    + 01 Regulatory requirement +

    Part F calculates what must be achieved.

    +
    +
    +

    SAM derives the Approved Document F airflow for each room from the model and shows it on the plan beside the design.

    + Authority: Regulation +
    +
    + +
    +
    + One dwelling in the SAM plan view: Part F required airflow tags beside higher design airflow tags for bedroom supply, kitchen extract and transfer. +
    +
    E01Bedroom supply: Part F requires 63 l/s; the design holds 143 l/s. Two quantities on one plan.
    +
    +
  2. -
    -

    BIM and exchange

    -
    -
    SAM_RevitRevit and Rhino.Inside workflows (Revit 2020–2026).
    -
    SAM_IFCIndustry Foundation Classes exchange.
    -
    SAM_gbXMLgbXML import, export, and model transfer.
    -
    SAM_GEMIES VE GEM export workflows.
    -
    SAM_BHoMBHoM object model interoperability.
    -
    -
    +
  3. +
    +
    + 02 Engineering design +

    The engineer sets the design intent.

    +
    +
    +

    Calculation proposes; the engineer reviews. Here design airflow is raised above the requirement to address overheating, while the requirement and the unit’s capacity stay unchanged.

    + Authority: Engineer +
    +
    + +
    +
    + SAM Part O review showing separate required airflow, design airflow and selected ventilation-unit capacity. +
    +
    E02The regulatory requirement, engineering design and selected equipment capacity remain separate decisions.
    +
    +
  4. -
    -

    Simulation and HVAC

    -
    -
    SAM_TasPrimary Tas EDSL simulation integration: TBD/TSD/T3D/TPD, TM52/TM59/Part L, plant-room templates.
    -
    SAM_OpenStudioSecondary OpenStudio model generation and exchange; native conversion in development.
    -
    SAM_LadybugToolsHoneybee schema round-trip and Ladybug Tools interoperability.
    -
    SAM_SystemsBuilding systems, plant rooms, and HVAC system concepts.
    -
    SAM_MultitaskerScenario orchestration and task execution.
    -
    -
    +
  5. +
    +
    + 03 Equipment decision +

    SAM selects equipment and prepares the scenario.

    +
    +
    +

    Each dwelling gets the smallest catalogue unit that meets its design duty; the unit’s maximum is a ceiling, never a design value. SAM then builds a repeatable simulation scenario and records its state.

    + Authority: Product +
    +
    + +
    +
    + SAM Part O Prepare and Run interface showing a prepared ventilation scenario and simulation status. +
    +
    E03SAM materialises the engineering design into a deterministic simulation scenario and records the run state. Full size
    +
    +
  6. -
    -

    Engineering physics

    -
    -
    SAM_MollierMollier charts and psychrometric HVAC processes.
    -
    SAM_PsychrometricsMoist-air thermodynamic property calculations.
    -
    SAM_SolarCalculatorSolar position and irradiance utilities.
    -
    SAM_IAPWSWater and steam properties using IAPWS-IF97.
    +
  7. +
    +
    + 04 Simulation & result +

    Tas simulates; SAM assesses the result.

    +
    +
    +

    The building is simulated in Tas and each room assessed against CIBSE TM59. On 2050s design weather this case still fails in 6 of 8 rooms — and SAM says so.

    + Authority: Simulation +
    +
    + +
    +
    + SAM TM59 result review showing room-level overheating assessment outcomes from a Tas simulation. +
    +
    E04Example TM59 assessment showing the recorded room-level outcome; SAM reports the result rather than forcing a pass. Full size
    +
    +
  8. +
+ +
+

On the 2026-Q3 release line, the same design can be simulated through inter-zone airflows or through explicit ventilation systems in Tas, including selected-product cooling, with the unchanged TM59 assessment. Technical record

+

SAM supports engineering workflows that contribute to assessment methods; compliance depends on the complete project methodology. A TM59 pass is an overheating result, not a Part O compliance certificate.

-
-
-

User layers and scripting

-
-
SAM_UIWindows desktop apps: SAM Analytical, SAM Analytical Mollier, SAM Geometry, SAM Weather.
-
SAM_Rhino_UIRhino plugin and command-based access.
-
SAM_Revit_UIUser-facing Revit add-in layer.
-
SAM_ExcelSpreadsheet exchange and post-processing.
-
SAM_PythonPython scripting access (early experimental module).
+
+ Engineering principle +

Different engineering concepts stay different objects

+

A requirement is not a design, and a design is not what equipment can deliver. SAM keeps each quantity as its own object with its own authority, so one value never silently becomes another. The flagship workflow shows it with airflow:

+
+
+ 01 +

Required

+

The minimum the regulation demands.

+ Authority: Regulation +
+
+ 02 +

Design

+

What the engineer decides to ventilate at.

+ Authority: Engineer +
+
+ 03 +

Selected capacity

+

What the selected unit can deliver — a ceiling, not a target.

+ Authority: Product +
+
+ 04 +

Operating

+

What flows in the simulated or commissioned system.

+ Authority: Operation +
+
-
-
- Get Started -

Install

-
    -
  1. Download the latest SAM installer.
  2. -
  3. Run the installer and follow the prompts.
  4. -
  5. Open SAM where you work: Grasshopper in Rhino, Rhino commands, the Revit add-in via Rhino.Inside.Revit, or one of the four desktop apps.
  6. -
  7. Build from source in Visual Studio when developing or extending modules.
  8. -
-

Requirements

-
    -
  • Windows
  • -
  • Rhino 8 or 9 (for Rhino/Grasshopper workflows)
  • -
  • Revit 2020–2026 (for Revit add-in / Rhino.Inside.Revit workflows)
  • -
  • Tas EDSL (for simulation workflows)
  • -
-

Current installer releases are managed through the SAM_Deploy repository.

-
-
- Typical Steps -

Run A Study

-
    -
  1. Import or generate geometry.
  2. -
  3. Create panels, spaces, apertures, and adjacency clusters.
  4. -
  5. Attribute constructions, profiles, internal conditions, and systems.
  6. -
  7. Validate the analytical model and export or simulate.
  8. -
  9. Compare scenarios, extract results, and document assumptions.
  10. -
+ +
+
+
+ Evidence +

Evidence, not claims

+

Each statement links to the public record behind it.

+
+
+
+

Automated testing

+

The core SAM model regression suite runs in continuous integration on every pull request and push.

+ CI test runs +
+
+

Release acceptance

+

The published installer is built and payload-checked in CI and was smoke-tested manually in Rhino, Grasshopper, the Revit add-in and Rhino.Inside.Revit. The wider clean-install, upgrade and uninstall acceptance matrix was not re-run for this build.

+ Release acceptance notes +
+
+

Simulation cross-checks

+

SAM’s TM59 figures checked against Tas’s own overheating report, with limitations stated.

+ Validation record +
+
+

Regulatory traceability

+

Approved Document F traced paragraph by paragraph — an assessment, not a certification.

+ Traceability matrix +
+
+

Peer-reviewed research

+

Published at building-simulation venues since 2021, including Springer and BSA proceedings.

+ Publications +
+
+

Installable releases

+

Versioned Windows installer with release notes for Rhino, Revit and the SAM desktop apps.

+ Latest release +
+
-
- Research -

Research & Publications

-

SAM is developed in the open and published through peer-reviewed building-simulation venues. Publications are listed with DOI or proceedings links where available; author profiles on ResearchGate carry the full list.

-

Numerical quality: psychrometric and steam-property calculations are tested against published reference data — ASHRAE Fundamentals tables, PsychroLib, and IAPWS-IF97 — in the public SAM_Validation suite.

- -
-

Sustainable Analytical Model (SAM 3.0): A New Approach to Automated HVAC Simulation

-

M. Dengusiak, J. Ziolkowski, M. Dengusiak. BSA 2026.

- SAM 3.0HVAC automationTas -

Presented at BSA 2026 (Bozen-Bolzano, June 2026); proceedings forthcoming.

-
- - - - - - - - - - + +
+
+
+ Research +

Research & publications

+

Developed in the open; published at peer-reviewed building-simulation venues — from BIM-to-BEM model generation to psychrometrics and automated HVAC simulation.

+
- + +

Full list: ResearchGate – Michal Dengusiak.

-

Full and up-to-date list: ResearchGate - Michal Dengusiak.

-
+
+
+ People +

Who builds SAM

+

An independent open-source project.

+
+
    +
  • + Michal Dengusiak + Co-creator and engineering lead. Chartered Engineer; previously at Arup, Buro Happold and Hoare Lea. SAM-BIM is independent and not sponsored or endorsed by those organisations. + LinkedIn · ResearchGate +
  • +
  • + Jakub Ziolkowski + Co-creator; core platform development. + LinkedIn · ResearchGate +
  • +
  • + Michalina Dengusiak + Co-author of the SAM 2.0 and SAM 3.0 papers. + LinkedIn · ResearchGate +
  • +
+
-
- Docs And Community -

Documentation, Support, Contribution

- + +
-
- Team -

Meet The SAM-BIM Team

-

Company: SAM-BIM on LinkedIn

- -

Commercial services, training, and bespoke workflows are available through SAM-BIM.

-