var canvasHome = document.getElementById('fable-fantasy-lens-home'); var ctxHome = canvasHome.getContext('2d'); var nodesHome = []; var tickHome = 0; var mouseHome = { x: null, y: null, targetX: null, targetY: null }; function resizeCanvas() { canvasHome.width = window.innerWidth; canvasHome.height = window.innerHeight; } resizeCanvas(); window.addEventListener('resize', function() { resizeCanvas(); initConstellationHome(); }); window.addEventListener('mousemove', function(e) { mouseHome.targetX = e.clientX; mouseHome.targetY = e.clientY; }); window.addEventListener('mouseout', function() { mouseHome.targetX = null; mouseHome.targetY = null; }); function initConstellationHome() { nodesHome = []; var totalNodes = Math.floor((window.innerWidth * window.innerHeight) / 18000); if (totalNodes < 30) totalNodes = 30; if (totalNodes > 70) totalNodes = 70; for (var i = 0; i < totalNodes; i++) { nodesHome.push({ x: Math.random() * canvasHome.width, y: Math.random() * canvasHome.height, vx: (Math.random() - 0.5) * 0.35, vy: (Math.random() - 0.5) * 0.35, radius: Math.random() * 1.5 + 1, baseAlpha: Math.random() * 0.5 + 0.2 }); } } function animateHome() { tickHome++; ctxHome.clearRect(0, 0, canvasHome.width, canvasHome.height); if (mouseHome.targetX !== null && mouseHome.targetY !== null) { if (mouseHome.x === null) { mouseHome.x = mouseHome.targetX; mouseHome.y = mouseHome.targetY; } else { mouseHome.x += (mouseHome.targetX - mouseHome.x) * 0.08; mouseHome.y += (mouseHome.targetY - mouseHome.y) * 0.08; } } else { mouseHome.x = null; mouseHome.y = null; } ctxHome.save(); // Draw connecting constellation lines for (var i = 0; i < nodesHome.length; i++) { var nodeA = nodesHome[i]; nodeA.x += nodeA.vx; nodeA.y += nodeA.vy; if (nodeA.x < 0 || nodeA.x > canvasHome.width) nodeA.vx *= -1; if (nodeA.y < 0 || nodeA.y > canvasHome.height) nodeA.vy *= -1; for (var j = i + 1; j < nodesHome.length; j++) { var nodeB = nodesHome[j]; var dx = nodeA.x - nodeB.x; var dy = nodeA.y - nodeB.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 140) { var alpha = (1 - (dist / 140)) * 0.18; ctxHome.beginPath(); ctxHome.moveTo(nodeA.x, nodeA.y); ctxHome.lineTo(nodeB.x, nodeB.y); ctxHome.strokeStyle = 'rgba(212, 175, 55, ' + alpha + ')'; ctxHome.lineWidth = 0.75; ctxHome.stroke(); } } // Mouse interactive web link connection if (mouseHome.x !== null && mouseHome.y !== null) { var mdx = nodeA.x - mouseHome.x; var mdy = nodeA.y - mouseHome.y; var mdist = Math.sqrt(mdx * mdx + mdy * mdy); if (mdist < 160) { var mAlpha = (1 - (mdist / 160)) * 0.35; ctxHome.beginPath(); ctxHome.moveTo(nodeA.x, nodeA.y); ctxHome.lineTo(mouseHome.x, mouseHome.y); ctxHome.strokeStyle = 'rgba(56, 189, 248, ' + mAlpha + ')'; ctxHome.lineWidth = 0.85; ctxHome.stroke(); } } // Draw individual registry nodes ctxHome.beginPath(); ctxHome.arc(nodeA.x, nodeA.y, nodeA.radius, 0, Math.PI * 2); ctxHome.fillStyle = 'rgba(243, 229, 171, ' + nodeA.baseAlpha + ')'; ctxHome.shadowBlur = 8; ctxHome.shadowColor = 'rgba(212, 175, 55, 0.5)'; ctxHome.fill(); } ctxHome.restore(); requestAnimationFrame(animateHome); } initConstellationHome(); animateHome();

Integritas Veris

Independent Publishers of Speculative Fiction

function toggleMenu(event) { if (event) event.stopPropagation(); var content = document.getElementById('uprisingNavContent'); var btn = document.getElementById('uprisingMenuToggle'); if (content.classList.contains('show')) { content.classList.remove('show'); btn.classList.remove('active'); btn.setAttribute('aria-expanded', 'false'); } else { content.classList.add('show'); btn.classList.add('active'); btn.setAttribute('aria-expanded', 'true'); } } window.addEventListener('click', function(e) { var dropdown = document.getElementById('uprisingNavContent'); var btn = document.getElementById('uprisingMenuToggle'); if (dropdown && dropdown.classList.contains('show')) { if (!dropdown.contains(e.target) && !btn.contains(e.target)) { dropdown.classList.remove('show'); btn.classList.remove('active'); btn.setAttribute('aria-expanded', 'false'); } } }); function switchPage(pageKey) { var sections = document.querySelectorAll('.iv-page-section'); sections.forEach(function(sec) { sec.style.setProperty('display', 'none', 'important'); }); var targetMap = { 'home': 'page-home', 'crimsonuprising': 'page-uprising', 'embed5': 'page-embed5', 'wips': 'page-wips', 'reviews': 'page-reviews' }; var targetId = targetMap[pageKey]; if (targetId) { var targetEl = document.getElementById(targetId); if (targetEl) { targetEl.style.setProperty('display', 'block', 'important'); if (window.location.hash !== '#' + pageKey) { window.location.hash = pageKey; } } } var dropdown = document.getElementById('uprisingNavContent'); var btn = document.getElementById('uprisingMenuToggle'); if (dropdown) dropdown.classList.remove('show'); if (btn) { btn.classList.remove('active'); btn.setAttribute('aria-expanded', 'false'); } } (function() { var hash = window.location.hash.replace('#', ''); if (['home', 'crimsonuprising', 'embed5', 'wips', 'reviews'].includes(hash)) { switchPage(hash); } else if (hash === 'success') { return; } else { switchPage('home'); } window.addEventListener('hashchange', function() { var currentHash = window.location.hash.replace('#', ''); if (['home', 'crimsonuprising', 'embed5', 'wips', 'reviews'].includes(currentHash)) { switchPage(currentHash); } }); })(); // Constellation Background Animation var canvasHome = document.getElementById('fable-fantasy-lens-home'); var ctxHome = canvasHome.getContext('2d'); var nodesHome = []; var tickHome = 0; var mouseHome = { x: null, y: null, targetX: null, targetY: null }; function resizeCanvas() { canvasHome.width = window.innerWidth; canvasHome.height = window.innerHeight; } resizeCanvas(); window.addEventListener('resize', function() { resizeCanvas(); initConstellationHome(); }); window.addEventListener('mousemove', function(e) { mouseHome.targetX = e.clientX; mouseHome.targetY = e.clientY; }); window.addEventListener('mouseout', function() { mouseHome.targetX = null; mouseHome.targetY = null; }); function initConstellationHome() { nodesHome = []; var totalNodes = Math.floor((window.innerWidth * window.innerHeight) / 18000); if (totalNodes < 30) totalNodes = 30; if (totalNodes > 70) totalNodes = 70; for (var i = 0; i < totalNodes; i++) { nodesHome.push({ x: Math.random() * canvasHome.width, y: Math.random() * canvasHome.height, vx: (Math.random() - 0.5) * 0.35, vy: (Math.random() - 0.5) * 0.35, radius: Math.random() * 1.5 + 1, baseAlpha: Math.random() * 0.5 + 0.2 }); } } function animateHome() { tickHome++; ctxHome.clearRect(0, 0, canvasHome.width, canvasHome.height); if (mouseHome.targetX !== null && mouseHome.targetY !== null) { if (mouseHome.x === null) { mouseHome.x = mouseHome.targetX; mouseHome.y = mouseHome.targetY; } else { mouseHome.x += (mouseHome.targetX - mouseHome.x) * 0.08; mouseHome.y += (mouseHome.targetY - mouseHome.y) * 0.08; } } else { mouseHome.x = null; mouseHome.y = null; } ctxHome.save(); for (var i = 0; i < nodesHome.length; i++) { var nodeA = nodesHome[i]; nodeA.x += nodeA.vx; nodeA.y += nodeA.vy; if (nodeA.x < 0 || nodeA.x > canvasHome.width) nodeA.vx *= -1; if (nodeA.y < 0 || nodeA.y > canvasHome.height) nodeA.vy *= -1; for (var j = i + 1; j < nodesHome.length; j++) { var nodeB = nodesHome[j]; var dx = nodeA.x - nodeB.x; var dy = nodeA.y - nodeB.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 140) { var alpha = (1 - (dist / 140)) * 0.18; ctxHome.beginPath(); ctxHome.moveTo(nodeA.x, nodeA.y); ctxHome.lineTo(nodeB.x, nodeB.y); ctxHome.strokeStyle = 'rgba(212, 175, 55, ' + alpha + ')'; ctxHome.lineWidth = 0.75; ctxHome.stroke(); } } if (mouseHome.x !== null && mouseHome.y !== null) { var mdx = nodeA.x - mouseHome.x; var mdy = nodeA.y - mouseHome.y; var mdist = Math.sqrt(mdx * mdx + mdy * mdy); if (mdist < 160) { var mAlpha = (1 - (mdist / 160)) * 0.35; ctxHome.beginPath(); ctxHome.moveTo(nodeA.x, nodeA.y); ctxHome.lineTo(mouseHome.x, mouseHome.y); ctxHome.strokeStyle = 'rgba(56, 189, 248, ' + mAlpha + ')'; ctxHome.lineWidth = 0.85; ctxHome.stroke(); } } ctxHome.beginPath(); ctxHome.arc(nodeA.x, nodeA.y, nodeA.radius, 0, Math.PI * 2); ctxHome.fillStyle = 'rgba(243, 229, 171, ' + nodeA.baseAlpha + ')'; ctxHome.shadowBlur = 8; ctxHome.shadowColor = 'rgba(212, 175, 55, 0.5)'; ctxHome.fill(); } ctxHome.restore(); requestAnimationFrame(animateHome); } initConstellationHome(); animateHome();
ESTABLISHED REGISTRY

Our Manifesto

Integritas Veris Publishing exists at the precipice of unfiltered truth. We forge literature that captures the vast, intricate spectrum of existence, from epic fantasy to the quietest realities of the human condition.

We do not craft simple escapes. Whether charting the awakening of chaotic magic or exploring generational divides, our stories pull no punches.

We explore the weight of choices, the scars of mistakes, and the fragile connections binding us before we return to dust. Authenticity dictates every release.

"Uncompromising truth. Inevitable change. Stories that linger long after the final page turns."
THE ARCHITECT

About the Publisher

Integritas Veris Publishing was founded on the principle that modern speculative fiction deserves a home refusing to shy away from complex emotional truths.

From expansive series like The Crimson Uprising to intimate standalone works, every volume is crafted with meticulous depth and artistic integrity.

function switchPage(k) { document.querySelectorAll('.iv-page-section').forEach(function(s) { s.style.setProperty('display', 'none', 'important'); }); var map = {'home': 'page-home', 'crimsonuprising': 'page-uprising', 'embed5': 'page-embed5', 'wips': 'page-wips', 'reviews': 'page-reviews'}; var t = document.getElementById(map[k]); if (t) { t.style.setProperty('display', 'block', 'important'); window.location.hash = k; } } (function() { var h = window.location.hash.replace('#', ''); if (['home', 'crimsonuprising', 'embed5', 'wips', 'reviews'].includes(h)) { switchPage(h); } else { switchPage('home'); } window.addEventListener('hashchange', function() { var cur = window.location.hash.replace('#', ''); if (['home', 'crimsonuprising', 'embed5', 'wips', 'reviews'].includes(cur)) { switchPage(cur); } }); })(); var canvasHome = document.getElementById('fable-fantasy-lens-home'); var ctxHome = canvasHome.getContext('2d'); var nodesHome = []; function resizeCanvas() { canvasHome.width = window.innerWidth; canvasHome.height = window.innerHeight; } resizeCanvas(); window.addEventListener('resize', resizeCanvas); function initConstellationHome() { nodesHome = []; var totalNodes = Math.min(70, Math.max(30, Math.floor((window.innerWidth * window.innerHeight) / 18000))); for (var i = 0; i < totalNodes; i++) { nodesHome.push({ x: Math.random() * canvasHome.width, y: Math.random() * canvasHome.height, vx: (Math.random() - 0.5) * 0.35, vy: (Math.random() - 0.5) * 0.35, radius: Math.random() * 1.5 + 1, baseAlpha: Math.random() * 0.5 + 0.2 }); } } initConstellationHome(); function animateHome() { ctxHome.clearRect(0, 0, canvasHome.width, canvasHome.height); ctxHome.save(); for (var i = 0; i < nodesHome.length; i++) { var a = nodesHome[i]; a.x += a.vx; a.y += a.vy; if (a.x < 0 || a.x > canvasHome.width) a.vx *= -1; if (a.y < 0 || a.y > canvasHome.height) a.vy *= -1; for (var j = i + 1; j < nodesHome.length; j++) { var b = nodesHome[j]; var dist = Math.sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); if (dist < 140) { ctxHome.beginPath(); ctxHome.moveTo(a.x, a.y); ctxHome.lineTo(b.x, b.y); ctxHome.strokeStyle = 'rgba(212, 175, 55, ' + ((1 - dist / 140) * 0.18) + ')'; ctxHome.lineWidth = 0.75; ctxHome.stroke(); } } ctxHome.beginPath(); ctxHome.arc(a.x, a.y, a.radius, 0, Math.PI * 2); ctxHome.fillStyle = 'rgba(243, 229, 171, ' + a.baseAlpha + ')'; ctxHome.fill(); } ctxHome.restore(); requestAnimationFrame(animateHome); } animateHome();

