Add GigaBIT M1 CDR web deck (Reveal.js)

This commit is contained in:
Mario Lavoie (Clawdbot)
2026-01-29 03:08:05 +00:00
parent 543d1ce3c2
commit 80d92e1440
4 changed files with 615 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
# Gigabit Optique Fullum — CDR Deck (Reveal.js)
URLs (once deployed to Hostinger):
- Gate: `https://atomaste.ca/decks/gigabit-optique-fullum-cdr/enter.html`
- Deck: `https://atomaste.ca/decks/gigabit-optique-fullum-cdr/`
## Security note
`enter.html` is a lightweight client-side code gate (not strong security). Use for "share link + code" only.
## To customize
- Edit the access code in `enter.html` (`const CODE = ...`). Current: `stratosphere`.
- Replace placeholders in `index.html`.
- Add images/plots under `assets/` and reference with `./assets/...`.
## PDF export
Open the deck and print to PDF (browser print) or use Reveal's built-in PDF mode.

View File

@@ -0,0 +1,60 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Enter code — Atomaste CDR</title>
<meta name="robots" content="noindex, nofollow" />
<link rel="icon" type="image/svg+xml" href="/Media/Atomaste_logo_A.svg?v=2">
<style>
:root { --bg:#0b0f14; --fg:#e8eef7; --muted:#a8b3c2; --accent:#7dd3fc; }
body{ margin:0; min-height:100vh; display:grid; place-items:center; background: radial-gradient(900px 600px at 15% 10%, rgba(125,211,252,0.14), transparent 55%), linear-gradient(180deg,#070a0f 0%, var(--bg) 100%); color:var(--fg); font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.card{ width:min(520px, 92vw); border:1px solid rgba(232,238,247,0.14); border-radius:16px; background: rgba(255,255,255,0.03); padding: 24px; }
.row{ display:flex; gap:10px; margin-top:12px; }
input{ flex:1; padding:12px 14px; border-radius:12px; border:1px solid rgba(232,238,247,0.14); background: rgba(0,0,0,0.25); color:var(--fg); font-size:16px; }
button{ padding:12px 14px; border-radius:12px; border:1px solid rgba(232,238,247,0.14); background: rgba(125,211,252,0.14); color:var(--fg); font-size:16px; cursor:pointer; }
.hint{ color: rgba(232,238,247,0.65); font-size: 13px; margin-top: 10px; }
.error{ color:#fca5a5; margin-top:10px; display:none; }
img{ height:22px; opacity:0.9; }
.brand{ display:flex; align-items:center; gap:10px; margin-bottom:10px; }
</style>
</head>
<body>
<div class="card">
<div class="brand">
<img src="/Media/Atomaste_light_grey_Logo.svg" alt="Atomaste" />
<div style="font-weight:600">CDR Deck Access</div>
</div>
<div style="font-size: 14px; color: rgba(232,238,247,0.75)">Enter the access code to open the presentation.</div>
<div class="row">
<input id="code" type="password" placeholder="Access code" autocomplete="off" />
<button id="go">Open</button>
</div>
<div class="error" id="err">Incorrect code.</div>
<div class="hint">Note: this is a lightweight gate (link + code), not strong security.</div>
</div>
<script>
// NOTE: This is intentionally simple. Not real security.
// Change the CODE value before sharing.
const CODE = 'stratosphere';
const $ = (id) => document.getElementById(id);
const go = () => {
const val = $('code').value.trim();
if (val === CODE) {
// Lightweight gate: store a marker then redirect.
try { localStorage.setItem('atomaste_deck_gof_cdr', CODE); } catch (e) {}
window.location.href = './index.html';
} else {
$('err').style.display = 'block';
}
};
$('go').addEventListener('click', go);
$('code').addEventListener('keydown', (e) => { if (e.key === 'Enter') go(); });
</script>
</body>
</html>

View File

@@ -0,0 +1,408 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>CDR — GigaBIT M1 Mirror | Atomaste</title>
<meta name="robots" content="noindex, nofollow" />
<!-- Reveal.js (CDN) -->
<link rel="stylesheet" href="https://unpkg.com/reveal.js@5/dist/reveal.css" />
<link rel="stylesheet" href="https://unpkg.com/reveal.js@5/dist/theme/black.css" />
<link rel="stylesheet" href="./theme-atomaste.css" />
<link rel="icon" type="image/svg+xml" href="/Media/Atomaste_logo_A.svg?v=2">
</head>
<body>
<div class="reveal">
<div class="slides">
<!-- 1 Title -->
<section>
<h1>Critical Design Review (CDR)</h1>
<h2>GigaBIT M1 Primary Mirror</h2>
<p style="color: rgba(232,238,247,0.75)">Optique Fullum · Atomaste · <span id="today"></span></p>
<aside class="notes">
Goal: establish confidence to proceed with Schott blank order.
Audience: StarSpec.
Keep intro short: what decision were asking for.
</aside>
</section>
<!-- 2 Agenda -->
<section>
<h2>Agenda</h2>
<ul>
<li class="fragment fade-up">Executive summary (decision + numbers)</li>
<li class="fragment fade-up">Design evolution (PDR → CDR)</li>
<li class="fragment fade-up">Selected design baseline (Option B)</li>
<li class="fragment fade-up">Performance validation (WFE + margins)</li>
<li class="fragment fade-up">Support system (whiffletree + lateral)</li>
<li class="fragment fade-up">Reference frame & boundary condition strategy</li>
<li class="fragment fade-up">Risks, schedule, next steps</li>
</ul>
<aside class="notes">Target: ~45 min including questions. Main deck ~2426 slides + backup.</aside>
</section>
<!-- 3 Exec summary -->
<section>
<h2>Executive Summary</h2>
<ul>
<li class="fragment fade-up"><b>Status:</b> design maturity sufficient to authorize blank procurement</li>
<li class="fragment fade-up"><b>Baseline for procurement:</b> Option B (Conical V14)</li>
<li class="fragment fade-up"><b>Performance:</b> WFE compliant with 3671% margin</li>
<li class="fragment fade-up"><b>Mass:</b> ~95 kg (allocation 103.5 kg)</li>
<li class="fragment fade-up"><b>Cost:</b> $525k quote (0.4% above $523k target)</li>
<li class="fragment fade-up"><b>Schedule driver:</b> 18week Schott lead time</li>
</ul>
<aside class="notes">This slide is the meeting anchor: decision + evidence plan.</aside>
</section>
<!-- 4 Key numbers -->
<section>
<h2>Key Numbers (Option B)</h2>
<ul>
<li class="fragment fade-up"><b>WFE 40°20°:</b> 6.59 nm RMS (req ≤ 22 nm)</li>
<li class="fragment fade-up"><b>WFE 60°20°:</b> 14.79 nm RMS (req ≤ 22 nm)</li>
<li class="fragment fade-up"><b>Req interpretation:</b> 22 nm RMS ≈ λ/25 @ 550 nm</li>
<li class="fragment fade-up"><b>Mass:</b> ~95 kg (Δ = +8% margin to allocation)</li>
<li class="fragment fade-up"><b>Quote:</b> $525,000 (received)</li>
</ul>
<aside class="notes">Call out margin: even with uncertainty, we remain well inside requirement.</aside>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Design Evolution (PDR → CDR)</div>
<div style="color: rgba(232,238,247,0.7)">Method improvements + scale of validation.</div>
</div>
</section>
<!-- 5 Transition to Atomizer -->
<section>
<h2>Transition to Atomizer Framework</h2>
<ul>
<li class="fragment fade-up">Moved from HEEDS MDO → <b>custom Atomizer</b> framework</li>
<li class="fragment fade-up">Full control of algorithms, tuning, and traceability</li>
<li class="fragment fade-up">Automation: NX Nastran (SOL 101) + post-processing</li>
<li class="fragment fade-up">Reproducible studies (version-controlled)</li>
</ul>
<aside class="notes">Atomizer is the engine behind the scale + reproducibility of this campaign.</aside>
</section>
<!-- 6 OPD Zernike -->
<section>
<h2>OPDBased Zernike Method (Upgrade)</h2>
<ul>
<li class="fragment fade-up">Upgraded from Zdisplacement only → <b>OPDbased</b> extraction</li>
<li class="fragment fade-up">Captures lateral displacement (X,Y), not only axial (Z)</li>
<li class="fragment fade-up">Directly supports the system WFE metric</li>
</ul>
<aside class="notes">Key: more correct optical metric than Z-only, especially off-zenith.</aside>
</section>
<!-- 7 Campaign scale -->
<section>
<h2>Validation Scale</h2>
<ul>
<li class="fragment fade-up"><b>Total:</b> 3,770+ FEA simulations</li>
<li class="fragment fade-up">14 design variables (support + ribs + blank geometry)</li>
<li class="fragment fade-up">Algorithms: TPE, GNN, SAT v3, NSGAII, LBFGS</li>
<li class="fragment fade-up"><b>Convergence confirmed:</b> multiple algorithms agree</li>
</ul>
<aside class="notes">This closes the “what if we optimize more?” question: diminishing returns.</aside>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Cost Reduction Campaign</div>
<div style="color: rgba(232,238,247,0.7)">Manufacturing simplifications without sacrificing performance.</div>
</div>
</section>
<!-- 8 Cost target -->
<section>
<h2>Cost Target & Outcome</h2>
<ul>
<li class="fragment fade-up">Baseline quote: <b>$625k</b></li>
<li class="fragment fade-up">Budget target: <b>$523k</b></li>
<li class="fragment fade-up">Option B quote: <b>$525k</b> (0.4% above target)</li>
<li class="fragment fade-up">Option C explored for manufacturability context (not procurement baseline)</li>
</ul>
</section>
<!-- 9 Simplifications -->
<section>
<h2>Key Simplifications (Implemented in Option B)</h2>
<ul>
<li class="fragment fade-up">Support interface taper simplified to 0° (cylindrical)</li>
<li class="fragment fade-up">Center mini ribs removed (validated low sensitivity)</li>
<li class="fragment fade-up">Guided by sensitivity + campaign data (not one-off changes)</li>
</ul>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Selected Design Baseline</div>
<div style="color: rgba(232,238,247,0.7)">Option B (Conical V14) for procurement.</div>
</div>
</section>
<!-- 10 Option B description -->
<section>
<h2>Option B (Baseline): Conical V14</h2>
<ul>
<li class="fragment fade-up"><b>Backface angle:</b> 4.3° (optimized)</li>
<li class="fragment fade-up"><b>Center thickness:</b> 85 mm</li>
<li class="fragment fade-up"><b>Mass:</b> ~95 kg</li>
<li class="fragment fade-up"><b>Quote:</b> $525k received</li>
</ul>
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> blank crosssection export (CAD)</p>
<aside class="notes">Add CAD cross-section image when available.</aside>
</section>
<!-- 11 Trade summary -->
<section>
<h2>Why Option B (vs FlatBack Option C)</h2>
<ul>
<li class="fragment fade-up">Option C has excellent polishing metric (MFG 90 ~28 nm) and slightly better WFE</li>
<li class="fragment fade-up">Option B selected for <b>maturity + procurement readiness</b> (quote in hand, heritage)</li>
<li class="fragment fade-up">Option C remains documented as a credible alternative for future trades</li>
</ul>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Performance Validation</div>
<div style="color: rgba(232,238,247,0.7)">WFE compliance, dominant modes, uncertainty.</div>
</div>
</section>
<!-- 12 WFE compliance -->
<section>
<h2>WFE Compliance (Operational)</h2>
<ul>
<li class="fragment fade-up">Requirement: <b>≤ 22 nm RMS</b> (relative to 20° reference)</li>
<li class="fragment fade-up">40°: <b>6.59 nm</b> (≈71% margin)</li>
<li class="fragment fade-up">60°: <b>14.79 nm</b> (≈36% margin)</li>
</ul>
<aside class="notes">Call out that requirement corresponds to λ/25 @ 550 nm, system-level spec.</aside>
</section>
<!-- 13 Zernike breakdown -->
<section>
<h2>WFE Breakdown (40° Case, Filtered RMS)</h2>
<ul>
<li class="fragment fade-up">Dominant: <b>Coma (J7J8)</b> ~60%</li>
<li class="fragment fade-up">Astigmatism (J5J6) ~33%</li>
<li class="fragment fade-up">Higher order contribution is low</li>
</ul>
<aside class="notes">Message: deformation is physically reasonable (gravity asymmetry); nothing pathological.</aside>
</section>
<!-- 14 Uncertainty -->
<section>
<h2>Uncertainty (RSS)</h2>
<ul>
<li class="fragment fade-up">Combined WFE uncertainty estimate: <b>±1.2 nm</b></li>
<li class="fragment fade-up">Worst-case 40°: ~7.5 nm (still far below 22 nm)</li>
<li class="fragment fade-up">Support compliance target: reference frame deflection &lt; 1 μm</li>
</ul>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Support System</div>
<div style="color: rgba(232,238,247,0.7)">Architecture is defined; detailed design proceeds to FDR.</div>
</div>
</section>
<!-- 15 Whiffletree -->
<section>
<h2>Axial Support: 54Point Whiffletree</h2>
<ul>
<li class="fragment fade-up">Selfequalizing hierarchical linkage (18 pads × 3 assemblies)</li>
<li class="fragment fade-up">Load path: Mirror → pads → arms → 3 interface points → reference frame</li>
<li class="fragment fade-up">RDOF joints provide thermal decoupling (insensitive in 100200 Nmm range)</li>
</ul>
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> whiffletree schematic</p>
</section>
<!-- 16 Lateral -->
<section>
<h2>Lateral Support (3Point)</h2>
<ul>
<li class="fragment fade-up">3 assemblies at 120°; determinate restraint</li>
<li class="fragment fade-up">Includes spherical bearing (moment isolation) + radial slide (thermal) + Z stage (collimation)</li>
<li class="fragment fade-up">At 20° elevation, each point carries ~35 kg lateral load (order of magnitude)</li>
</ul>
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> lateral support concept</p>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Reference Frame & Boundary Conditions</div>
<div style="color: rgba(232,238,247,0.7)">Procure now; develop frame in parallel.</div>
</div>
</section>
<!-- 17 Reference frame scope -->
<section>
<h2>Reference Frame (Scope Boundary)</h2>
<ul>
<li class="fragment fade-up">Purpose: replicate fixed BCs used in optimization (stiff interface)</li>
<li class="fragment fade-up">Status at CDR: <b>conceptual</b>; detailed design at FDR</li>
<li class="fragment fade-up">Integration risk handled via ICD with StarSpec</li>
</ul>
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> reference frame concept topology</p>
</section>
<!-- 18 BC strategy -->
<section>
<h2>Why Ordering the Blank Now Is Safe</h2>
<ul>
<li class="fragment fade-up"><b>Diminishing returns:</b> 3,770+ trials; improvements are flat</li>
<li class="fragment fade-up"><b>Separate problems:</b> mirror optimization vs frame stiffness engineering</li>
<li class="fragment fade-up"><b>Parallel path:</b> order blank now, design/validate frame while Schott fabricates</li>
</ul>
</section>
<!-- Divider -->
<section>
<div class="section-divider">
<div class="kicker">Section</div>
<div class="title">Risks, Schedule, Next Steps</div>
<div style="color: rgba(232,238,247,0.7)">Residual risks are known and manageable.</div>
</div>
</section>
<!-- 19 Risk matrix -->
<section>
<h2>Risk Snapshot (CDR)</h2>
<ul>
<li class="fragment fade-up">Closed: design convergence (R1), mass allocation (R5), major methodology risks</li>
<li class="fragment fade-up">Reduced: cost (R2), polishing difficulty (R6)</li>
<li class="fragment fade-up">Open: Schott delivery delay (R3), interfaces (R7), material defect (R8)</li>
<li class="fragment fade-up">New: reference frame stiffness (R4) — mitigated via parallel development</li>
</ul>
<aside class="notes">This slide is the “honest risks” moment. Keep it calm + mitigation-focused.</aside>
</section>
<!-- 20 Schedule -->
<section>
<h2>Path to FDR (High Level)</h2>
<ul>
<li class="fragment fade-up">Schott PO: target Jan 20</li>
<li class="fragment fade-up">Blank delivery: ~May 26 (18 weeks)</li>
<li class="fragment fade-up">Reference frame concept review: Feb 28</li>
<li class="fragment fade-up">Polishing start: Jun 2 → FDR: Sep</li>
</ul>
<aside class="notes">If you have a graphic timeline, swap this for the visual. Keep dates consistent with your doc.</aside>
</section>
<!-- 21 Recommendation -->
<section>
<h2>Decision Request</h2>
<ul>
<li class="fragment fade-up"><b>Approve CDR baseline:</b> Option B (Conical V14)</li>
<li class="fragment fade-up"><b>Authorize Schott blank order</b> (protect schedule)</li>
<li class="fragment fade-up">Align on next steps: ICD + reference frame concept + support detailed design</li>
</ul>
<aside class="notes">Stop here; go to backup for Q&A.</aside>
</section>
<!-- Backup marker -->
<section>
<div class="section-divider">
<div class="kicker">Backup</div>
<div class="title">Appendix</div>
<div style="color: rgba(232,238,247,0.7)">Detailed tables, parameters, and trades.</div>
</div>
</section>
<section>
<h2>Backup: Option B Optimized Parameters (excerpt)</h2>
<ul>
<li>lateral_inner_angle 27.88°</li>
<li>lateral_outer_angle 13.19°</li>
<li>lateral_inner_pivot 7.41 mm</li>
<li>lateral_outer_pivot 11.53 mm</li>
<li>whiffle_min 58.90 mm</li>
<li>blank_backface_angle 4.30°</li>
</ul>
</section>
<section>
<h2>Backup: Requirement Matrix (excerpt)</h2>
<ul>
<li>REQ01 WFE 40°: 6.59 nm ≤ 22 nm ✓</li>
<li>REQ01 WFE 60°: 14.79 nm ≤ 22 nm ✓</li>
<li>REQ06 Mass: ~95 kg ≤ 103.5 kg ✓</li>
<li>REQ09 Thermal/STOP: pending (FDR)</li>
</ul>
</section>
</div>
</div>
<div class="atomaste-footer">
<div class="atomaste-chip">
<img src="/Media/Atomaste_light_grey_Logo.svg" alt="Atomaste" />
<span>CDR · GigaBIT M1 Mirror</span>
</div>
<div class="atomaste-chip"><span class="slide-number"></span></div>
</div>
<script src="https://unpkg.com/reveal.js@5/dist/reveal.js"></script>
<script>
// Lightweight gate (not real security): require localStorage marker from enter.html
try {
const ok = localStorage.getItem('atomaste_deck_gof_cdr') === 'stratosphere';
if (!ok) window.location.href = './enter.html';
} catch (e) {
window.location.href = './enter.html';
}
document.getElementById('today').textContent = new Date().toLocaleDateString(undefined, {
year: 'numeric', month: 'short', day: '2-digit'
});
const deck = new Reveal({
hash: true,
transition: 'fade',
backgroundTransition: 'fade',
width: 1280,
height: 720,
margin: 0.08,
controls: true,
progress: true,
center: false
});
deck.initialize().then(() => {
const updateNum = () => {
const idx = deck.getIndices();
const current = idx.h + 1;
const total = deck.getTotalSlides();
const el = document.querySelector('.slide-number');
if (el) el.textContent = current + ' / ' + total;
};
deck.on('slidechanged', updateNum);
updateNum();
});
</script>
</body>
</html>

View File

@@ -0,0 +1,131 @@
/* Atomaste Reveal.js theme (v1)
Keep it minimal: reuse existing site look.
*/
:root {
--atomaste-bg: #0b0f14;
--atomaste-fg: #e8eef7;
--atomaste-muted: #a8b3c2;
--atomaste-accent: #7dd3fc; /* light cyan */
--atomaste-accent-2: #a78bfa; /* violet */
}
.reveal {
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
color: var(--atomaste-fg);
}
.reveal .slides {
text-align: left;
}
.reveal-viewport {
background: radial-gradient(1200px 800px at 15% 10%, rgba(125,211,252,0.14), transparent 55%),
radial-gradient(900px 600px at 85% 30%, rgba(167,139,250,0.12), transparent 60%),
linear-gradient(180deg, #070a0f 0%, #0b0f14 100%);
}
/* subtle moving sheen (keep it classy) */
.reveal-viewport::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
background:
radial-gradient(500px 320px at 10% 20%, rgba(125,211,252,0.10), transparent 60%),
radial-gradient(420px 280px at 90% 40%, rgba(167,139,250,0.08), transparent 62%),
radial-gradient(520px 360px at 40% 95%, rgba(125,211,252,0.06), transparent 65%);
filter: blur(0px);
opacity: 0.9;
transform: translate3d(0,0,0);
animation: atomasteFloat 18s ease-in-out infinite;
}
@keyframes atomasteFloat {
0% { transform: translate3d(0,0,0); }
50% { transform: translate3d(18px,-10px,0); }
100% { transform: translate3d(0,0,0); }
}
.reveal h1, .reveal h2, .reveal h3 {
letter-spacing: -0.02em;
margin-bottom: 0.35em;
}
.reveal h1 { font-size: 2.25em; }
.reveal h2 { font-size: 1.65em; }
.reveal h3 { font-size: 1.15em; color: var(--atomaste-muted); font-weight: 600; }
.reveal p, .reveal li {
font-size: 0.95em;
line-height: 1.35;
}
.reveal a { color: var(--atomaste-accent); }
/* footer */
.atomaste-footer {
position: absolute;
left: 36px;
right: 36px;
bottom: 22px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
font-size: 14px;
color: rgba(232,238,247,0.65);
pointer-events: none;
}
.atomaste-footer img {
height: 22px;
opacity: 0.9;
}
.atomaste-chip {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 6px 10px;
border: 1px solid rgba(232,238,247,0.14);
border-radius: 999px;
background: rgba(255,255,255,0.03);
}
/* nicer lists */
.reveal ul { margin-left: 1.1em; }
.reveal li { margin: 0.35em 0; }
/* images */
.reveal img {
max-height: 62vh;
border-radius: 10px;
}
/* section divider style */
.section-divider {
display: grid;
gap: 18px;
}
.section-divider .kicker {
font-size: 0.9em;
color: var(--atomaste-muted);
text-transform: uppercase;
letter-spacing: 0.12em;
}
.section-divider .title {
font-size: 2.1em;
line-height: 1.1;
}
/* fragments */
.reveal .fragment.fade-up { transform: translateY(6px); }
/* code blocks (if any) */
.reveal pre code {
font-size: 0.8em;
line-height: 1.3;
}