u003c!DOCTYPE htmlu003e
u003chtml lang="en"u003e
u003cheadu003e
u003cmeta charset="UTF-8"u003e
u003cmeta name="viewport" content="width=device-width, initial-scale=1.0"u003e
u003ctitleu003eProcessor Option Comparisonu003c/titleu003e
u003cscript id="lumi-getcssvar"u003e
window.getCssVar = window.getCssVar || function(name) {
if (!name) return '';
try {
const clean = name.replace(/^var\(/, '').replace(/\)$/, '').trim();
const prop = clean.startsWith('--') ? clean : `--${clean}`;
return getComputedStyle(document.documentElement).getPropertyValue(prop).trim();
} catch {
return '';
}
};
u003c/scriptu003e
u003cscript id="lumi-canvas-guard"u003e
(function() {
if (window.__lumiCanvasGuard) return;
window.__lumiCanvasGuard = true;
const MAX_PX = 4096;
const MIN_FONT_PX = 12;
try {
const CP = HTMLCanvasElement.prototype;
const BOX = { width: 'clientWidth', height: 'clientHeight' };
const MAX_STYLE = { width: 'maxWidth', height: 'maxHeight' };
const PAD = {
width: ['paddingLeft', 'paddingRight'],
height: ['paddingTop', 'paddingBottom']
};
const descMap = {
width: Object.getOwnPropertyDescriptor(CP, 'width'),
height: Object.getOwnPropertyDescriptor(CP, 'height')
};
const isTracking = (el, p) =u003e {
const box = el[BOX[p]];
return !el.style[p] && box u003e 0 && box === descMap[p]?.get?.call(el) && box === el[`__lumiLast${p}`];
};
const getAvail = (el, p) =u003e {
const pe = el.parentElement;
if (!pe) return 0;
const cs = getComputedStyle(pe);
return pe[BOX[p]] - parseFloat(cs[PAD[p][0]]) - parseFloat(cs[PAD[p][1]]);
};
Object.keys(BOX).forEach((p) =u003e {
const desc = descMap[p];
if (!desc?.set || !desc?.get) return;
Object.defineProperty(CP, p, {
configurable: true,
enumerable: desc.enumerable,
get: desc.get,
set(v) {
let n = +v;
const box = this[BOX[p]];
if (n u003e MAX_PX) n = MAX_PX;
if (n u003e box && isTracking(this, p)) {
['width', 'height'].forEach((q) =u003e {
if (isTracking(this, q)) {
const pin = getAvail(this, q) || this[`__lumiBox${q}`];
this.style[q] = '100%';
this.style[MAX_STYLE[q]] = `${pin}px`;
}
});
n = box;
}
this[`__lumiBox${p}`] = box;
this[`__lumiLast${p}`] = n;
desc.set.call(this, Number.isNaN(n) ? v : n);
}
});
});
} catch {}
try {
const XP = CanvasRenderingContext2D.prototype;
const pxRegex = /(\d*\.?\d+)px/;
const floorFont = (ctx) =u003e {
const font = ctx.font;
const match = pxRegex.exec(font);
if (match && +match[1] u003e= 4 && +match[1] u003c MIN_FONT_PX) {
ctx.font = font.replace(pxRegex, `${MIN_FONT_PX}px`);
}
};
['fillText', 'strokeText', 'measureText'].forEach((method) =u003e {
const original = XP[method];
if (typeof original !== 'function') return;
XP[method] = function(...args) {
floorFont(this);
return original.apply(this, args);
};
});
} catch {}
})();
u003c/scriptu003e
u003cstyle id="lumi-runtime"u003e
@import url('https://fonts.googleapis.com/css2?family=Google+Sans+Flex:ital,wght@0,300..700;1,300..700&family=Google+Sans+Code:ital,wght,MONO@0,300..700,0..1;1,300..700,0..1&display=swap');
:root {
--body-bg: transparent;
--ff-sans: 'Google Sans Flex', 'Google Sans Text', 'Google Sans', sans-serif;
--ff-mono: 'Google Sans Code', 'Google Sans Mono', monospace;
--lumi-sys-spacing--xxs: 2px;
--lumi-sys-spacing--xs: 4px;
--lumi-sys-spacing--s: 8px;
--lumi-sys-spacing--m: 12px;
--lumi-sys-spacing--l: 16px;
--lumi-sys-spacing--xl: 20px;
--lumi-sys-spacing--xxl: 24px;
--lumi-sys-spacing--3xl: 28px;
--lumi-sys-spacing--4xl: 36px;
--lumi-sys-shape--small: 8px;
--lumi-sys-shape--medium: 12px;
--lumi-sys-shape--large: 16px;
--lumi-sys-shape--full: 999px;
--lumi-sys-elevation--level1: 0 0 20px 0 rgba(0, 0, 0, 0.04);
--lumi-sys-color--surface: #fdfcfc;
--lumi-sys-color--surface-dim: #f2f0f0;
--lumi-sys-color--surface-bright: #ffffff;
--lumi-sys-color--surface-container-high: #e6e6e6;
--lumi-sys-color--on-surface: #000000;
--lumi-sys-color--on-surface-variant: rgba(0, 0, 0, 0.55);
--lumi-sys-color--accent: #9dd2ff;
--lumi-sys-color--accent-container: #dcf1ff;
--lumi-sys-color--accent-fixed: #3186ff;
--lumi-sys-color--primary: #3186ff;
--lumi-sys-color--stroke-default: #e3e3e3;
--lumi-sys-color--chart-series-1: #2575fc;
/* Aliases */
--surface: var(--lumi-sys-color--surface);
--surface-dim: var(--lumi-sys-color--surface-dim);
--surface-bright: var(--lumi-sys-color--surface-bright);
--surface-container-high: var(--lumi-sys-color--surface-container-high);
--on-surface: var(--lumi-sys-color--on-surface);
--on-surface-variant: var(--lumi-sys-color--on-surface-variant);
--primary: var(--lumi-sys-color--primary);
--accent: var(--lumi-sys-color--accent);
--accent-container: var(--lumi-sys-color--accent-container);
--accent-fixed: var(--lumi-sys-color--accent-fixed);
--stroke-default: var(--lumi-sys-color--stroke-default);
--chart-1: var(--lumi-sys-color--chart-series-1);
--r-full: var(--lumi-sys-shape--full);
}
:root[data-theme="dark"],
body.dark-mode,
:root[data-theme="dark"] body {
--body-bg: #0f0f0f;
--lumi-sys-color--surface: #0f0f0f;
--lumi-sys-color--surface-dim: #141414;
--lumi-sys-color--surface-bright: #1c1c1c;
--lumi-sys-color--surface-container-high: #1c1c1c;
--lumi-sys-color--on-surface: #e0e0e0;
--lumi-sys-color--on-surface-variant: rgba(255, 255, 255, 0.55);
--lumi-sys-color--accent: #1f3b9b;
--lumi-sys-color--accent-container: #192967;
--lumi-sys-color--accent-fixed: #3186ff;
--lumi-sys-color--primary: #9dd2ff;
--lumi-sys-color--stroke-default: #2d2f38;
--lumi-sys-color--chart-series-1: #9dd2ff;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--body-bg: #0f0f0f;
--lumi-sys-color--surface: #0f0f0f;
--lumi-sys-color--surface-dim: #141414;
--lumi-sys-color--surface-bright: #1c1c1c;
--lumi-sys-color--surface-container-high: #1c1c1c;
--lumi-sys-color--on-surface: #e0e0e0;
--lumi-sys-color--on-surface-variant: rgba(255, 255, 255, 0.55);
--lumi-sys-color--accent: #1f3b9b;
--lumi-sys-color--accent-container: #192967;
--lumi-sys-color--accent-fixed: #3186ff;
--lumi-sys-color--primary: #9dd2ff;
--lumi-sys-color--stroke-default: #2d2f38;
--lumi-sys-color--chart-series-1: #9dd2ff;
}
}
*, *::before, *::after {
box-sizing: border-box;
}
html, body {
margin: 0;
padding: 0;
width: 100%;
background: var(--body-bg, transparent) !important;
color: var(--on-surface) !important;
overflow-x: hidden;
overflow-y: hidden;
font-family: var(--ff-sans);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-optical-sizing: auto;
text-rendering: optimizeLegibility;
}
.widget-container {
width: 100% !important;
max-width: 100% !important;
min-height: 280px;
padding: var(--lumi-sys-spacing--l, 16px) !important;
display: flex;
flex-direction: column;
gap: var(--lumi-sys-spacing--l, 16px);
}
.widget-card {
background: var(--surface-bright);
border-radius: var(--lumi-sys-shape--large, 16px);
padding: var(--lumi-sys-spacing--xl, 20px);
border: 1px solid var(--stroke-default);
display: flex;
flex-direction: column;
gap: var(--lumi-sys-spacing--l, 16px);
}
.header-group {
display: flex;
flex-direction: column;
gap: 4px;
}
.widget-title {
margin: 0;
color: var(--on-surface);
}
.widget-subtitle {
margin: 0;
color: var(--on-surface-variant);
}
.tab-strip-wrapper {
width: 100%;
overflow-x: auto;
padding-bottom: 2px;
}
.tab-strip {
display: flex;
gap: var(--lumi-sys-spacing--xs, 4px);
background: var(--surface-dim);
padding: 4px;
border-radius: var(--r-full);
width: fit-content;
max-width: 100%;
}
.tab-btn {
appearance: none;
-webkit-appearance: none;
border: none;
background: transparent;
padding: 6px 14px;
border-radius: var(--r-full);
font-family: var(--ff-sans);
font-size: 13px;
font-weight: 500;
color: var(--on-surface-variant);
cursor: pointer;
white-space: nowrap;
transition: background-color 0.15s ease, color 0.15s ease;
}
.tab-btn:hover {
color: var(--on-surface);
background: var(--surface-container-high);
}
.tab-btn.is-active {
background: var(--surface-bright);
color: var(--on-surface);
font-weight: 600;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.viewport-container {
position: relative;
width: 100%;
height: 340px;
min-height: 0;
overflow: hidden;
border-radius: var(--lumi-sys-shape--medium, 12px);
}
.details-footer {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: var(--lumi-sys-spacing--m, 12px);
padding-top: var(--lumi-sys-spacing--m, 12px);
border-top: 1px solid var(--stroke-default);
}
.detail-card {
background: var(--surface-dim);
border-radius: var(--lumi-sys-shape--small, 8px);
padding: var(--lumi-sys-spacing--m, 12px);
display: flex;
flex-direction: column;
gap: 2px;
}
.detail-label {
color: var(--on-surface-variant);
}
.detail-val {
color: var(--on-surface);
font-weight: 600;
}
.nav-footer {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 14px;
color: var(--on-surface-variant);
}
.nav-link {
color: var(--primary);
text-decoration: none;
font-weight: 500;
}
.nav-link:hover {
text-decoration: underline;
}
/* Typography Utilities */
.lumi-headline-m { font-size: 24px; line-height: 28px; font-weight: 400; }
.lumi-body-m { font-size: 15px; line-height: 20px; font-weight: 400; }
.lumi-body-s { font-size: 13px; line-height: 17px; font-weight: 400; }
.lumi-caption { font-family: var(--ff-mono); font-style: italic; font-size: 13px; line-height: 20px; }
u003c/styleu003e
u003cscript src="../libs/Chart.js/dist/chart.umd.js" onerror="let s=document.createElement('script');s.src='libs/Chart.js/dist/chart.umd.min.js';document.head.appendChild(s)"u003eu003c/scriptu003e
u003cscript id="lumi-os-theme-init"u003e
(function() {
const syncBody = () =u003e {
const dt = document.documentElement.getAttribute('data-theme');
if (document.body && (dt === 'dark' || dt === 'light')) {
document.body.classList.toggle('dark-mode', dt === 'dark');
}
};
const syncTheme = (theme) =u003e {
if (theme !== 'dark' && theme !== 'light') return;
document.documentElement.setAttribute('data-theme', theme);
syncBody();
};
if (typeof MutationObserver === 'function') {
new MutationObserver(syncBody).observe(document.documentElement, {
attributes: true,
attributeFilter: ['data-theme']
});
}
document.addEventListener('DOMContentLoaded', syncBody);
try {
const mq = window.matchMedia?.('(prefers-color-scheme: dark)');
if (mq) {
const cur = document.documentElement.getAttribute('data-theme');
syncTheme(cur || (mq.matches ? 'dark' : 'light'));
mq.addEventListener?.('change', (e) =u003e syncTheme(e.matches ? 'dark' : 'light'));
}
} catch {}
window.addEventListener('message', (e) =u003e {
if ((e.data?.type === 'set-theme' || e.data?.type === 'APPLY_THEME') && e.data?.theme) {
syncTheme(e.data.theme);
}
});
})();
u003c/scriptu003e
u003c/headu003e
u003cbodyu003e
u003cmain class="widget-container"u003e
u003cdiv class="widget-card"u003e
u003cheader class="header-group"u003e
u003ch2 class="widget-title lumi-headline-m"u003eWorkstation Processor Limitsu003c/h2u003e
u003cp class="widget-subtitle lumi-body-s"u003eCompare single-core boost, expansion headroom, and total memory capacityu003c/pu003e
u003c/headeru003e
u003cnav class="tab-strip-wrapper" aria-label="Metric Navigation"u003e
u003cdiv class="tab-strip" role="tablist"u003e
u003cbutton class="tab-btn is-active" data-metric="turbo_ghz" role="tab" aria-selected="true"u003eSingle-Core Turbo (GHz)u003c/buttonu003e
u003cbutton class="tab-btn" data-metric="pcie_lanes" role="tab" aria-selected="false"u003ePCIe Gen 5 Lanesu003c/buttonu003e
u003cbutton class="tab-btn" data-metric="max_ram_gb" role="tab" aria-selected="false"u003eDIMM Slots & Max RAM (GB)u003c/buttonu003e
u003c/divu003e
u003c/navu003e
u003csection id="chart-viewport" class="viewport-container" aria-label="Processor Comparison Chart"u003e
u003ccanvas id="procChart"u003eu003c/canvasu003e
u003c/sectionu003e
u003cfooter id="detailsDeck" class="details-footer"u003e
u003cdiv class="detail-card"u003e
u003cspan class="detail-label lumi-caption"u003eFocused Processoru003c/spanu003e
u003cspan id="metaName" class="detail-val lumi-body-m"u003eCore Ultra 9 285Ku003c/spanu003e
u003c/divu003e
u003cdiv class="detail-card"u003e
u003cspan class="detail-label lumi-caption"u003eTarget Platformu003c/spanu003e
u003cspan id="metaPlatform" class="detail-val lumi-body-m"u003ePrecision 3680 / Area-51u003c/spanu003e
u003c/divu003e
u003cdiv class="detail-card"u003e
u003cspan class="detail-label lumi-caption"u003eMemory Configurationu003c/spanu003e
u003cspan id="metaMemory" class="detail-val lumi-body-m"u003e4 Slots (192 GB Max)u003c/spanu003e
u003c/divu003e
u003c/footeru003e
u003c/divu003e
u003cnav class="nav-footer" aria-label="Breadcrumb"u003e
u003ca class="nav-link" href="../index.html"u003eHomeu003c/au003e
u003cspanu003e>>u003c/spanu003e
u003c/navu003e
u003c/mainu003e
u003cscriptu003e
(() =u003e {
'use strict';
const CPU_DATA = [
{ processor: 'Core i9-13900 (Current 3660)', platform: 'Precision 3660', turbo_ghz: 5.6, pcie_lanes: 20, max_ram_gb: 128, dimm_slots: 4 },
{ processor: 'Core Ultra 9 285K', platform: 'Precision 3680 / Area-51', turbo_ghz: 5.7, pcie_lanes: 24, max_ram_gb: 192, dimm_slots: 4 },
{ processor: 'Xeon w3-2423 (6-Core Entry)', platform: 'Precision 5860 / P5', turbo_ghz: 4.2, pcie_lanes: 64, max_ram_gb: 2048, dimm_slots: 8 },
{ processor: 'Xeon w5-2455X (12-Core Sweet Spot)', platform: 'Precision 5860 / P5', turbo_ghz: 4.6, pcie_lanes: 64, max_ram_gb: 2048, dimm_slots: 8 },
{ processor: 'Xeon w5-2545 (12-Core Refresh)', platform: 'Precision 5860 / P5', turbo_ghz: 4.7, pcie_lanes: 64, max_ram_gb: 2048, dimm_slots: 8 },
{ processor: 'Xeon w7-2595X (26-Core High-End)', platform: 'Precision 5860 / P5', turbo_ghz: 4.8, pcie_lanes: 64, max_ram_gb: 2048, dimm_slots: 8 }
];
const METRIC_CONFIGS = {
turbo_ghz: { label: 'Single-Core Turbo Speed', unit: 'GHz' },
pcie_lanes: { label: 'CPU PCIe Gen 5 Lanes', unit: 'Lanes' },
max_ram_gb: { label: 'Maximum Memory Capacity', unit: 'GB' }
};
const dom = {
canvas: document.getElementById('procChart'),
metaName: document.getElementById('metaName'),
metaPlatform: document.getElementById('metaPlatform'),
metaMemory: document.getElementById('metaMemory'),
tabs: Array.from(document.querySelectorAll('.tab-btn')),
container: document.querySelector('.widget-container')
};
let activeMetric = 'turbo_ghz';
let focusedIndex = 1;
let chartInstance = null;
const getChartTokens = () =u003e {
const cs = getComputedStyle(document.documentElement);
return {
fontFamily: cs.getPropertyValue('--ff-sans').trim() || "'Google Sans Flex', sans-serif",
monoFamily: cs.getPropertyValue('--ff-mono').trim() || "'Google Sans Code', monospace",
textColor: cs.getPropertyValue('--on-surface').trim() || '#000000',
deEmphasisColor: cs.getPropertyValue('--on-surface-variant').trim() || 'rgba(0,0,0,0.55)',
gridColor: cs.getPropertyValue('--stroke-default').trim() || 'rgba(0,0,0,0.08)',
surfaceColor: cs.getPropertyValue('--surface-bright').trim() || '#ffffff',
series: cs.getPropertyValue('--chart-1').trim() || '#2575fc'
};
};
const updateDetailsDeck = (idx) =u003e {
const item = CPU_DATA[idx];
if (!item) return;
dom.metaName.textContent = item.processor;
dom.metaPlatform.textContent = item.platform;
dom.metaMemory.textContent = `${item.dimm_slots} Slots (${item.max_ram_gb.toLocaleString()} GB Max)`;
};
const applyThemeToChart = (chart, tokens) =u003e {
chart.options.scales.x.grid.color = tokens.gridColor;
chart.options.scales.x.ticks.color = tokens.deEmphasisColor;
chart.options.scales.x.title.color = tokens.deEmphasisColor;
chart.options.scales.y.ticks.color = tokens.textColor;
chart.options.plugins.tooltip.backgroundColor = tokens.surfaceColor;
chart.options.plugins.tooltip.titleColor = tokens.textColor;
chart.options.plugins.tooltip.bodyColor = tokens.deEmphasisColor;
chart.options.plugins.tooltip.borderColor = tokens.gridColor;
chart.data.datasets[0].backgroundColor = tokens.series;
};
const createChart = () =u003e {
if (!dom.canvas || typeof Chart === 'undefined') return;
const tokens = getChartTokens();
const cfg = METRIC_CONFIGS[activeMetric];
Chart.defaults.font.family = tokens.fontFamily;
Chart.defaults.color = tokens.deEmphasisColor;
chartInstance = new Chart(dom.canvas, {
type: 'bar',
data: {
labels: CPU_DATA.map(d =u003e d.processor),
datasets: [{
label: cfg.label,
data: CPU_DATA.map(d =u003e d[activeMetric]),
backgroundColor: tokens.series,
maxBarThickness: 24,
categoryPercentage: 0.70,
barPercentage: 0.85,
borderRadius: { topRight: 99, bottomRight: 99, topLeft: 0, bottomLeft: 0 }
}]
},
options: {
indexAxis: 'y',
responsive: true,
maintainAspectRatio: false,
layout: { padding: { top: 8, right: 24, bottom: 8, left: 8 } },
plugins: {
legend: { display: false },
tooltip: {
backgroundColor: tokens.surfaceColor,
titleColor: tokens.textColor,
bodyColor: tokens.deEmphasisColor,
borderColor: tokens.gridColor,
borderWidth: 1,
cornerRadius: 8,
padding: 12,
callbacks: {
label: (context) =u003e {
const item = CPU_DATA[context.dataIndex];
return [
`${cfg.label}: ${context.parsed.x.toLocaleString()} ${cfg.unit}`,
`Platform: ${item.platform}`,
`DIMM Slots: ${item.dimm_slots}`
];
}
}
}
},
scales: {
x: {
grid: { color: tokens.gridColor, drawBorder: false },
border: { display: false },
ticks: {
padding: 8,
font: { family: tokens.monoFamily, size: 12 },
color: tokens.deEmphasisColor
},
title: {
display: true,
text: `${cfg.label} (${cfg.unit})`,
color: tokens.deEmphasisColor,
font: { family: tokens.fontFamily, size: 12, weight: '500' }
}
},
y: {
grid: { display: false },
border: { display: false },
ticks: {
padding: 8,
font: { family: tokens.fontFamily, size: 12, weight: '500' },
color: tokens.textColor
}
}
},
onHover: (_, elements) =u003e {
if (elements?.length) {
const idx = elements[0].index;
if (idx !== focusedIndex) {
focusedIndex = idx;
updateDetailsDeck(idx);
}
}
}
}
});
};
const setMetric = (metricKey) =u003e {
if (!METRIC_CONFIGS[metricKey] || activeMetric === metricKey) return;
activeMetric = metricKey;
dom.tabs.forEach(btn =u003e {
const isActive = btn.dataset.metric === metricKey;
btn.classList.toggle('is-active', isActive);
btn.setAttribute('aria-selected', String(isActive));
});
if (chartInstance) {
const cfg = METRIC_CONFIGS[metricKey];
chartInstance.data.datasets[0].data = CPU_DATA.map(d =u003e d[metricKey]);
chartInstance.data.datasets[0].label = cfg.label;
chartInstance.options.scales.x.title.text = `${cfg.label} (${cfg.unit})`;
chartInstance.update();
}
};
const refreshTheme = (themeName) =u003e {
if (themeName) {
document.documentElement.setAttribute('data-theme', themeName);
}
if (chartInstance) {
applyThemeToChart(chartInstance, getChartTokens());
chartInstance.update('none');
}
updateDetailsDeck(focusedIndex);
};
// Events
dom.tabs.forEach(btn =u003e {
btn.addEventListener('click', () =u003e setMetric(btn.dataset.metric));
});
const init = async () =u003e {
while (typeof Chart === 'undefined') {
await new Promise(r =u003e setTimeout(r, 20));
}
await document.fonts?.ready;
createChart();
updateDetailsDeck(focusedIndex);
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init, { once: true });
} else {
init();
}
window.addEventListener('message', (e) =u003e {
if ((e.data?.type === 'set-theme' || e.data?.type === 'APPLY_THEME') && e.data?.theme) {
refreshTheme(e.data.theme);
}
});
// Auto-resize
let resizeTimer = null;
const notifyHeight = () =u003e {
const el = dom.container || document.body;
if (!el) return;
const height = Math.ceil(Math.max(el.getBoundingClientRect().bottom, el.scrollHeight));
window.parent.postMessage({ type: 'widget-resize', height }, '*');
};
const debouncedResize = () =u003e {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(notifyHeight, 16);
};
window.addEventListener('load', () =u003e setTimeout(notifyHeight, 60), { once: true });
if (typeof ResizeObserver !== 'undefined') {
new ResizeObserver(debouncedResize).observe(dom.container || document.body);
}
})();
u003c/scriptu003e
u003c/bodyu003e
u003c/htmlu003e