PageSourceSearch

https://eve-devoter.com/

html eve-devoter.com collected 2026-10-07 19:32:28 UTC 97,367 bytes, 1,272 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <title>EVE Online Wormhole Rolling Guide &amp; Mass Calculator</title>
7
8  <!-- SEO -->
9  <meta name="description" content="EVE Online Wormhole Mass Calculator – track wormhole mass, plan ship passes, and safely roll wormholes. Free tool for EVE Online pilots. Includes a wormhole rolling guide.">
10  <meta name="keywords" content="EVE Online, wormhole, mass calculator, wormhole rolling, wormhole stability, wormhole tracker, K162, rolling guide, wormhole mass tool, wspace">
11  <meta name="author" content="eve-devoter.com">
12  <meta name="robots" content="index, follow">
13  <link rel="canonical" href="https://eve-devoter.com/">
14
15  <!-- Translated descriptions for EVE Online player languages (picked up by regional crawlers) -->
16  <meta name="description" lang="de" content="EVE Online Wurmloch-Massenrechner – verfolge Wurmloch-Masse, plane Schiffsdurchgänge und rolle Wurmlöcher sicher. Kostenloses Tool für EVE-Piloten.">
17  <meta name="description" lang="ru" content="Калькулятор массы червоточины EVE Online – отслеживай массу червоточины, планируй проходы кораблей и безопасно сворачивай червоточины. Бесплатный инструмент для пилотов EVE.">
18  <meta name="description" lang="fr" content="Calculateur de masse de trou de ver EVE Online – suivez la masse, planifiez les passages et roulez les trous de ver en sécurité. Outil gratuit pour les pilotes EVE.">
19  <meta name="description" lang="ja" content="EVE Online ワームホール質量計算機 – ワームホールの質量を追跡し、艦船の通過を計画し、安全にロールします。EVEパイロット向け無料ツール。">
20  <meta name="description" lang="zh-CN" content="EVE Online 虫洞质量计算器 – 追踪虫洞质量,规划舰船通过,安全翻滚虫洞。EVE飞行员免费工具。">
21  <meta name="description" lang="ko" content="EVE Online 웜홀 질량 계산기 – 웜홀 질량 추적, 함선 통과 계획, 안전한 웜홀 롤링. EVE 파일럿을 위한 무료 도구.">
22  <meta name="description" lang="es" content="Calculadora de masa de agujero de gusano de EVE Online – rastrea la masa, planifica los pasos de naves y rueda los agujeros de gusano de forma segura. Herramienta gratuita para pilotos EVE.">
23
24  <!-- hreflang – tells search engines this tool is relevant to all EVE Online player languages -->
25  <link rel="alternate" hreflang="en" href="https://eve-devoter.com/">
26  <link rel="alternate" hreflang="de" href="https://eve-devoter.com/">
27  <link rel="alternate" hreflang="ru" href="https://eve-devoter.com/">
28  <link rel="alternate" hreflang="fr" href="https://eve-devoter.com/">
29  <link rel="alternate" hreflang="ja" href="https://eve-devoter.com/">
30  <link rel="alternate" hreflang="zh-CN" href="https://eve-devoter.com/">
31  <link rel="alternate" hreflang="ko" href="https://eve-devoter.com/">
32  <link rel="alternate" hreflang="es" href="https://eve-devoter.com/">
33  <link rel="alternate" hreflang="x-default" href="https://eve-devoter.com/">
34
35  <!-- Open Graph (controls how the page looks in search previews and social sharing) -->
36  <meta property="og:title" content="EVE Online Wormhole Rolling Guide &amp; Mass Calculator">
37  <meta property="og:description" content="Track wormhole mass, plan ship passes, and safely roll wormholes. Free tool for EVE Online pilots.">
38  <meta property="og:type" content="website">
39  <meta property="og:url" content="https://eve-devoter.com/">
40  <meta property="og:site_name" content="EVE Wormhole Calculator – eve-devoter.com">
41  <!-- JSON-LD structured data -->
42  
42<script type="application/ld+json">
43  {
44    "@context": "https://schema.org",
45    "@type": "WebApplication",
46    "name": "EVE Online Wormhole Rolling Guide & Mass Calculator",
47    "url": "https://eve-devoter.com/",
48    "description": "Free tool for EVE Online pilots to track wormhole mass, plan and execute wormhole rolling, and follow step-by-step rolling guides for battleship-sized wormholes.",
49    "applicationCategory": "GameApplication",
50    "operatingSystem": "Any",
51    "offers": {
52      "@type": "Offer",
53      "price": "0",
54      "priceCurrency": "USD"
55    },
56    "keywords": "EVE Online, wormhole rolling, rolling wormholes, wormhole mass calculator, wspace, wormhole guide, battleship roll, HIC-free rolling",
57    "author": {
58      "@type": "Person",
59      "name": "Mr Devoter"
60    }
61  }
62  </script>
62
63
64  <link rel="preconnect" href="https://fonts.googleapis.com">
65  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
66  <link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet">
67  <link rel="stylesheet" href="style-ce328a67.css">
68</head>
69<body>
70  <div id="app">
71    <header>
72      <h1>EVE Online Wormhole Rolling Guide &amp; Mass Calculator <small style="font-size: 0.45em; font-weight: normal; opacity: 0.75;">by eve-devoter.com</small></h1>
73      <nav id="main-nav" class="main-nav">
74        <button class="nav-btn active" data-page="calculator">Calculator</button>
75        <button class="nav-btn" data-page="guide">Guide</button>
76        <button class="nav-btn" data-page="maths">Maths</button>
77        <button class="nav-btn" data-page="bonus">Bonus</button>
78      </nav>
79    </header>
80
81    <!-- Modal Overlay -->
82    <div id="modal-overlay" class="modal-overlay" style="display: none;">
83      <div id="modal-content" class="modal-content"></div>
84    </div>
85
86    <!-- Calculator Results (always visible on calculator page) -->
87    <section id="results" class="card">
88      <!-- Hangar Panel -->
89      <div id="hangar-panel" class="hangar-panel">
90        <div id="hangar-migration-notice" class="hangar-migration-notice" style="display: none;">
91          <div>
92            <strong>Virtual Hangar &amp; Fleet improvements added</strong>
93            <span>Ship icons, hull-size filters, and auto-calculated ship masses are now available. Fleet templates now support paste-and-parse from a ship list or d-scan — cold and hot totals are computed automatically. Existing custom templates still work and can be edited to pick a real hull.</span>
94          </div>
95          <button type="button" id="dismiss-hangar-migration-notice" class="hangar-notice-dismiss">Dismiss</button>
96        </div>
97        <div class="hangar-header">
98          <h3>Virtual Hangar</h3>
99          <div id="hangar-size-filter" class="hangar-size-filter" role="group" aria-label="Filter hangar by hull size">
100            <button type="button" class="hangar-filter-btn active" data-size="All">All</button>
101            <button type="button" class="hangar-filter-btn" data-size="S"><span class="hull-size-badge" data-size="S">S</span></button>
102            <button type="button" class="hangar-filter-btn" data-size="M"><span class="hull-size-badge" data-size="M">M</span></button>
103            <button type="button" class="hangar-filter-btn" data-size="L"><span class="hull-size-badge" data-size="L">L</span></button>
104            <button type="button" class="hangar-filter-btn" data-size="XL"><span class="hull-size-badge" data-size="XL">XL</span></button>
105            <button type="button" id="hangar-visibility-toggle" class="hangar-filter-btn hangar-visibility-toggle" aria-expanded="true">Hide</button>
106          </div>
107          <div class="hangar-actions">
108            <button id="add-ship-btn" class="btn-secondary" title="Add new ship template">+ Add Ship</button>
109            <button id="add-fleet-btn" class="btn-secondary" title="Add fleet template">+ Add Fleet</button>
110            <button id="restore-defaults-btn" class="btn-secondary" title="Restore default ship templates">↺ Defaults</button>
111            <button type="button" id="ship-images-toggle" class="hangar-filter-btn active" aria-pressed="true" title="Toggle ship images">Images</button>
112          </div>
113        </div>
114        <div id="hangar-list" class="hangar-list"></div>
115        
116        <!-- Add/Edit Ship/Fleet Template Form (hidden by default) -->
117        <div id="ship-template-form" class="ship-template-form" style="display: none;">
118          <h3 id="template-form-title">Add Ship Template</h3>
119          <div id="ship-picker-section" class="ship-picker-section">
120            <div class="form-row ship-picker-row">
121              <input type="text" id="ship-picker-input" list="ship-picker-list" placeholder="Select ship (optional)" autocomplete="off">
122              <datalist id="ship-picker-list"></datalist>
123            </div>
124            <div id="ship-picker-preview" class="ship-picker-preview" style="display: none;">
125              <img id="ship-picker-thumbnail" class="ship-thumbn
125ail ship-thumbnail--md" alt="" width="64" height="64" loading="lazy">
126              <span id="ship-picker-hull-badge" class="hull-size-badge"></span>
127            </div>
128          </div>
129          <div class="form-row template-name-row">
130            <input type="text" id="template-name" placeholder="Ship name (e.g., 'My Megathron')">
131          </div>
132          <div class="form-row">
133            <input type="text" id="template-desc" placeholder="Description (optional)">
134          </div>
135          <!-- Ship mode inputs -->
136          <div id="ship-mode-section" class="mode-inputs">
137            <div class="ship-fit-controls">
138              <div class="ship-fit-control-block">
139                <span class="ship-fit-label">Prop Mod</span>
140                <div id="prop-mod-buttons" class="prop-mod-buttons" role="group" aria-label="Prop mod size">
141                  <button type="button" class="prop-mod-btn active" data-prop-size="">None</button>
142                  <button type="button" class="prop-mod-btn" data-prop-size="S"><span class="hull-size-badge" data-size="S">S</span></button>
143                  <button type="button" class="prop-mod-btn" data-prop-size="M"><span class="hull-size-badge" data-size="M">M</span></button>
144                  <button type="button" class="prop-mod-btn" data-prop-size="L"><span class="hull-size-badge" data-size="L">L</span></button>
145                  <button type="button" class="prop-mod-btn" data-prop-size="XL"><span class="hull-size-badge" data-size="XL">XL</span></button>
146                </div>
147              </div>
148              <div class="ship-fit-control-block">
149                <span class="ship-fit-label">Higgs Rig</span>
150                <button type="button" id="higgs-toggle" class="fit-toggle-btn" aria-pressed="false">Higgs</button>
151              </div>
152              <div class="ship-fit-control-block">
153                <span class="ship-fit-label">Use Custom Mass</span>
154                <label class="custom-mass-toggle">
155                  <input type="checkbox" id="custom-mass-checkbox">
156                  <span class="custom-mass-note">Use custom mass numbers, for example if you have armor plates fitted</span>
157                </label>
158              </div>
159            </div>
160            <div class="mode-row">
161              <label class="mode-label">Entangle:</label>
162              <input type="number" id="mode-entangle-min" placeholder="Min" step="0.1" min="0">
163              <span class="mode-dash">–</span>
164              <input type="number" id="mode-entangle-max" placeholder="Max" step="0.1" min="0">
165            </div>
166            <div class="mode-row">
167              <label class="mode-label">Cold:</label>
168              <input type="number" id="mode-cold-min" placeholder="Min" step="0.1" min="0">
169              <span class="mode-dash">–</span>
170              <input type="number" id="mode-cold-max" placeholder="Max" step="0.1" min="0">
171            </div>
172            <div class="mode-row">
173              <label class="mode-label">Hot:</label>
174              <input type="number" id="mode-hot-min" placeholder="Min" step="0.1" min="0">
175              <span class="mode-dash">–</span>
176              <input type="number" id="mode-hot-max" placeholder="Max" step="0.1" min="0">
177            </div>
178          </div>
179          <!-- Fleet mode inputs (hidden by default) -->
180          <div id="fleet-mode-section" class="mode-inputs" style="display: none;">
181            <div class="form-row">
182              <textarea id="fleet-dscan-input" class="fleet-dscan-textarea" placeholder="Paste ship list or d-scan here…" rows="7"></textarea>
183            </div>
184            <div class="form-row">
185              <button type="button" id="fleet-parse-btn" class="btn-secondary">Parse / Calculate</button>
186            </div>
187            <div id="fleet-results-panel" class="fleet-results-panel" style="display: none;">
188              <div id="fleet-results-list" class="fleet-results-list"></div>
189              <div class="fleet-mass-summary">
190                <span class="fleet-mass-label">Cold:</span>
191                <input type="number" id="fleet-cold-input" class="fleet-mass-input" step="0.001" min="0" readonly>
192                <span class="fleet-mass-label fleet-mass-hot-label">Hot:</span>
193                <input type="number" id="fleet-hot-input" class="fleet-mass-input" step="0.001" min="0" readonly>
194              </div>
195              <label class="custom-mass-toggle fleet-custom-mass-row">
196                <input type="checkbox" id="fleet-custom-mass-checkbox">
197                <span class="custom-mass-note">Use custom mass numbers</span>
198              </label>
199            </div>
200          </div>
201          <div class="form-row">
202            <button id="save-template-btn" class="btn-primary">Save</button>
203            <button id="cancel-template-btn" class="btn-secondary">Cancel</button>
204          </div>
205          <input type="hidden" id="template-edit-id" value="">
206          <input type="hidden" id="template-type" value="ship">
207        </div>
208      </div>
209
210      <!-- Session Bar -->
211      <div id="session-bar" class="session-bar">
212        <button id="new-session-btn" class="btn-primary btn-new-session">+ New Session</button>
213        <div id="session-tiles" class="session-tiles"></div>
214      </div>
215
216      <div id="wormhole-summary" class="summary"></div>
217      
218      <!-- Calculate Pass Area (connects side panels below chart) -->
219      <div id="calc-pass-area" class="calc-pass-area">
220        <div class="calc-pass-info">
221          <span id="draft-summary" class="draft-summary">No ships drafted</span>
222          <span id="draft-mass-range" class="draft-mass-range"></span>
223          <span id="draft-cumulative-preview" class="draft-cumulative-preview" style="display: none;" aria-live="polite"></span>
224        </div>
225        <div class="calc-pass-controls">
226          <span class="calc-pass-heading">Select the new wormhole state after the drafted ships passed</span>
227          <div class="calc-pass-state-buttons">
228            <button id="clear-draft-btn" class="calc-pass-state-btn cp-clear">Clear Draft</button>
229            <span class="cp-sep"></span>
230            <button id="calc-pass-stable" class="calc-pass-state-btn cp-stable" data-state="STABLE" disabled>
231              <span class="cp-btn-label">Stable</span>
232              <span class="cp-btn-pct"></span>
233            </button>
234            <button id="calc-pass-destab" class="calc-pass-state-btn cp-destab" data-state="DESTABILIZED" disabled>
235              <span class="cp-btn-label">Destab</span>
236              <span class="cp-btn-pct"></span>
237            </button>
238            <button id="calc-pass-crit" class="calc-pass-state-btn cp-crit" data-state="CRITICAL" disabled>
239              <span class="cp-btn-label">Crit</span>
240              <span class="cp-btn-pct"></span>
241            </button>
242            <button id="calc-pass-gone" class="calc-pass-state-btn cp-gone" data-state="GONE" disabled>
243              <span class="cp-btn-label">Gone</span>
244              <span class="cp-btn-pct"></span>
245            </button>
246          </div>
247        </div>
248      </div>
249      
250      <!-- Data panel below chart -->
251      <div id="temp-data-panel" class="temp-data-panel">
252        <div id="events-list" class="events"></div>
253      </div>
254      
255    </section>
256
257    <!-- Guide Page -->
258    <section id="page-guide" class="page-section" style="display: none;">
259      <div class="page-layout-with-sidebar">
260        <nav class="page-sidebar">
261          <div class="sidebar-tree">
262            <button class="sidebar-btn active" data-guide-section="usage-guide">Usage Guide</button>
263            <div class="sidebar-children" id="usage-guide-children">
264              <button class="sidebar-child-btn active" data-guide-section="usage-overview">Overview</button>
265              <button class="sidebar-child-btn" data-guide-section="usage-hangar">Virtual Hangar</button>
266              <button class="sidebar-child-btn" data-guide-section="usage-sessions">Sessions</button>
267              <button class="sidebar-child-btn" data-guide-section="usage-sending">Calculating Passes</button>
268              <button class="sidebar-child-btn" data-guide-section="usage-results">Results &amp; Graph</button>
269            </div>
270          </div>
271          <div class="sidebar-tree">
272            <button class="sidebar-btn" data-guide-section="rolling-guides">Rolling Guides</button>
273            <div class="sidebar-children" id="rolling-guides-children">
274              <button class="sidebar-child-btn" data-guide-section="rolling-3b">Fresh Holes</button>
275              <button class="sidebar-child-btn" data-guide-section="stable-simple">Stable &mdash; Simple</button>
276              <button class="sidebar-child-btn" data-guide-section="stable-hicfree">Stable &mdash; HIC-Free</button>
277            </div>
278          </div>
279        </nav>
280        <div class="page-content">
281
282          <!-- Usage Guide: Overview -->
283          <div id="guide-usage-overview" class="guide-section">
284            <div class="card">
285              <h2>Overview</h2>
286              <p>This site is a wormhole mass tracking tool for EVE Online. It helps you plan and execute wormhole rolling with precision by tracking every ship pass and computing tight bounds on remaining mass. Or maybe you really don't want to get rolled out, track your pvp or pve ships through wormholes.</p>
287
288              <h3>What You Can Do</h3>
289              <ul class="guide-list">
290                <li><strong>Track mass passing through wormholes</strong> &mdash; record each ship pass and the observed state change to build up a picture of how much mass remains.</li>
291                <li><strong>Plan and execute rolling</strong> &mdash; use the draft preview to see whether your next pass will push the hole across a state boundary before you commit.</li>
292                <li><strong>Handle uncertainty</strong> &mdash; log estimated mass ranges for passes you didn't witness (intel, previous traffic). The engine carries that uncertainty forward correctly.</li>
293              </ul>
294
295              <h3>Key Features</h3>
296              <ul class="guide-list">
297                <li><strong>Wormhole mass variance</strong> &mdash; every wormhole has &plusmn;10 % mass variance. The engine tracks all possible true sizes simultaneously (the graph y-axis shows the range).</li>
298                <li><strong>Uncertain ship masses</strong> &mdash; ships can have a mass range (e.g. with prop mods). The engine handles ranges, not just fixed values.</li>
299                <li><strong>Virtual Hangar</strong> &mdash; save ship templates with named travel modes so you can quickly assign ships to either side of a wormhole.</li>
300                <li><strong>Sessions</strong> &mdash; save up to 25 wormhole tracking sessions that persist across browser reloads. Switch between them at any time.</li>
301                <li><strong>Draft &amp; Calculate</strong> &mdash; draft ships to preview the mass impact, then calculate the pass to record the observed state.</li>
302                <li><strong>Geometry chart</strong> &mdash; a live 2D chart showing the feasible region of (cumulative passed, total mass) with state boundary lines and draft overlays.</li>
303              </ul>
304            </div>
305          </div>
306
307          <!-- Usage Guide: Virtual Hangar -->
308          <div id="guide-usage-hangar" class="guide-section" style="display: none;">
309            <div class="card">
310              <h2>Virtual Hangar</h2>
311              <p>The Virtual Hangar is your personal fleet library. It stores ship templates so you can quickly assign ships to either side of a wormhole without re-entering mass values every time. Templates persist in your browser via IndexedDB, so they survive page reloads.</p>
312              <p>There are three template types, each suited to different tracking scenarios:</p>
313              <ul class="guide-list">
314                <li><strong>Ship</strong> — A single hull with named travel modes. Pick a real EVE ship to fill its base mass automatically, or leave the picker blank for custom mass entry.</li>
315                <li><strong>Quick Mass</strong> — A simple numeric mass entry for one-off passes when you don't need a full ship template. Great for scouts or throwaway rolling ships.</li>
316                <li><strong>Fleet</strong> — Represents a group of ships as a single mass range. Paste a ship list or d-scan, and the app looks up hull masses from its ship database to compute Cold and Hot totals automatically. A composite thumbnail shows up to four of the most common ship types.</li>
317              </ul>
318              <h3>Fleet Templates</h3>
319              <ul class="guide-list">
320                <li>Click <strong>+ Add Fleet</strong> and paste a ship list (one ship name per line) or a raw d-scan into the text box.</li>
321                <li>Click <strong>Parse / Calculate</strong> to look up hull masses and fill in Cold and Hot totals. The fleet name is suggested automatically based on the most common ship type.</li>
322                <li>Check <strong>Use Custom Mass</strong> to override the calculated totals with your own values — useful if the fleet has unusual fits.</li>
323                <li>Fleet instances in the side panel use <strong>Cold</strong>, <strong>Hot</strong>, and <strong>Unknown</strong> modes, just like ship templates.</li>
324              </ul>
325              <h3>Ship Templates</h3>
326              <ul class="guide-list">
327                <li>Use <strong>Select ship</strong> to choose a hull from the EVE ship database. The form shows its hull size badge and thumbnail, then fills Cold mass from the ship's base mass.</li>
328                <li>Choose a <strong>Prop Mod</strong> size to add a Hot mode. The app only enables prop sizes that fit the selected hull; oversized prop fits add an <strong>OP</strong> tag to auto-generated names.</li>
329                <li>Toggle <strong>Higgs</strong> when the fit has a Higgs Anchor. Higgs doubles Cold and Hot mass, including the prop-mod mass, so a 100 Gg battleship with a large prop becomes about 200 Gg Cold and 300 Gg Hot.</li>
330                <li>For HICs and the Odysseus, enter <strong>Entangle</strong> mass manually. If an entangle value is set, auto-generated names include <strong>ENT</strong>.</li>
331                <li>Check <strong>Use Custom Mass</strong> to keep the selected hull identity and icon while entering manual mass values, for example if you have armor plates fitted.</li>
332              </ul>
333              <h3>Working with the Hangar</h3>
334              <ul class="guide-list">
335                <li>Click <strong>+ New Ship</strong> to open the template form. Auto-generated ship names update with Higgs, OP, and ENT tags until you type your own name.</li>
336                <li>Use the <strong>S</strong>, <strong>M</strong>, <strong>L</strong>, and <strong>XL</strong> filter buttons to show saved real-ship templates by hull size. Custom templates appear under <strong>All</strong>.</li>
337                <li>Click <strong>Hide</strong> at the end of the filter buttons to collapse the hangar list down to its title bar; click <strong>Show</strong> to expand it again.</li>
338                <li>Use the <strong>◀ L</strong> and <strong>R ▶</strong> buttons on a template card to place a copy on the left or right side of the wormhole. You can place multiple copies of the same template.</li>
339                <li>Use the <strong>▲</strong> and <strong>▼</strong> buttons to reorder ships within a side panel.</li>
340                <li>Edit or delete templates at any time — existing copies on the sides are not affected.</li>
341                <li>Hit <strong>Restore Defaults</strong> to re-add the starter ship templates if you've deleted them.</li>
342              </ul>
343              <h3>Tips</h3>
344              <ul class="guide-list">
345                <li>If you enter only a <strong>min</strong> value and leave max blank, the max will be set to the same value — handy when you know the exact mass.</li>
346                <li>You can use <strong>decimal places</strong> for accuracy (e.g. 301.5 Gg).</li>
347                <li>Consider replacing the default ship templates with your own fits. The defaults are a starting point — your actual ship masses may differ.</li>
348              </ul>
349            </div>
350          </div>
351
352          <!-- Usage Guide: Sessions -->
353          <div id="guide-usage-sessions" class="guide-section" style="display: none;">
354            <div class="card">
355              <h2>Sessions</h2>
356              <p>Each wormhole you track is stored as a <strong>session</strong>. Sessions persist in your browser, so you can close the tab and come back later. You can have up to <strong>25 saved sessions</strong> at a time.</p>
357
358              <h3>Starting a Session</h3>
359              <ul class="guide-list">
360                <li>Click <strong>+ New Session</strong> to open the wormhole selection screen.</li>
361                <li>Use the filters to find your wormhole &mdash; type a code directly, or filter by <strong>Appears In</strong> (where the hole spawns), <strong>Destination</strong> (where it leads), and <strong>Max Ship Size</strong>.</li>
362                <li>Star your frequently used wormholes to add them to the <strong>favourites bar</strong> at the top of the selection screen for quick access.</li>
363                <li>After selecting a wormhole, choose the <strong>current state</strong>: Stable and Fresh (you saw it spawn), Stable, Destabilized, or Critical. This tells the engine how much mass may have already passed.</li>
364              </ul>
365
366              <h3>Managing Sessions</h3>
367              <ul class="guide-list">
368                <li>Session tiles appear in the bar below the hangar. Click a tile to switch to that session.</li>
369                <li><strong>Rename</strong> a session by clicking its name in the tile — it becomes editable inline. Press Enter or click away to save.</li>
370                <li><strong>Delete</strong> a session using the <strong>&times;</strong> button on its tile.</li>
371                <li>The tile shows the wormhole code, number of passes, and when the session was created.</li>
372                <li>If you have many sessions, the bar scrolls horizontally.</li>
373                <li>Click the <strong>📋</strong> button on a session tile to open <strong>session notes</strong> — a free-text scratchpad for that session. Notes are saved automatically when you close the popup.</li>
374              </ul>
375            </div>
376          </div>
377
378          <!-- Usage Guide: Calculating Ship Passes -->
379          <div id="guide-usage-sending" class="guide-section" style="display: none;">
380            <div class="card">
381              <h2>Calculating Ship Passes</h2>
382              <p>After ships have passed through the wormhole in EVE and you've noted the new state, you record that information here. Place ship templates on a side panel, then <strong>draft</strong> the ships that passed by clicking their mode buttons (e.g. "Cold", "Hot"). Each drafted ship highlights and its mass is added to the draft total in the Calculate Pass bar below the chart.</p>
383
384              <h3>Drafting Passes</h3>
385              <p>As you draft ships, a translucent blue overlay appears on the geometry chart showing where the cumulative mass would land — useful for planning future passes before they happen in-game.</p>
386              <p>When the draft envelope crosses a state boundary, the calculator clips it against each state band and shows a <strong>chance of state change</strong> percentage breakdown below the chart. For example:</p>
387              <div class="guide-pct-example" aria-label="Example state probability display">
388                <span class="sb-label">chance of state change</span>
389                <span class="sb-pct sb-stable" title="stable: 0.00000%">0.0%</span><span class="sb-sep">|</span><span class="sb-pct sb-destab sb-active" title="destab: 40.82361%">40.8%</span><span class="sb-sep">|</span><span class="sb-pct sb-crit sb-active" title="crit: 59.16057%">59.2%</span><span class="sb-sep">|</span><span class="sb-pct sb-gone sb-active" title="gone: 0.01582%">0.0%</span>
390              </div>
391              <p>Reading the percentages:</p>
392              <ul class="guide-list">
393                <li><strong>Dark grey, not hoverable</strong> — a true 0% chance. That state is unreachable from the current state (e.g. you can't go back to Stable from Destabilized).</li>
394                <li><strong>Coloured, hoverable, shows 0.0%</strong> — not actually zero. The fraction is too small to show at 1 decimal place but there is a non-zero chance. Hover to see the precise value in the tooltip (e.g. <span class="sb-pct sb-crit sb-active" title="crit: 0.00347%" style="display:inline; padding: 1px 4px;">0.0%</span> might reveal <em>crit: 0.00347%</em>).</li>
395                <li><strong>Hover over any coloured percentage</strong> to highlight the corresponding clipped sub-polygon on the chart, showing exactly which region belongs to that state.</li>
396              </ul>
397              <p>You can draft ships from both sides in the same pass — the solver treats it as one combined mass event.</p>
398
399              <h3>Recording a Pass</h3>
400              <p>A pass records two things together: <strong>the mass that went through</strong> and <strong>the wormhole state you observed afterwards</strong>. The solver needs both — the mass narrows the remaining range, and the observed state constrains which part of that range is actually possible. That's why the Calculate Pass bar requires drafted ships <em>and</em> a selected state before you can commit.</p>
401              <ul class="guide-list">
402                <li>Draft the ships that passed by clicking their mode buttons on the side panels.</li>
403                <li>Select the <strong>observed state</strong> after the pass — Stable, Destabilized, Critical, or Gone — using the radio buttons in the Calculate Pass bar.</li>
404                <li>Click <strong>Calculate Pass</strong> to commit. The solver recalculates the feasible region and the chart updates with a new event polygon.</li>
405                <li>Ships that passed move to the opposite side automatically.</li>
406                <li>Use <strong>Clear</strong> to un-draft all ships without calculating, or click individual mode buttons to toggle ships on/off.</li>
407                <li><strong>Rename</strong> a ship instance by clicking its name on the side panel — it becomes editable inline. Handy for labelling which pilot is flying which ship.</li>
408                <li>If you make a mistake, you can undo events by clicking the <strong>&times;</strong> button next to them in the events table.</li>
409              </ul>
410
411              <h3>Impossible States</h3>
412              <p>If you record a pass and the selected state is impossible — for example, reporting <strong class="guide
412-color-stable">Stable</strong> after enough mass has passed that the hole must be destabilized — the event row will show <strong>"This state is impossible for the given information"</strong> instead of the usual geometry columns. This means the solver cannot find any feasible region where the observed state is consistent with the cumulative mass passed so far.</p>
413              <p>When this happens, check that you selected the correct state after the pass and that the ship masses are accurate. You can delete the invalid event with the <strong>&times;</strong> button and re-enter it with the correct state.</p>
414              <p>The most common cause is selecting the initial state as <strong>Stable &amp; Fresh</strong> when you don't actually know how much mass has already passed. Fresh assumes zero prior usage, so the solver has a much tighter feasible range. If the hole's history is unknown, use <strong>Stable</strong> instead — this allows for the possibility that some mass has already gone through.</p>
415            </div>
416          </div>
417
418          <!-- Usage Guide: Results & Graph -->
419          <div id="guide-usage-results" class="guide-section" style="display: none;">
420            <div class="card">
421              <h2>Results &amp; Graph</h2>
422              <p>After each pass the constraint solver recomputes the feasible region and renders it on the geometry chart.</p>
423
424              <h3>Reading the Axes</h3>
425              <ul class="guide-list">
426                <li><strong>X axis (horizontal)</strong> — Cumulative mass passed through the wormhole so far, in Gg. This grows with every pass you send.</li>
427                <li><strong>Y axis (vertical)</strong> — Total original mass of the wormhole, in Gg. Because the game only tells you a range (e.g. 2,700–3,300 Gg), the chart plots every possible value in that range.</li>
428              </ul>
429
430              <h3>Coloured Areas</h3>
431              <p>Each event pass draws two overlapping polygons on the chart:</p>
432              <ul class="guide-list">
433                <li><strong>Translucent dashed outline</strong> — The <em>possible</em> region. This is the broadest area where the true cumulative + wormhole-mass point could lie, given everything observed so far.</li>
434                <li><strong>Solid filled area</strong> — The <em>certain</em> (known) region. Mass that has definitely passed through — there is no uncertainty here. This grows as you send more passes with exact masses.</li>
435              </ul>
436              <p>The colour of these areas reflects the wormhole state reported after that pass:</p>
437              <ul class="guide-list">
438                <li><strong class="guide-color-stable">Green</strong> — Stable (more than 50 % mass remaining).</li>
439                <li><strong class="guide-color-destab">Yellow / Amber</strong> — Destabilized (between 10 % and 50 % remaining).</li>
440                <li><strong class="guide-color-critical">Red</strong> — Critical (less than 10 % remaining).</li>
441                <li><strong class="guide-color-gone">Dark grey</strong> — Gone (the wormhole has collapsed).</li>
442              </ul>
443
444              <h3>State Boundary Lines</h3>
445              <p>Three diagonal lines cross the chart showing where state transitions happen:</p>
446              <ul class="guide-list">
447                <li><strong class="guide-color-destab">Yellow line</strong> — Destabilization boundary (50 % mass remaining). Crossing this line means the hole goes from Stable to Destabilized.</li>
448                <li><strong class="guide-color-critical">Red line</strong> — Critical boundary (10 % remaining). Past this the hole is in a critical state and could collapse at any time.</li>
449                <li><strong class="guide-color-gone">Grey line</strong> — Gone boundary (0 % remaining). Reaching this line means the wormhole has fully collapsed.</li>
450              </ul>
451
452              <h3>Draft Preview (Blue Overlay)</h3>
453              <p>When you draft ships for a pass, a <strong class="guide-color-draft">translucent blue</strong> overlay appears showing where the cumulative mass would shift to if you send that pass. This lets you preview whether the pass will push the wormhole across a state boundary — helping you decide if it's s
453afe to commit.</p>
454              <hr />
455              <h3>Example 1 — Stable Passes + Draft</h3>
456              <p>A 2,700–3,300 Gg wormhole. A total of 1,300 Gg has been sent through across multiple passes (all <strong class="guide-color-stable">Stable</strong>), and a 300 Gg ship is drafted.</p>
457              <div class="static-chart-container" id="guide-chart-usage" data-chart="usage"></div>
458              <p class="guide-interactive-hint"><strong>&#9654; Click the event numbers below to see the chart at each step.</strong></p>
459              <ul class="guide-list">
460                <li><button class="guide-event-btn active" data-chart="guide-chart-usage" data-event="0" data-draft="false">1</button>The first pass of 0-10 represents intel that several scouts may have passed. The <strong class="guide-color-stable">green dashed outline</strong> is very thin — almost no cumulative mass, but the full Y range is possible.</li>
461                <li><button class="guide-event-btn" data-chart="guide-chart-usage" data-event="2" data-draft="false">2</button>After 1,300 Gg of rolling battleships have passed, the <strong class="guide-color-stable">solid green area</strong> shows the certain mass. The dashed outline extends ~10 Gg further to account for the scout uncertainty. Everything is still within the <strong class="guide-color-stable">Stable</strong> zone (left of the <strong class="guide-color-destab">yellow destab line</strong>).</li>
462                <li><button class="guide-event-btn" data-chart="guide-chart-usage" data-event="2" data-draft="true">D</button>The <strong class="guide-color-draft">blue overlay</strong> previews a drafted 300 Gg pass. It would push cumulative mass to ~1,600–1,610 Gg — right on the <strong class="guide-color-destab">yellow destab line</strong>, meaning this pass may or may not destabilize the hole.</li>
463              </ul>
464              <hr />
465              <h3>Example 2 — Uncertainty + Destabilization</h3>
466              <p>Same wormhole (2,700–3,300 Gg), but this time there's early uncertainty and the hole destabilizes.</p>
467              <div class="static-chart-container" id="guide-chart-example2" data-chart="example2"></div>
468              <p class="guide-interactive-hint"><strong>&#9654; Click the event numbers below to see the chart at each step.</strong></p>
469              <ul class="guide-list">
470                <li><button class="guide-event-btn active" data-chart="guide-chart-example2" data-event="0" data-draft="false">1</button>Intel suggests a medium T3C fleet may have passed — you can't be sure, so you log 0–200 Gg. The <strong class="guide-color-stable">green dashed outline</strong> spans the full 0–200 range on the X axis with no certain region (it's all uncertain).</li>
471                <li><button class="guide-event-btn" data-chart="guide-chart-example2" data-event="1" data-draft="false">2</button>You push 1,200 Gg of rolling battleships through and the hole stays <strong class="guide-color-stable">Stable</strong>. The solid green certain area reaches 1,200 Gg. The dashed possible region extends to ~1,400 Gg because of the 0–200 uncertainty from Pass 1. Notice the possible region clips against the <strong class="guide-color-destab">destab line</strong> — the solver knows the hole can't be past that boundary while still showing as Stable within Eve (and recorded as such here).</li>
472                <li><button class="guide-event-btn" data-chart="guide-chart-example2" data-event="2" data-draft="false">3</button>Another 300 Gg goes through and the hole <strong class="guide-color-destab">Destabilizes</strong>. The polygons turn amber. The certain and possible regions are now irregular pentagons — constrained by the destab boundary (must be past 50 % used).</li>
473                <li><button class="guide-event-btn" data-chart="guide-chart-example2" data-event="2" data-draft="true">D</button>The <strong class="guide-color-draft">blue draft overlay</strong> shows a 300–400 Gg range pass being considered. Because of the accumulated uncertainty, the draft envelope is wider and angled — it follows the shape of the destabilized polygon shifted right.</li>
474              </ul>
475            </div>
476          </div>
477
478          <!-- Rolling Guides: Fresh 3000 Gg -->
479          <div id="guide-rolling-3b" class="guide-section" style="display: none;">
480            <div class="card">
481              <h2>Fresh Holes</h2>
482              <h3>Battleship-sized wormholes</h3>
483
484              <p><strong>The Method:</strong> Push exactly half the nominal mass through the hole to learn whether it is above or below nominal size, then finish the roll with the right number of ships.</p>
485
486              <p>This guide assumes Rolling Battleships with a <strong>Higgs Anchor</strong> fitted, so you can pass the wormhole <strong>Cold</strong> (prop mod off) for ~200 Gg or <strong>Hot</strong> (prop mod on) for ~300 Gg.</p>
487              <p class="guide-note">Note: Small differences &mdash; e.g. your Rolling Battleships are not exactly 300 Gg, or you send scouts out &mdash; can occasionally produce edge cases where this procedure doesn't close the hole, or rolls you out.</p>
488
489              <h3>Quick Reference</h3>
490              <table class="guide-summary-table">
491                <thead>
492                  <tr>
493                    <th>Hole</th>
494                    <th>Step 1</th>
495                    <th><span class="guide-color-destab">Destabilized?</span> (below nominal)</th>
496                    <th><span class="guide-color-stable">Still Stable?</span> (above nominal)</th>
497                  </tr>
498                </thead>
499                <tbody>
500                  <tr>
501                    <td><strong>3000 Gg</strong></td>
502                    <td>3 COLD, 3 HOT</td>
503                    <td>3 COLD, 3 HOT</td>
504                    <td>6 HOT</td>
505                  </tr>
506                  <tr>
507                    <td><strong>2000 Gg</strong></td>
508                    <td>2 COLD, 2 HOT</td>
509                    <td>2 COLD, 2 HOT</td>
510                    <td>4 HOT</td>
511                  </tr>
512                  <tr>
513                    <td><strong>1000 Gg</strong></td>
514                    <td>1 COLD, 1 HOT</td>
515                    <td>1 COLD, 1 HOT</td>
516                    <td>2 HOT</td>
517                  </tr>
518                </tbody>
519              </table>
520
521              <hr class="guide-divider">
522              <h3>Example Case &mdash; 3000 Gg</h3>
523
524              <p class="guide-flow-overview">3 <strong>Cold</strong> and 3 <strong>Hot</strong> passes &rarr; check state:<br>
525              &nbsp;&nbsp;&darr; <strong class="guide-color-destab">Destabilized</strong> (small hole) &mdash; 3 <strong>Cold</strong> and 3 <strong>Hot</strong> passes<br>
526              &nbsp;&nbsp;&darr; <strong class="guide-color-stable">Stable</strong> (large hole) &mdash; 6 <strong>Hot</strong> passes</p>
527              <div class="static-chart-container" id="guide-chart-roll-3b" data-chart="roll3b"></div>
528              <p class="guide-interactive-hint"><strong>&#9654; Click the event numbers below to see the chart at each step.</strong></p>
529              <h3>Step 1 &mdash; Scout &amp; Send Half Mass</h3>
530              <ul class="guide-list">
531                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="first_half" data-event="0" data-draft="false">1</button>Jump a CovOps through to see what's on the other side (1 Gg). The hole stays <strong class="guide-color-stable">Stable</strong>.</li>
532                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="first_half" data-event="1" data-draft="false">2</button>Send 3 Rolling Battleships (BS) out <strong>Cold</strong>. Still <strong class="guide-color-stable">Stable</strong>.</li>
533                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="first_half" data-event="1" data-draft="true">D</button>Draft: Bring 3 Rolling Battleships back <strong>Hot</strong> for 1,500 Gg total. The <strong class="guide-color-draft">blue draft line</strong> sits right on the <strong class="guide-color-destab">destab boundary</strong> &mdash; this pass will reveal whether the hole is above or below nominal.</li>
534              </ul>
535
536              <h3>Step 2 &mdash; Read the Result</h3>
537              <p>
537The hole either <strong class="guide-color-destab">Destabilizes</strong> or stays <strong class="guide-color-stable">Stable</strong>. This tells you if it's a small or large hole, and determines how many to complete the roll.</p>
538
539              <h3 class="guide-fork-label">It Destabilized &rarr; Small Hole (3 COLD and 3 HOT again)</h3>
540              <ul class="guide-list">
541                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="small" data-event="2" data-draft="false">3</button>The first BS passes <strong class="guide-color-destab">Destabilized</strong> the hole — it's a smaller hole (≤ 3,000 Gg). The excluded band at the top confirms larger sizes are ruled out.</li>
542                <li>3 <strong>Cold</strong> and 3 <strong>Hot</strong> passes to roll the hole:</li>
543                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="small" data-event="3" data-draft="false">5</button>Send 3 BS out <strong>Cold</strong>. Still <strong class="guide-color-destab">Destabilized</strong>.</li>
544                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="small" data-event="4" data-draft="false">6</button>Bring 2 BS back  <strong>Hot</strong> — the hole goes <strong class="guide-color-critical">Critical</strong>.</li>
545                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="small" data-event="5" data-draft="false">7</button>Final 1 back <strong>Hot</strong> — <strong class="guide-color-gone">Gone</strong>. Hole collapsed.</li>
546              </ul>
547
548              <h3 class="guide-fork-label">Still Stable &rarr; Large Hole (6 HOT)</h3>
549              <ul class="guide-list">
550                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="large" data-event="2" data-draft="false">3</button>The first BS passes left the hole an unchanged <strong class="guide-color-stable">Stable</strong> — it's a larger hole (≥ 3,000 Gg). The excluded band at the bottom confirms smaller sizes are ruled out.</li>
551                <li>6 <strong>Hot</strong> passes to roll the hole:</li>
552                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="large" data-event="3" data-draft="false">4</button>Send 3 BS out <strong>Hot</strong>. <strong class="guide-color-stable">Destabilized</strong>.</li>
553                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="large" data-event="4" data-draft="false">5</button>Bring 2 BS back  <strong>Hot</strong> — the hole goes <strong class="guide-color-critical">Critical</strong>.</li>
554                <li><button class="guide-event-btn" data-chart="guide-chart-roll-3b" data-source="large" data-event="5" data-draft="false">6</button>Final 1 back <strong>Hot</strong> — <strong class="guide-color-gone">Gone</strong>. Hole collapsed.</li>
555              </ul>
556              <p>You can also do it with 6 battleships in one pass, just make sure the final jump is <strong>Hot</strong> (reverse order can lose you a BS)</p>
557            </div>
558          </div>
559
560          <!-- Stable — Simple -->
561          <div id="guide-stable-simple" class="guide-section" style="display: none;">
562            <div class="card">
563              <h2>Stable Holes &mdash; Simple Method</h2>
564              <h3>Battleship-sized wormholes with unknown prior traffic</h3>
565
566              <p>This is the quickest method to remember. It requires a <strong>HIC</strong> (Heavy Interdictor) and can need up to 3 HIC passes. There is a very small risk of rolling out a ship.</p>
567
568              <h3>Overview</h3>
569              <ol class="guide-list">
570                <li><strong>Pass BS until Critical.</strong> While the hole is still <strong class="guide-color-stable">Stable</strong> or just <strong class="guide-color-destab">Destabilized</strong> you can send many at once, but as you approach <strong class="guide-color-critical">Critical</strong> send them one at a time.</li>
571                <li><strong>BS on the far side?</strong>
571 If the hole goes <strong class="guide-color-critical">Critical</strong> with a BS on the far side, bring it back <strong>Hot</strong> to attempt a roll.</li>
572                <li><strong>No BS on the far side, or the roll attempt failed?</strong> Use HIC passes (fully entangled out, then Hot back) to finish the hole.</li>
573              </ol>
574
575              <h3>Size-specific Notes</h3>
576              <table class="guide-summary-table">
577                <thead>
578                  <tr>
579                    <th>Hole</th>
580                    <th>Phase 1 (to Crit)</th>
581                    <th>Notes</th>
582                  </tr>
583                </thead>
584                <tbody>
585                  <tr>
586                    <td><strong>3300 Gg</strong></td>
587                    <td>BS <strong>Hot</strong> until crit</td>
588                    <td>Very tiny chance (~0.01%) of HOT pass that is close to crit going straight from destab to gone</td>
589                  </tr>
590                  <tr>
591                    <td><strong>3000 Gg</strong></td>
592                    <td>BS <strong>Hot</strong>, switch to <strong>Cold</strong> near crit</td>
593                    <td>~2.5% chance of destab &rarr; gone on a HOT pass; use Cold when close to critical</td>
594                  </tr>
595                  <tr>
596                    <td><strong>2000 Gg</strong></td>
597                    <td>BS <strong>Cold</strong> (180 Gg Praxis) near crit</td>
598                    <td>Smaller hole needs more care approaching critical state. The smaller Praxis BS is safer to use to avoid roll out</td>
599                  </tr>
600                </tbody>
601              </table>
602              <p class="guide-note">Each fully-entangled HIC pass also carries a small risk (&lt; 1%) of being rolled out.</p>
603
604              <hr class="guide-divider">
605              <p>For a safer alternative that removes these risk windows and doesn&rsquo;t need a HIC at all, see <strong>Stable &mdash; HIC-Free</strong> in the sidebar.</p>
606            </div>
607          </div>
608
609          <!-- Stable — HIC-Free -->
610          <div id="guide-stable-hicfree" class="guide-section" style="display: none;">
611            <div class="card">
612              <h2>Stable Holes &mdash; HIC-Free Method</h2>
613              <h3>Battleship-sized wormholes with unknown prior traffic</h3>
614
615              <div class="guide-callout">
616                <strong>Advantages</strong>
617                <ul class="guide-list">
618                  <li>No HIC required &mdash; cruisers or haulers work. (less SP needed, and cheaper)</li>
619                  <li>Eliminates the tiny rollout risks from the simple method.</li>
620                  <li>All steps use multiple pilots / ships &mdash; with no need to wait for re-approaches it is faster.</li>
621                  <li>The exact same method works for doorstopping as you will always have a single BS on the far side with a final roll ready</li>
622                </ul>
623              </div>
624
625              <p>You are encouraged to enter your exact ship masses in the calculator and track passes while learning the method &mdash; this helps you understand why it is safe.</p>
626
627              <h3>Ships</h3>
628              <table class="guide-summary-table">
629                <thead><tr><th>Role</th><th>Fit</th><th>Cold</th><th>Hot</th></tr></thead>
630                <tbody>
631                  <tr><td><strong>BS</strong></td><td>Higgs Battleship</td><td>198-199 Gg</td><td>298-299 Gg</td></tr>
632                  <tr><td><strong>Cruiser</strong></td><td>Higgs + Overprop fitted Cruiser / Hauler</td><td>18-33 Gg</td><td>118-133 Gg</td></tr>
633                </tbody>
634              </table>
635              <p class="guide-note">Any cruiser or battle cruiser will work here, also a Sigil.</p>
636              <p class="guide-note">A HIC is not required but can fill the cruiser role (Hot/Cold, no entangle needed).</p>
637
638              <div class="guide-overview-panel">
639                <h3>Three-Phase Overview</h3>
640                <ol class="guide-list">
641                  <li><strong>Phase 1 &mdash; Destabilize:</strong> Send BS <strong>Hot</strong>
641, checking state after each jump until <strong class="guide-color-destab">Destabilized</strong>. Note how many BS are on the far side when that happens. (Don&rsquo;t exceed the &ldquo;max&rdquo; in the table below for ships on the far side at any one time.)</li>
642                  <li><strong>Phase 2 &mdash; Fixed Mass:</strong> Pass a precise amount through the hole to approach or slightly cross the <strong class="guide-color-critical">Critical</strong> threshold. The recipe depends on whether you had an <em>odd</em> or <em>even</em> number of BS on the far side, with the goal of ending with exactly <strong>1 BS on the far side</strong>.</li>
643                  <li><strong>Phase 3 &mdash; Cruiser Probe &amp; Roll:</strong> Use cruiser passes and the timing of the hole going <strong class="guide-color-critical">Critical</strong> to safely determine when to bring back the final BS for the <strong class="guide-color-gone">roll</strong>.</li>
644                </ol>
645                <p class="guide-note">There is room for 1 frigate / destroyer scout on the far side if they go out before Phase 1 and return during Phase 3. Possibly a lot more space too &mdash; use the tracker for each hole to confirm.</p>
646                <div class="guide-popout-group">
647                  <button class="guide-popout-btn" data-popout-img="images/rolling-stables-quickref.png" title="Open full-size quick reference">&#x1F5BC; Pop Out Quick Reference</button>
648                  <a class="guide-download-btn" href="images/rolling-stables-quickref.png" download="rolling-stables-quickref.png" title="Download full-size PNG">&#x2B07; Download PNG</a>
649                </div>
650              </div>
651
652              <button class="guide-expand-btn" data-expand-target="phase1-detail">
653                <span class="expand-icon">&#x25B6;</span> Phase 1 Detail &mdash; Why Hot BS Passes?
654              </button>
655              <div class="guide-expandable" id="phase1-detail">
656                <p>The reason to use hot BS passes is to destabilize the hole as quickly as possible.</p>
657                <p>In this phase it is OK to queue up a bunch of BS on the hole and jump out one by one, checking the state and stopping when destabilization occurs. Stack up the BS on the far side while doing this &mdash; don&rsquo;t bring them back yet. If you run out of battleships, or you reach the max of 4/5/6 on the far side, then start sending them back one at a time. This reduces any unnecessary polarization and is faster because you are never waiting for a re-approach.</p>
658                <p>Before this phase we know very little about the mass on the hole. It could be a larger variant with no mass passed, or a smaller variant just about to go destab. Either way, once we hit destab we have a much clearer idea of where we are up to.</p>
659              </div>
660
661              <button class="guide-expand-btn" data-expand-target="phase2-detail">
662                <span class="expand-icon">&#x25B6;</span> Phase 2 Detail &mdash; Odd vs Even, Worked Examples
663              </button>
664              <div class="guide-expandable" id="phase2-detail">
665                <p>At the point of just hitting destabilization you could have between zero and six BS on the far side. Note whether it is an even number (zero is even) or odd, so that the next instruction will be tailored to leave you with a single BS remaining on the far side at the end.</p>
666                <p>It is still up to you to work out which jumps to do. For example, if you have 1 BS on the far side of a 3000 Gg hole and the instruction says 1 hot, 3 cold &mdash; you would do 2 out, 2 back. Or a 3300 Gg hole with 4 on the far side &mdash; you would do 4 back cold, 1 out cold.</p>
667                <p>All of these Phase 2 jumps can happen at the same time &mdash; no need to check state, as we are just eating up the destab region. We might just about crit the hole with the last jump; that can be checked at the end.</p>
668                <p>This single BS remaining gives us 300 Gg of variance on the final roll to play with. The hole can have 1 Gg of mass left or 299 Gg and we can still roll.</p>
669              </div>
670
671              <button class="guide-expand-btn" data-expand-target="phase3-detail">
672                <span class="expand-icon">&#x25B6;</span> Phase 3 Detail &mdash; Cruiser Crit &amp; Safe Roll
673              </button>
674              <div class="guide-expandable" id="phase3-detail">
675                <p>With a BS sat ready for the final roll on the far side, we will use cruisers to crit the hole safely, then use safe return passes &mdash; checking available mass &mdash; to roll the hole.</p>
676                <p>The roll guide flowchart can be followed without checking mass closely and will work for any cruiser fit between 18 and 33 Gg. This is basically all cruisers from the Cynabal (smallest) to the Devoter (largest). You can use a combat-fit Hurricane if you like (~27 Gg) as long as it is Higgs and 100MN fitted. A Sigil is also a cheap, easily skilled option (~22 Gg) but is slow on re-approach.</p>
677                <p></p>
678                <p>The 3300 Gg hole could need 3 cruisers. If after 2 have gone out hot and 1 back hot the hole is still not crit, there is a chance the final cruiser plus BS returning hot will still not close the hole. In that case, do a 3rd cold&ndash;cold cruiser pass before the final cruiser/BS combo come back hot. This can be avoided by using a ~30 Gg cruiser, which guarantees the need for only 2 cruisers here. A Maller with 800 + 400mm T2 plates is recommended.</p>
679              </div>
680
681              <h3>Quick Reference &mdash; All Sizes</h3>
682              <table class="guide-summary-table guide-summary-table-wide">
683                <thead>
684                  <tr>
685                    <th>Hole</th>
686                    <th>Phase 1</th>
687                    <th>Phase 2 (Even)</th>
688                    <th>Phase 2 (Odd)</th>
689                    <th>Phase 3</th>
690                  </tr>
691                </thead>
692                <tbody>
693                  <tr>
694                    <td><strong>3300 Gg</strong></td>
695                    <td>BS HOT &times;1&ndash;7<br><small>max of 6 on far side</small></td>
696                    <td>5 COLD<br><small>(1000 Gg)</small></td>
697                    <td>2 HOT, 2 COLD<br><small>(1000 Gg)</small></td>
698                    <td>see decision tree or pop out quick reference</td>
699                  </tr>
700                  <tr>
701                    <td><strong>3000 Gg</strong></td>
702                    <td>BS HOT &times;1&ndash;6<br><small>max of 5 on far side</small></td>
703                    <td>3 HOT<br><small>(900 Gg)</small></td>
704                    <td>1 HOT, 3 COLD<br><small>(900 Gg)</small></td>
705                    <td>see decision tree or pop out quick reference</td>
706                  </tr>
707                  <tr>
708                    <td><strong>2000 Gg</strong></td>
709                    <td>BS HOT &times;1&ndash;4<br><small>max of 4 on far side</small></td>
710                    <td>3 COLD<br><small>(600 Gg)</small></td>
711                    <td>2 HOT<br><small>(600 Gg)</small></td>
712                    <td>see decision tree or pop out quick reference</td>
713                  </tr>
714                </tbody>
715              </table>
716
717              <hr class="guide-divider">
718
719              <h3>Worked Example &mdash; 2000 Gg (Odd Path)</h3>
720              <div class="static-chart-container" id="guide-chart-stable-2k" data-chart="stable2k"></div>
721              <p class="guide-interactive-hint"><strong>&#9654; Click the event numbers to step through the chart.</strong></p>
722
723              <h4>Phase 1 &mdash; Destabilize</h4>
724              <p>Send BS out <strong>Hot</strong> one at a time. In this example three passes trigger <strong class="guide-color-destab">Destabilized</strong>, leaving 3 BS on the far side (odd).</p>
725              <ul class="guide-list">
726                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="setup" data-event="0" data-draft="false">0</button>Initial state: <strong class="guide-color-stable">Stable</strong>. Unknown prior traffic means 0&ndash;1100 Gg may already have passed.</li>
727                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="setup" data-event="1" data-draft="false">1</button>BS-1 out <strong>Hot</strong> (299 Gg) &mdash;
727 still <strong class="guide-color-stable">Stable</strong>.</li>
728                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="setup" data-event="2" data-draft="false">2</button>BS-2 out <strong>Hot</strong> (299 Gg) &mdash; still <strong class="guide-color-stable">Stable</strong>.</li>
729                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="setup" data-event="2" data-draft="true">D</button>Draft: if BS-3 goes <strong>Hot</strong>, the <strong class="guide-color-draft">blue draft</strong> straddles the <strong class="guide-color-destab">destab line</strong> — it <em>might</em> destabilize.</li>
730                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="3" data-draft="false">3</button>BS-3 out <strong>Hot</strong> (299 Gg) &mdash; <strong class="guide-color-destab">Destabilized!</strong> 3 BS on the far side (odd).</li>
731              </ul>
732
733              <h4>Phase 2 &mdash; Fixed Mass (Odd: 2 HOT = 600 Gg)</h4>
734              <p>Goal: pass 600 Gg and end with exactly 1 BS on the far side. Odd path with 3 currently on the far side: 2 BS come back <strong>Hot</strong>.</p>
735              <ul class="guide-list">
736                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="4" data-draft="false">4</button>BS-1 back <strong>Hot</strong> (299 Gg) &mdash; still <strong class="guide-color-destab">Destabilized</strong>.</li>
737                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="5" data-draft="false">5</button>BS-2 back <strong>Hot</strong> (299 Gg) &mdash; still <strong class="guide-color-destab">Destabilized</strong>. 1 BS remains on the far side. Crit was possible here, but for this example we will use destabilized.</li>
738              </ul>
739
740              <h4>Phase 3 &mdash; Cruiser Probe &amp; Roll (2000 Gg)</h4>
741              <p>The remaining hole is close to <strong class="guide-color-critical">Critical</strong>. Use a cruiser to push to critical.</p>
742              <ul class="guide-list">
743                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="5" data-draft="true">D</button>Draft: the cruiser <strong>Hot</strong> pass (132 Gg) straddles the <strong class="guide-color-critical">critical line</strong>, but would still leave room to return cold without rolling out the BS.</li>
744                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="6" data-draft="false">6</button>Cruiser out <strong>Hot</strong> (132 Gg) &mdash; <strong class="guide-color-critical">Critical!</strong> Destab was possible here, but for this example we will use crit</li>
745                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="7" data-draft="false">7</button>Cruiser back <strong>Cold</strong> (32 Gg) &mdash; still <strong class="guide-color-critical">Critical</strong>. Safe to bring the BS home.</li>
746                <li><button class="guide-event-btn" data-chart="guide-chart-stable-2k" data-source="roll" data-event="8" data-draft="false">8</button>BS-3 back <strong>Hot</strong> (299 Gg) &mdash; <strong class="guide-color-gone">Gone!</strong> Hole collapsed.</li>
747              </ul>
748
749              <hr class="guide-divider">
750
751              <h3>Phase 3 Decision Trees</h3>
752
753              <h4>3300 Gg</h4>
754              <p>2 cruisers needed. After Phase 2 you have 1 BS on the far side.</p>
755              <ul class="guide-list guide-decision-tree">
756                <li><strong class="guide-color-critical">Crit?</strong>
757                  <ul>
758                    <li><strong>Yes:</strong> Cruiser #1 <strong>Cold</strong>, Cruiser #1 <strong>Cold</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
759                    <li><strong>No:</strong> Cruiser #1 <strong>Hot</strong>
760                      <ul>
761                        <li>
761<strong class="guide-color-critical">Crit?</strong>
762                          <ul>
763                            <li><strong>Yes:</strong> Cruiser #1 <strong>Hot</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
764                            <li><strong>No:</strong> Cruiser #2 <strong>Hot</strong>
765                              <ul>
766                                <li><strong class="guide-color-critical">Crit?</strong>
767                                  <ul>
768                                    <li><strong>Yes:</strong> Cruiser #1 <strong>Hot</strong>, Cruiser #2 <strong>Cold</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
769                                    <li><strong>No:</strong> Cruiser #1 <strong>Hot</strong>, Cruiser #2 <strong>Hot</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong> <span class="guide-note-inline">(~2% no-roll; if the first cruiser hot back still doesn't crit do CR-3 Cold, Cold first for 100% roll)</span></li>
770                                  </ul>
771                                </li>
772                              </ul>
773                            </li>
774                          </ul>
775                        </li>
776                      </ul>
777                    </li>
778                  </ul>
779                </li>
780              </ul>
781
782              <h4>3000 Gg</h4>
783              <p>2 cruisers needed. After Phase 2 you have 1 BS on the far side.</p>
784              <ul class="guide-list guide-decision-tree">
785                <li><strong class="guide-color-critical">Crit?</strong>
786                  <ul>
787                    <li><strong>Yes:</strong> Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
788                    <li><strong>No:</strong> Cruiser #1 <strong>Hot</strong>
789                      <ul>
790                        <li><strong class="guide-color-critical">Crit?</strong>
791                          <ul>
792                            <li><strong>Yes:</strong> Cruiser #1 <strong>Hot</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
793                            <li><strong>No:</strong> Cruiser #2 <strong>Hot</strong>
794                              <ul>
795                                <li><strong class="guide-color-critical">Crit?</strong>
796                                  <ul>
797                                    <li><strong>Yes:</strong> Cruiser #1 <strong>Cold</strong>, Cruiser #2 <strong>Hot</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
798                                    <li><strong>No:</strong> Cruiser #1 <strong>Hot</strong>, Cruiser #2 <strong>Hot</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong> <span class="guide-note-inline">(~2% no-roll; if the first cruiser hot back still doesn't crit do CR-3 Cold, Cold first for 100% roll)</span></li>
799                                  </ul>
800                                </li>
801                              </ul>
802                            </li>
803                          </ul>
804                        </li>
805                      </ul>
806                    </li>
807                  </ul>
808                </li>
809              </ul>
810
811              <h4>2000 Gg</h4>
812              <p>1 cruiser needed. After Phase 2 you have 1 BS on the far side.</p>
813              <ul class="guide-list guide-decision-tree">
814                <li><strong class="guide-color-critical">Crit?</strong>
815                  <ul>
816                    <li><strong>Yes:</strong> Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
817                    <li><strong>No:</strong> Cruiser #1 <strong>Hot</strong>
818                      <ul>
819                        <li><strong class="guide-color-critical">Crit?</strong>
820                          <ul>
821                            <li><strong>Yes:</strong> Cruiser #1 <strong>Cold</strong>, Final BS <strong>Hot</strong> &rarr;
821 <strong class="guide-color-gone">Roll</strong></li>
822                            <li><strong>No:</strong> Cruiser #1 <strong>Hot</strong>, Final BS <strong>Hot</strong> &rarr; <strong class="guide-color-gone">Roll</strong></li>
823                          </ul>
824                        </li>
825                      </ul>
826                    </li>
827                  </ul>
828                </li>
829              </ul>
830
831              <hr class="guide-divider">
832              <p class="guide-note">Try entering your exact ship masses and tracking a real roll in the calculator — seeing the geometry update live is the best way to build intuition for why each step is safe.</p>
833            </div>
834          </div>
835
836        </div>
837      </div>
838    </section>
839
840    <!-- Maths Page -->
841    <section id="page-maths" class="page-section" style="display: none;">
842      <div class="page-layout-with-sidebar">
843        <nav class="page-sidebar">
844          <button class="sidebar-btn active" data-maths-section="maths-concepts">Maths Concepts</button>
845          <button class="sidebar-btn" data-maths-section="wormhole-maths">Apply Maths To Wormholes</button>
846        </nav>
847        <div class="page-content">
848
849          <!-- Maths Concepts (existing content) -->
850          <div id="maths-maths-concepts" class="maths-section">
851            <div class="maths-page">
852
853        <!-- 1. Introduction -->
854        <div class="card maths-card">
855          <h2>The Maths Behind the Engine</h2>
856          <p class="maths-intro">A non‑EVE‑specific explanation of the geometry and constraint logic powering this site.</p>
857        </div>
858
859        <div class="card maths-card">
860          <h3>1 &mdash; What Problem Are We Solving?</h3>
861          <p>At its heart, the engine is solving a very general kind of maths problem:</p>
862          <blockquote class="maths-callout">
863            We have an unknown number. We observe things that restrict what that number could be. Over time, we combine all those restrictions to keep track of every value that is still possible.
864          </blockquote>
865          <p>This is a classic problem in:</p>
866          <ul class="maths-list">
867            <li>Constraint propagation</li>
868            <li>Interval arithmetic</li>
869            <li>Computational geometry</li>
870          </ul>
871          <p>The engine doesn’t try to <em>guess</em> the true value. It keeps a <strong>set of all possible values</strong> that remain consistent with everything observed so far. That set is represented as a polygon.</p>
872        </div>
873
874        <!-- 2. Representing Uncertainty -->
875        <div class="card maths-card">
876          <h3>2 &mdash; Representing Uncertainty as a Shape</h3>
877          <p>Instead of tracking a single number, the engine tracks a <strong>region</strong> of possible solutions.</p>
878          <p class="maths-sub-heading">Why a region?</p>
879          <ul class="maths-list">
880            <li>Observations are imprecise (ranges, not exact values)</li>
881            <li>Each observation eliminates some possibilities but not others</li>
882            <li>The remaining possibilities form a 2D shape</li>
883          </ul>
884          <p class="maths-sub-heading">Why 2D?</p>
885          <p>The engine tracks two quantities:</p>
886          <ul class="maths-list">
887            <li><strong>X</strong> &mdash; cumulative effect of all actions so far</li>
888            <li><strong>Y</strong> &mdash; the original unknown value we’re trying to constrain</li>
889          </ul>
890          <p>Every point <span class="maths-inline">(x, y)</span> in the polygon means:</p>
891          <blockquote class="maths-callout">
892            “If the true value were <strong>y</strong>, and the cumulative effect were <strong>x</strong>, this would still be consistent with all observations.”
893          </blockquote>
894          <p>This is a standard technique in constraint‑based modelling.</p>
895        </div>
896
897        <!-- 3. Linear Constraints -->
898        <div class="card maths-card">
899          <h3>3 &mdash; Linear Constraints &rarr; Straight Lines</h3>
900          <p>Every observation becomes a <strong>linear constraint</strong>. Examples:</p>
901          <ul class="maths-list">
902            <li>“The true value must be at least this big” &rarr; a vertical half‑plane</li>
903            <li>“The cumulative effect must be between A and B” &rarr; a vertical strip</li>
904            <li>“If the true value were Y, then X must be less than some linear function of Y” &rarr; a slanted half‑plane</li>
905          </ul>
906          <p>Linear constraints always produce straight lines and straight‑edged shapes. This is why the engine’s shapes are <strong>always polygons</strong>.</p>
907          <p>This is the same maths used in:</p>
908          <div class="maths-tags">
909            <span class="maths-tag">Linear programming</span>
910            <span class="maths-tag">Feasibility regions</span>
911            <span class="maths-tag">Robotics motion planning</span>
912            <span class="maths-tag">Economics optimisation</span>
913            <span class="maths-tag">Error bounds in numerical analysis</span>
914          </div>
915        </div>
916
917        <!-- 4. Updating the Shape -->
918        <div class="card maths-card">
919          <h3>4 &mdash; Updating the Shape: Shifting &amp; Clipping</h3>
920          <p>Every new observation transforms the polygon in two steps:</p>
921
922          <div class="maths-step">
923            <span class="maths-step-label">Step 1 &mdash; Shift (Affine Transform)</span>
924            <p>If an action adds a range <span class="maths-inline">[a, b]</span> to the cumulative value, the polygon is shifted horizontally by that amount.</p>
925            <ul class="maths-list">
926              <li>A fixed shift &rarr; move the polygon by a constant</li>
927              <li>A range shift &rarr; create a band between two shifted polygons</li>
928            </ul>
929            <p>This is an <strong>affine transformation</strong>, one of the simplest geometric operations.</p>
930          </div>
931
932          <div class="maths-step">
933            <span class="maths-step-label">Step 2 &mdash; Clip (Half‑Plane Intersection)</span>
934            <p>An observation like “the true value must now satisfy condition X” becomes a half‑plane. The polygon is <strong>clipped</strong> against that half‑plane.</p>
935            <p>Clipping a polygon against a straight line is a classic computational geometry operation, used in:</p>
936            <div class="maths-tags">
937              <span class="maths-tag">Computer graphics</span>
938              <span class="maths-tag">GIS</span>
939              <span class="maths-tag">CAD</span>
940              <span class="maths-tag">Physics engines</span>
941            </div>
942            <p>The result is always another polygon.</p>
943          </div>
944        </div>
945
946        <!-- 5. Why Polygons -->
947        <div class="card maths-card">
948          <h3>5 &mdash; Why Polygons?</h3>
949          <p>Polygons are ideal because:</p>
950          <ul class="maths-list maths-list-check">
951            <li>They are easy to shift</li>
952            <li>They are easy to clip</li>
953            <li>They remain polygons after every operation</li>
954            <li>They are cheap to compute</li>
955            <li>They are easy to draw</li>
956          </ul>
957          <p>This is why the engine never uses curves or splines &mdash; straight edges are <strong>mathematically exact</strong> for this problem.</p>
958        </div>
959
960        <!-- 6. Draft Preview -->
961        <div class="card maths-card">
962          <h3>6 &mdash; Draft Preview: Minkowski Sums</h3>
963          <p>When the user drafts a hypothetical action, the engine does <strong>not</strong> apply constraints. Instead, it computes the <strong>Minkowski sum</strong> of:</p>
964          <ul class="maths-list">
965            <li>The current polygon</li>
966            <li>A horizontal line segment representing the draft range</li>
967          </ul>
968          <p>This produces a band of possible future polygons.</p>
969          <p>Minkowski sums are used in:</p>
970          <div class="maths-tags">
971            <span class="maths-tag">Robotics (collision envelopes)</span>
972            <span class="maths-tag">Computer graphics (shape inflation)</span>
973            <span class="maths-tag">Path planning</span>
974            <span class="maths-tag">Manufacturing tolerances</span>
975          </div>
976          <p>It’s a very standard geometric tool.</p>
977        </div>
978
979        <!-- 7. Why This Is Fast -->
980        <div class="card maths-card">
981          <h3>7 &mdash; Why This Is Fast</h3>
982          <p>The engine only uses:</p>
983          <div class="maths-complexity">
984            <div class="maths-complexity-row">
985              <span class="maths-complexity-op">Affine transforms</span>
986              <span class="maths-complexity-big-o">O(n)</span>
987            </div>
988            <div class="maths-complexity-row">
989              <span class="maths-complexity-op">Polygon clipping</span>
990              <span class="maths-complexity-big-o">O(n)</span>
991            </div>
992            <div class="maths-complexity-row">
993              <span class="maths-complexity-op">Convex hulls</span>
994              <span class="maths-complexity-big-o">O(n log n)</span>
995            </div>
996          </div>
997          <p>And polygons are small (usually &lt; 20 vertices). This makes the entire system <strong>extremely fast</strong> and <strong>deterministic</strong>.</p>
998        </div>
999
1000        <!-- 8. Real-World Analogies -->
1001        <div class="card maths-card">
1002          <h3>8 &mdash; Real‑World Analogies</h3>
1003          <p>This same maths is used in:</p>
1004          <div class="maths-analogies">
1005            <div class="maths-analogy">
1006              <span class="maths-analogy-icon">📡</span>
1007              <div>
1008                <strong>GPS error bounds</strong>
1009                <p>Representing all possible true positions given noisy signals.</p>
1010              </div>
1011            </div>
1012            <div class="maths-analogy">
1013              <span class="maths-analogy-icon">🤖</span>
1014              <div>
1015                <strong>Robotics motion planning</strong>
1016                <p>Representing all possible robot positions that avoid collisions.</p>
1017              </div>
1018            </div>
1019            <div class="maths-analogy">
1020              <span class="maths-analogy-icon">🔧</span>
1021              <div>
1022                <strong>Manufacturing tolerances</strong>
1023                <p>Representing all possible dimensions of a part given machining error ranges.</p>
1024              </div>
1025            </div>
1026            <div class="maths-analogy">
1027              <span class="maths-analogy-icon">📈</span>
1028              <div>
1029                <strong>Economics</strong>
1030                <p>Feasible regions in linear programming.</p>
1031              </div>
1032            </div>
1033            <div class="maths-analogy">
1034              <span class="maths-analogy-icon">🖼️</span>
1035              <div>
1036                <strong>Computer graphics</strong>
1037                <p>Clipping polygons to viewports.</p>
1038              </div>
1039            </div>
1040          </div>
1041          <p class="maths-closing">This engine is essentially a <strong>constraint‑propagation system</strong> with a <strong>geometric representation</strong>.</p>
1042        </div>
1043
1044      </div>
1045    </div>
1046
1047          <!-- Apply Maths To Wormholes -->
1048          <div id="maths-wormhole-maths" class="maths-section" style="display: none;">
1049            <div class="maths-page">
1050
1051        <!-- WM 1. EVE Wormholes -->
1052        <div class="card maths-card">
1053          <h2>Apply Maths To Wormholes</h2>
1054          <p class="maths-intro">How this site applies constraint geometry to EVE Online wormhole mass tracking.</p>
1055        </div>
1056
1057        <div class="card maths-card">
1058          <h3>1 &mdash; EVE Wormhole Mass Rules</h3>
1059          <p>Every wormhole in EVE has a <strong>total mass capacity</strong> &mdash; the maximum amount of mass that can pass through before it collapses. There are a variety of wormhole mass sizes, usually abbreviated to their central point (e.g. 3,000 Gg), but the actual value for any given wormhole varies by <strong>&plusmn;10 %</strong>. It is believed there is an even probabilty distribution across this variance </p>
1060          <p>A 3,000 Gg wormhole could actually have anywhere from 2,700 to 3,300 Gg of total mass. You never find out the true value &mdash; you can only observe the <strong>visual state</strong> of the wormhole, which changes at specific thresholds:</p>
1061          <div class="maths-step">
1062            <span class="maths-step-label">Wormhole States</span>
1063            <ul class="maths-list">
1064              <li><strong class="guide-color-stable">Stable</strong> &mdash; More than 50 % of total mass remains</li>
1065              <li><strong class="guide-color-destab">Destabilized</strong> &mdash; Between 10 % and 50 % remains</li>
1066              <li><strong class="guide-color-critical">Critical</strong> &mdash; Less than 10 % remains</li>
1067              <li>
1067<strong class="guide-color-gone">Gone</strong> &mdash; The wormhole has collapsed (0 % remains)</li>
1068            </ul>
1069          </div>
1070          <p>There is one additional rule: a ship is not blocked from jumping by the hole having not enough remaining mass. The wormhole collapses after that ship completes the jump. This means you cannot lose a ship to mass collapse mid-jump &mdash; but the hole will be gone for anyone behind you.</p>
1071          <p>These percentage thresholds, the &plusmn;10 % variance, and the single-ship rule are the raw inputs to the constraint engine.</p>
1072        </div>
1073
1074        <!-- WM 2. Two Unknowns, One Chart -->
1075        <div class="card maths-card">
1076          <h3>2 &mdash; Two Unknowns, One Chart</h3>
1077          <p>From a maths perspective, tracking a wormhole involves two unknowns:</p>
1078          <ul class="maths-list">
1079            <li><strong>M</strong> &mdash; the wormhole's true total mass (unknown, but within &plusmn;10 % of nominal)</li>
1080            <li><strong>X</strong> &mdash; the cumulative mass that has actually passed through so far</li>
1081          </ul>
1082          <p>The chart plots these with <strong>X on the horizontal axis</strong> and <strong>M on the vertical axis</strong>. Every point (x, m) on the chart represents one possible reality: &ldquo;the true total mass is m, and x mass has passed through so far.&rdquo;</p>
1083          <p>Before any observations, every combination of M and X is possible (within the wormhole&rsquo;s mass range). As ships pass and states are observed, constraints eliminate regions of the chart, and the <strong>feasible polygon</strong> shrinks.</p>
1084          <p>This is the technique described in <em>Maths Concepts &sect;2</em> &mdash; representing uncertainty as a 2D shape.</p>
1085        </div>
1086
1087        <!-- WM 3. How Ship Passes Become Constraints -->
1088        <div class="card maths-card">
1089          <h3>3 &mdash; How Ship Passes Become Constraints</h3>
1090          <p>Each time you send ships through the wormhole and observe the state afterward, the engine generates <strong>linear constraints</strong>. Here is how:</p>
1091
1092          <div class="maths-step">
1093            <span class="maths-step-label">Mass Range Constraint</span>
1094            <p>Each ship pass has a known mass range [a, b] (from ship fitting). The cumulative mass X after this pass must increase by at least a and at most b. This produces <strong>vertical bounds</strong> (a strip) on the chart &mdash; exactly the vertical half-planes from <em>Maths Concepts &sect;3</em>.</p>
1095            <p>The reason for the mass range on a ship, and not an exact value is that you might see a neutral/enemy ship or fleet pass and you cannot tell its fittings or module state, but you can work out the min and max possible for those. Alternatively you may suspect a ship passed, so want to enter that with a 0-x range so the engine can account for it.</p>
1096          </div>
1097
1098          <div class="maths-step">
1099            <span class="maths-step-label">State Band Constraint</span>
1100            <p>The observed state after the pass tells us what fraction of M remains. For example, &ldquo;Stable&rdquo; means more than 50 % remains, so the cumulative passed mass X must be less than 0.5 &times; M. This is a <strong>diagonal half-plane</strong>: <span class="maths-inline">x &lt; 0.5 &middot; m</span>.</p>
1101            <p>Each state creates two diagonal boundaries (an upper and lower bound), forming a <strong>band</strong> between two lines through the origin. Clipping the polygon against these lines is identical to the half-plane intersection described in <em>Maths Concepts &sect;4</em>.</p>
1102          </div>
1103
1104          <div class="maths-step">
1105            <span class="maths-step-label">Prior-Event Constraints</span>
1106            <p>Every previous state observation still applies. If Pass 2 was Stable, then the cumulative mass <em>at that point</em> was below 50 % of M. The engine translates these into <strong>offset diagonal lines</strong> &mdash; the same slope as the state boundaries, but shifted right by the mass of later passes. The polygon is clipped against each of these, tightening bounds further with every event.</p>
1107          </div>
1108        </div>
1109
1110        <!-- WM 4. The Solver Pipeline -->
1111        <div class="card maths-card">
1112          <h3>4 &mdash; The Solver Pipeline</h3>
1113          <p>When you send a pass, the engine runs through a pipeline that brings together several operations from <em>Maths Concepts</em>:</p>
1114
1115          <div class="maths-step">
1116            <span class="maths-step-label">Step 1 &mdash; Build the Rectangle</span>
1117            <p>Sum the input mass ranges of all passes so far to get the broadest possible cumulative range. Combined with the wormhole's M range, this forms a <strong>bounding rectangle</strong> in (X, M) space &mdash; the starting shape before any state constraints are applied.</p>
1118          </div>
1119
1120          <div class="maths-step">
1121            <span class="maths-step-label">Step 2 &mdash; Clip Against State Bands</span>
1122            <p>The rectangle is clipped against the current event's state band (two diagonal lines through the origin). This is the <em>Sutherland-Hodgman polygon clipping</em> from <em>Maths Concepts &sect;4</em>. The result is typically a pentagon or hexagon.</p>
1123          </div>
1124
1125          <div class="maths-step">
1126            <span class="maths-step-label">Step 3 &mdash; Clip Against Prior Events</span>
1127            <p>For each earlier event, two more offset diagonal constraints are applied. Each clip is the same algorithm, and each produces a tighter polygon. After all clips, the result is the <strong>feasible polygon</strong> for this event.</p>
1128          </div>
1129
1130          <div class="maths-step">
1131            <span class="maths-step-label">Step 4 &mdash; Derive Summary Data</span>
1132            <p>From the feasible polygon, the engine reads off tight bounds: the X-range (cumulative mass passed), the M-range (possible wormhole sizes still consistent), and the remaining mass until each future state transition. These are the numbers displayed in the results panel.</p>
1133          </div>
1134        </div>
1135
1136        <!-- WM 5. The Feasible M Range -->
1137        <div class="card maths-card">
1138          <h3>5 &mdash; Narrowing the Wormhole Size</h3>
1139          <p>The &plusmn;10 % mass variance means you start with a wide range of possible M values. But each state observation constrains M algebraically.</p>
1140          <p>The engine checks every pair of constraints for compatibility: if one says <span class="maths-inline">x &ge; 0.5 &middot; m</span> (Destabilized lower bound) and another says <span class="maths-inline">x &le; 0.5 &middot; m</span> (previous Stable upper bound), these two lines intersect at a specific M value. This intersection <strong>eliminates wormhole sizes</strong> that cannot satisfy both constraints simultaneously.</p>
1141          <p>On the chart, this appears as <strong>excluded mass bands</strong> &mdash; horizontal grey stripes at the top or bottom of the Y-axis showing M values that have been ruled out. A Destabilized observation rules out larger holes; a Stable observation rules out smaller ones.</p>
1142        </div>
1143
1144        <!-- WM 6. Draft Preview Geometry -->
1145        <div class="card maths-card">
1146          <h3>6 &mdash; Draft Preview: What If?</h3>
1147          <p>Before you commit a pass, the draft overlay shows where the feasible region <em>would</em> shift. This uses the <strong>Minkowski sum</strong> from <em>Maths Concepts &sect;6</em>.</p>
1148          <p>The engine takes the current feasible polygon and the drafted mass range [d<sub>min</sub>, d<sub>max</sub>], then:</p>
1149          <ul class="maths-list">
1150            <li>Shifts the polygon right by d<sub>min</sub> (minimum mass scenario)</li>
1151            <li>Shifts the polygon right by d<sub>max</sub> (maximum mass scenario)</li>
1152            <li>Computes the <strong>convex hull</strong> of both shifted polygons</li>
1153          </ul>
1154          <p>The result is the blue translucent envelope on the chart. It shows the full range of where you might land after the pass &mdash; without actually applying state constraints (since you haven't observed the result yet). This lets you gauge whether the pass will cross a state boundary. The percentage chances of crossing, or not crossing, a state boundary are calculated by the volume of the polygon on each side, or the length of the line on each side for an exact mass pass.</p>
1155        </div>
1156
1157        <!-- WM 7. Remaining Mass Analysis -->
1158        <div class="card maths-card">
1159          <h3>7 &mdash; Remaining Mass Analysis</h3>
1160          <p>After each event, the engine computes how much more mass can pass before each future state transition. This is an <strong>affine transform</strong> of the feasible polygon.</p>
1161          <p>For each state boundary (e.g. the gone line at <span class="maths-inline">x = m</span>), every vertex (x, m) of the feasible polygon is mapped to:</p>
1162          <blockquote class="maths-callout">
1163            remaining = (passedFraction &times; m) &minus; x
1164          </blockquote>
1165          <p>This transforms the polygon from (cumPassed, M) space into (remaining, M) space. The X-extent of the resulting polygon gives you the <strong>tight bound on remaining mass</strong> until that state.</p>
1166          <p>On the chart, this is visualised as the <strong>gap polygon</strong> &mdash; the region between the feasible polygon's right edge and the state boundary line. The width of that gap at any Y value tells you exactly how much more mass can pass for that particular wormhole size.</p>
1167        </div>
1168
1169        <!-- WM 8. Why Exact Geometry Beats Simple Arithmetic -->
1170        <div class="card maths-card">
1171          <h3>8 &mdash; Why Geometry Beats Arithmetic</h3>
1172          <p>A simpler approach would be to track cumulative mass as a single interval [min, max] and subtract it from the wormhole range. But this <strong>loses correlation</strong> between M and X.</p>
1173          <p>Consider: if the wormhole is large (M near max), more mass has likely passed. If it's small (M near min), less has passed. A 1D interval treats these as independent &mdash; the polygon captures their relationship.</p>
1174          <p>The polygon's shape encodes this correlation. A slanted edge means &ldquo;for larger holes, the cumulative mass can be higher.&rdquo; Simple interval arithmetic would produce a rectangle (ignoring the slope), giving strictly looser bounds.</p>
1175          <p>This is why the engine uses computational geometry for everything: it is <strong>mathematically exact</strong> for this problem, as noted in <em>Maths Concepts &sect;5</em>.</p>
1176        </div>
1177
1178            </div>
1179          </div>
1180
1181        </div>
1182      </div>
1183    </section>
1184
1185    <!-- Bonus Page -->
1186    <section id="page-bonus" class="page-section" style="display: none;">
1187      <div class="bonus-page">
1188
1189        <div class="bonus-portrait-wrapper">
1190          <img src="images/portrait.jpg" alt="Mr Devoter — EVE Online capsuleer"
1191               class="bonus-portrait" />
1192        </div>
1193
1194        <h2 class="bonus-title">Bonus</h2>
1195
1196        <p class="bonus-intro">
1197          Thanks for exploring this site &mdash; I hope it has been useful to you.
1198        </p>
1199
1200        <p class="bonus-reveal">
1201          This is the bit where I beg for isk, so feel free to run away from this page now as fast as you can. The title of &ldquo;bonus&rdquo; actually refers to
1202          a nice little bonus for <em>me</em>.
1203        </p>
1204
1205        <p>
1206          If you&rsquo;
1206re benefitting from the site and feel like thanking the creator,
1207          open the game, search then right-click <p><strong>Mr Devoter</strong></p> hit
1208          <strong>Give Money</strong> to send a tip &mdash; small or outrageously generous,
1209          both are welcome.
1210        </p>
1211
1212        <h3 class="bonus-subheading">Still undecided? Consider the following</h3>
1213
1214        <ol class="bonus-reasons">
1215          <li>You&rsquo;re a wormholer &mdash; therefore you are already, or are well on your
1216              way to becoming, space rich. You won't miss it, and it might even feel good.</li>
1217          <li>There are no ads on this site. I don&rsquo;t like them &mdash; they&rsquo;re ugly.
1218              <span class="bonus-aside">(Also it&rsquo;s a static page, so hosting is
1219              practically free&hellip; but let&rsquo;s not focus on that.)</span></li>
1220          <li>I could have used an attractive avatar as a fake portrait, but that&rsquo;s
1221              lame. This is me &mdash; a broken old capsuleer, reflexes gone, so far past
1222              my prime I don&rsquo;t remember if I even had one. Help an old man out.</li>
1223          <li>Wigs and hair dye aren&rsquo;t cheap, you know.</li>
1224        </ol>
1225
1226        <hr class="bonus-divider" />
1227
1228        <h3 class="bonus-subheading">Contact</h3>
1229        <p>
1230          Feel free to EVEmail <strong>Mr Devoter</strong> in-game with any
1231          thoughts, ideas, or suggestions to improve this site.
1232        </p>
1233
1234      </div>
1235    </section>
1236
1237  </div>
1238  
1239  <!-- noscript: key content for search engines and users without JavaScript -->
1240  <noscript>
1241    <div style="font-family:sans-serif; max-width:800px; margin:2em auto; padding:1em;">
1242      <h1>EVE Online Wormhole Rolling Guide &amp; Mass Calculator</h1>
1243      <p>A free tool for EVE Online pilots to track wormhole mass and safely roll wormholes.
1244         Enable JavaScript to use the interactive calculator and rolling guides.</p>
1245      <h2>Rolling Guides</h2>
1246      <h3>Fresh Holes — Battleship-Sized Wormholes</h3>
1247      <p>Push exactly half the nominal mass through to learn whether the hole is above or below
1248         nominal size, then finish the roll with the right number of ships.</p>
1249      <ul>
1250        <li><strong>3000 Gg hole:</strong> Step 1 — 2 Cold, 2 Hot.
1251            Destabilized? 2 Cold, 2 Hot. Still Stable? 4 Hot.</li>
1252        <li><strong>2000 Gg hole:</strong> Step 1 — 2 Cold, 2 Hot.
1253            Destabilized? 2 Cold, 2 Hot. Still Stable? 4 Hot.</li>
1254        <li><strong>1000 Gg hole:</strong> Step 1 — 1 Cold, 1 Hot.
1255            Destabilized? 1 Cold, 1 Hot. Still Stable? 2 Hot.</li>
1256      </ul>
1257      <h3>Stable Holes — HIC-Free Method</h3>
1258      <p>Three phases: (1) Send BS Hot until Destabilized. (2) Pass a fixed mass to approach
1259         Critical, ending with exactly 1 BS on the far side. (3) Use cruiser passes to crit
1260         safely, then bring the final BS back Hot for the roll.</p>
1261      <p>Ships: Higgs Battleship (Cold ≈198 Gg, Hot ≈298 Gg),
1262         Higgs + Overprop Cruiser (Cold ≈18–33 Gg, Hot ≈118–133 Gg).</p>
1263      <h3>Stable Holes — Simple Method (requires HIC)</h3>
1264      <p>Pass BS until Critical, then use HIC passes (entangled out, Hot back) to finish.
1265         Watch for the small risk of a Destab→Gone jump near Critical.</p>
1266    </div>
1267  </noscript>
1268
1269  
1269<script src="https://d3js.org/d3.v7.min.js"></script>
1269
1270  
1270<script type="module" src="app-CET437I2.js"></script>
1270
1271</body>
1272</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.