THE INK IS DRY

Your testimony has been inscribed into the Archive.

RETURN TO ARCHIVE
(function() { var canvas = document.getElementById('fable-success-nebula'); var ctx = canvas.getContext('2d'); function resize() { canvas.width = window.innerWidth; canvas.height = window.innerHeight; } window.addEventListener('resize', resize); resize(); var particles = []; var count = 55; for (var i = 0; i < count; i++) { particles.push({ x: Math.random() * canvas.width, y: Math.random() * canvas.height, radius: Math.random() * 1.8 + 0.4, color: Math.random() > 0.4 ? 'rgba(229, 193, 88, ' : 'rgba(179, 18, 37, ', alpha: Math.random() * 0.7 + 0.2, speed: Math.random() * 0.15 + 0.05, angle: Math.random() * Math.PI * 2 }); } var tick = 0; function animate() { tick++; ctx.clearRect(0, 0, canvas.width, canvas.height); var cx = canvas.width / 2; var cy = canvas.height / 2; var pulse = Math.sin(tick * 0.02) * 40; var gradient = ctx.createRadialGradient(cx, cy, 10, cx, cy, 300 + pulse); gradient.addColorStop(0, 'rgba(179, 18, 37, 0.12)'); gradient.addColorStop(0.5, 'rgba(229, 193, 88, 0.04)'); gradient.addColorStop(1, 'transparent'); ctx.fillStyle = gradient; ctx.fillRect(0, 0, canvas.width, canvas.height); particles.forEach(function(p) { p.y -= p.speed; p.x += Math.sin(tick * 0.01 + p.angle) * 0.2; if (p.y < 0) { p.y = canvas.height; p.x = Math.random() * canvas.width; } ctx.beginPath(); ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2); ctx.fillStyle = p.color + p.alpha + ')'; ctx.shadowBlur = 8; ctx.shadowColor = p.color + '0.8)'; ctx.fill(); }); requestAnimationFrame(animate); } animate(); })();