<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Solanica</title><link>https://solanica.io/</link><description>Recent content on Solanica</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 19 Sep 2026 07:00:00 +0000</lastBuildDate><atom:link href="https://solanica.io/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenEverest introduces Presets - one click deployment</title><link>https://solanica.io/blog/openeverest-intro-presets/</link><pubDate>Sat, 19 Sep 2026 07:00:00 +0000</pubDate><guid>https://solanica.io/blog/openeverest-intro-presets/</guid><description>OpenEverest v2.0.0-dev.3 introduces Presets - reusable templates for instances and clusters that turn database deployment into a single click or a simple API call.</description></item><item><title>Kubernetes 1.37 “Garhwal”: 7 Treats for AI and Data Teams</title><link>https://solanica.io/blog/7-top-ai-data-treats-k8s-1-37/</link><pubDate>Tue, 15 Sep 2026 10:00:00 +0000</pubDate><guid>https://solanica.io/blog/7-top-ai-data-treats-k8s-1-37/</guid><description>Kubernetes 1.37 stops treating GPUs, gang jobs and fat data volumes as afterthoughts. Here are the seven changes that AI and data teams will actually feel.</description></item><item><title>KubeCon + CloudNativeCon North America 2026</title><link>https://solanica.io/events/kubecon-na-2026/</link><pubDate>Tue, 15 Sep 2026 09:00:00 +0000</pubDate><guid>https://solanica.io/events/kubecon-na-2026/</guid><description>When: Nov 9-12 Where: Salt Lake City, Utah</description></item><item><title>Percona.Connect - Paris</title><link>https://solanica.io/events/percona-connect-paris/</link><pubDate>Wed, 09 Sep 2026 14:52:00 +0000</pubDate><guid>https://solanica.io/events/percona-connect-paris/</guid><description>When: October 15, 2026 Where: Paris, France</description></item><item><title>Percona Live 2026 - Amsterdam</title><link>https://solanica.io/events/percona-live-2026-amsterdam/</link><pubDate>Wed, 09 Sep 2026 14:03:00 +0000</pubDate><guid>https://solanica.io/events/percona-live-2026-amsterdam/</guid><description>When: September 9-11, 2026 Where: Amsterdam, Netherlands</description></item><item><title>KubeCon + CloudNativeCon China 2026</title><link>https://solanica.io/events/kubecon-china-2026/</link><pubDate>Mon, 07 Sep 2026 09:00:00 +0000</pubDate><guid>https://solanica.io/events/kubecon-china-2026/</guid><description>When: Sep 7-9 Where: Shanghai, China</description></item><item><title>Solanica for MSSQL: bumping default version and introducing PITR</title><link>https://solanica.io/blog/mssql-2025-pitr/</link><pubDate>Thu, 27 Aug 2026 21:12:00 +0100</pubDate><guid>https://solanica.io/blog/mssql-2025-pitr/</guid><description>Solanica&amp;rsquo;s MSSQL operator and OpenEverest provider now ship SQL Server 2025 as the default engine and deliver provider-managed point-in-time recovery (PITR).</description></item><item><title>COSCUP &amp;amp; UbnCon 2026</title><link>https://solanica.io/events/coscup-ubncon-2026/</link><pubDate>Sat, 08 Aug 2026 08:25:00 +0000</pubDate><guid>https://solanica.io/events/coscup-ubncon-2026/</guid><description>When: Aug 8-9 Where: Taiwan</description></item><item><title>KubeCon Japan 2026</title><link>https://solanica.io/events/kubecon-japan-2026/</link><pubDate>Tue, 28 Jul 2026 08:46:00 +0000</pubDate><guid>https://solanica.io/events/kubecon-japan-2026/</guid><description>When: July 28-30 Where: Yokohama, Japan</description></item><item><title>Bringing Microsoft SQL Server to Kubernetes</title><link>https://solanica.io/blog/microsoft-sql-server-on-kubernetes/</link><pubDate>Mon, 27 Jul 2026 12:06:00 +0100</pubDate><guid>https://solanica.io/blog/microsoft-sql-server-on-kubernetes/</guid><description>How Solanica Platform runs SQL Server on Kubernetes: a Go operator with Always-On AGs, Lease-based failover, native object-storage backups, and an OpenEverest provider.</description></item><item><title>Crushing Cloud Egress and Database Lock-In: The Economic Case for Solanica on VMware VKS</title><link>https://solanica.io/blog/solanica-on-vmware-vks/</link><pubDate>Tue, 07 Jul 2026 09:37:00 +0100</pubDate><guid>https://solanica.io/blog/solanica-on-vmware-vks/</guid><description>Learn how to eliminate public cloud database fees, reduce egress costs, and escape vendor lock-in by running automated DBaaS on VMware VKS with Solanica.</description></item><item><title>The Mixed-Resource Pod: How K8s QoS and Linux Cgroups Collide</title><link>https://solanica.io/blog/the-mixed-pod-requests-and-limits/</link><pubDate>Mon, 22 Jun 2026 14:53:00 +0100</pubDate><guid>https://solanica.io/blog/the-mixed-pod-requests-and-limits/</guid><description>How mixing limited and unlimited containers in a single Pod impacts Kubernetes QoS, Linux cgroup enforcement, OOM risks, and Kubelet node-pressure eviction priorities.</description></item><item><title>OpenEverest v2: Why is it a big deal</title><link>https://solanica.io/blog/openeverest-v2-why-is-it-a-big-deal/</link><pubDate>Sun, 07 Jun 2026 13:17:00 +0100</pubDate><guid>https://solanica.io/blog/openeverest-v2-why-is-it-a-big-deal/</guid><description>OpenEverest v2 introduces a modular architecture with Provider and Generic Plugins, letting teams add new databases and integrations without touching the core - in days, not months.</description></item><item><title>Percona Live 2026</title><link>https://solanica.io/events/percona-live-2026/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://solanica.io/events/percona-live-2026/</guid><description>When: May 27-29, 2026 Where: Mountain View, CA, USA</description></item><item><title>Open Source Founders Summit 2026</title><link>https://solanica.io/events/open-source-founders-summit-2026/</link><pubDate>Mon, 18 May 2026 09:00:00 +0000</pubDate><guid>https://solanica.io/events/open-source-founders-summit-2026/</guid><description>When: May 18-19, 2026 Where: Paris, France</description></item><item><title>OpenEverest Joins CNCF Sandbox: What It Means for Your Database Supply Chain</title><link>https://solanica.io/blog/openeverest-cncf-sandbox/</link><pubDate>Mon, 06 Apr 2026 18:07:00 +0100</pubDate><guid>https://solanica.io/blog/openeverest-cncf-sandbox/</guid><description>OpenEverest joins CNCF Sandbox — what vendor-neutral, CNCF-backed database infrastructure means for enterprise Kubernetes deployments and supply chain security. Learn more from Solanica.</description></item><item><title>Percona University, Bangkok</title><link>https://solanica.io/events/percona-university-bangkok/</link><pubDate>Wed, 11 Mar 2026 12:00:00 +0000</pubDate><guid>https://solanica.io/events/percona-university-bangkok/</guid><description>When: March 11, 2026 Where: Bangkok, Thailand</description></item><item><title>FOSSASIA Summit 2026</title><link>https://solanica.io/events/fossasia-summit-2026/</link><pubDate>Mon, 09 Mar 2026 17:25:00 +0000</pubDate><guid>https://solanica.io/events/fossasia-summit-2026/</guid><description>When: March 9, 2026 Where: Bangkok, Thailand</description></item><item><title>Going Agentic with OpenClaw and OpenEverest</title><link>https://solanica.io/blog/openclaw-and-openeverest-skills/</link><pubDate>Fri, 27 Feb 2026 20:38:00 +0000</pubDate><guid>https://solanica.io/blog/openclaw-and-openeverest-skills/</guid><description>Learn how to create an AI agent that manages databases on OpenEverest using OpenClaw skills generated from OpenAPI specs. Practical guide with real examples.</description></item><item><title>Build Dev Con: Cloud-Native Databases</title><link>https://solanica.io/events/build-dev-con-cloud-native-databases/</link><pubDate>Fri, 20 Feb 2026 12:00:00 +0000</pubDate><guid>https://solanica.io/events/build-dev-con-cloud-native-databases/</guid><description>When: Feb 20, 2026 Virtual event</description></item><item><title>4 MinIO Alternatives: Choosing a Storage Backend That Won’t Screw You</title><link>https://solanica.io/blog/4-minio-alternatives/</link><pubDate>Tue, 03 Feb 2026 17:50:00 +0000</pubDate><guid>https://solanica.io/blog/4-minio-alternatives/</guid><description>Ditch the MinIO license drama. The benchmark of SeaweedFS, RustFS, Ceph, and Garage - find the best open-source S3 alternative for your Kubernetes stack.</description></item><item><title>FOSDEM 2026</title><link>https://solanica.io/events/fosdem-2026/</link><pubDate>Sat, 31 Jan 2026 17:15:00 +0000</pubDate><guid>https://solanica.io/events/fosdem-2026/</guid><description>When: 31 January - 1 February 2026 Where: Brussels, Belgium</description></item><item><title>The Cloud-Native Alternative to Save on MongoDB OpsManager</title><link>https://solanica.io/blog/cloud-native-mongodb-savings/</link><pubDate>Sat, 24 Jan 2026 08:50:00 +0000</pubDate><guid>https://solanica.io/blog/cloud-native-mongodb-savings/</guid><description>Stop paying for MongoDB OpsManager. Solanica delivers enterprise backups, monitoring, and Kubernetes orchestration without the licensing fees or vendor lock-in.</description></item><item><title>AI DBA: Self-Driving Databases</title><link>https://solanica.io/events/ai-dba-self-driving-databases/</link><pubDate>Fri, 23 Jan 2026 17:05:00 +0000</pubDate><guid>https://solanica.io/events/ai-dba-self-driving-databases/</guid><description>When: Jan 23, 2026 Virtual event</description></item><item><title>OpenEverest 1.12 Release: Patching CVE-2025-14847 (MongoBleed)</title><link>https://solanica.io/blog/mongobleed-fix-openeverest/</link><pubDate>Mon, 19 Jan 2026 11:57:00 +0000</pubDate><guid>https://solanica.io/blog/mongobleed-fix-openeverest/</guid><description>OpenEverest 1.12 is out now. This release patches the critical MongoBleed vulnerability (CVE-2025-14847). Upgrade your Kubernetes data workloads immediately to secure your environment.</description></item><item><title>Supporting the Future of OpenEverest</title><link>https://solanica.io/blog/solanica-future-of-openeverest/</link><pubDate>Tue, 06 Jan 2026 09:00:00 +0000</pubDate><guid>https://solanica.io/blog/solanica-future-of-openeverest/</guid><description>OpenEverest evolves into a multi-vendor, community-driven project. Solanica launches to provide technical leadership, enterprise support, and a production-ready platform for cloud-native data.</description></item><item><title>Beyond Compliance: Why Sovereign AI and Self-Hosted Databases Are Your New Competitive Edge</title><link>https://solanica.io/blog/beyond-compliance-why-sovereign-ai-and-self-hosted-databases-are-your-new-competitive-edge/</link><pubDate>Tue, 16 Dec 2025 12:57:00 +0000</pubDate><guid>https://solanica.io/blog/beyond-compliance-why-sovereign-ai-and-self-hosted-databases-are-your-new-competitive-edge/</guid><description>Secure your AI future. Learn why sovereign clouds and self-hosted databases are critical for compliance, cost control, and speed. Don&amp;rsquo;t rent your future—build it.</description></item><item><title>A Complete Guide to Stateful Workloads on Kubernetes</title><link>https://solanica.io/whitepapers/production-data-on-k8s/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/whitepapers/production-data-on-k8s/</guid><description>&lt;section class="sol-whitepaper-hero"&gt; &lt;div class="sol-container"&gt; &lt;div class="sol-hero-content"&gt; &lt;div class="sol-breadcrumb"&gt; &lt;span class="sol-mono"&gt;/whitepapers/&lt;/span&gt; &lt;span class="sol-status-icon info"&gt;❯&lt;/span&gt; &lt;span class="sol-mono"&gt;data-on-kubernetes&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;The Cloud-Native Data Manual&lt;/h1&gt; &lt;h2&gt;Engineering Production Databases on Kubernetes&lt;/h2&gt; &lt;p class="sol-tagline"&gt;The debate is over. The real question is: &lt;code&gt;how&lt;/code&gt; do you manage stateful workloads without losing data or burning cash?&lt;/p&gt; &lt;div class="sol-metadata"&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon success"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;STATUS: PRODUCTION_READY&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon info"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;AUDIENCE: SRE | DBRE | PLATFORM_ENG&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon warning"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;LEVEL: ADVANCED_OPS&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 /* --- Base --- */
 .sol-whitepaper-hero {
 background: linear-gradient(135deg, #0a0a1f 0%, #161641 100%);
 padding: 120px 20px 80px 20px;
 font-family: 'Inter', sans-serif;
 color: #ffffff;
 border-bottom: 2px solid #7790de;
 position: relative;
 overflow: hidden;
 }

 .sol-whitepaper-hero::before {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 bottom: 0;
 background-image: 
 linear-gradient(90deg, rgba(119, 144, 222, 0.05) 1px, transparent 1px),
 linear-gradient(rgba(119, 144, 222, 0.05) 1px, transparent 1px);
 background-size: 50px 50px;
 opacity: 0.3;
 pointer-events: none;
 }

 .sol-container {
 max-width: 1200px;
 margin: 0 auto;
 position: relative;
 z-index: 1;
 }

 /* --- Breadcrumb --- */
 .sol-breadcrumb {
 display: flex;
 align-items: center;
 gap: 10px;
 margin-bottom: 30px;
 font-size: 14px;
 }

 .sol-mono {
 font-family: 'Courier New', monospace;
 color: #7790de;
 font-weight: 600;
 }

 .sol-status-icon {
 font-size: 12px;
 }
 .success { color: #00ff9d; }
 .info { color: #2ecc71; }
 .warning { color: #ffbd2e; }

 /* --- Typography --- */
 .sol-hero-content h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 800;
 margin: 0 0 15px 0;
 color: #ffffff;
 letter-spacing: -0.5px;
 }

 .sol-hero-content h2 {
 font-size: 32px;
 line-height: 1.3;
 font-weight: 600;
 margin: 0 0 30px 0;
 color: #7790de;
 }

 .sol-tagline {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 margin-bottom: 40px;
 max-width: 800px;
 }

 .sol-tagline code {
 background: rgba(119, 144, 222, 0.15);
 color: #00ff9d;
 padding: 2px 10px;
 border-radius: 4px;
 font-family: 'Fira Code', 'Courier New', monospace;
 font-size: 0.95em;
 font-weight: 600;
 }

 /* --- Metadata --- */
 .sol-metadata {
 display: flex;
 flex-wrap: wrap;
 gap: 20px;
 margin-top: 40px;
 padding-top: 30px;
 border-top: 1px solid rgba(255,255,255,0.1);
 }

 .sol-meta-item {
 display: flex;
 align-items: center;
 gap: 8px;
 font-size: 13px;
 }

 @media (max-width: 768px) {
 .sol-hero-content h1 { font-size: 36px; }
 .sol-hero-content h2 { font-size: 24px; }
 .sol-tagline { font-size: 16px; }
 .sol-metadata { flex-direction: column; gap: 15px; }
 }
&lt;/style&gt;

&lt;section class="sol-exec-summary"&gt; &lt;div class="sol-container"&gt; &lt;div class="sol-section-header"&gt; &lt;span class="sol-mono sol-section-label"&gt;$ cat executive-summary.txt&lt;/span&gt; &lt;h2&gt;Executive Summary&lt;/h2&gt; &lt;/div&gt; &lt;div class="sol-summary-content"&gt; &lt;div class="sol-main-text"&gt; &lt;p&gt;The debate over whether databases "belong" on Kubernetes is settled. The discussion is now strictly operational: how do you manage stateful workloads at scale without losing data or overpaying for "zombie" resources? Kubernetes is a world-class orchestrator, but it is fundamentally "data-blind." It understands process status, but it is oblivious to database deadlocks or replica divergence.&lt;/p&gt;</description></item><item><title>Abstracting the Abyss: How to Run Production Data Workloads on Any Kubernetes Cluster</title><link>https://solanica.io/presentations/cloud-native-gandhinagar-april-2026/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/presentations/cloud-native-gandhinagar-april-2026/</guid><description>&lt;!-- ============================================================
 Cloud Native Gandhinagar — April 18, 2026
 _meta.t123.html (copied from shared/_meta.t123.html)
 ============================================================ --&gt; &lt;script&gt;
(function () {

 /* =========================================================
 CONFIG
 ========================================================= */
 var META = {
 title: "Abstracting the Abyss: How to Run Production Data Workloads on Any Kubernetes Cluster — Solanica",
 slug: "abstracting-the-abyss-cloud-native-gandhinagar-2026",
 description: "A practical deep-dive into running production databases on Kubernetes — without vendor lock-in. Presented by Sergey Pronin at Cloud Native Gandhinagar, April 2026.",
 speaker: "Sergey Pronin",
 event: "Cloud Native Gandhinagar",
 eventUrl: "https://community.cncf.io/events/details/cncf-cloud-native-gandhinagar-presents-abstracting-the-abyss-with-sergey-pronin-simplifying-data-workloads-on-kubernetes/",
 date: "2026-04-18",
 location: "Gandhinagar, India",
 tags: ["kubernetes", "databases", "cncf", "postgresql", "mysql", "mongodb", "cloud-native"],
 status: "upcoming",
 coverImage: "https://solanica.io/og-default.png",
 pageUrl: "https://solanica.io/presentations/abstracting-the-abyss-cloud-native-gandhinagar-2026"
 };
 /* ========================================================= */

 var d = document;

 function tag(name, attrs) {
 var key = attrs.property || attrs.name;
 if (key) {
 var existing = d.querySelector(
 'meta[property="' + key + '"], meta[name="' + key + '"]'
 );
 if (existing) existing.parentNode.removeChild(existing);
 }
 var el = d.createElement(name);
 Object.keys(attrs).forEach(function (k) { el.setAttribute(k, attrs[k]); });
 return el;
 }

 var head = d.head || d.getElementsByTagName('head')[0];

 var titleEl = d.querySelector('title');
 if (titleEl) {
 titleEl.textContent = META.title;
 } else {
 var t = d.createElement('title');
 t.textContent = META.title;
 head.appendChild(t);
 }

 head.appendChild(tag('meta', { name: 'description', content: META.description }));
 head.appendChild(tag('meta', { name: 'author', content: META.speaker }));
 head.appendChild(tag('meta', { name: 'keywords', content: META.tags.join(', ') }));
 head.appendChild(tag('link', { rel: 'canonical', href: META.pageUrl }));

 head.appendChild(tag('meta', { property: 'og:type', content: 'website' }));
 head.appendChild(tag('meta', { property: 'og:title', content: META.title }));
 head.appendChild(tag('meta', { property: 'og:description', content: META.description }));
 head.appendChild(tag('meta', { property: 'og:image', content: META.coverImage }));
 head.appendChild(tag('meta', { property: 'og:url', content: META.pageUrl }));
 head.appendChild(tag('meta', { property: 'og:site_name', content: 'Solanica' }));

 head.appendChild(tag('meta', { name: 'twitter:card', content: 'summary_large_image' }));
 head.appendChild(tag('meta', { name: 'twitter:site', content: '@solanicaio' }));
 head.appendChild(tag('meta', { name: 'twitter:title', content: META.title }));
 head.appendChild(tag('meta', { name: 'twitter:description', content: META.description }));
 head.appendChild(tag('meta', { name: 'twitter:image', content: META.coverImage }));

 var schema = {
 "@context": "https://schema.org",
 "@type": "Event",
 "name": META.title,
 "description": META.description,
 "startDate": META.date,
 "location": {
 "@type": "Place",
 "name": META.event,
 "address": META.location
 },
 "url": META.eventUrl,
 "organizer": {
 "@type": "Organization",
 "name": META.event,
 "url": META.eventUrl
 },
 "performer": {
 "@type": "Person",
 "name": META.speaker
 },
 "image": META.coverImage,
 "eventStatus": "https://schema.org/EventScheduled"
 };
 var ldScript = d.createElement('script');
 ldScript.type = 'application/ld+json';
 ldScript.textContent = JSON.stringify(schema, null, 2);
 head.appendChild(ldScript);

 window.__presMETA = META;

}());
&lt;/script&gt;

&lt;!-- ============================================================
 Solanica Presentation Engine — _head.t123.html
 ADD THIS AS THE FIRST BLOCK on every Tilda presentation page.
 It applies scroll-snap to the page and styles shared by all slides.
 ============================================================ --&gt; &lt;style&gt;
 /* ---- Page-level scroll snap ---- */
 html {
 scroll-snap-type: y mandatory;
 scroll-behavior: smooth;
 overflow-y: scroll;
 scrollbar-width: none;
 -ms-overflow-style: none;
 }
 html::-webkit-scrollbar { display: none; }

 body {
 margin: 0;
 padding: 0;
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 background: #0f0f29;
 }

 /* ---- Slide base ---- */
 .slide {
 height: 100vh;
 width: 100%;
 scroll-snap-align: start;
 scroll-snap-stop: always;
 position: relative;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
 }

 /* ---- Navigation dots (right edge) ---- */
 .pres-dots {
 position: fixed;
 right: 18px;
 top: 50%;
 transform: translateY(-50%);
 display: flex;
 flex-direction: column;
 gap: 10px;
 z-index: 9999;
 list-style: none;
 margin: 0;
 padding: 0;
 }
 .pres-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.22);
 cursor: pointer;
 border: none;
 padding: 0;
 outline: none;
 transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
 }
 .pres-dot:hover { background: rgba(255, 255, 255, 0.5); }
 .pres-dot.active {
 background: #7790de;
 box-shadow: 0 0 8px rgba(119, 144, 222, 0.6);
 transform: scale(1.5);
 }

 /* ---- Slide counter (bottom-right) ---- */
 .pres-counter {
 position: fixed;
 bottom: 20px;
 right: 24px;
 color: rgba(255, 255, 255, 0.28);
 font-size: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 }

 /* ---- Key hint (bottom-centre, fades out) ---- */
 .pres-hint {
 position: fixed;
 bottom: 18px;
 left: 50%;
 transform: translateX(-50%);
 color: rgba(255, 255, 255, 0.22);
 font-size: 11px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 text-transform: uppercase;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 white-space: nowrap;
 transition: opacity 1.4s ease;
 }
 .pres-hint.hidden { opacity: 0; }

 /* ---- Left-edge back trigger ---- */
 .pres-back-trigger {
 position: fixed;
 left: 0;
 top: 0;
 width: 48px;
 height: 100vh;
 z-index: 9998;
 cursor: pointer;
 }
 .pres-back-trigger:hover .pres-back-label {
 opacity: 1;
 transform: translateX(0);
 }
 .pres-back-label {
 position: absolute;
 top: 50%;
 left: 16px;
 transform: translateY(-50%) translateX(-8px);
 opacity: 0;
 transition: opacity 0.25s ease, transform 0.25s ease;
 display: flex;
 align-items: center;
 gap: 10px;
 white-space: nowrap;
 color: rgba(255, 255, 255, 0.75);
 font-size: 13px;
 font-family: 'Inter', system-ui, sans-serif;
 font-weight: 500;
 letter-spacing: 0.03em;
 text-decoration: none;
 padding: 10px 16px 10px 12px;
 background: rgba(15, 15, 41, 0.85);
 border: 1px solid rgba(255, 255, 255, 0.1);
 border-radius: 8px;
 backdrop-filter: blur(8px);
 -webkit-backdrop-filter: blur(8px);
 pointer-events: auto;
 }
 .pres-back-label:hover {
 color: #ffffff;
 border-color: rgba(255, 255, 255, 0.25);
 }
 .pres-back-arrow {
 font-size: 16px;
 line-height: 1;
 flex-shrink: 0;
 }

 /* ---- Mobile: desktop hint toast ---- */
 .pres-mob-toast {
 position: fixed;
 top: 16px;
 left: 50%;
 transform: translateX(-50%);
 z-index: 99999;
 background: rgba(15, 15, 41, 0.92);
 border: 1px solid rgba(119, 144, 222, 0.3);
 border-radius: 10px;
 backdrop-filter: blur(12px);
 -webkit-backdrop-filter: blur(12px);
 padding: 10px 10px 10px 16px;
 display: flex;
 align-items: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 font-size: 13px;
 color: rgba(200, 212, 228, 0.8);
 white-space: nowrap;
 opacity: 1;
 transition: opacity 0.4s ease, transform 0.4s ease;
 pointer-events: auto;
 }
 .pres-mob-toast.hidden {
 opacity: 0;
 transform: translateX(-50%) translateY(-8px);
 pointer-events: none;
 }
 .pres-mob-toast-close {
 width: 22px;
 height: 22px;
 border: 1px solid rgba(255, 255, 255, 0.1);
 background: rgba(255, 255, 255, 0.06);
 border-radius: 50%;
 color: rgba(200, 212, 228, 0.55);
 font-size: 12px;
 line-height: 1;
 cursor: pointer;
 display: flex;
 align-items: center;
 justify-content: center;
 padding: 0;
 flex-shrink: 0;
 transition: background 0.2s, color 0.2s;
 }
 .pres-mob-toast-close:hover {
 background: rgba(255, 255, 255, 0.12);
 color: rgba(200, 212, 228, 0.9);
 }

 /* ============================================================
 MOBILE — scale-to-fit: preserve desktop layout, shrink it
 to fit the phone screen. Users pinch-to-zoom for details.
 ============================================================ */
 @media (max-width: 768px) {

 /* Disable snap — Tilda's header shifts the snap anchor
 of slide-1 below the viewport edge, causing it to be
 skipped. Natural scroll is more reliable on touch. */
 html {
 scroll-snap-type: none;
 }

 /* Keep slides as fixed-height viewports */
 .slide {
 height: 100svh;
 scroll-snap-align: none;
 scroll-snap-stop: normal;
 }

 /* Hide keyboard-centric chrome — not useful on touch */
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger {
 display: none !important;
 }

 /* Scale the content wrapper to fit the viewport width.
 --pres-mob-scale is set by JS in _foot.t123.html.
 The wrapper renders at its desktop width (1060px) and
 is visually scaled down via CSS transform. */
 .slide &gt; [class*="-wrap"],
 .slide &gt; [class*="-outer"] {
 width: 1060px !important;
 max-width: none !important;
 transform: scale(var(--pres-mob-scale, 1));
 transform-origin: center center;
 }
 }

 /* ============================================================
 PRINT — one slide per page, hide navigation chrome.
 Use landscape orientation, no margins for best results.
 ============================================================ */
 @media print {
 html {
 scroll-snap-type: none;
 overflow: visible;
 }
 body {
 background: #0a0a1e;
 -webkit-print-color-adjust: exact;
 print-color-adjust: exact;
 }
 .slide {
 height: 100vh;
 width: 100vw;
 page-break-after: always;
 break-after: page;
 page-break-inside: avoid;
 break-inside: avoid;
 scroll-snap-align: none;
 overflow: hidden;
 }
 .slide:last-child {
 page-break-after: auto;
 break-after: auto;
 }
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger,
 .pres-mob-toast {
 display: none !important;
 }
 /* Reveal all step-animated elements — force final state */
 .slide * {
 opacity: 1 !important;
 transform: none !important;
 visibility: visible !important;
 transition: none !important;
 animation: none !important;
 }
 }
&lt;/style&gt;

&lt;!-- ============================================================
 Cloud Native Gandhinagar — April 18, 2026
 Slide 01: Title
 ============================================================ --&gt; &lt;style&gt;
 #cng-slide-01 {
 background-color: #0f0f29;
 background-image:
 radial-gradient(ellipse at 20% 80%, rgba(31, 35, 85, 0.7) 0%, transparent 55%),
 radial-gradient(ellipse at 80% 20%, rgba(31, 35, 85, 0.5) 0%, transparent 50%),
 radial-gradient(circle at 50% 50%, #131333 0%, #0a0a1e 100%);
 }

 #cng01-canvas {
 position: absolute;
 inset: 0;
 width: 100%;
 height: 100%;
 pointer-events: none;
 z-index: 0;
 }

 .cng01-wrap {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-between;
 height: 100%;
 width: 100%;
 position: relative;
 z-index: 1;
 max-width: 960px;
 padding: 56px 40px 48px;
 box-sizing: border-box;
 text-align: center;
 }

 /* Top: logos */
 .cng01-logos {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 28px;
 }
 .cng01-logo {
 display: block;
 height: 44px;
 width: auto;
 opacity: 0.92;
 }
 .cng01-logo-divider {
 width: 1px;
 height: 32px;
 background: rgba(255, 255, 255, 0.15);
 flex-shrink: 0;
 }
 .cng01-logo-cncf {
 display: block;
 height: 36px;
 width: auto;
 opacity: 0.80;
 }

 /* Centre: title block */
 .cng01-body {
 flex: 1;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 gap: 0;
 }

 .cng01-eyebrow {
 font-size: 11px;
 letter-spacing: 0.22em;
 text-transform: uppercase;
 color: #7790de;
 font-weight: 600;
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 32px;
 }

 .cng01-title {
 font-size: 62px;
 font-weight: 700;
 color: #ffffff;
 line-height: 1.08;
 letter-spacing: -2px;
 margin: 0 0 36px;
 font-family: 'Inter', system-ui, sans-serif;
 max-width: 860px;
 }

 .cng01-speaker {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .cng01-speaker-name {
 color: #ffffff;
 font-size: 17px;
 font-weight: 600;
 }

 .cng01-speaker-role {
 color: #7a8a9e;
 font-size: 14px;
 font-weight: 400;
 }

 .cng01-sep {
 width: 4px;
 height: 4px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.2);
 flex-shrink: 0;
 }

 /* Bottom: event meta */
 .cng01-footer {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 20px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .cng01-event-badge {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 padding: 8px 16px;
 border: 1px solid rgba(119, 144, 222, 0.3);
 border-radius: 50px;
 color: #9ab0e0;
 font-size: 13px;
 font-weight: 500;
 background: rgba(119, 144, 222, 0.06);
 }

 .cng01-event-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: #7790de;
 flex-shrink: 0;
 }

 .cng01-date {
 color: rgba(255, 255, 255, 0.28);
 font-size: 13px;
 }

 .cng01-footer-divider {
 width: 1px;
 height: 14px;
 background: rgba(255, 255, 255, 0.1);
 }

 .cng01-event-link {
 color: rgba(255, 255, 255, 0.28) !important;
 font-size: 13px;
 text-decoration: none !important;
 transition: color 0.2s;
 }
 .cng01-event-link:hover {
 color: rgba(255, 255, 255, 0.6) !important;
 }
&lt;/style&gt; &lt;div class="slide" id="cng-slide-01"&gt; &lt;canvas id="cng01-canvas"&gt;&lt;/canvas&gt; &lt;div class="cng01-wrap"&gt; &lt;!-- Logos --&gt; &lt;div class="cng01-logos"&gt; &lt;img
 class="cng01-logo"
 src="https://solanica.io/images/pages/tild6161-6333-4631-b266-656534633030__white-horizontal-col.png"
 alt="Solanica"
 /&gt; &lt;span class="cng01-logo-divider"&gt;&lt;/span&gt; &lt;img
 class="cng01-logo-cncf"
 src="https://solanica.io/images/pages/tild3762-3430-4866-b537-366239336564__cncf-white.png"
 alt="CNCF"
 /&gt; &lt;/div&gt; &lt;!-- Title --&gt; &lt;div class="cng01-body"&gt; &lt;p class="cng01-eyebrow"&gt;Talk · Cloud Native Gandhinagar&lt;/p&gt;</description></item><item><title>Abstracting the Abyss: How to Run Production Data Workloads on Any Kubernetes Cluster</title><link>https://solanica.io/presentations/in-the-cloud-be-cloud-ready-builddevcon-2026/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/presentations/in-the-cloud-be-cloud-ready-builddevcon-2026/</guid><description>&lt;!-- ============================================================
 BuildDevCon — April 24, 2026
 _meta.t123.html
 ============================================================ --&gt; &lt;script&gt;
(function () {

 var META = {
 title: "In the Cloud? Be Cloud-Ready Instead — Solanica",
 slug: "in-the-cloud-be-cloud-ready-builddevcon-2026",
 description: "Escaping the Golden Cage: how Kubernetes Operators and OpenEverest replace managed database lock-in with portable, open source infrastructure. Presented by Sergey Pronin at BuildDevCon, April 2026.",
 speaker: "Sergey Pronin",
 event: "BuildDevCon",
 eventUrl: "https://buildevcon.com/events/running-oss-databases-on-aws",
 date: "2026-04-24",
 location: "Virtual",
 tags: ["kubernetes", "databases", "aws", "postgresql", "mysql", "mongodb", "cloud-native", "operators"],
 status: "upcoming",
 coverImage: "https://solanica.io/og-default.png",
 pageUrl: "https://solanica.io/presentations/in-the-cloud-be-cloud-ready-builddevcon-2026"
 };

 window.__presMETA = META;

 var d = document;

 function tag(name, attrs) {
 var key = attrs.property || attrs.name;
 if (key) {
 var existing = d.querySelector(
 'meta[property="' + key + '"], meta[name="' + key + '"]'
 );
 if (existing) existing.parentNode.removeChild(existing);
 }
 var el = d.createElement(name);
 Object.keys(attrs).forEach(function (k) { el.setAttribute(k, attrs[k]); });
 return el;
 }

 var head = d.head || d.getElementsByTagName('head')[0];

 var titleEl = d.querySelector('title');
 if (titleEl) {
 titleEl.textContent = META.title;
 } else {
 var t = d.createElement('title');
 t.textContent = META.title;
 head.appendChild(t);
 }

 head.appendChild(tag('meta', { name: 'description', content: META.description }));
 head.appendChild(tag('meta', { name: 'author', content: META.speaker }));
 head.appendChild(tag('meta', { name: 'keywords', content: META.tags.join(', ') }));
 head.appendChild(tag('link', { rel: 'canonical', href: META.pageUrl }));

 head.appendChild(tag('meta', { property: 'og:type', content: 'website' }));
 head.appendChild(tag('meta', { property: 'og:title', content: META.title }));
 head.appendChild(tag('meta', { property: 'og:description', content: META.description }));
 head.appendChild(tag('meta', { property: 'og:image', content: META.coverImage }));
 head.appendChild(tag('meta', { property: 'og:url', content: META.pageUrl }));
 head.appendChild(tag('meta', { property: 'og:site_name', content: 'Solanica' }));

 head.appendChild(tag('meta', { name: 'twitter:card', content: 'summary_large_image' }));
 head.appendChild(tag('meta', { name: 'twitter:site', content: '@solanicaio' }));
 head.appendChild(tag('meta', { name: 'twitter:title', content: META.title }));
 head.appendChild(tag('meta', { name: 'twitter:description', content: META.description }));
 head.appendChild(tag('meta', { name: 'twitter:image', content: META.coverImage }));

 var schema = {
 "@context": "https://schema.org",
 "@type": "Event",
 "name": META.title,
 "description": META.description,
 "startDate": META.date,
 "location": { "@type": "VirtualLocation", "name": META.event, "url": META.eventUrl },
 "url": META.eventUrl,
 "organizer": { "@type": "Organization", "name": META.event, "url": META.eventUrl },
 "performer": { "@type": "Person", "name": META.speaker },
 "image": META.coverImage
 };

 var ld = d.createElement('script');
 ld.type = 'application/ld+json';
 ld.textContent = JSON.stringify(schema, null, 2);
 head.appendChild(ld);

}());
&lt;/script&gt;

&lt;!-- ============================================================
 Solanica Presentation Engine — _head.t123.html
 ADD THIS AS THE FIRST BLOCK on every Tilda presentation page.
 It applies scroll-snap to the page and styles shared by all slides.
 ============================================================ --&gt; &lt;style&gt;
 /* ---- Page-level scroll snap ---- */
 html {
 scroll-snap-type: y mandatory;
 scroll-behavior: smooth;
 overflow-y: scroll;
 scrollbar-width: none;
 -ms-overflow-style: none;
 }
 html::-webkit-scrollbar { display: none; }

 body {
 margin: 0;
 padding: 0;
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 background: #0f0f29;
 }

 /* ---- Slide base ---- */
 .slide {
 height: 100vh;
 width: 100%;
 scroll-snap-align: start;
 scroll-snap-stop: always;
 position: relative;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
 }

 /* ---- Navigation dots (right edge) ---- */
 .pres-dots {
 position: fixed;
 right: 18px;
 top: 50%;
 transform: translateY(-50%);
 display: flex;
 flex-direction: column;
 gap: 10px;
 z-index: 9999;
 list-style: none;
 margin: 0;
 padding: 0;
 }
 .pres-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.22);
 cursor: pointer;
 border: none;
 padding: 0;
 outline: none;
 transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
 }
 .pres-dot:hover { background: rgba(255, 255, 255, 0.5); }
 .pres-dot.active {
 background: #7790de;
 box-shadow: 0 0 8px rgba(119, 144, 222, 0.6);
 transform: scale(1.5);
 }

 /* ---- Slide counter (bottom-right) ---- */
 .pres-counter {
 position: fixed;
 bottom: 20px;
 right: 24px;
 color: rgba(255, 255, 255, 0.28);
 font-size: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 }

 /* ---- Key hint (bottom-centre, fades out) ---- */
 .pres-hint {
 position: fixed;
 bottom: 18px;
 left: 50%;
 transform: translateX(-50%);
 color: rgba(255, 255, 255, 0.22);
 font-size: 11px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 text-transform: uppercase;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 white-space: nowrap;
 transition: opacity 1.4s ease;
 }
 .pres-hint.hidden { opacity: 0; }

 /* ---- Left-edge back trigger ---- */
 .pres-back-trigger {
 position: fixed;
 left: 0;
 top: 0;
 width: 48px;
 height: 100vh;
 z-index: 9998;
 cursor: pointer;
 }
 .pres-back-trigger:hover .pres-back-label {
 opacity: 1;
 transform: translateY(-50%) translateX(0);
 }
 .pres-back-label {
 position: absolute;
 top: 50%;
 left: 16px;
 transform: translateY(-50%) translateX(-8px);
 opacity: 0;
 transition: opacity 0.25s ease, transform 0.25s ease;
 display: flex;
 align-items: center;
 gap: 10px;
 white-space: nowrap;
 color: rgba(255, 255, 255, 0.75);
 font-size: 13px;
 font-family: 'Inter', system-ui, sans-serif;
 font-weight: 500;
 letter-spacing: 0.03em;
 text-decoration: none;
 padding: 10px 16px 10px 12px;
 background: rgba(15, 15, 41, 0.85);
 border: 1px solid rgba(255, 255, 255, 0.1);
 border-radius: 8px;
 backdrop-filter: blur(8px);
 -webkit-backdrop-filter: blur(8px);
 pointer-events: auto;
 }
 .pres-back-label:hover {
 color: #ffffff;
 border-color: rgba(255, 255, 255, 0.25);
 }
 .pres-back-arrow {
 font-size: 16px;
 line-height: 1;
 flex-shrink: 0;
 }

 /* ---- Mobile: desktop hint toast ---- */
 .pres-mob-toast {
 position: fixed;
 top: 16px;
 left: 50%;
 transform: translateX(-50%);
 z-index: 99999;
 background: rgba(15, 15, 41, 0.92);
 border: 1px solid rgba(119, 144, 222, 0.3);
 border-radius: 10px;
 backdrop-filter: blur(12px);
 -webkit-backdrop-filter: blur(12px);
 padding: 10px 10px 10px 16px;
 display: flex;
 align-items: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 font-size: 13px;
 color: rgba(200, 212, 228, 0.8);
 white-space: nowrap;
 opacity: 1;
 transition: opacity 0.4s ease, transform 0.4s ease;
 pointer-events: auto;
 }
 .pres-mob-toast.hidden {
 opacity: 0;
 transform: translateX(-50%) translateY(-8px);
 pointer-events: none;
 }
 .pres-mob-toast-close {
 width: 22px;
 height: 22px;
 border: 1px solid rgba(255, 255, 255, 0.1);
 background: rgba(255, 255, 255, 0.06);
 border-radius: 50%;
 color: rgba(200, 212, 228, 0.55);
 font-size: 12px;
 line-height: 1;
 cursor: pointer;
 display: flex;
 align-items: center;
 justify-content: center;
 padding: 0;
 flex-shrink: 0;
 transition: background 0.2s, color 0.2s;
 }
 .pres-mob-toast-close:hover {
 background: rgba(255, 255, 255, 0.12);
 color: rgba(200, 212, 228, 0.9);
 }

 /* ============================================================
 MOBILE — scale-to-fit: preserve desktop layout, shrink it
 to fit the phone screen. Users pinch-to-zoom for details.
 ============================================================ */
 @media (max-width: 768px) {

 /* Disable snap — Tilda's header shifts the snap anchor
 of slide-1 below the viewport edge, causing it to be
 skipped. Natural scroll is more reliable on touch. */
 html {
 scroll-snap-type: none;
 }

 /* Keep slides as fixed-height viewports */
 .slide {
 height: 100svh;
 scroll-snap-align: none;
 scroll-snap-stop: normal;
 }

 /* Hide keyboard-centric chrome — not useful on touch */
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger {
 display: none !important;
 }

 /* Scale the content wrapper to fit the viewport width.
 --pres-mob-scale is set by JS in _foot.t123.html.
 The wrapper renders at its desktop width (1060px) and
 is visually scaled down via CSS transform. */
 .slide &gt; [class*="-wrap"],
 .slide &gt; [class*="-outer"] {
 width: 1060px !important;
 max-width: none !important;
 transform: scale(var(--pres-mob-scale, 1));
 transform-origin: center center;
 }
 }

 /* ============================================================
 PRINT — one slide per page, hide navigation chrome.
 Use landscape orientation, no margins for best results.
 ============================================================ */
 @media print {
 html {
 scroll-snap-type: none;
 overflow: visible;
 }
 body {
 background: #0a0a1e;
 -webkit-print-color-adjust: exact;
 print-color-adjust: exact;
 }
 .slide {
 height: 100vh;
 width: 100vw;
 page-break-after: always;
 break-after: page;
 page-break-inside: avoid;
 break-inside: avoid;
 scroll-snap-align: none;
 overflow: hidden;
 }
 .slide:last-child {
 page-break-after: auto;
 break-after: auto;
 }
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger,
 .pres-mob-toast {
 display: none !important;
 }
 /* Reveal all step-animated elements — force final state */
 .slide * {
 opacity: 1 !important;
 transform: none !important;
 visibility: visible !important;
 transition: none !important;
 animation: none !important;
 }
 }
&lt;/style&gt;

&lt;!-- ============================================================
 BuildDevCon — April 24, 2026
 Slide 01: Title
 ============================================================ --&gt; &lt;style&gt;
 #bdc-slide-01 {
 background-color: #0a0a1e;
 background-image:
 radial-gradient(ellipse at 20% 80%, rgba(31, 35, 85, 0.75) 0%, transparent 55%),
 radial-gradient(ellipse at 80% 20%, rgba(31, 35, 85, 0.55) 0%, transparent 50%),
 radial-gradient(circle at 50% 50%, #131333 0%, #080818 100%);
 }

 #bdc01-canvas {
 position: absolute;
 inset: 0;
 width: 100%;
 height: 100%;
 pointer-events: none;
 z-index: 0;
 }

 .bdc01-wrap {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-between;
 height: 100%;
 width: 100%;
 position: relative;
 z-index: 1;
 max-width: 1280px;
 padding: 48px 40px 44px;
 box-sizing: border-box;
 text-align: center;
 }

 .bdc01-logos {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 28px;
 }

 .bdc01-logo {
 display: block;
 height: 54px;
 width: auto;
 opacity: 0.92;
 }

 .bdc01-logo-divider {
 width: 1px;
 height: 34px;
 background: rgba(255, 255, 255, 0.14);
 flex-shrink: 0;
 }

 .bdc01-event-logo {
 height: 40px;
 width: auto;
 opacity: 0.9;
 }

 .bdc01-body {
 flex: 1;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 gap: 0;
 }

 .bdc01-eyebrow {
 font-size: 14px;
 letter-spacing: 0.22em;
 text-transform: uppercase;
 color: #e8a04c;
 font-weight: 600;
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 28px;
 }

 .bdc01-title {
 font-size: 76px;
 font-weight: 800;
 color: #ffffff;
 line-height: 1.06;
 letter-spacing: -2.5px;
 margin: 0 0 22px;
 font-family: 'Inter', system-ui, sans-serif;
 max-width: 1100px;
 }

 .bdc01-title span {
 color: #7790de;
 }

 .bdc01-subtitle {
 font-size: 20px;
 font-weight: 300;
 color: rgba(220, 228, 240, 0.45);
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 40px;
 letter-spacing: -0.2px;
 }

 .bdc01-speaker {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .bdc01-speaker-name {
 color: #ffffff;
 font-size: 22px;
 font-weight: 600;
 }

 .bdc01-sep {
 width: 4px;
 height: 4px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.2);
 flex-shrink: 0;
 }

 .bdc01-speaker-role {
 color: #7a8a9e;
 font-size: 18px;
 font-weight: 400;
 }

 .bdc01-footer {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 20px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .bdc01-event-badge {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 padding: 8px 18px;
 border: 1px solid rgba(232, 160, 76, 0.3);
 border-radius: 50px;
 color: rgba(232, 160, 76, 0.8);
 font-size: 15px;
 font-weight: 500;
 background: rgba(232, 160, 76, 0.06);
 }

 .bdc01-event-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: #e8a04c;
 flex-shrink: 0;
 }

 .bdc01-date {
 color: rgba(255, 255, 255, 0.28);
 font-size: 15px;
 }

 .bdc01-footer-divider {
 width: 1px;
 height: 14px;
 background: rgba(255, 255, 255, 0.1);
 }

 .bdc01-event-link {
 color: rgba(255, 255, 255, 0.28) !important;
 font-size: 15px;
 text-decoration: none !important;
 transition: color 0.2s;
 }
 .bdc01-event-link:hover {
 color: rgba(255, 255, 255, 0.6) !important;
 }
&lt;/style&gt; &lt;div class="slide" id="bdc-slide-01"&gt; &lt;canvas id="bdc01-canvas"&gt;&lt;/canvas&gt; &lt;div class="bdc01-wrap"&gt; &lt;div class="bdc01-logos"&gt; &lt;img
 class="bdc01-logo"
 src="https://solanica.io/images/pages/tild6161-6333-4631-b266-656534633030__white-horizontal-col.png"
 alt="Solanica"
 /&gt; &lt;span class="bdc01-logo-divider"&gt;&lt;/span&gt; &lt;img class="bdc01-event-logo" src="https://solanica.io/images/pages/tild3134-6535-4430-b335-633664396165__builddevcon_logo.png" alt="BuildDevCon" /&gt; &lt;/div&gt; &lt;div class="bdc01-body"&gt; &lt;p class="bdc01-eyebrow"&gt;Running OSS Databases on AWS · April 24, 2026&lt;/p&gt;</description></item><item><title>Age Gap Is Not A Problem - MySQL and Cloud-Native</title><link>https://solanica.io/presentations/mysql-cloud-native-builddevcon-2026/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/presentations/mysql-cloud-native-builddevcon-2026/</guid><description>&lt;!-- ============================================================
 BuildDevCon: MariaDB &amp; MySQL on Kubernetes — June 25, 2026
 _meta.t123.html
 ============================================================ --&gt; &lt;script&gt;
(function () {

 var META = {
 title: "Age Gap Is Not A Problem — MySQL and Cloud-Native — Solanica",
 slug: "mysql-cloud-native-builddevcon-2026",
 description: "MySQL is 30. Kubernetes is 12. Can a database from the dial-up era really feel at home in a cloud-native world? Sergey Pronin, founder of Solanica, walks through what it takes to run MySQL on Kubernetes the right way — operators, storage, failover, and the patterns that actually work in production.",
 speaker: "Sergey Pronin",
 event: "BuildDevCon: MariaDB &amp; MySQL on Kubernetes",
 eventUrl: "https://buildevcon.com/events/mariadb-mysql-on-kubernetes",
 date: "2026-06-25",
 location: "Virtual",
 tags: ["mysql", "mariadb", "kubernetes", "cloud-native", "operators", "databases", "solanica"],
 status: "upcoming",
 coverImage: "https://solanica.io/og-default.png",
 pageUrl: "https://solanica.io/presentations/mysql-cloud-native-builddevcon-2026"
 };

 window.__presMETA = META;

 var d = document;

 function tag(name, attrs) {
 var key = attrs.property || attrs.name;
 if (key) {
 var existing = d.querySelector(
 'meta[property="' + key + '"], meta[name="' + key + '"]'
 );
 if (existing) existing.parentNode.removeChild(existing);
 }
 var el = d.createElement(name);
 Object.keys(attrs).forEach(function (k) { el.setAttribute(k, attrs[k]); });
 return el;
 }

 var head = d.head || d.getElementsByTagName('head')[0];

 var titleEl = d.querySelector('title');
 if (titleEl) {
 titleEl.textContent = META.title;
 } else {
 var t = d.createElement('title');
 t.textContent = META.title;
 head.appendChild(t);
 }

 head.appendChild(tag('meta', { name: 'description', content: META.description }));
 head.appendChild(tag('meta', { name: 'author', content: META.speaker }));
 head.appendChild(tag('meta', { name: 'keywords', content: META.tags.join(', ') }));
 head.appendChild(tag('link', { rel: 'canonical', href: META.pageUrl }));

 head.appendChild(tag('meta', { property: 'og:type', content: 'website' }));
 head.appendChild(tag('meta', { property: 'og:title', content: META.title }));
 head.appendChild(tag('meta', { property: 'og:description', content: META.description }));
 head.appendChild(tag('meta', { property: 'og:image', content: META.coverImage }));
 head.appendChild(tag('meta', { property: 'og:url', content: META.pageUrl }));
 head.appendChild(tag('meta', { property: 'og:site_name', content: 'Solanica' }));

 head.appendChild(tag('meta', { name: 'twitter:card', content: 'summary_large_image' }));
 head.appendChild(tag('meta', { name: 'twitter:site', content: '@solanicaio' }));
 head.appendChild(tag('meta', { name: 'twitter:title', content: META.title }));
 head.appendChild(tag('meta', { name: 'twitter:description', content: META.description }));
 head.appendChild(tag('meta', { name: 'twitter:image', content: META.coverImage }));

 var schema = {
 "@context": "https://schema.org",
 "@type": "Event",
 "name": META.title,
 "description": META.description,
 "startDate": META.date,
 "location": { "@type": "VirtualLocation", "name": META.event, "url": META.eventUrl },
 "url": META.eventUrl,
 "organizer": { "@type": "Organization", "name": META.event, "url": META.eventUrl },
 "performer": { "@type": "Person", "name": META.speaker },
 "image": META.coverImage
 };

 var ld = d.createElement('script');
 ld.type = 'application/ld+json';
 ld.textContent = JSON.stringify(schema, null, 2);
 head.appendChild(ld);

}());
&lt;/script&gt;

&lt;!-- ============================================================
 Solanica Presentation Engine — _head.t123.html
 ADD THIS AS THE FIRST BLOCK on every Tilda presentation page.
 It applies scroll-snap to the page and styles shared by all slides.
 ============================================================ --&gt; &lt;style&gt;
 /* ---- Page-level scroll snap ---- */
 html {
 scroll-snap-type: y mandatory;
 scroll-behavior: smooth;
 overflow-y: scroll;
 scrollbar-width: none;
 -ms-overflow-style: none;
 }
 html::-webkit-scrollbar { display: none; }

 body {
 margin: 0;
 padding: 0;
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 background: #0f0f29;
 }

 /* ---- Slide base ---- */
 .slide {
 height: 100vh;
 width: 100%;
 scroll-snap-align: start;
 scroll-snap-stop: always;
 position: relative;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
 }

 /* ---- Navigation dots (right edge) ---- */
 .pres-dots {
 position: fixed;
 right: 18px;
 top: 50%;
 transform: translateY(-50%);
 display: flex;
 flex-direction: column;
 gap: 10px;
 z-index: 9999;
 list-style: none;
 margin: 0;
 padding: 0;
 }
 .pres-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.22);
 cursor: pointer;
 border: none;
 padding: 0;
 outline: none;
 transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
 }
 .pres-dot:hover { background: rgba(255, 255, 255, 0.5); }
 .pres-dot.active {
 background: #7790de;
 box-shadow: 0 0 8px rgba(119, 144, 222, 0.6);
 transform: scale(1.5);
 }

 /* ---- Slide counter (bottom-right) ---- */
 .pres-counter {
 position: fixed;
 bottom: 20px;
 right: 24px;
 color: rgba(255, 255, 255, 0.28);
 font-size: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 }

 /* ---- Key hint (bottom-centre, fades out) ---- */
 .pres-hint {
 position: fixed;
 bottom: 18px;
 left: 50%;
 transform: translateX(-50%);
 color: rgba(255, 255, 255, 0.22);
 font-size: 11px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 text-transform: uppercase;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 white-space: nowrap;
 transition: opacity 1.4s ease;
 }
 .pres-hint.hidden { opacity: 0; }

 /* ---- Left-edge back trigger ---- */
 .pres-back-trigger {
 position: fixed;
 left: 0;
 top: 0;
 width: 48px;
 height: 100vh;
 z-index: 9998;
 cursor: pointer;
 }
 .pres-back-trigger:hover .pres-back-label {
 opacity: 1;
 transform: translateY(-50%) translateX(0);
 }
 .pres-back-label {
 position: absolute;
 top: 50%;
 left: 16px;
 transform: translateY(-50%) translateX(-8px);
 opacity: 0;
 transition: opacity 0.25s ease, transform 0.25s ease;
 display: flex;
 align-items: center;
 gap: 10px;
 white-space: nowrap;
 color: rgba(255, 255, 255, 0.75);
 font-size: 13px;
 font-family: 'Inter', system-ui, sans-serif;
 font-weight: 500;
 letter-spacing: 0.03em;
 text-decoration: none;
 padding: 10px 16px 10px 12px;
 background: rgba(15, 15, 41, 0.85);
 border: 1px solid rgba(255, 255, 255, 0.1);
 border-radius: 8px;
 backdrop-filter: blur(8px);
 -webkit-backdrop-filter: blur(8px);
 pointer-events: auto;
 }
 .pres-back-label:hover {
 color: #ffffff;
 border-color: rgba(255, 255, 255, 0.25);
 }
 .pres-back-arrow {
 font-size: 16px;
 line-height: 1;
 flex-shrink: 0;
 }

 /* ---- Mobile: desktop hint toast ---- */
 .pres-mob-toast {
 position: fixed;
 top: 16px;
 left: 50%;
 transform: translateX(-50%);
 z-index: 99999;
 background: rgba(15, 15, 41, 0.92);
 border: 1px solid rgba(119, 144, 222, 0.3);
 border-radius: 10px;
 backdrop-filter: blur(12px);
 -webkit-backdrop-filter: blur(12px);
 padding: 10px 10px 10px 16px;
 display: flex;
 align-items: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 font-size: 13px;
 color: rgba(200, 212, 228, 0.8);
 white-space: nowrap;
 opacity: 1;
 transition: opacity 0.4s ease, transform 0.4s ease;
 pointer-events: auto;
 }
 .pres-mob-toast.hidden {
 opacity: 0;
 transform: translateX(-50%) translateY(-8px);
 pointer-events: none;
 }
 .pres-mob-toast-close {
 width: 22px;
 height: 22px;
 border: 1px solid rgba(255, 255, 255, 0.1);
 background: rgba(255, 255, 255, 0.06);
 border-radius: 50%;
 color: rgba(200, 212, 228, 0.55);
 font-size: 12px;
 line-height: 1;
 cursor: pointer;
 display: flex;
 align-items: center;
 justify-content: center;
 padding: 0;
 flex-shrink: 0;
 transition: background 0.2s, color 0.2s;
 }
 .pres-mob-toast-close:hover {
 background: rgba(255, 255, 255, 0.12);
 color: rgba(200, 212, 228, 0.9);
 }

 /* ============================================================
 MOBILE — scale-to-fit: preserve desktop layout, shrink it
 to fit the phone screen. Users pinch-to-zoom for details.
 ============================================================ */
 @media (max-width: 768px) {

 /* Disable snap — Tilda's header shifts the snap anchor
 of slide-1 below the viewport edge, causing it to be
 skipped. Natural scroll is more reliable on touch. */
 html {
 scroll-snap-type: none;
 }

 /* Keep slides as fixed-height viewports */
 .slide {
 height: 100svh;
 scroll-snap-align: none;
 scroll-snap-stop: normal;
 }

 /* Hide keyboard-centric chrome — not useful on touch */
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger {
 display: none !important;
 }

 /* Scale the content wrapper to fit the viewport width.
 --pres-mob-scale is set by JS in _foot.t123.html.
 The wrapper renders at its desktop width (1060px) and
 is visually scaled down via CSS transform. */
 .slide &gt; [class*="-wrap"],
 .slide &gt; [class*="-outer"] {
 width: 1060px !important;
 max-width: none !important;
 transform: scale(var(--pres-mob-scale, 1));
 transform-origin: center center;
 }
 }

 /* ============================================================
 PRINT — one slide per page, hide navigation chrome.
 Use landscape orientation, no margins for best results.
 ============================================================ */
 @media print {
 html {
 scroll-snap-type: none;
 overflow: visible;
 }
 body {
 background: #0a0a1e;
 -webkit-print-color-adjust: exact;
 print-color-adjust: exact;
 }
 .slide {
 height: 100vh;
 width: 100vw;
 page-break-after: always;
 break-after: page;
 page-break-inside: avoid;
 break-inside: avoid;
 scroll-snap-align: none;
 overflow: hidden;
 }
 .slide:last-child {
 page-break-after: auto;
 break-after: auto;
 }
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger,
 .pres-mob-toast {
 display: none !important;
 }
 /* Reveal all step-animated elements — force final state */
 .slide * {
 opacity: 1 !important;
 transform: none !important;
 visibility: visible !important;
 transition: none !important;
 animation: none !important;
 }
 }
&lt;/style&gt;

&lt;!-- ============================================================
 BuildDevCon: MariaDB &amp; MySQL on Kubernetes — June 25, 2026
 Slide 01: Title
 ============================================================ --&gt; &lt;style&gt;
 #bmk-slide-01 {
 background-color: #04121a;
 background-image:
 radial-gradient(ellipse at 18% 78%, rgba(0, 117, 143, 0.55) 0%, transparent 55%),
 radial-gradient(ellipse at 82% 22%, rgba(242, 145, 17, 0.22) 0%, transparent 50%),
 radial-gradient(circle at 50% 50%, #0a1f2c 0%, #03101a 100%);
 }

 #bmk01-canvas {
 position: absolute;
 inset: 0;
 width: 100%;
 height: 100%;
 pointer-events: none;
 z-index: 0;
 }

 .bmk01-wrap {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-between;
 height: 100%;
 width: 100%;
 position: relative;
 z-index: 1;
 max-width: min(1600px, 96vw);
 padding: clamp(28px, 4.5vh, 72px) clamp(24px, 3vw, 56px) clamp(24px, 4vh, 60px);
 box-sizing: border-box;
 text-align: center;
 }

 .bmk01-logos {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 28px;
 }

 .bmk01-logo {
 display: block;
 height: clamp(32px, 5.5vh, 72px);
 width: auto;
 opacity: 0.92;
 }

 .bmk01-logo-divider {
 width: 1px;
 height: clamp(20px, 3.5vh, 46px);
 background: rgba(255, 255, 255, 0.14);
 flex-shrink: 0;
 }

 .bmk01-event-logo {
 height: clamp(24px, 4vh, 54px);
 width: auto;
 opacity: 0.9;
 }

 .bmk01-body {
 flex: 1;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 gap: 0;
 }

 .bmk01-eyebrow {
 font-size: clamp(10px, 1.1vw, 20px);
 letter-spacing: 0.22em;
 text-transform: uppercase;
 color: #f29111;
 font-weight: 600;
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 clamp(14px, 2.5vh, 36px);
 }

 .bmk01-title {
 font-size: clamp(44px, 6.875vw, 140px);
 font-weight: 800;
 color: #ffffff;
 line-height: 1.02;
 letter-spacing: -0.034em;
 margin: 0 0 clamp(14px, 2vh, 32px);
 font-family: 'Inter', system-ui, sans-serif;
 max-width: min(1500px, 96vw);
 }

 .bmk01-title-old {
 color: #f29111;
 font-style: italic;
 font-weight: 800;
 }

 .bmk01-title-new {
 color: #4dc0d8;
 }

 .bmk01-subtitle {
 font-size: clamp(18px, 2.34vw, 46px);
 font-weight: 300;
 color: rgba(220, 235, 245, 0.78);
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 clamp(22px, 3.5vh, 56px);
 letter-spacing: -0.013em;
 }

 .bmk01-subtitle .bmk01-mysql {
 color: #ffffff;
 font-weight: 500;
 }

 .bmk01-subtitle .bmk01-amp {
 color: rgba(242, 145, 17, 0.7);
 margin: 0 14px;
 font-weight: 300;
 }

 .bmk01-subtitle .bmk01-k8s {
 color: #ffffff;
 font-weight: 500;
 }

 .bmk01-speaker {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .bmk01-speaker-name {
 color: #ffffff;
 font-size: clamp(14px, 1.72vw, 32px);
 font-weight: 600;
 }

 .bmk01-sep {
 width: 4px;
 height: 4px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.2);
 flex-shrink: 0;
 }

 .bmk01-speaker-role {
 color: #7ea3b3;
 font-size: clamp(12px, 1.41vw, 26px);
 font-weight: 400;
 }

 .bmk01-footer {
 display: flex;
 align-items: center;
 justify-content: center;
 gap: 20px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .bmk01-event-badge {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 padding: clamp(5px, 0.7vh, 10px) clamp(12px, 1.4vw, 22px);
 border: 1px solid rgba(242, 145, 17, 0.32);
 border-radius: 50px;
 color: rgba(242, 145, 17, 0.85);
 font-size: clamp(10px, 1.17vw, 22px);
 font-weight: 500;
 background: rgba(242, 145, 17, 0.07);
 }

 .bmk01-event-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: #f29111;
 flex-shrink: 0;
 }

 .bmk01-date {
 color: rgba(255, 255, 255, 0.32);
 font-size: clamp(10px, 1.17vw, 22px);
 }

 .bmk01-footer-divider {
 width: 1px;
 height: 14px;
 background: rgba(255, 255, 255, 0.1);
 }

 .bmk01-event-link {
 color: rgba(255, 255, 255, 0.32) !important;
 font-size: clamp(10px, 1.17vw, 22px);
 text-decoration: none !important;
 transition: color 0.2s;
 }
 .bmk01-event-link:hover {
 color: rgba(255, 255, 255, 0.65) !important;
 }
&lt;/style&gt; &lt;div class="slide" id="bmk-slide-01"&gt; &lt;canvas id="bmk01-canvas"&gt;&lt;/canvas&gt; &lt;div class="bmk01-wrap"&gt; &lt;div class="bmk01-logos"&gt; &lt;img
 class="bmk01-logo"
 src="https://solanica.io/images/pages/tild6161-6333-4631-b266-656534633030__white-horizontal-col.png"
 alt="Solanica"
 /&gt; &lt;span class="bmk01-logo-divider"&gt;&lt;/span&gt; &lt;img
 class="bmk01-event-logo"
 src="https://solanica.io/images/pages/tild3134-6535-4430-b335-633664396165__builddevcon_logo.png"
 alt="BuildDevCon"
 /&gt; &lt;/div&gt; &lt;div class="bmk01-body"&gt; &lt;h1 class="bmk01-title"&gt;
 Age Gap Is &lt;span class="bmk01-title-old"&gt;Not&lt;/span&gt; a Problem
 &lt;/h1&gt; &lt;p class="bmk01-subtitle"&gt; &lt;span class="bmk01-mysql"&gt;MySQL&lt;/span&gt; &lt;span class="bmk01-amp"&gt;×&lt;/span&gt; &lt;span class="bmk01-k8s"&gt;Cloud-Native&lt;/span&gt; &lt;/p&gt;</description></item><item><title>AI Copilot</title><link>https://solanica.io/ai-copilot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/ai-copilot/</guid><description>&lt;section class="copilot-hero-section"&gt; &lt;div class="copilot-container"&gt; &lt;!-- Status Badge --&gt; &lt;div class="copilot-status-badge"&gt; &lt;span class="copilot-pulse"&gt;&lt;/span&gt; &lt;span class="copilot-status-text"&gt;Alpha Program • Early Access&lt;/span&gt; &lt;/div&gt; &lt;!-- Main Headline --&gt; &lt;h1 class="copilot-headline"&gt;
 Stop Waking Up at 3 AM&lt;br/&gt;for Query Spikes.
 &lt;/h1&gt; &lt;!-- Sub-headline --&gt; &lt;p class="copilot-subheadline"&gt;
 Solanica AI Copilot &lt;span class="copilot-label"&gt;(Alpha)&lt;/span&gt; automates the tuning, debugging, and indexing tasks that keep your SREs underwater. Built on OpenEverest.
 &lt;/p&gt; &lt;!-- Visual: Animated Alert Flow --&gt; &lt;div class="copilot-hero-visual"&gt; &lt;svg viewBox="0 0 800 400" xmlns="http://www.w3.org/2000/svg"&gt; &lt;!-- Background --&gt; &lt;rect width="800" height="400" fill="#0a0a1f" rx="8"/&gt; &lt;!-- Incident Alert (Left) --&gt; &lt;g id="incident"&gt; &lt;rect x="40" y="80" width="220" height="240" fill="#161641" stroke="#ff5f56" stroke-width="2" rx="6"/&gt; &lt;text x="150" y="110" text-anchor="middle" fill="#ff5f56" font-size="14" font-weight="bold" font-family="sans-serif"&gt;⚠ INCIDENT DETECTED&lt;/text&gt; &lt;line x1="60" y1="125" x2="240" y2="125" stroke="#2a2a5c" stroke-width="1"/&gt; &lt;!-- Alert details --&gt; &lt;text x="70" y="150" fill="#b4bec8" font-size="11" font-family="monospace"&gt;Time: 03:14 AM&lt;/text&gt; &lt;text x="70" y="170" fill="#b4bec8" font-size="11" font-family="monospace"&gt;Service: orders-db&lt;/text&gt; &lt;text x="70" y="190" fill="#ff5f56" font-size="11" font-family="monospace"&gt;p99 latency: 8.4s&lt;/text&gt; &lt;text x="70" y="210" fill="#ff5f56" font-size="11" font-family="monospace"&gt;CPU: 94%&lt;/text&gt; &lt;!-- Graph spike --&gt; &lt;rect x="60" y="230" width="180" height="70" fill="#0a0a1f" stroke="#2a2a5c" stroke-width="1" rx="3"/&gt; &lt;polyline points="70,280 90,275 110,270 130,265 150,240 170,245 190,250 210,255 230,260" 
 fill="none" stroke="#ff5f56" stroke-width="2"/&gt; &lt;circle cx="150" cy="240" r="4" fill="#ff5f56"/&gt; &lt;/g&gt; &lt;!-- Arrow --&gt; &lt;defs&gt; &lt;marker id="arrow" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto"&gt; &lt;polygon points="0 0, 6 2, 0 4" fill="#00ff9d"/&gt; &lt;/marker&gt; &lt;/defs&gt; &lt;path d="M 270 200 L 310 200" stroke="#00ff9d" stroke-width="2" marker-end="url(#arrow)"/&gt; &lt;text x="290" y="185" text-anchor="middle" fill="#00ff9d" font-size="10" font-family="sans-serif" font-weight="bold"&gt;AI ANALYZE&lt;/text&gt; &lt;!-- Copilot Analysis (Center) --&gt; &lt;g id="copilot"&gt; &lt;rect x="320" y="80" width="240" height="240" fill="#161641" stroke="#00ff9d" stroke-width="2" rx="6"/&gt; &lt;g transform="translate(440, 115)"&gt; &lt;circle cx="0" cy="0" r="18" fill="url(#gradient-copilot)"/&gt; &lt;text x="0" y="6" text-anchor="middle" fill="#0a0a1f" font-size="18" font-weight="bold" font-family="sans-serif"&gt;◈&lt;/text&gt; &lt;/g&gt; &lt;text x="440" y="150" text-anchor="middle" fill="#00ff9d" font-size="13" font-weight="bold" font-family="sans-serif"&gt;Copilot Analysis&lt;/text&gt; &lt;line x1="340" y1="165" x2="540" y2="165" stroke="#2a2a5c" stroke-width="1"/&gt; &lt;!-- Findings --&gt; &lt;g transform="translate(335, 185)"&gt; &lt;circle cx="5" cy="0" r="3" fill="#00ff9d"/&gt; &lt;text x="15" y="4" fill="#d1d5db" font-size="10" font-family="sans-serif"&gt;Sequential scan on orders&lt;/text&gt; &lt;/g&gt; &lt;g transform="translate(335, 205)"&gt; &lt;circle cx="5" cy="0" r="3" fill="#00ff9d"/&gt; &lt;text x="15" y="4" fill="#d1d5db" font-size="10" font-family="sans-serif"&gt;Missing index: created_at&lt;/text&gt; &lt;/g&gt; &lt;g transform="translate(335, 225)"&gt; &lt;circle cx="5" cy="0" r="3" fill="#00ff9d"/&gt; &lt;text x="15" y="4" fill="#d1d5db" font-size="10" font-family="sans-serif"&gt;Estimated improvement: 78%&lt;/text&gt; &lt;/g&gt; &lt;rect x="335" y="245" width="210" height="60" fill="#0a0a1f" stroke="#2a2a5c" stroke-width="1" rx="3"/&gt; &lt;text x="345" y="263" fill="#7790de" font-size="9" font-family="monospace"&gt;CREATE INDEX CONCURRENTLY&lt;/text&gt; &lt;text x="345" y="278" fill="#00ff9d" font-size="9" font-family="monospace"&gt; idx_orders_created_at&lt;/text&gt; &lt;text x="345" y="293" fill="#d1d5db" font-size="9" font-family="monospace"&gt;ON orders(created_at);&lt;/text&gt; &lt;/g&gt; &lt;!-- Arrow --&gt; &lt;path d="M 570 200 L 610 200" stroke="#00ff9d" stroke-width="2" marker-end="url(#arrow)"/&gt; &lt;text x="590" y="185" text-anchor="middle" fill="#00ff9d" font-size="10" font-family="sans-serif" font-weight="bold"&gt;AUTO-FIX&lt;/text&gt; &lt;!-- Resolution (Right) --&gt; &lt;g id="resolution"&gt; &lt;rect x="620" y="80" width="160" height="240" fill="#161641" stroke="#00ff9d" stroke-width="2" rx="6" stroke-dasharray="5,5"/&gt; &lt;text x="700" y="110" text-anchor="middle" fill="#00ff9d" font-size="14" font-weight="bold" font-family="sans-serif"&gt;✓ RESOLVED&lt;/text&gt; &lt;line x1="640" y1="125" x2="760" y2="125" stroke="#2a2a5c" stroke-width="1"/&gt; &lt;text x="650" y="150" fill="#b4bec8" font-size="11" font-family="monospace"&gt;Time: 03:16 AM&lt;/text&gt; &lt;text x="650" y="170" fill="#00ff9d" font-size="11" font-family="monospace"&gt;p99: 240ms&lt;/text&gt; &lt;text x="650" y="190" fill="#00ff9d" font-size="11" font-family="monospace"&gt;CPU: 34%&lt;/text&gt; &lt;rect x="640" y="230" width="120" height="70" fill="#0a0a1f" stroke="#2a2a5c" stroke-width="1" rx="3"/&gt; &lt;polyline points="650,280 665,278 680,276 695,274 710,272 725,270 740,268 750,267" 
 fill="none" stroke="#00ff9d" stroke-width="2"/&gt; &lt;/g&gt; &lt;!-- Gradient Definition --&gt; &lt;defs&gt; &lt;linearGradient id="gradient-copilot" x1="0%" y1="0%" x2="100%" y2="100%"&gt; &lt;stop offset="0%" style="stop-color:#00ff9d;stop-opacity:1" /&gt; &lt;stop offset="100%" style="stop-color:#7790de;stop-opacity:1" /&gt; &lt;/linearGradient&gt; &lt;/defs&gt; &lt;/svg&gt; &lt;/div&gt; &lt;!-- Key Promise --&gt; &lt;div class="copilot-promise"&gt; &lt;div class="copilot-promise-item"&gt; &lt;span class="copilot-promise-icon"&gt;⚡&lt;/span&gt; &lt;span class="copilot-promise-text"&gt;2-minute mean time to resolution&lt;/span&gt; &lt;/div&gt; &lt;div class="copilot-promise-item"&gt; &lt;span class="copilot-promise-icon"&gt;✓&lt;/span&gt; &lt;span class="copilot-promise-text"&gt;Suggestions, not "yolo" changes&lt;/span&gt; &lt;/div&gt; &lt;div class="copilot-promise-item"&gt; &lt;span class="copilot-promise-icon"&gt;●&lt;/span&gt; &lt;span class="copilot-promise-text"&gt;Your data never leaves your VPC&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .copilot-hero-section {
 background: linear-gradient(180deg, #0a0a1f 0%, #0f0f2d 100%);
 padding: 120px 20px 100px 20px;
 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
 color: #ffffff;
 text-align: center;
 position: relative;
 overflow: hidden;
 }

 .copilot-hero-section::before {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 height: 1px;
 background: linear-gradient(90deg, transparent, #00ff9d, transparent);
 }

 .copilot-container {
 max-width: 1200px;
 margin: 0 auto;
 }

 /* Status Badge */
 .copilot-status-badge {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 background: rgba(0, 255, 157, 0.1);
 border: 1px solid rgba(0, 255, 157, 0.3);
 border-radius: 20px;
 padding: 6px 16px;
 margin-bottom: 30px;
 animation: badge-glow 2s ease-in-out infinite;
 }

 @keyframes badge-glow {
 0%, 100% { box-shadow: 0 0 10px rgba(0, 255, 157, 0.2); }
 50% { box-shadow: 0 0 20px rgba(0, 255, 157, 0.4); }
 }

 .copilot-pulse {
 width: 8px;
 height: 8px;
 background: #00ff9d;
 border-radius: 50%;
 animation: pulse 2s ease-in-out infinite;
 }

 @keyframes pulse {
 0%, 100% { opacity: 1; transform: scale(1); }
 50% { opacity: 0.5; transform: scale(1.2); }
 }

 .copilot-status-text {
 font-size: 13px;
 font-weight: 600;
 color: #00ff9d;
 letter-spacing: 0.5px;
 }

 /* Headline */
 .copilot-headline {
 font-size: 56px;
 font-weight: 800;
 line-height: 1.15;
 margin: 0 0 25px 0;
 color: #ffffff;
 letter-spacing: -0.02em;
 }

 .copilot-subheadline {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 max-width: 700px;
 margin: 0 auto 60px auto;
 }

 .copilot-label {
 display: inline-block;
 font-size: 14px;
 font-weight: 700;
 color: #ffbd2e;
 background: rgba(255, 189, 46, 0.1);
 padding: 2px 8px;
 border-radius: 4px;
 margin: 0 2px;
 }

 /* Visual */
 .copilot-hero-visual {
 background: #161641;
 border: 1px solid #2a2a5c;
 border-radius: 12px;
 padding: 40px;
 margin: 0 auto 50px auto;
 max-width: 900px;
 box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
 }

 .copilot-hero-visual svg {
 width: 100%;
 height: auto;
 display: block;
 }

 /* Promise Items */
 .copilot-promise {
 display: flex;
 justify-content: center;
 gap: 40px;
 flex-wrap: wrap;
 margin-top: 40px;
 }

 .copilot-promise-item {
 display: flex;
 align-items: center;
 gap: 10px;
 font-size: 15px;
 color: #d1d5db;
 }

 .copilot-promise-icon {
 font-size: 20px;
 }

 .copilot-promise-text {
 font-weight: 500;
 }

 @media (max-width: 768px) {
 .copilot-headline {
 font-size: 36px;
 }
 
 .copilot-subheadline {
 font-size: 17px;
 }
 
 .copilot-hero-visual {
 padding: 20px;
 }
 
 .copilot-promise {
 flex-direction: column;
 gap: 20px;
 }
 }
&lt;/style&gt;

&lt;section class="copilot-pain-section"&gt; &lt;div class="copilot-container"&gt; &lt;!-- Section Header --&gt; &lt;div class="copilot-section-header"&gt; &lt;h2&gt;Choose Your Pain Point&lt;/h2&gt; &lt;p class="copilot-section-intro"&gt;We built this for engineers who are drowning in database ops. Select the problem that keeps you underwater—and see how Copilot eliminates it.&lt;/p&gt;</description></item><item><title>AI Platform</title><link>https://solanica.io/ai-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/ai-platform/</guid><description>&lt;style&gt;
 .aip-hero {
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 box-sizing: border-box;
 width: 100%;
 color: #ffffff;
 background-color: #0f0f29;
 background-image: radial-gradient(circle at 50% 0%, #1f2355 0%, #0f0f29 70%);
 padding: 160px 20px 80px 20px;
 text-align: center;
 }

 .aip-hero-inner {
 max-width: 1280px;
 margin: 0 auto;
 }

 .aip-hero-eyebrow {
 display: inline-block;
 font-size: 12px;
 font-weight: 700;
 text-transform: uppercase;
 letter-spacing: 1.5px;
 color: #f4a261;
 margin-bottom: 22px;
 padding: 5px 12px;
 background: rgba(244, 162, 97, 0.08);
 border: 1px solid rgba(244, 162, 97, 0.3);
 border-radius: 4px;
 }

 .aip-hero h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 600;
 margin: 0 0 24px 0;
 letter-spacing: -1.5px;
 }

 .aip-hero-sub {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 max-width: 760px;
 margin: 0 auto;
 font-weight: 400;
 }

 .aip-hero-btns {
 margin-top: 40px;
 display: flex;
 justify-content: center;
 gap: 20px;
 }

 .aip-btn {
 display: inline-block;
 padding: 14px 28px;
 font-size: 16px;
 font-weight: 600;
 text-decoration: none;
 border-radius: 8px;
 transition: all 0.2s ease;
 cursor: pointer;
 }

 .aip-btn-primary {
 background-color: #7790de;
 color: #ffffff !important;
 border: 1px solid #7790de;
 box-shadow: 0 4px 12px rgba(119, 144, 222, 0.3);
 }

 .aip-btn-primary:hover {
 background-color: #ffffff;
 color: #161641 !important;
 border-color: #ffffff;
 transform: translateY(-2px);
 box-shadow: 0 6px 16px rgba(119, 144, 222, 0.4);
 }

 .aip-btn-secondary {
 background-color: rgba(255, 255, 255, 0.05);
 color: #ffffff !important;
 border: 1px solid rgba(255, 255, 255, 0.2);
 backdrop-filter: blur(5px);
 }

 .aip-btn-secondary:hover {
 border-color: #ffffff;
 background-color: rgba(255, 255, 255, 0.15);
 transform: translateY(-2px);
 }

 .aip-hero-trust {
 margin-top: 28px;
 font-size: 13px;
 color: #9ca3af;
 letter-spacing: 0.3px;
 }

 .aip-hero-trust span {
 color: #b4bec8;
 }

 .aip-hero-trust-divider {
 display: inline-block;
 width: 4px;
 height: 4px;
 background: #444;
 border-radius: 50%;
 vertical-align: middle;
 margin: 0 10px;
 }

 @media (max-width: 768px) {
 .aip-hero { padding-top: 100px; padding-bottom: 40px; }
 .aip-hero h1 { font-size: 36px; letter-spacing: -0.5px; }
 .aip-hero-sub { font-size: 16px; }
 .aip-hero-btns { flex-direction: column; align-items: center; gap: 15px; }
 .aip-btn { width: 100%; max-width: 280px; text-align: center; }
 .aip-hero-trust { font-size: 12px; line-height: 1.8; }
 .aip-hero-trust-divider { margin: 0 6px; }
 .aip-hero-eyebrow { font-size: 11px; }
 }
&lt;/style&gt; &lt;div class="aip-hero"&gt; &lt;div class="aip-hero-inner"&gt; &lt;h1&gt; &lt;span style="color: #ffffff;"&gt;The Missing Data &amp;amp; Model Layer for Your&lt;/span&gt;&lt;br/&gt; &lt;span style="color: #7790de;"&gt;AI Platform&lt;/span&gt; &lt;/h1&gt; &lt;p class="aip-hero-sub"&gt;
 Stop fighting GPU orchestration and vector index scaling. Solanica automates the deployment, management, and observability of your AI stack on Kubernetes &amp;mdash; keeping your models, embeddings, and prompts inside your own infrastructure.
 &lt;/p&gt;</description></item><item><title>Aiven Alternative: Run Databases on Your Own Kubernetes</title><link>https://solanica.io/vs/aiven/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/vs/aiven/</guid><description>&lt;section class="sol-vs-hero"&gt; &lt;div class="sol-vs-hero-container"&gt; &lt;nav class="sol-vs-breadcrumb"&gt; &lt;a href="https://solanica.io/comparisons/" class="sol-vs-breadcrumb-link"&gt;comparisons&lt;/a&gt; &lt;span class="sol-vs-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="sol-vs-breadcrumb-current"&gt;solanica-vs-aiven&lt;/span&gt; &lt;/nav&gt; &lt;div class="sol-vs-hero-label"&gt; &lt;span class="sol-vs-mono"&gt;$ diff solanica.yaml aiven.yaml&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;Solanica vs Aiven&lt;/h1&gt; &lt;h2&gt;Self-Hosted Database Control Plane vs Managed Cloud Service&lt;/h2&gt; &lt;p class="sol-vs-hero-intro"&gt;Both Solanica and Aiven help teams run production databases without reinventing operational tooling. The fundamental difference: Aiven runs your databases on their cloud infrastructure. Solanica runs everything on &lt;strong&gt;your&lt;/strong&gt; Kubernetes clusters — your cloud account, your on-prem nodes, your network perimeter.&lt;/p&gt; &lt;!-- Side-by-side positioning badges --&gt; &lt;div class="sol-vs-positioning-grid"&gt; &lt;div class="sol-vs-product-badge sol-vs-solanica"&gt; &lt;div class="sol-vs-product-badge-header"&gt; &lt;span class="sol-vs-badge-dot solanica-dot"&gt;●&lt;/span&gt; &lt;span class="sol-vs-product-name"&gt;Solanica + OpenEverest&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-vs-product-type"&gt;Self-Hosted · K8s-Native · Open Source&lt;/div&gt; &lt;ul class="sol-vs-badge-points"&gt; &lt;li&gt;Runs on your existing Kubernetes clusters&lt;/li&gt; &lt;li&gt;Data never leaves your infrastructure&lt;/li&gt; &lt;li&gt;Apache 2.0 licensed control plane&lt;/li&gt; &lt;li&gt;Multi-cloud, on-prem, and air-gapped support&lt;/li&gt; &lt;/ul&gt; &lt;div class="sol-vs-badge-tag-row"&gt; &lt;span class="sol-vs-badge-tag solanica-tag"&gt;Your Cloud / On-Prem&lt;/span&gt; &lt;span class="sol-vs-badge-tag solanica-tag"&gt;Zero Egress&lt;/span&gt; &lt;span class="sol-vs-badge-tag solanica-tag"&gt;Open Source&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="sol-vs-divider-col"&gt; &lt;span class="sol-vs-vs-label"&gt;VS&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-vs-product-badge sol-vs-aiven"&gt; &lt;div class="sol-vs-product-badge-header"&gt; &lt;span class="sol-vs-badge-dot aiven-dot"&gt;●&lt;/span&gt; &lt;span class="sol-vs-product-name"&gt;Aiven&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-vs-product-type"&gt;Managed SaaS · Multi-Cloud · Proprietary Platform&lt;/div&gt; &lt;ul class="sol-vs-badge-points"&gt; &lt;li&gt;Databases run in Aiven's cloud infrastructure&lt;/li&gt; &lt;li&gt;Zero operational overhead to get started&lt;/li&gt; &lt;li&gt;Pay Aiven per node-hour on top of cloud costs&lt;/li&gt; &lt;li&gt;No on-prem or air-gapped deployment option&lt;/li&gt; &lt;/ul&gt; &lt;div class="sol-vs-badge-tag-row"&gt; &lt;span class="sol-vs-badge-tag aiven-tag"&gt;Aiven's Infrastructure&lt;/span&gt; &lt;span class="sol-vs-badge-tag aiven-tag"&gt;SaaS Pricing&lt;/span&gt; &lt;span class="sol-vs-badge-tag aiven-tag"&gt;Managed Service&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .sol-vs-hero {
 background: linear-gradient(135deg, #0a0a1f 0%, #0f0f2d 60%, #0f1a2d 100%);
 padding: 80px 20px 100px;
 font-family: 'Inter', sans-serif;
 color: #ffffff;
 position: relative;
 overflow: hidden;
 }

 .sol-vs-hero::before {
 content: '';
 position: absolute;
 top: 0; left: 0; right: 0; bottom: 0;
 background-image:
 linear-gradient(90deg, rgba(0, 255, 157, 0.025) 1px, transparent 1px),
 linear-gradient(rgba(0, 255, 157, 0.025) 1px, transparent 1px);
 background-size: 50px 50px;
 pointer-events: none;
 }

 .sol-vs-hero .sol-vs-hero-container {
 max-width: 1100px;
 margin: 0 auto;
 position: relative;
 z-index: 1;
 }

 .sol-vs-hero .sol-vs-breadcrumb {
 display: flex;
 align-items: center;
 gap: 8px;
 margin-bottom: 48px;
 font-size: 13px;
 font-family: 'Courier New', monospace;
 opacity: 0.7;
 }

 .sol-vs-hero .sol-vs-breadcrumb-link {
 color: #00ff9d;
 text-decoration: none;
 }

 .sol-vs-hero .sol-vs-breadcrumb-link:hover { text-decoration: underline; }
 .sol-vs-hero .sol-vs-breadcrumb-sep { color: #b4bec8; }
 .sol-vs-hero .sol-vs-breadcrumb-current { color: #b4bec8; }

 .sol-vs-hero .sol-vs-mono {
 font-family: 'Courier New', monospace;
 font-size: 14px;
 color: #00ff9d;
 background: rgba(0, 255, 157, 0.1);
 padding: 7px 14px;
 border-radius: 4px;
 border-left: 3px solid #00ff9d;
 display: inline-block;
 margin-bottom: 24px;
 }

 .sol-vs-hero .sol-vs-hero-label { margin-bottom: 4px; }

 .sol-vs-hero h1 {
 font-size: 60px;
 font-weight: 800;
 line-height: 1.1;
 margin: 0 0 14px 0;
 letter-spacing: -1px;
 color: #ffffff;
 }

 .sol-vs-hero h2 {
 font-size: 22px;
 font-weight: 400;
 color: #b4bec8;
 margin: 0 0 28px 0;
 line-height: 1.4;
 }

 .sol-vs-hero .sol-vs-hero-intro {
 font-size: 17px;
 line-height: 1.75;
 color: #b4bec8;
 max-width: 820px;
 margin: 0 0 56px 0;
 }

 .sol-vs-hero .sol-vs-hero-intro strong { color: #ffffff; }

 /* Positioning badges */
 .sol-vs-hero .sol-vs-positioning-grid {
 display: grid;
 grid-template-columns: 1fr 60px 1fr;
 gap: 0;
 align-items: center;
 }

 .sol-vs-hero .sol-vs-product-badge {
 border-radius: 10px;
 padding: 32px;
 }

 .sol-vs-hero .sol-vs-solanica {
 background: rgba(0, 255, 157, 0.05);
 border: 2px solid rgba(0, 255, 157, 0.3);
 }

 .sol-vs-hero .sol-vs-aiven {
 background: rgba(242, 101, 34, 0.05);
 border: 1px solid rgba(242, 101, 34, 0.25);
 }

 .sol-vs-hero .sol-vs-product-badge-header {
 display: flex;
 align-items: center;
 gap: 8px;
 margin-bottom: 6px;
 }

 .sol-vs-hero .sol-vs-badge-dot { font-size: 13px; }
 .sol-vs-hero .solanica-dot { color: #00ff9d; }
 .sol-vs-hero .aiven-dot { color: #f26522; }

 .sol-vs-hero .sol-vs-product-name {
 font-size: 18px;
 font-weight: 700;
 color: #ffffff;
 }

 .sol-vs-hero .sol-vs-product-type {
 font-size: 13px;
 font-family: 'Courier New', monospace;
 color: #b4bec8;
 margin-bottom: 20px;
 margin-left: 22px;
 }

 .sol-vs-hero .sol-vs-badge-points {
 list-style: none;
 padding: 0;
 margin: 0 0 20px 0;
 display: flex;
 flex-direction: column;
 gap: 10px;
 }

 .sol-vs-hero .sol-vs-badge-points li {
 font-size: 14px;
 color: #d1d5db;
 padding-left: 18px;
 position: relative;
 line-height: 1.5;
 }

 .sol-vs-hero .sol-vs-solanica .sol-vs-badge-points li::before {
 content: '✓';
 position: absolute;
 left: 0;
 color: #00ff9d;
 font-weight: 700;
 font-size: 11px;
 top: 2px;
 }

 .sol-vs-hero .sol-vs-aiven .sol-vs-badge-points li::before {
 content: '▸';
 position: absolute;
 left: 0;
 color: #b4bec8;
 font-size: 10px;
 top: 3px;
 }

 .sol-vs-hero .sol-vs-badge-tag-row {
 display: flex;
 flex-wrap: wrap;
 gap: 6px;
 }

 .sol-vs-hero .sol-vs-badge-tag {
 font-size: 11px;
 font-weight: 600;
 padding: 3px 9px;
 border-radius: 4px;
 text-transform: uppercase;
 letter-spacing: 0.5px;
 font-family: 'Courier New', monospace;
 }

 .sol-vs-hero .solanica-tag {
 color: #00ff9d;
 background: rgba(0, 255, 157, 0.1);
 }

 .sol-vs-hero .aiven-tag {
 color: #f26522;
 background: rgba(242, 101, 34, 0.1);
 }

 .sol-vs-hero .sol-vs-divider-col {
 display: flex;
 align-items: center;
 justify-content: center;
 }

 .sol-vs-hero .sol-vs-vs-label {
 font-size: 22px;
 font-weight: 800;
 font-family: 'Courier New', monospace;
 color: #2a2a5c;
 letter-spacing: 2px;
 }

 @media (max-width: 900px) {
 .sol-vs-hero h1 { font-size: 38px; }
 .sol-vs-hero h2 { font-size: 18px; }
 .sol-vs-hero .sol-vs-positioning-grid {
 grid-template-columns: 1fr;
 gap: 20px;
 }
 .sol-vs-hero .sol-vs-divider-col { display: none; }
 }
&lt;/style&gt;

&lt;section class="sol-vs-table-section"&gt; &lt;div class="sol-vs-table-container"&gt; &lt;div class="sol-vs-section-header"&gt; &lt;span class="sol-vs-mono sol-vs-section-label"&gt;$ kubectl diff solanica aiven --output=table&lt;/span&gt; &lt;h2&gt;Feature Comparison&lt;/h2&gt; &lt;p class="sol-vs-table-intro"&gt;A factual comparison across the dimensions that matter most for production database infrastructure. Where Aiven has a genuine advantage, we say so.&lt;/p&gt;</description></item><item><title>Contact us</title><link>https://solanica.io/contact-us/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/contact-us/</guid><description>&lt;section style="background:linear-gradient(180deg,#161641 0%,#0f0f29 100%);padding:90px 20px 70px;font-family:'Inter',system-ui,-apple-system,sans-serif;text-align:center;color:#fff;"&gt;
 &lt;div style="max-width:760px;margin:0 auto;"&gt;
 &lt;h1 style="font-size:48px;font-weight:600;letter-spacing:-1px;margin:0 0 16px;"&gt;We are here to help you succeed&lt;/h1&gt;
 &lt;p style="font-size:19px;line-height:1.6;color:#b4bec8;margin:0;"&gt;Questions about the platform, a partnership, or support? Reach out and the Solanica team will get back to you.&lt;/p&gt;
 &lt;/div&gt;
&lt;/section&gt;

&lt;section style="background:#fff;padding:70px 20px 90px;font-family:'Inter',system-ui,-apple-system,sans-serif;"&gt;
 &lt;div style="max-width:1080px;margin:0 auto;display:grid;grid-template-columns:1fr 1.2fr;gap:56px;align-items:start;"&gt;

 &lt;div&gt;
 &lt;div style="background:#f6f7fb;border:1px solid #e7e9f2;border-radius:14px;padding:30px;margin-bottom:24px;"&gt;
 &lt;h2 style="font-size:22px;font-weight:700;color:#161641;margin:0 0 8px;"&gt;Book a meeting&lt;/h2&gt;
 &lt;p style="color:#5b6472;font-size:15px;line-height:1.6;margin:0 0 18px;"&gt;Don't want to wait and ready to talk? Book a meeting with our team.&lt;/p&gt;
 &lt;a href="https://meet.solanica.io/30min" target="_blank" rel="noopener" style="display:inline-block;background:#7790de;color:#fff;font-weight:600;padding:12px 26px;border-radius:10px;text-decoration:none;transition:background .2s ease;" onmouseover="this.style.background='#161641'" onmouseout="this.style.background='#7790de'"&gt;Schedule a call &amp;rarr;&lt;/a&gt;
 &lt;/div&gt;

 &lt;div style="background:#f6f7fb;border:1px solid #e7e9f2;border-radius:14px;padding:30px;margin-bottom:24px;"&gt;
 &lt;h2 style="font-size:22px;font-weight:700;color:#161641;margin:0 0 16px;"&gt;Email for various inquiries&lt;/h2&gt;
 &lt;ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:14px;"&gt;
 &lt;li&gt;&lt;span style="display:block;font-size:13px;color:#8890a0;"&gt;Sales inquiries&lt;/span&gt;&lt;a href="mailto:sales@solanica.io" style="color:#7790de;font-weight:600;text-decoration:none;"&gt;sales@solanica.io&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;span style="display:block;font-size:13px;color:#8890a0;"&gt;Want to partner&lt;/span&gt;&lt;a href="mailto:partners@solanica.io" style="color:#7790de;font-weight:600;text-decoration:none;"&gt;partners@solanica.io&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;span style="display:block;font-size:13px;color:#8890a0;"&gt;Security and abuse&lt;/span&gt;&lt;a href="mailto:it@solanica.io" style="color:#7790de;font-weight:600;text-decoration:none;"&gt;it@solanica.io&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;

 &lt;div style="background:#f6f7fb;border:1px solid #e7e9f2;border-radius:14px;padding:30px;"&gt;
 &lt;h2 style="font-size:22px;font-weight:700;color:#161641;margin:0 0 10px;"&gt;Solanica Inc.&lt;/h2&gt;
 &lt;p style="color:#5b6472;font-size:15px;line-height:1.7;margin:0;"&gt;160 Mine Lake Ct Ste 200&lt;br&gt;Raleigh, NC 27615&lt;/p&gt;</description></item><item><title>Database-as-a-Service</title><link>https://solanica.io/database-as-a-service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/database-as-a-service/</guid><description>&lt;style&gt;
 .dbaas-hero {
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 box-sizing: border-box;
 width: 100%;
 color: #ffffff;
 background-color: #0f0f29;
 background-image: radial-gradient(circle at 50% 0%, #1f2355 0%, #0f0f29 70%);
 padding: 160px 20px 80px 20px;
 text-align: center;
 }

 .dbaas-hero-inner {
 max-width: 900px;
 margin: 0 auto;
 }

 .dbaas-hero h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 600;
 margin: 0 0 24px 0;
 letter-spacing: -1.5px;
 }

 .dbaas-hero-sub {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 max-width: 750px;
 margin: 0 auto;
 font-weight: 400;
 }

 .dbaas-hero-btns {
 margin-top: 40px;
 display: flex;
 justify-content: center;
 gap: 20px;
 }

 .dbaas-btn {
 display: inline-block;
 padding: 14px 28px;
 font-size: 16px;
 font-weight: 600;
 text-decoration: none;
 border-radius: 8px;
 transition: all 0.2s ease;
 cursor: pointer;
 }

 .dbaas-btn-primary {
 background-color: #7790de;
 color: #ffffff !important;
 border: 1px solid #7790de;
 box-shadow: 0 4px 12px rgba(119, 144, 222, 0.3);
 }

 .dbaas-btn-primary:hover {
 background-color: #ffffff;
 color: #161641 !important;
 border-color: #ffffff;
 transform: translateY(-2px);
 box-shadow: 0 6px 16px rgba(119, 144, 222, 0.4);
 }

 .dbaas-btn-secondary {
 background-color: rgba(255, 255, 255, 0.05);
 color: #ffffff !important;
 border: 1px solid rgba(255, 255, 255, 0.2);
 backdrop-filter: blur(5px);
 }

 .dbaas-btn-secondary:hover {
 border-color: #ffffff;
 background-color: rgba(255, 255, 255, 0.15);
 transform: translateY(-2px);
 }

 .dbaas-hero-trust {
 margin-top: 28px;
 font-size: 13px;
 color: #9ca3af;
 letter-spacing: 0.3px;
 }

 .dbaas-hero-trust span {
 color: #b4bec8;
 }

 .dbaas-hero-trust-divider {
 display: inline-block;
 width: 4px;
 height: 4px;
 background: #444;
 border-radius: 50%;
 vertical-align: middle;
 margin: 0 10px;
 }

 @media (max-width: 768px) {
 .dbaas-hero { padding-top: 100px; padding-bottom: 40px; }
 .dbaas-hero h1 { font-size: 36px; letter-spacing: -0.5px; }
 .dbaas-hero-sub { font-size: 16px; }
 .dbaas-hero-btns { flex-direction: column; align-items: center; gap: 15px; }
 .dbaas-btn { width: 100%; max-width: 280px; text-align: center; }
 .dbaas-hero-trust { font-size: 12px; line-height: 1.8; }
 .dbaas-hero-trust-divider { margin: 0 6px; }
 }
&lt;/style&gt; &lt;div class="dbaas-hero"&gt; &lt;div class="dbaas-hero-inner"&gt; &lt;h1&gt; &lt;span style="color: #ffffff;"&gt;Private DBaaS for Kubernetes.&lt;/span&gt;&lt;br/&gt; &lt;span style="color: #7790de;"&gt;Half the cost of public cloud.&lt;/span&gt; &lt;/h1&gt; &lt;p class="dbaas-hero-sub"&gt;
 Replace RDS, Atlas, and CloudSQL with a private DBaaS on your own Kubernetes &amp;mdash; same automation, predictable cost, zero vendor lock-in. Built on open-source OpenEverest.
 &lt;/p&gt;</description></item><item><title>Developer Platform</title><link>https://solanica.io/developer-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/developer-platform/</guid><description>&lt;style&gt;
 .devplat-hero {
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 box-sizing: border-box;
 width: 100%;
 color: #ffffff;
 background-color: #0f0f29;
 background-image: radial-gradient(circle at 50% 0%, #1f2355 0%, #0f0f29 70%);
 padding: 160px 20px 80px 20px;
 text-align: center;
 }

 .devplat-hero-inner {
 max-width: 900px;
 margin: 0 auto;
 }

 .devplat-hero h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 600;
 margin: 0 0 24px 0;
 letter-spacing: -1.5px;
 }

 .devplat-hero-sub {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 max-width: 750px;
 margin: 0 auto;
 font-weight: 400;
 }

 .devplat-hero-btns {
 margin-top: 40px;
 display: flex;
 justify-content: center;
 gap: 20px;
 }

 .devplat-btn {
 display: inline-block;
 padding: 14px 28px;
 font-size: 16px;
 font-weight: 600;
 text-decoration: none;
 border-radius: 8px;
 transition: all 0.2s ease;
 cursor: pointer;
 }

 .devplat-btn-primary {
 background-color: #7790de;
 color: #ffffff !important;
 border: 1px solid #7790de;
 box-shadow: 0 4px 12px rgba(119, 144, 222, 0.3);
 }

 .devplat-btn-primary:hover {
 background-color: #ffffff;
 color: #161641 !important;
 border-color: #ffffff;
 transform: translateY(-2px);
 box-shadow: 0 6px 16px rgba(119, 144, 222, 0.4);
 }

 .devplat-btn-secondary {
 background-color: rgba(255, 255, 255, 0.05);
 color: #ffffff !important;
 border: 1px solid rgba(255, 255, 255, 0.2);
 backdrop-filter: blur(5px);
 }

 .devplat-btn-secondary:hover {
 border-color: #ffffff;
 background-color: rgba(255, 255, 255, 0.15);
 transform: translateY(-2px);
 }

 @media (max-width: 768px) {
 .devplat-hero { padding-top: 100px; padding-bottom: 40px; }
 .devplat-hero h1 { font-size: 36px; letter-spacing: -0.5px; }
 .devplat-hero-sub { font-size: 16px; }
 .devplat-hero-btns { flex-direction: column; align-items: center; gap: 15px; }
 .devplat-btn { width: 100%; max-width: 280px; text-align: center; }
 .devplat-hero-trust { font-size: 12px; line-height: 1.8; }
 .devplat-hero-trust-divider { margin: 0 6px; }
 }

 .devplat-hero-trust {
 margin-top: 28px;
 font-size: 13px;
 color: #9ca3af;
 letter-spacing: 0.3px;
 }

 .devplat-hero-trust span {
 color: #b4bec8;
 }

 .devplat-hero-trust-divider {
 display: inline-block;
 width: 4px;
 height: 4px;
 background: #444;
 border-radius: 50%;
 vertical-align: middle;
 margin: 0 10px;
 }
&lt;/style&gt; &lt;div class="devplat-hero"&gt; &lt;div class="devplat-hero-inner"&gt; &lt;h1&gt; &lt;span style="color: #ffffff;"&gt;The Missing Database Layer for Your &lt;/span&gt;&lt;span style="color: #7790de;"&gt;Internal Developer Platform&lt;/span&gt; &lt;/h1&gt; &lt;p class="devplat-hero-sub"&gt;
 Give developers a database in minutes, not a Jira ticket. Self-service provisioning, golden paths, and cost guardrails &amp;mdash; fully integrated with Backstage, Crossplane, or your custom portal.
 &lt;/p&gt;</description></item><item><title>Logos &amp; Branding</title><link>https://solanica.io/branding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/branding/</guid><description>Solanica logos, colors and brand guidelines.</description></item><item><title>MongoDB on Kubernetes: Replica Sets, Sharding &amp; Operators Guide</title><link>https://solanica.io/whitepapers/mongodb-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/whitepapers/mongodb-on-kubernetes/</guid><description>&lt;section class="sol-mg-hero"&gt; &lt;div class="sol-mg-container"&gt; &lt;nav class="sol-mg-breadcrumb"&gt; &lt;a href="https://solanica.io/whitepapers/" class="sol-mg-breadcrumb-link"&gt;whitepapers&lt;/a&gt; &lt;span class="sol-mg-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="sol-mg-breadcrumb-current"&gt;mongodb-on-kubernetes&lt;/span&gt; &lt;/nav&gt; &lt;div class="sol-mg-hero-content"&gt; &lt;div class="sol-mg-hero-label"&gt; &lt;span class="sol-mg-mono"&gt;$ kubectl get mongodbclusters --all-namespaces&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;Running MongoDB&lt;br&gt;on Kubernetes&lt;/h1&gt; &lt;h2&gt;Replica Sets, Sharded Clusters &amp;amp; Operator Comparison&lt;/h2&gt; &lt;div class="sol-mg-metadata"&gt; &lt;div class="sol-mg-badge"&gt; &lt;span class="sol-mg-badge-label"&gt;STATUS&lt;/span&gt; &lt;span class="sol-mg-badge-value"&gt;PRODUCTION_READY&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-mg-badge"&gt; &lt;span class="sol-mg-badge-label"&gt;AUDIENCE&lt;/span&gt; &lt;span class="sol-mg-badge-value"&gt;DBA | SRE | PLATFORM_ENG&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-mg-badge"&gt; &lt;span class="sol-mg-badge-label"&gt;DATABASE&lt;/span&gt; &lt;span class="sol-mg-badge-value"&gt;MongoDB 6+&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .sol-mg-hero {
 background: linear-gradient(135deg, #0a0a1f 0%, #0f0f2d 60%, #1a0f30 100%);
 padding: 80px 20px 100px;
 font-family: 'Inter', sans-serif;
 color: #ffffff;
 position: relative;
 overflow: hidden;
 }

 .sol-mg-hero::before {
 content: '';
 position: absolute;
 top: 0; left: 0; right: 0; bottom: 0;
 background-image:
 linear-gradient(90deg, rgba(0, 255, 157, 0.03) 1px, transparent 1px),
 linear-gradient(rgba(0, 255, 157, 0.03) 1px, transparent 1px);
 background-size: 50px 50px;
 pointer-events: none;
 }

 .sol-mg-hero .sol-mg-container {
 max-width: 1200px;
 margin: 0 auto;
 position: relative;
 z-index: 1;
 }

 .sol-mg-hero .sol-mg-breadcrumb {
 display: flex;
 align-items: center;
 gap: 8px;
 margin-bottom: 48px;
 font-size: 13px;
 font-family: 'Courier New', monospace;
 opacity: 0.7;
 }

 .sol-mg-hero .sol-mg-breadcrumb-link {
 color: #00ff9d;
 text-decoration: none;
 }

 .sol-mg-hero .sol-mg-breadcrumb-link:hover { text-decoration: underline; }
 .sol-mg-hero .sol-mg-breadcrumb-sep { color: #b4bec8; }
 .sol-mg-hero .sol-mg-breadcrumb-current { color: #b4bec8; }

 .sol-mg-hero .sol-mg-mono {
 font-family: 'Courier New', monospace;
 font-size: 14px;
 color: #00ff9d;
 background: rgba(0, 255, 157, 0.1);
 padding: 8px 14px;
 border-radius: 4px;
 border-left: 3px solid #00ff9d;
 }

 .sol-mg-hero h1 {
 font-size: 64px;
 font-weight: 800;
 line-height: 1.1;
 margin: 24px 0 16px 0;
 color: #ffffff;
 letter-spacing: -1px;
 }

 .sol-mg-hero h2 {
 font-size: 22px;
 font-weight: 400;
 color: #b4bec8;
 margin: 0 0 40px 0;
 line-height: 1.4;
 }

 .sol-mg-hero .sol-mg-metadata {
 display: flex;
 flex-wrap: wrap;
 gap: 12px;
 }

 .sol-mg-hero .sol-mg-badge {
 display: inline-flex;
 align-items: center;
 border: 1px solid #2a2a5c;
 border-radius: 4px;
 overflow: hidden;
 font-family: 'Courier New', monospace;
 font-size: 12px;
 }

 .sol-mg-hero .sol-mg-badge-label {
 background: rgba(0, 255, 157, 0.1);
 color: #00ff9d;
 padding: 5px 10px;
 font-weight: 600;
 letter-spacing: 0.5px;
 border-right: 1px solid #2a2a5c;
 }

 .sol-mg-hero .sol-mg-badge-value {
 color: #d1d5db;
 padding: 5px 10px;
 }

 @media (max-width: 768px) {
 .sol-mg-hero { padding: 60px 20px 70px; }
 .sol-mg-hero h1 { font-size: 38px; }
 .sol-mg-hero h2 { font-size: 18px; }
 }
&lt;/style&gt;

&lt;section class="sol-mg-toc-section"&gt; &lt;div class="sol-mg-toc-container"&gt; &lt;div class="sol-mg-toc-header"&gt; &lt;span class="sol-mg-toc-label"&gt;$ cat mongodb-on-kubernetes/table-of-contents.md&lt;/span&gt; &lt;p class="sol-mg-toc-intro"&gt;This guide covers production MongoDB on Kubernetes end-to-end — from replica set topology and sharded cluster architecture to operator selection, PITR backups, and compute sizing.&lt;/p&gt;</description></item><item><title>MySQL on Kubernetes: Architecture, Topologies &amp; Operators Guide</title><link>https://solanica.io/whitepapers/mysql-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/whitepapers/mysql-on-kubernetes/</guid><description>&lt;section class="sol-mysql-hero"&gt; &lt;div class="sol-container"&gt; &lt;div class="sol-hero-content"&gt; &lt;div class="sol-breadcrumb"&gt; &lt;span class="sol-mono"&gt;/whitepapers/&lt;/span&gt; &lt;span class="sol-status-icon info"&gt;❯&lt;/span&gt; &lt;span class="sol-mono"&gt;mysql-on-kubernetes&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;Running MySQL on Kubernetes&lt;/h1&gt; &lt;h2&gt;A Complete Architecture Guide&lt;/h2&gt; &lt;p class="sol-tagline"&gt;MySQL is one of the most mature relational databases in the world. Running it on Kubernetes is no longer a question of &lt;code&gt;if&lt;/code&gt; — it's a question of &lt;code&gt;how&lt;/code&gt;.&lt;/p&gt; &lt;div class="sol-metadata"&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon success"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;STATUS: PRODUCTION_READY&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon info"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;AUDIENCE: DBA | SRE | PLATFORM_ENG&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon warning"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;DATABASE: MySQL 8.x+&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .sol-mysql-hero {
 background: linear-gradient(135deg, #0a0a1f 0%, #161641 100%);
 padding: 120px 20px 80px 20px;
 font-family: 'Inter', sans-serif;
 color: #ffffff;
 border-bottom: 2px solid #7790de;
 position: relative;
 overflow: hidden;
 }

 .sol-mysql-hero::before {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 bottom: 0;
 background-image: 
 linear-gradient(90deg, rgba(119, 144, 222, 0.05) 1px, transparent 1px),
 linear-gradient(rgba(119, 144, 222, 0.05) 1px, transparent 1px);
 background-size: 50px 50px;
 opacity: 0.3;
 pointer-events: none;
 }

 .sol-mysql-hero .sol-container {
 max-width: 1200px;
 margin: 0 auto;
 position: relative;
 z-index: 1;
 }

 .sol-mysql-hero .sol-breadcrumb {
 display: flex;
 align-items: center;
 gap: 10px;
 margin-bottom: 30px;
 font-size: 14px;
 }

 .sol-mysql-hero .sol-mono {
 font-family: 'Courier New', monospace;
 color: #7790de;
 font-weight: 600;
 }

 .sol-mysql-hero .sol-status-icon { font-size: 12px; }
 .sol-mysql-hero .success { color: #00ff9d; }
 .sol-mysql-hero .info { color: #2ecc71; }
 .sol-mysql-hero .warning { color: #ffbd2e; }

 .sol-mysql-hero .sol-hero-content h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 800;
 margin: 0 0 15px 0;
 color: #ffffff;
 letter-spacing: -0.5px;
 }

 .sol-mysql-hero .sol-hero-content h2 {
 font-size: 32px;
 line-height: 1.3;
 font-weight: 600;
 margin: 0 0 30px 0;
 color: #7790de;
 }

 .sol-mysql-hero .sol-tagline {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 margin-bottom: 40px;
 max-width: 800px;
 }

 .sol-mysql-hero .sol-tagline code {
 background: rgba(119, 144, 222, 0.15);
 color: #00ff9d;
 padding: 2px 10px;
 border-radius: 4px;
 font-family: 'Fira Code', 'Courier New', monospace;
 font-size: 0.95em;
 font-weight: 600;
 }

 .sol-mysql-hero .sol-metadata {
 display: flex;
 flex-wrap: wrap;
 gap: 20px;
 margin-top: 40px;
 padding-top: 30px;
 border-top: 1px solid rgba(255,255,255,0.1);
 }

 .sol-mysql-hero .sol-meta-item {
 display: flex;
 align-items: center;
 gap: 8px;
 font-size: 13px;
 }

 @media (max-width: 768px) {
 .sol-mysql-hero .sol-hero-content h1 { font-size: 36px; }
 .sol-mysql-hero .sol-hero-content h2 { font-size: 24px; }
 .sol-mysql-hero .sol-tagline { font-size: 16px; }
 .sol-mysql-hero .sol-metadata { flex-direction: column; gap: 15px; }
 }
&lt;/style&gt;

&lt;section class="sol-mysql-toc-section"&gt; &lt;div class="sol-container"&gt; &lt;div class="sol-toc-header"&gt; &lt;span class="sol-mono sol-toc-label"&gt;$ cat TABLE_OF_CONTENTS&lt;/span&gt; &lt;h2&gt;MySQL on Kubernetes: Architecture &amp;amp; Operations&lt;/h2&gt; &lt;p class="sol-toc-intro"&gt;Six pillars of running production MySQL on Kubernetes — from topology design to operator selection&lt;/p&gt;</description></item><item><title>OpenEverest - Open-Source DBaaS on Kubernetes</title><link>https://solanica.io/presentations/about-openeverest/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/presentations/about-openeverest/</guid><description>&lt;!-- ============================================================
 OpenEverest Overview — Customer Presentation
 _meta.t123.html
 ============================================================ --&gt; &lt;script&gt;
(function () {

 var META = {
 title: "OpenEverest: Open-Source DBaaS on Kubernetes",
 slug: "about-openeverest",
 description: "OpenEverest overview: open-source Database-as-a-Service on Kubernetes — run PostgreSQL, MySQL, MongoDB, MariaDB, ClickHouse and more from one control plane. Customer-facing presentation.",
 speaker: "Sergey Pronin",
 event: "Customer Presentation",
 eventUrl: "https://openeverest.io",
 date: "2026-06-04",
 location: "Global",
 tags: ["openeverest", "kubernetes", "dbaas", "cloud-native", "open-source", "postgresql", "mysql", "mongodb", "clickhouse", "mariadb"],
 status: "draft",
 coverImage: "https://solanica.io/og-default.png",
 pageUrl: "https://solanica.io/presentations/about-openeverest"
 };

 window.__presMETA = META;

 var d = document;

 function tag(name, attrs) {
 var key = attrs.property || attrs.name;
 if (key) {
 var existing = d.querySelector(
 'meta[property="' + key + '"], meta[name="' + key + '"]'
 );
 if (existing) existing.parentNode.removeChild(existing);
 }
 var el = d.createElement(name);
 Object.keys(attrs).forEach(function (k) { el.setAttribute(k, attrs[k]); });
 return el;
 }

 var head = d.head || d.getElementsByTagName('head')[0];

 var titleEl = d.querySelector('title');
 if (titleEl) {
 titleEl.textContent = META.title;
 } else {
 var t = d.createElement('title');
 t.textContent = META.title;
 head.appendChild(t);
 }

 head.appendChild(tag('meta', { name: 'description', content: META.description }));
 head.appendChild(tag('meta', { name: 'author', content: META.speaker }));
 head.appendChild(tag('meta', { name: 'keywords', content: META.tags.join(', ') }));
 head.appendChild(tag('link', { rel: 'canonical', href: META.pageUrl }));

 head.appendChild(tag('meta', { property: 'og:type', content: 'website' }));
 head.appendChild(tag('meta', { property: 'og:title', content: META.title }));
 head.appendChild(tag('meta', { property: 'og:description', content: META.description }));
 head.appendChild(tag('meta', { property: 'og:image', content: META.coverImage }));
 head.appendChild(tag('meta', { property: 'og:url', content: META.pageUrl }));
 head.appendChild(tag('meta', { property: 'og:site_name', content: 'Solanica' }));

 head.appendChild(tag('meta', { name: 'twitter:card', content: 'summary_large_image' }));
 head.appendChild(tag('meta', { name: 'twitter:site', content: '@solanicaio' }));
 head.appendChild(tag('meta', { name: 'twitter:title', content: META.title }));
 head.appendChild(tag('meta', { name: 'twitter:description', content: META.description }));
 head.appendChild(tag('meta', { name: 'twitter:image', content: META.coverImage }));

})();
&lt;/script&gt;

&lt;!-- ============================================================
 Solanica Presentation Engine — _head.t123.html
 ADD THIS AS THE FIRST BLOCK on every Tilda presentation page.
 It applies scroll-snap to the page and styles shared by all slides.
 ============================================================ --&gt; &lt;style&gt;
 /* ---- Page-level scroll snap ---- */
 html {
 scroll-snap-type: y mandatory;
 scroll-behavior: smooth;
 overflow-y: scroll;
 scrollbar-width: none;
 -ms-overflow-style: none;
 }
 html::-webkit-scrollbar { display: none; }

 body {
 margin: 0;
 padding: 0;
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 background: #0f0f29;
 }

 /* ---- Slide base ---- */
 .slide {
 height: 100vh;
 width: 100%;
 scroll-snap-align: start;
 scroll-snap-stop: always;
 position: relative;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
 }

 /* ---- Navigation dots (right edge) ---- */
 .pres-dots {
 position: fixed;
 right: 18px;
 top: 50%;
 transform: translateY(-50%);
 display: flex;
 flex-direction: column;
 gap: 10px;
 z-index: 9999;
 list-style: none;
 margin: 0;
 padding: 0;
 }
 .pres-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.22);
 cursor: pointer;
 border: none;
 padding: 0;
 outline: none;
 transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
 }
 .pres-dot:hover { background: rgba(255, 255, 255, 0.5); }
 .pres-dot.active {
 background: #7790de;
 box-shadow: 0 0 8px rgba(119, 144, 222, 0.6);
 transform: scale(1.5);
 }

 /* ---- Slide counter (bottom-right) ---- */
 .pres-counter {
 position: fixed;
 bottom: 20px;
 right: 24px;
 color: rgba(255, 255, 255, 0.28);
 font-size: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 }

 /* ---- Key hint (bottom-centre, fades out) ---- */
 .pres-hint {
 position: fixed;
 bottom: 18px;
 left: 50%;
 transform: translateX(-50%);
 color: rgba(255, 255, 255, 0.22);
 font-size: 11px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 text-transform: uppercase;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 white-space: nowrap;
 transition: opacity 1.4s ease;
 }
 .pres-hint.hidden { opacity: 0; }

 /* ---- Left-edge back trigger ---- */
 .pres-back-trigger {
 position: fixed;
 left: 0;
 top: 0;
 width: 48px;
 height: 100vh;
 z-index: 9998;
 cursor: pointer;
 }
 .pres-back-trigger:hover .pres-back-label {
 opacity: 1;
 transform: translateY(-50%) translateX(0);
 }
 .pres-back-label {
 position: absolute;
 top: 50%;
 left: 16px;
 transform: translateY(-50%) translateX(-8px);
 opacity: 0;
 transition: opacity 0.25s ease, transform 0.25s ease;
 display: flex;
 align-items: center;
 gap: 10px;
 white-space: nowrap;
 color: rgba(255, 255, 255, 0.75);
 font-size: 13px;
 font-family: 'Inter', system-ui, sans-serif;
 font-weight: 500;
 letter-spacing: 0.03em;
 text-decoration: none;
 padding: 10px 16px 10px 12px;
 background: rgba(15, 15, 41, 0.85);
 border: 1px solid rgba(255, 255, 255, 0.1);
 border-radius: 8px;
 backdrop-filter: blur(8px);
 -webkit-backdrop-filter: blur(8px);
 pointer-events: auto;
 }
 .pres-back-label:hover {
 color: #ffffff;
 border-color: rgba(255, 255, 255, 0.25);
 }
 .pres-back-arrow {
 font-size: 16px;
 line-height: 1;
 flex-shrink: 0;
 }

 /* ---- Mobile: desktop hint toast ---- */
 .pres-mob-toast {
 position: fixed;
 top: 16px;
 left: 50%;
 transform: translateX(-50%);
 z-index: 99999;
 background: rgba(15, 15, 41, 0.92);
 border: 1px solid rgba(119, 144, 222, 0.3);
 border-radius: 10px;
 backdrop-filter: blur(12px);
 -webkit-backdrop-filter: blur(12px);
 padding: 10px 10px 10px 16px;
 display: flex;
 align-items: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 font-size: 13px;
 color: rgba(200, 212, 228, 0.8);
 white-space: nowrap;
 opacity: 1;
 transition: opacity 0.4s ease, transform 0.4s ease;
 pointer-events: auto;
 }
 .pres-mob-toast.hidden {
 opacity: 0;
 transform: translateX(-50%) translateY(-8px);
 pointer-events: none;
 }
 .pres-mob-toast-close {
 width: 22px;
 height: 22px;
 border: 1px solid rgba(255, 255, 255, 0.1);
 background: rgba(255, 255, 255, 0.06);
 border-radius: 50%;
 color: rgba(200, 212, 228, 0.55);
 font-size: 12px;
 line-height: 1;
 cursor: pointer;
 display: flex;
 align-items: center;
 justify-content: center;
 padding: 0;
 flex-shrink: 0;
 transition: background 0.2s, color 0.2s;
 }
 .pres-mob-toast-close:hover {
 background: rgba(255, 255, 255, 0.12);
 color: rgba(200, 212, 228, 0.9);
 }

 /* ============================================================
 MOBILE — scale-to-fit: preserve desktop layout, shrink it
 to fit the phone screen. Users pinch-to-zoom for details.
 ============================================================ */
 @media (max-width: 768px) {

 /* Disable snap — Tilda's header shifts the snap anchor
 of slide-1 below the viewport edge, causing it to be
 skipped. Natural scroll is more reliable on touch. */
 html {
 scroll-snap-type: none;
 }

 /* Keep slides as fixed-height viewports */
 .slide {
 height: 100svh;
 scroll-snap-align: none;
 scroll-snap-stop: normal;
 }

 /* Hide keyboard-centric chrome — not useful on touch */
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger {
 display: none !important;
 }

 /* Scale the content wrapper to fit the viewport width.
 --pres-mob-scale is set by JS in _foot.t123.html.
 The wrapper renders at its desktop width (1060px) and
 is visually scaled down via CSS transform. */
 .slide &gt; [class*="-wrap"],
 .slide &gt; [class*="-outer"] {
 width: 1060px !important;
 max-width: none !important;
 transform: scale(var(--pres-mob-scale, 1));
 transform-origin: center center;
 }
 }

 /* ============================================================
 PRINT — one slide per page, hide navigation chrome.
 Use landscape orientation, no margins for best results.
 ============================================================ */
 @media print {
 html {
 scroll-snap-type: none;
 overflow: visible;
 }
 body {
 background: #0a0a1e;
 -webkit-print-color-adjust: exact;
 print-color-adjust: exact;
 }
 .slide {
 height: 100vh;
 width: 100vw;
 page-break-after: always;
 break-after: page;
 page-break-inside: avoid;
 break-inside: avoid;
 scroll-snap-align: none;
 overflow: hidden;
 }
 .slide:last-child {
 page-break-after: auto;
 break-after: auto;
 }
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger,
 .pres-mob-toast {
 display: none !important;
 }
 /* Reveal all step-animated elements — force final state */
 .slide * {
 opacity: 1 !important;
 transform: none !important;
 visibility: visible !important;
 transition: none !important;
 animation: none !important;
 }
 }
&lt;/style&gt;

&lt;!-- ============================================================
 OpenEverest Overview — Customer Presentation
 Slide 01: Title
 ============================================================ --&gt; &lt;style&gt;
 #oe-slide-01 {
 background-color: #0a0a1e;
 background-image:
 radial-gradient(ellipse at 30% 70%, rgba(31, 35, 85, 0.7) 0%, transparent 55%),
 radial-gradient(ellipse at 70% 30%, rgba(20, 50, 45, 0.5) 0%, transparent 45%),
 radial-gradient(circle at 50% 50%, #131333 0%, #080818 100%);
 }

 .oe01-wrap {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-between;
 height: 100%;
 width: 100%;
 position: relative;
 z-index: 1;
 padding: 48px 72px 44px;
 box-sizing: border-box;
 text-align: center;
 }

 .oe01-logo {
 display: block;
 height: 80px;
 width: auto;
 opacity: 0.92;
 }

 .oe01-body {
 flex: 1;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 gap: 0;
 }

 .oe01-title {
 font-size: 80px;
 font-weight: 800;
 color: #ffffff;
 line-height: 1.1;
 letter-spacing: -3px;
 margin: 0 0 28px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .oe01-title span {
 color: #4ec4a0;
 }

 .oe01-subtitle {
 font-size: 32px;
 font-weight: 300;
 color: rgba(220, 228, 240, 0.5);
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 48px;
 letter-spacing: -0.3px;
 max-width: 900px;
 line-height: 1.4;
 }

 .oe01-badges {
 display: flex;
 gap: 20px;
 flex-wrap: wrap;
 justify-content: center;
 }

 .oe01-badge {
 display: inline-flex;
 align-items: center;
 gap: 10px;
 padding: 14px 24px;
 border-radius: 10px;
 font-size: 18px;
 font-weight: 600;
 font-family: 'Inter', system-ui, sans-serif;
 border: 1px solid rgba(78, 196, 160, 0.25);
 background: rgba(78, 196, 160, 0.06);
 color: rgba(200, 212, 228, 0.85);
 }

 .oe01-badge svg {
 flex-shrink: 0;
 width: 20px;
 height: 20px;
 }

 .oe01-footer {
 font-size: 17px;
 color: rgba(200, 212, 228, 0.35);
 font-family: 'Inter', system-ui, sans-serif;
 }

 @media (max-width: 768px) {
 .oe01-title { font-size: clamp(36px, 10vw, 64px); letter-spacing: -1px; }
 .oe01-subtitle { font-size: 22px; }
 .oe01-badges { flex-direction: column; align-items: center; }
 }
&lt;/style&gt; &lt;div class="slide" id="oe-slide-01"&gt; &lt;div class="oe01-wrap"&gt; &lt;img class="oe01-logo" src="https://solanica.io/images/pages/tild3732-6631-4933-b335-343432366262__logo-horizontal-full.png" alt="OpenEverest" /&gt; &lt;div class="oe01-body"&gt; &lt;h1 class="oe01-title"&gt;Open-Source &lt;span&gt;DBaaS&lt;/span&gt; on Kubernetes&lt;/h1&gt; &lt;p class="oe01-subtitle"&gt;Run production databases anywhere — no vendor lock-in, full Day 2 operations, one control plane.&lt;/p&gt;</description></item><item><title>Partner Program</title><link>https://solanica.io/partners/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/partners/</guid><description>&lt;section style="background:radial-gradient(circle at 50% 0%,#1f2355 0%,#0f0f29 70%);padding:120px 20px 80px;font-family:'Inter',system-ui,-apple-system,sans-serif;text-align:center;color:#fff;"&gt;
 &lt;div style="max-width:820px;margin:0 auto;"&gt;
 &lt;p style="font-size:12px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:#7790de;margin:0 0 18px;"&gt;Partner Program&lt;/p&gt;
 &lt;h1 style="font-size:52px;font-weight:600;letter-spacing:-1.5px;line-height:1.1;margin:0 0 22px;"&gt;The platform is ours.&lt;br&gt;The expertise is yours.&lt;/h1&gt;
 &lt;p style="font-size:19px;line-height:1.6;color:#b4bec8;max-width:680px;margin:0 auto 34px;"&gt;Join the Solanica Partner Program to provide enterprise-grade database management on Kubernetes. We provide the platform; you provide the expertise.&lt;/p&gt;
 &lt;div style="display:flex;gap:16px;justify-content:center;flex-wrap:wrap;"&gt;
 &lt;a href="#become-a-partner" style="background:#7790de;color:#fff;font-weight:600;padding:14px 30px;border-radius:8px;text-decoration:none;"&gt;Become a Partner&lt;/a&gt;
 &lt;a href="#our-partners" style="color:#fff;border:1px solid rgba(255,255,255,.25);font-weight:600;padding:14px 30px;border-radius:8px;text-decoration:none;"&gt;See our Partners&lt;/a&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;

&lt;section style="background:#161641;padding:90px 20px;font-family:'Inter',system-ui,-apple-system,sans-serif;color:#fff;"&gt;
 &lt;div style="max-width:1100px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:28px;"&gt;
 &lt;div style="background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:34px;"&gt;
 &lt;h3 style="font-size:22px;font-weight:700;margin:0 0 12px;"&gt;High Margins&lt;/h3&gt;
 &lt;p style="color:#b4bec8;font-size:15px;line-height:1.6;margin:0;"&gt;Stop selling commodity services. Sell high-value Solanica Platform licenses with built-in recurring margins.&lt;/p&gt;
 &lt;/div&gt;
 &lt;div style="background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:34px;"&gt;
 &lt;h3 style="font-size:22px;font-weight:700;margin:0 0 12px;"&gt;Zero Lock-in&lt;/h3&gt;
 &lt;p style="color:#b4bec8;font-size:15px;line-height:1.6;margin:0;"&gt;Customers run on any K8s cluster. You stay relevant regardless of which cloud provider they choose.&lt;/p&gt;</description></item><item><title>Platform</title><link>https://solanica.io/platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/platform/</guid><description>&lt;style&gt;
 /* --- SHARED FONTS &amp; RESET --- */
 .sol-section-top {
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 box-sizing: border-box;
 width: 100%;
 color: #ffffff;
 }

 /* --- TOP SECTION (The Spotlight Header) --- */
 .sol-section-top {
 /* The "Spotlight" Gradient Background */
 background-color: #0f0f29;
 background-image: radial-gradient(circle at 50% 0%, #1f2355 0%, #0f0f29 70%);
 
 /* Spacing */
 padding: 160px 20px 60px 20px;
 text-align: center;
 }

 /* --- HEADER TYPOGRAPHY --- */
 .sol-hero-header {
 max-width: 1280px;
 margin: 0 auto;
 }

 .sol-hero-header h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 600; /* Slightly bolder for impact */
 margin-bottom: 24px;
 letter-spacing: -1.5px; /* Tighter tracking for modern look */
 margin-top: 0;
 }

 .sol-hero-sub {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8; /* Soft blue-grey text */
 max-width: 750px;
 margin: 0 auto;
 font-weight: 400;
 }

 /* --- BUTTONS --- */
 .sol-btn-wrapper {
 margin-top: 40px;
 display: flex;
 justify-content: center;
 gap: 20px;
 }

 .sol-btn {
 display: inline-block;
 padding: 14px 28px;
 font-size: 16px;
 font-weight: 600;
 text-decoration: none;
 border-radius: 8px; /* Slightly rounder */
 transition: all 0.2s ease;
 cursor: pointer;
 }

 /* Primary Button (Blue) */
 .sol-btn-primary {
 background-color: #7790de;
 color: #ffffff !important;
 border: 1px solid #7790de;
 box-shadow: 0 4px 12px rgba(119, 144, 222, 0.3);
 }

 .sol-btn-primary:hover {
 background-color: #ffffff;
 color: #161641 !important;
 border-color: #ffffff;
 transform: translateY(-2px);
 box-shadow: 0 6px 16px rgba(119, 144, 222, 0.4);
 }

 /* Secondary Button (Transparent/Glass) */
 .sol-btn-secondary {
 background-color: rgba(255, 255, 255, 0.05);
 color: #ffffff !important;
 border: 1px solid rgba(255, 255, 255, 0.2);
 backdrop-filter: blur(5px);
 }

 .sol-btn-secondary:hover {
 border-color: #ffffff;
 background-color: rgba(255, 255, 255, 0.15);
 transform: translateY(-2px);
 }

 /* --- MOBILE RESPONSIVE --- */
 @media (max-width: 768px) {
 .sol-section-top { padding-top: 100px; padding-bottom: 40px; }
 .sol-hero-header h1 { font-size: 36px; letter-spacing: -0.5px; }
 .sol-hero-sub { font-size: 16px; }
 
 .sol-btn-wrapper { flex-direction: column; align-items: center; gap: 15px; }
 .sol-btn { width: 100%; max-width: 280px; text-align: center; }
 .sol-hero-eyebrow { font-size: 11px; }
 }

 .sol-hero-eyebrow {
 display: inline-block;
 font-size: 12px;
 font-weight: 700;
 text-transform: uppercase;
 letter-spacing: 1.5px;
 color: #f4a261;
 margin-bottom: 18px;
 padding: 5px 12px;
 background: rgba(244, 162, 97, 0.08);
 border: 1px solid rgba(244, 162, 97, 0.3);
 border-radius: 4px;
 }
&lt;/style&gt; &lt;div class="sol-section sol-section-top"&gt; &lt;div class="sol-hero-header"&gt; &lt;h1&gt; &lt;span style="color: #7790de;"&gt;Solanica Platform.&lt;/span&gt;&lt;br/&gt; &lt;span style="color: #ffffff;"&gt;OpenEverest, hardened for production.&lt;/span&gt; &lt;/h1&gt; &lt;p class="sol-hero-sub"&gt;
 The enterprise distribution of OpenEverest &amp;mdash; same open-source engine, plus 24/7 support, custom engineering, and the team that built it. One control plane for databases, AI, and developer self-service across any Kubernetes fleet, inside your own perimeter.
 &lt;/p&gt;</description></item><item><title>PostgreSQL on Kubernetes - honest comparison</title><link>https://solanica.io/resources/compare-mysql-operators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/resources/compare-mysql-operators/</guid><description>&lt;section class="myop-hero"&gt; &lt;div class="myop-hero-container"&gt; &lt;nav class="myop-breadcrumb"&gt; &lt;a href="https://solanica.io/linkable-assets/" class="myop-breadcrumb-link"&gt;resources&lt;/a&gt; &lt;span class="myop-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="myop-breadcrumb-current"&gt;mysql-operators&lt;/span&gt; &lt;/nav&gt; &lt;div class="myop-hero-label"&gt; &lt;span class="myop-mono"&gt;$ kubectl get operators -l engine=mysql --sort-by=.metadata.creationTimestamp&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;MySQL Operators on Kubernetes:&lt;br&gt;The Honest Comparison&lt;/h1&gt; &lt;h2&gt;4 Active Operators. Different Replication Models. Real Trade-offs.&lt;/h2&gt; &lt;p class="myop-hero-intro"&gt;Running MySQL on Kubernetes is not "just pick an operator" — your choice of operator locks you into a replication model (Galera, Group Replication, semi-sync) that's hard to change later. We compared the Percona XtraDB Cluster Operator, Percona Server for MySQL Operator, Oracle MySQL Operator, and MOCO across HA, backups, day-2 ops, and community health. No vendor paid for placement on this page.&lt;/p&gt;</description></item><item><title>PostgreSQL on Kubernetes - honest comparison</title><link>https://solanica.io/resources/compare-postgres-operators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/resources/compare-postgres-operators/</guid><description>&lt;section class="pgop-hero"&gt; &lt;div class="pgop-hero-container"&gt; &lt;nav class="pgop-breadcrumb"&gt; &lt;a href="https://solanica.io/resources/" class="pgop-breadcrumb-link"&gt;resources&lt;/a&gt; &lt;span class="pgop-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="pgop-breadcrumb-current"&gt;postgresql-operators&lt;/span&gt; &lt;/nav&gt; &lt;div class="pgop-hero-label"&gt; &lt;span class="pgop-mono"&gt;$ kubectl get operators --sort-by=.metadata.creationTimestamp&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;PostgreSQL Operators on Kubernetes:&lt;br&gt;The Honest Comparison&lt;/h1&gt; &lt;h2&gt;4 Active Operators. No Marketing Fluff. Real Trade-offs.&lt;/h2&gt; &lt;p class="pgop-hero-intro"&gt;Running PostgreSQL on Kubernetes means choosing an operator — and the wrong choice can cost you months. We compared &lt;strong&gt;Percona&lt;/strong&gt;, &lt;strong&gt;CloudNativePG&lt;/strong&gt;, &lt;strong&gt;Zalando&lt;/strong&gt;, and &lt;strong&gt;StackGres&lt;/strong&gt; across features, community health, business viability, and day-2 operations. No vendor paid for placement on this page.&lt;/p&gt; &lt;div class="pgop-hero-notice"&gt; &lt;span class="pgop-notice-icon"&gt;ℹ&lt;/span&gt; &lt;span&gt;&lt;strong&gt;CrunchyData PGO&lt;/strong&gt; was a major player but is &lt;a href="https://github.com/CrunchyData/postgres-operator" target="_blank" rel="noopener"&gt;no longer actively developed&lt;/a&gt; as an open-source project. It's mentioned where relevant but excluded from the active comparison.&lt;/span&gt; &lt;/div&gt; &lt;!-- Operator identity cards --&gt; &lt;div class="pgop-operator-cards"&gt; &lt;div class="pgop-op-card" data-operator="percona"&gt; &lt;div class="pgop-op-card-header percona-accent"&gt; &lt;span class="pgop-op-logo"&gt;🐘&lt;/span&gt; &lt;div&gt; &lt;span class="pgop-op-name"&gt;Percona Operator&lt;/span&gt; &lt;span class="pgop-op-version"&gt;v2.9.0&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="pgop-op-meta"&gt; &lt;span class="pgop-op-tag"&gt;Apache 2.0&lt;/span&gt; &lt;span class="pgop-op-tag"&gt;Percona LLC&lt;/span&gt; &lt;span class="pgop-op-tag"&gt;Since 2022&lt;/span&gt; &lt;/div&gt; &lt;p class="pgop-op-desc"&gt;Enterprise-grade operator built on top of Crunchy's PGO foundation. Part of the broader Percona ecosystem covering MySQL, MongoDB, and PostgreSQL.&lt;/p&gt;</description></item><item><title>PostgreSQL on Kubernetes: Architecture, Topologies &amp; Operators Guide</title><link>https://solanica.io/whitepapers/postgresql-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/whitepapers/postgresql-on-kubernetes/</guid><description>&lt;section class="sol-pg-hero"&gt; &lt;div class="sol-container"&gt; &lt;div class="sol-hero-content"&gt; &lt;div class="sol-breadcrumb"&gt; &lt;span class="sol-mono"&gt;/whitepapers/&lt;/span&gt; &lt;span class="sol-status-icon info"&gt;❯&lt;/span&gt; &lt;span class="sol-mono"&gt;postgresql-on-kubernetes&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;Running PostgreSQL on Kubernetes&lt;/h1&gt; &lt;h2&gt;A Complete Architecture Guide&lt;/h2&gt; &lt;p class="sol-tagline"&gt;PostgreSQL is the world's most advanced open-source relational database. Running it on Kubernetes is no longer a question of &lt;code&gt;if&lt;/code&gt; — it's a question of &lt;code&gt;how&lt;/code&gt;.&lt;/p&gt; &lt;div class="sol-metadata"&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon success"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;STATUS: PRODUCTION_READY&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon info"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;AUDIENCE: DBA | SRE | PLATFORM_ENG&lt;/span&gt; &lt;/div&gt; &lt;div class="sol-meta-item"&gt; &lt;span class="sol-status-icon warning"&gt;●&lt;/span&gt; &lt;span class="sol-mono"&gt;DATABASE: PostgreSQL 14+&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .sol-pg-hero {
 background: linear-gradient(135deg, #0a0a1f 0%, #161641 100%);
 padding: 120px 20px 80px 20px;
 font-family: 'Inter', sans-serif;
 color: #ffffff;
 border-bottom: 2px solid #7790de;
 position: relative;
 overflow: hidden;
 }

 .sol-pg-hero::before {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 bottom: 0;
 background-image: 
 linear-gradient(90deg, rgba(119, 144, 222, 0.05) 1px, transparent 1px),
 linear-gradient(rgba(119, 144, 222, 0.05) 1px, transparent 1px);
 background-size: 50px 50px;
 opacity: 0.3;
 pointer-events: none;
 }

 .sol-pg-hero .sol-container {
 max-width: 1200px;
 margin: 0 auto;
 position: relative;
 z-index: 1;
 }

 .sol-pg-hero .sol-breadcrumb {
 display: flex;
 align-items: center;
 gap: 10px;
 margin-bottom: 30px;
 font-size: 14px;
 }

 .sol-pg-hero .sol-mono {
 font-family: 'Courier New', monospace;
 color: #7790de;
 font-weight: 600;
 }

 .sol-pg-hero .sol-status-icon { font-size: 12px; }
 .sol-pg-hero .success { color: #00ff9d; }
 .sol-pg-hero .info { color: #7790de; }
 .sol-pg-hero .warning { color: #ffbd2e; }

 .sol-pg-hero .sol-hero-content h1 {
 font-size: 56px;
 line-height: 1.1;
 font-weight: 800;
 margin: 0 0 15px 0;
 color: #ffffff;
 letter-spacing: -0.5px;
 }

 .sol-pg-hero .sol-hero-content h2 {
 font-size: 32px;
 line-height: 1.3;
 font-weight: 600;
 margin: 0 0 30px 0;
 color: #7790de;
 }

 .sol-pg-hero .sol-tagline {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 margin-bottom: 40px;
 max-width: 800px;
 }

 .sol-pg-hero .sol-tagline code {
 background: rgba(119, 144, 222, 0.15);
 color: #00ff9d;
 padding: 2px 10px;
 border-radius: 4px;
 font-family: 'Fira Code', 'Courier New', monospace;
 font-size: 0.95em;
 font-weight: 600;
 }

 .sol-pg-hero .sol-metadata {
 display: flex;
 flex-wrap: wrap;
 gap: 20px;
 margin-top: 40px;
 padding-top: 30px;
 border-top: 1px solid rgba(255,255,255,0.1);
 }

 .sol-pg-hero .sol-meta-item {
 display: flex;
 align-items: center;
 gap: 8px;
 font-size: 13px;
 }

 @media (max-width: 768px) {
 .sol-pg-hero .sol-hero-content h1 { font-size: 36px; }
 .sol-pg-hero .sol-hero-content h2 { font-size: 24px; }
 .sol-pg-hero .sol-tagline { font-size: 16px; }
 .sol-pg-hero .sol-metadata { flex-direction: column; gap: 15px; }
 }
&lt;/style&gt;

&lt;section class="sol-pg-toc-section"&gt; &lt;div class="sol-container"&gt; &lt;div class="sol-toc-header"&gt; &lt;span class="sol-mono sol-toc-label"&gt;$ cat TABLE_OF_CONTENTS&lt;/span&gt; &lt;h2&gt;PostgreSQL on Kubernetes: Architecture &amp;amp; Operations&lt;/h2&gt; &lt;p class="sol-toc-intro"&gt;Six pillars of running production PostgreSQL on Kubernetes — from Patroni HA to operator selection&lt;/p&gt;</description></item><item><title>Pricing</title><link>https://solanica.io/pricing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/pricing/</guid><description>Solanica Platform and services pricing.</description></item><item><title>Privacy Policy</title><link>https://solanica.io/privacy-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/privacy-policy/</guid><description>Solanica Privacy Policy document.</description></item><item><title>Request a demo</title><link>https://solanica.io/request-a-demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/request-a-demo/</guid><description>Request a personalized Solanica demo.</description></item><item><title>Run Microsoft SQL Server on Kubernetes</title><link>https://solanica.io/mssql-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/mssql-on-kubernetes/</guid><description>&lt;section class="mssql-hero-section"&gt; &lt;div class="mssql-container"&gt; &lt;!-- Status Badge --&gt; &lt;div class="mssql-status-badge"&gt; &lt;span class="mssql-pulse"&gt;&lt;/span&gt; &lt;span class="mssql-status-text"&gt;Early Alpha • Limited Access&lt;/span&gt; &lt;/div&gt; &lt;!-- Breadcrumb --&gt; &lt;div class="mssql-breadcrumb"&gt; &lt;span class="mssql-mono"&gt;/solutions/&lt;/span&gt; &lt;span class="mssql-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="mssql-mono"&gt;mssql-on-kubernetes&lt;/span&gt; &lt;/div&gt; &lt;!-- Main Headline --&gt; &lt;h1 class="mssql-headline"&gt;
 Run Microsoft SQL Server&lt;br/&gt;on Kubernetes. For Real.
 &lt;/h1&gt; &lt;!-- Sub-headline --&gt; &lt;p class="mssql-subheadline"&gt;
 Break free from Windows-only licensing traps and cloud vendor lock-in. Solanica Platform brings production-grade MSSQL to any Kubernetes cluster — with automated Day-2 operations, built on &lt;a href="https://openeverest.io" target="_blank" rel="noopener" class="mssql-link"&gt;OpenEverest&lt;/a&gt;.
 &lt;/p&gt; &lt;!-- CTA Buttons --&gt; &lt;div class="mssql-hero-cta"&gt; &lt;a href="#contact-solanica-team" class="mssql-btn-primary"&gt; &lt;span&gt;Join the Alpha Program&lt;/span&gt; &lt;span class="mssql-btn-arrow"&gt;→&lt;/span&gt; &lt;/a&gt; &lt;a href="#mssql-tco" class="mssql-btn-secondary"&gt; &lt;span&gt;See the Numbers&lt;/span&gt; &lt;span class="mssql-btn-arrow"&gt;↓&lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;!-- Visual: MSSQL Architecture Diagram --&gt; &lt;div class="mssql-hero-visual"&gt; &lt;svg viewBox="0 0 800 360" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solanica operator managing a SQL Server Availability Group on Kubernetes"&gt; &lt;defs&gt; &lt;marker id="mh-arrow-green" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"&gt; &lt;path d="M0 0 L6 3 L0 6" fill="none" stroke="#00ff9d" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/&gt; &lt;/marker&gt; &lt;marker id="mh-arrow-amber" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"&gt; &lt;path d="M0 0 L6 3 L0 6" fill="none" stroke="#ffbd2e" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/&gt; &lt;/marker&gt; &lt;/defs&gt; &lt;!-- Background --&gt; &lt;rect width="800" height="360" fill="#0a0a1f"/&gt; &lt;!-- Kubernetes Cluster Boundary --&gt; &lt;rect x="28" y="52" width="744" height="284" rx="14" fill="#0c0c24" stroke="#2a2a5c" stroke-width="1.5" stroke-dasharray="2 6" stroke-linecap="round"/&gt; &lt;g transform="translate(48, 40)"&gt; &lt;circle cx="6" cy="0" r="4.5" fill="none" stroke="#7790de" stroke-width="1.5"/&gt; &lt;circle cx="6" cy="0" r="1.5" fill="#7790de"/&gt; &lt;text x="20" y="4" fill="#7790de" font-size="12" font-weight="700" font-family="'Courier New', monospace" letter-spacing="1"&gt;KUBERNETES CLUSTER · any cloud / on-prem&lt;/text&gt; &lt;/g&gt; &lt;!-- Solanica Platform (nested, powered by OpenEverest) --&gt; &lt;rect x="244" y="68" width="312" height="94" rx="14" fill="rgba(119,144,222,0.06)" stroke="#7790de" stroke-width="1.4" stroke-dasharray="5 4"/&gt; &lt;text x="262" y="86" fill="#7790de" font-size="10" font-weight="700" font-family="'Courier New', monospace" letter-spacing="0.5"&gt;SOLANICA PLATFORM · based on OpenEverest&lt;/text&gt; &lt;!-- Operator (control plane) --&gt; &lt;rect x="262" y="94" width="276" height="56" rx="11" fill="#1a1630" stroke="#ffbd2e" stroke-width="1.8"/&gt; &lt;g transform="translate(280, 108)"&gt; &lt;circle cx="10" cy="10" r="11" fill="none" stroke="#ffbd2e" stroke-width="1.8"/&gt; &lt;path d="M10 3.5 L10 6 M10 14 L10 16.5 M3.5 10 L6 10 M14 10 L16.5 10 M5.4 5.4 L7.1 7.1 M12.9 12.9 L14.6 14.6 M14.6 5.4 L12.9 7.1 M7.1 12.9 L5.4 14.6" stroke="#ffbd2e" stroke-width="1.6" stroke-linecap="round"/&gt; &lt;circle cx="10" cy="10" r="3" fill="#ffbd2e"/&gt; &lt;/g&gt; &lt;text x="316" y="115" fill="#ffbd2e" font-size="14" font-weight="700" font-family="'Courier New', monospace"&gt;Solanica Operator&lt;/text&gt; &lt;text x="316" y="135" fill="#9aa4b8" font-size="10.5" font-family="Inter, sans-serif"&gt;reconciles state · runs failover&lt;/text&gt; &lt;!-- Control arrows to nodes --&gt; &lt;path d="M336 162 C 300 178, 250 184, 200 196" fill="none" stroke="#ffbd2e" stroke-width="1.6" stroke-dasharray="4 4" marker-end="url(#mh-arrow-amber)"/&gt; &lt;path d="M464 162 C 500 178, 550 184, 600 196" fill="none" stroke="#ffbd2e" stroke-width="1.6" stroke-dasharray="4 4" marker-end="url(#mh-arrow-amber)"/&gt; &lt;!-- Primary node --&gt; &lt;rect x="70" y="196" width="230" height="112" rx="12" fill="#141033" stroke="#00ff9d" stroke-width="1.8"/&gt; &lt;g transform="translate(90, 214)"&gt; &lt;rect x="0" y="2" width="22" height="18" rx="3" fill="none" stroke="#00ff9d" stroke-width="1.6"/&gt; &lt;ellipse cx="11" cy="4" rx="11" ry="3.5" fill="none" stroke="#00ff9d" stroke-width="1.6"/&gt; &lt;path d="M0 11 A11 3.5 0 0 0 22 11" fill="none" stroke="#00ff9d" stroke-width="1.2"/&gt; &lt;/g&gt; &lt;text x="122" y="222" fill="#ffffff" font-size="14" font-weight="700" font-family="Inter, sans-serif"&gt;SQL Server&lt;/text&gt; &lt;text x="122" y="240" fill="#9aa4b8" font-size="11" font-family="Inter, sans-serif"&gt;2022 · Linux container&lt;/text&gt; &lt;g transform="translate(90, 260)"&gt; &lt;rect x="0" y="0" width="66" height="20" rx="10" fill="rgba(0,255,157,0.12)"/&gt; &lt;circle cx="12" cy="10" r="3.5" fill="#00ff9d"/&gt; &lt;text x="22" y="14" fill="#00ff9d" font-size="10" font-weight="700" font-family="'Courier New', monospace"&gt;PRIMARY&lt;/text&gt; &lt;/g&gt; &lt;text x="166" y="274" fill="#7790de" font-size="10" font-family="'Courier New', monospace"&gt;▤ PVC · fast-ssd&lt;/text&gt; &lt;!-- Replica node --&gt; &lt;rect x="500" y="196" width="230" height="112" rx="12" fill="#141033" stroke="#7790de" stroke-width="1.8"/&gt; &lt;g transform="translate(520, 214)"&gt; &lt;rect x="0" y="2" width="22" height="18" rx="3" fill="none" stroke="#7790de" stroke-width="1.6"/&gt; &lt;ellipse cx="11" cy="4" rx="11" ry="3.5" fill="none" stroke="#7790de" stroke-width="1.6"/&gt; &lt;path d="M0 11 A11 3.5 0 0 0 22 11" fill="none" stroke="#7790de" stroke-width="1.2"/&gt; &lt;/g&gt; &lt;text x="552" y="222" fill="#ffffff" font-size="14" font-weight="700" font-family="Inter, sans-serif"&gt;SQL Server&lt;/text&gt; &lt;text x="552" y="240" fill="#9aa4b8" font-size="11" font-family="Inter, sans-serif"&gt;2022 · Linux container&lt;/text&gt; &lt;g transform="translate(520, 260)"&gt; &lt;rect x="0" y="0" width="72" height="20" rx="10" fill="rgba(119,144,222,0.14)"/&gt; &lt;circle cx="12" cy="10" r="3.5" fill="#7790de"/&gt; &lt;text x="22" y="14" fill="#7790de" font-size="10" font-weight="700" font-family="'Courier New', monospace"&gt;STANDBY&lt;/text&gt; &lt;/g&gt; &lt;text x="602" y="274" fill="#7790de" font-size="10" font-family="'Courier New', monospace"&gt;▤ PVC · fast-ssd&lt;/text&gt; &lt;!-- AG sync between nodes --&gt; &lt;path d="M300 246 L 500 246" fill="none" stroke="#00ff9d" stroke-width="1.8" stroke-dasharray="6 5" marker-end="url(#mh-arrow-green)"/&gt; &lt;path d="M500 262 L 300 262" fill="none" stroke="#00ff9d" stroke-width="1.2" stroke-dasharray="2 5" opacity="0.5" marker-end="url(#mh-arrow-green)"/&gt; &lt;g transform="translate(400, 240)"&gt; &lt;rect x="-52" y="-15" width="104" height="22" rx="11" fill="#0a0a1f" stroke="#00ff9d" stroke-width="1.2"/&gt; &lt;text x="0" y="0" text-anchor="middle" fill="#00ff9d" font-size="10" font-weight="700" font-family="'Courier New', monospace"&gt;ALWAYS-ON AG&lt;/text&gt; &lt;/g&gt; &lt;/svg&gt; &lt;/div&gt; &lt;!-- Key Promises --&gt; &lt;div class="mssql-promise"&gt; &lt;div class="mssql-promise-item"&gt; &lt;span class="mssql-promise-icon"&gt;&lt;svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M3 8.5 L6.5 12 L13 4.5" stroke="#00ff9d" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;span class="mssql-promise-text"&gt;Up to 60% TCO reduction vs. Azure SQL&lt;/span&gt; &lt;/div&gt; &lt;div class="mssql-promise-item"&gt; &lt;span class="mssql-promise-icon"&gt;&lt;svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M3 8.5 L6.5 12 L13 4.5" stroke="#00ff9d" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;span class="mssql-promise-text"&gt;No vendor lock-in — run anywhere&lt;/span&gt; &lt;/div&gt; &lt;div class="mssql-promise-item"&gt; &lt;span class="mssql-promise-icon"&gt;&lt;svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M3 8.5 L6.5 12 L13 4.5" stroke="#00ff9d" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;span class="mssql-promise-text"&gt;Automated Day-2 operations&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .mssql-hero-section {
 background: linear-gradient(180deg, #0a0a1f 0%, #0f0f2d 100%);
 padding: 120px 20px 100px 20px;
 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
 color: #ffffff;
 text-align: center;
 position: relative;
 overflow: hidden;
 }

 .mssql-hero-section::before {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 height: 1px;
 background: linear-gradient(90deg, transparent, #7790de, transparent);
 }

 .mssql-container {
 max-width: 1200px;
 margin: 0 auto;
 }

 /* Status Badge */
 .mssql-status-badge {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 background: rgba(255, 189, 46, 0.1);
 border: 1px solid rgba(255, 189, 46, 0.3);
 border-radius: 20px;
 padding: 6px 16px;
 margin-bottom: 20px;
 animation: mssql-badge-glow 2s ease-in-out infinite;
 }

 @keyframes mssql-badge-glow {
 0%, 100% { box-shadow: 0 0 10px rgba(255, 189, 46, 0.2); }
 50% { box-shadow: 0 0 20px rgba(255, 189, 46, 0.4); }
 }

 .mssql-pulse {
 width: 8px;
 height: 8px;
 background: #ffbd2e;
 border-radius: 50%;
 animation: mssql-pulse 2s ease-in-out infinite;
 }

 @keyframes mssql-pulse {
 0%, 100% { opacity: 1; transform: scale(1); }
 50% { opacity: 0.5; transform: scale(1.2); }
 }

 .mssql-status-text {
 font-size: 13px;
 font-weight: 600;
 color: #ffbd2e;
 letter-spacing: 0.5px;
 }

 /* Breadcrumb */
 .mssql-breadcrumb {
 display: inline-flex;
 align-items: center;
 gap: 10px;
 margin-bottom: 30px;
 font-size: 14px;
 }

 .mssql-breadcrumb-sep {
 color: #2ecc71;
 font-size: 12px;
 }

 .mssql-mono {
 font-family: 'Courier New', monospace;
 color: #7790de;
 font-weight: 600;
 }

 /* Headline */
 .mssql-headline {
 font-size: 56px;
 font-weight: 800;
 line-height: 1.1;
 margin: 0 0 25px 0;
 color: #ffffff;
 letter-spacing: -0.5px;
 }

 .mssql-subheadline {
 font-size: 20px;
 line-height: 1.6;
 color: #b4bec8;
 max-width: 800px;
 margin: 0 auto 50px auto;
 }

 .mssql-label {
 color: #ffbd2e;
 font-weight: 700;
 font-size: 0.85em;
 }

 .mssql-link {
 color: #00ff9d;
 text-decoration: none;
 border-bottom: 1px solid rgba(0, 255, 157, 0.3);
 transition: border-color 0.2s ease;
 }

 .mssql-link:hover {
 border-color: #00ff9d;
 }

 /* Hero Visual */
 .mssql-hero-visual {
 margin: 0 auto 50px auto;
 max-width: 800px;
 border: 1px solid #2a2a5c;
 border-radius: 12px;
 overflow: hidden;
 }

 .mssql-hero-visual svg {
 display: block;
 width: 100%;
 height: auto;
 }

 /* Hero CTA */
 .mssql-hero-cta {
 display: flex;
 gap: 16px;
 justify-content: center;
 margin-bottom: 50px;
 flex-wrap: wrap;
 }

 .mssql-btn-primary {
 display: inline-flex;
 align-items: center;
 gap: 10px;
 padding: 16px 32px;
 background: #7790de;
 color: #ffffff !important;
 font-size: 16px;
 font-weight: 700;
 border-radius: 8px;
 text-decoration: none;
 transition: all 0.3s ease;
 }

 .mssql-btn-primary:hover {
 background: #8fa3e8;
 color: #ffffff !important;
 transform: translateY(-2px);
 box-shadow: 0 10px 30px rgba(119, 144, 222, 0.4);
 }

 .mssql-btn-secondary {
 display: inline-flex;
 align-items: center;
 gap: 10px;
 padding: 16px 32px;
 background: rgba(255, 255, 255, 0.05);
 color: #ffffff;
 font-size: 16px;
 font-weight: 600;
 border-radius: 8px;
 border: 1px solid rgba(255, 255, 255, 0.2);
 text-decoration: none;
 transition: all 0.3s ease;
 }

 .mssql-btn-secondary:hover {
 border-color: #ffffff;
 background: rgba(255, 255, 255, 0.1);
 }

 .mssql-btn-arrow {
 font-size: 18px;
 transition: transform 0.3s ease;
 }

 .mssql-btn-primary:hover .mssql-btn-arrow { transform: translateX(4px); }
 .mssql-btn-secondary:hover .mssql-btn-arrow { transform: translateY(3px); }

 /* Promises */
 .mssql-promise {
 display: flex;
 justify-content: center;
 gap: 40px;
 flex-wrap: wrap;
 }

 .mssql-promise-item {
 display: flex;
 align-items: center;
 gap: 10px;
 background: rgba(255, 255, 255, 0.03);
 border: 1px solid #2a2a5c;
 border-radius: 8px;
 padding: 12px 20px;
 transition: border-color 0.2s ease;
 }

 .mssql-promise-item:hover {
 border-color: #7790de;
 }

 .mssql-promise-icon {
 display: inline-flex;
 align-items: center;
 }

 .mssql-promise-text {
 font-size: 14px;
 font-weight: 600;
 color: #d1d5db;
 }

 @media (max-width: 768px) {
 .mssql-headline { font-size: 36px; }
 .mssql-subheadline { font-size: 16px; }
 .mssql-promise { flex-direction: column; align-items: center; gap: 15px; }
 .mssql-breadcrumb { display: none; }
 }
&lt;/style&gt;

&lt;section class="mssql-tco-section"&gt; &lt;div class="mssql-container"&gt; &lt;div class="mssql-section-header"&gt; &lt;span class="mssql-mono mssql-section-label"&gt;$ kubectl get pods -l app=mssql | wc -l&lt;/span&gt; &lt;h2&gt;The Real Cost of Running MSSQL&lt;/h2&gt; &lt;p class="mssql-intro"&gt;Microsoft SQL Server licensing on managed cloud services is a margin machine — for the cloud provider. Here's what happens when you take control.&lt;/p&gt;</description></item><item><title>Run OpenEverest on VMware vSphere Kubernetes Service</title><link>https://solanica.io/resources/dbaas-on-vks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/resources/dbaas-on-vks/</guid><description>&lt;section class="vks-hero"&gt; &lt;div class="vks-hero-container"&gt; &lt;nav class="vks-breadcrumb"&gt; &lt;a href="https://solanica.io/linkable-assets/" class="vks-breadcrumb-link"&gt;resources&lt;/a&gt; &lt;span class="vks-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="vks-breadcrumb-current"&gt;openeverest-on-vsphere&lt;/span&gt; &lt;/nav&gt; &lt;div class="vks-hero-logos"&gt; &lt;img src="https://solanica.io/images/pages/tild3732-6631-4933-b335-343432366262__logo-horizontal-full.png" alt="Solanica / OpenEverest" class="vks-logo-solanica" /&gt; &lt;span class="vks-logo-divider"&gt;×&lt;/span&gt; &lt;img src="https://solanica.io/images/pages/tild3334-6161-4533-a436-313439666365__vmwarebybroadcom_log.png" alt="VMware by Broadcom" class="vks-logo-vmware" /&gt; &lt;/div&gt; &lt;h1&gt;Run OpenEverest on VMware&lt;br&gt;vSphere Kubernetes Service&lt;/h1&gt; &lt;h2&gt;Turn your existing VMware infrastructure into a cloud-native database platform. Officially tested and partnered with Broadcom.&lt;/h2&gt; &lt;div class="vks-hero-ctas"&gt; &lt;a href="https://openeverest.io/documentation/current/quick-install.html" target="_blank" rel="noopener" class="vks-cta-primary"&gt;
 Quickstart Guide
 &lt;span class="vks-cta-arrow"&gt;→&lt;/span&gt; &lt;/a&gt; &lt;a href="https://meet.solanica.io/30min" target="_blank" rel="noopener" class="vks-cta-secondary"&gt;
 Talk to Sales — Enterprise Platform
 &lt;/a&gt; &lt;/div&gt; &lt;div class="vks-hero-proof"&gt; &lt;span class="vks-proof-badge"&gt; &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#4ec4a0" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;polyline points="20 6 9 17 4 12"/&gt;&lt;/svg&gt;
 Validated with Broadcom's Strategic Partnership Team
 &lt;/span&gt; &lt;span class="vks-proof-badge"&gt; &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#4ec4a0" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;polyline points="20 6 9 17 4 12"/&gt;&lt;/svg&gt;
 Runs on vSphere 8 + TKG / VKS
 &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;style&gt;
 .vks-hero {
 background: linear-gradient(135deg, #0a0a1f 0%, #0f0f2d 60%, #0d1a2f 100%);
 padding: 80px 20px 100px;
 font-family: 'Inter', sans-serif;
 color: #ffffff;
 position: relative;
 overflow: hidden;
 }

 .vks-hero::before {
 content: '';
 position: absolute;
 top: -50%;
 left: -50%;
 width: 200%;
 height: 200%;
 background: radial-gradient(ellipse at 30% 80%, rgba(78, 196, 160, 0.04) 0%, transparent 50%),
 radial-gradient(ellipse at 70% 20%, rgba(119, 144, 222, 0.04) 0%, transparent 50%);
 pointer-events: none;
 }

 .vks-hero-container {
 max-width: 860px;
 margin: 0 auto;
 position: relative;
 z-index: 1;
 }

 /* Breadcrumb */
 .vks-breadcrumb {
 display: flex;
 align-items: center;
 gap: 8px;
 margin-bottom: 40px;
 font-size: 13px;
 font-family: 'JetBrains Mono', monospace;
 }

 .vks-breadcrumb-link {
 color: rgba(200, 212, 228, 0.4);
 text-decoration: none;
 }

 .vks-breadcrumb-link:hover { color: rgba(200, 212, 228, 0.7); }
 .vks-breadcrumb-sep { color: rgba(200, 212, 228, 0.2); }
 .vks-breadcrumb-current { color: rgba(200, 212, 228, 0.6); }

 /* Logos */
 .vks-hero-logos {
 display: flex;
 align-items: center;
 gap: 24px;
 margin-bottom: 36px;
 }

 .vks-logo-solanica {
 height: 36px;
 width: auto;
 opacity: 0.9;
 }

 .vks-logo-divider {
 font-size: 22px;
 color: rgba(200, 212, 228, 0.25);
 font-weight: 300;
 }

 .vks-logo-vmware {
 height: 28px;
 width: auto;
 opacity: 0.85;
 }

 /* Typography */
 .vks-hero h1 {
 font-size: clamp(32px, 5vw, 52px);
 font-weight: 800;
 line-height: 1.1;
 letter-spacing: -2px;
 margin: 0 0 18px;
 background: linear-gradient(135deg, #ffffff 0%, rgba(200, 212, 228, 0.85) 100%);
 -webkit-background-clip: text;
 -webkit-text-fill-color: transparent;
 background-clip: text;
 }

 .vks-hero h2 {
 font-size: clamp(16px, 2.2vw, 20px);
 font-weight: 400;
 color: rgba(200, 212, 228, 0.6);
 line-height: 1.55;
 margin: 0 0 36px;
 max-width: 680px;
 }

 /* CTAs */
 .vks-hero-ctas {
 display: flex;
 gap: 16px;
 flex-wrap: wrap;
 margin-bottom: 40px;
 }

 .vks-cta-primary {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 padding: 14px 28px;
 border-radius: 8px;
 background: #4ec4a0;
 color: #ffffff !important;
 font-weight: 700;
 font-size: 15px;
 text-decoration: none;
 transition: background 0.2s, transform 0.15s;
 }

 .vks-cta-primary:hover {
 background: #5dd4b0;
 transform: translateY(-1px);
 }

 .vks-cta-arrow { font-size: 18px; }

 .vks-cta-secondary {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 padding: 14px 28px;
 border-radius: 8px;
 background: transparent;
 border: 1px solid rgba(200, 212, 228, 0.15);
 color: rgba(200, 212, 228, 0.8);
 font-weight: 600;
 font-size: 15px;
 text-decoration: none;
 transition: border-color 0.2s, color 0.2s;
 }

 .vks-cta-secondary:hover {
 border-color: rgba(200, 212, 228, 0.35);
 color: #fff;
 }

 /* Proof badges */
 .vks-hero-proof {
 display: flex;
 gap: 20px;
 flex-wrap: wrap;
 }

 .vks-proof-badge {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 font-size: 13px;
 color: rgba(200, 212, 228, 0.5);
 font-weight: 500;
 }

 @media (max-width: 640px) {
 .vks-hero { padding: 48px 16px 60px; }
 .vks-hero-logos { gap: 16px; }
 .vks-logo-solanica { height: 28px; }
 .vks-logo-vmware { height: 22px; }
 .vks-hero-ctas { flex-direction: column; }
 .vks-hero-proof { flex-direction: column; gap: 10px; }
 }
&lt;/style&gt;

&lt;section class="vks-why"&gt; &lt;div class="vks-why-container"&gt; &lt;div class="vks-why-header"&gt; &lt;span class="vks-why-label"&gt;The short version&lt;/span&gt; &lt;h2&gt;Why This Matters for VMware Shops&lt;/h2&gt; &lt;p class="vks-why-lead"&gt;You have a massive vSphere footprint. You want cloud-like database automation without migrating to AWS or GCP. OpenEverest is the bridge.&lt;/p&gt;</description></item><item><title>Sergey Pronin</title><link>https://solanica.io/authors/spron-in/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/authors/spron-in/</guid><description/></item><item><title>Solanica &amp; OpenEverest — Run Data Workloads Anywhere</title><link>https://solanica.io/presentations/about-solanica-2026/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/presentations/about-solanica-2026/</guid><description>&lt;!-- ============================================================
 Solanica Overview — Customer Presentation
 _meta.t123.html
 ============================================================ --&gt; &lt;script&gt;
(function () {

 var META = {
 title: "Solanica &amp; OpenEverest — Run Data Workloads Anywhere",
 slug: "about-solanica-2026",
 description: "Solanica and OpenEverest: freedom to run production data workloads on any infrastructure without vendor lock-in. Customer-facing overview presentation.",
 speaker: "Sergey Pronin",
 event: "Customer Presentation",
 eventUrl: "https://solanica.io",
 date: "2026-05-20",
 location: "Global",
 tags: ["solanica", "openeverest", "databases", "dbaas", "platform-engineering", "cloud-native"],
 status: "draft",
 coverImage: "https://solanica.io/og-default.png",
 pageUrl: "https://solanica.io/presentations/about-solanica-2026"
 };

 window.__presMETA = META;

 var d = document;

 function tag(name, attrs) {
 var key = attrs.property || attrs.name;
 if (key) {
 var existing = d.querySelector(
 'meta[property="' + key + '"], meta[name="' + key + '"]'
 );
 if (existing) existing.parentNode.removeChild(existing);
 }
 var el = d.createElement(name);
 Object.keys(attrs).forEach(function (k) { el.setAttribute(k, attrs[k]); });
 return el;
 }

 var head = d.head || d.getElementsByTagName('head')[0];

 var titleEl = d.querySelector('title');
 if (titleEl) {
 titleEl.textContent = META.title;
 } else {
 var t = d.createElement('title');
 t.textContent = META.title;
 head.appendChild(t);
 }

 head.appendChild(tag('meta', { name: 'description', content: META.description }));
 head.appendChild(tag('meta', { name: 'author', content: META.speaker }));
 head.appendChild(tag('meta', { name: 'keywords', content: META.tags.join(', ') }));
 head.appendChild(tag('link', { rel: 'canonical', href: META.pageUrl }));

 head.appendChild(tag('meta', { property: 'og:type', content: 'website' }));
 head.appendChild(tag('meta', { property: 'og:title', content: META.title }));
 head.appendChild(tag('meta', { property: 'og:description', content: META.description }));
 head.appendChild(tag('meta', { property: 'og:image', content: META.coverImage }));
 head.appendChild(tag('meta', { property: 'og:url', content: META.pageUrl }));
 head.appendChild(tag('meta', { property: 'og:site_name', content: 'Solanica' }));

 head.appendChild(tag('meta', { name: 'twitter:card', content: 'summary_large_image' }));
 head.appendChild(tag('meta', { name: 'twitter:site', content: '@solanicaio' }));
 head.appendChild(tag('meta', { name: 'twitter:title', content: META.title }));
 head.appendChild(tag('meta', { name: 'twitter:description', content: META.description }));
 head.appendChild(tag('meta', { name: 'twitter:image', content: META.coverImage }));

})();
&lt;/script&gt;

&lt;!-- ============================================================
 Solanica Presentation Engine — _head.t123.html
 ADD THIS AS THE FIRST BLOCK on every Tilda presentation page.
 It applies scroll-snap to the page and styles shared by all slides.
 ============================================================ --&gt; &lt;style&gt;
 /* ---- Page-level scroll snap ---- */
 html {
 scroll-snap-type: y mandatory;
 scroll-behavior: smooth;
 overflow-y: scroll;
 scrollbar-width: none;
 -ms-overflow-style: none;
 }
 html::-webkit-scrollbar { display: none; }

 body {
 margin: 0;
 padding: 0;
 font-family: 'Inter', system-ui, -apple-system, sans-serif;
 background: #0f0f29;
 }

 /* ---- Slide base ---- */
 .slide {
 height: 100vh;
 width: 100%;
 scroll-snap-align: start;
 scroll-snap-stop: always;
 position: relative;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
 }

 /* ---- Navigation dots (right edge) ---- */
 .pres-dots {
 position: fixed;
 right: 18px;
 top: 50%;
 transform: translateY(-50%);
 display: flex;
 flex-direction: column;
 gap: 10px;
 z-index: 9999;
 list-style: none;
 margin: 0;
 padding: 0;
 }
 .pres-dot {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background: rgba(255, 255, 255, 0.22);
 cursor: pointer;
 border: none;
 padding: 0;
 outline: none;
 transition: background 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
 }
 .pres-dot:hover { background: rgba(255, 255, 255, 0.5); }
 .pres-dot.active {
 background: #7790de;
 box-shadow: 0 0 8px rgba(119, 144, 222, 0.6);
 transform: scale(1.5);
 }

 /* ---- Slide counter (bottom-right) ---- */
 .pres-counter {
 position: fixed;
 bottom: 20px;
 right: 24px;
 color: rgba(255, 255, 255, 0.28);
 font-size: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 }

 /* ---- Key hint (bottom-centre, fades out) ---- */
 .pres-hint {
 position: fixed;
 bottom: 18px;
 left: 50%;
 transform: translateX(-50%);
 color: rgba(255, 255, 255, 0.22);
 font-size: 11px;
 font-family: 'Inter', system-ui, sans-serif;
 letter-spacing: 0.1em;
 text-transform: uppercase;
 z-index: 9999;
 pointer-events: none;
 user-select: none;
 white-space: nowrap;
 transition: opacity 1.4s ease;
 }
 .pres-hint.hidden { opacity: 0; }

 /* ---- Left-edge back trigger ---- */
 .pres-back-trigger {
 position: fixed;
 left: 0;
 top: 0;
 width: 48px;
 height: 100vh;
 z-index: 9998;
 cursor: pointer;
 }
 .pres-back-trigger:hover .pres-back-label {
 opacity: 1;
 transform: translateY(-50%) translateX(0);
 }
 .pres-back-label {
 position: absolute;
 top: 50%;
 left: 16px;
 transform: translateY(-50%) translateX(-8px);
 opacity: 0;
 transition: opacity 0.25s ease, transform 0.25s ease;
 display: flex;
 align-items: center;
 gap: 10px;
 white-space: nowrap;
 color: rgba(255, 255, 255, 0.75);
 font-size: 13px;
 font-family: 'Inter', system-ui, sans-serif;
 font-weight: 500;
 letter-spacing: 0.03em;
 text-decoration: none;
 padding: 10px 16px 10px 12px;
 background: rgba(15, 15, 41, 0.85);
 border: 1px solid rgba(255, 255, 255, 0.1);
 border-radius: 8px;
 backdrop-filter: blur(8px);
 -webkit-backdrop-filter: blur(8px);
 pointer-events: auto;
 }
 .pres-back-label:hover {
 color: #ffffff;
 border-color: rgba(255, 255, 255, 0.25);
 }
 .pres-back-arrow {
 font-size: 16px;
 line-height: 1;
 flex-shrink: 0;
 }

 /* ---- Mobile: desktop hint toast ---- */
 .pres-mob-toast {
 position: fixed;
 top: 16px;
 left: 50%;
 transform: translateX(-50%);
 z-index: 99999;
 background: rgba(15, 15, 41, 0.92);
 border: 1px solid rgba(119, 144, 222, 0.3);
 border-radius: 10px;
 backdrop-filter: blur(12px);
 -webkit-backdrop-filter: blur(12px);
 padding: 10px 10px 10px 16px;
 display: flex;
 align-items: center;
 gap: 12px;
 font-family: 'Inter', system-ui, sans-serif;
 font-size: 13px;
 color: rgba(200, 212, 228, 0.8);
 white-space: nowrap;
 opacity: 1;
 transition: opacity 0.4s ease, transform 0.4s ease;
 pointer-events: auto;
 }
 .pres-mob-toast.hidden {
 opacity: 0;
 transform: translateX(-50%) translateY(-8px);
 pointer-events: none;
 }
 .pres-mob-toast-close {
 width: 22px;
 height: 22px;
 border: 1px solid rgba(255, 255, 255, 0.1);
 background: rgba(255, 255, 255, 0.06);
 border-radius: 50%;
 color: rgba(200, 212, 228, 0.55);
 font-size: 12px;
 line-height: 1;
 cursor: pointer;
 display: flex;
 align-items: center;
 justify-content: center;
 padding: 0;
 flex-shrink: 0;
 transition: background 0.2s, color 0.2s;
 }
 .pres-mob-toast-close:hover {
 background: rgba(255, 255, 255, 0.12);
 color: rgba(200, 212, 228, 0.9);
 }

 /* ============================================================
 MOBILE — scale-to-fit: preserve desktop layout, shrink it
 to fit the phone screen. Users pinch-to-zoom for details.
 ============================================================ */
 @media (max-width: 768px) {

 /* Disable snap — Tilda's header shifts the snap anchor
 of slide-1 below the viewport edge, causing it to be
 skipped. Natural scroll is more reliable on touch. */
 html {
 scroll-snap-type: none;
 }

 /* Keep slides as fixed-height viewports */
 .slide {
 height: 100svh;
 scroll-snap-align: none;
 scroll-snap-stop: normal;
 }

 /* Hide keyboard-centric chrome — not useful on touch */
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger {
 display: none !important;
 }

 /* Scale the content wrapper to fit the viewport width.
 --pres-mob-scale is set by JS in _foot.t123.html.
 The wrapper renders at its desktop width (1060px) and
 is visually scaled down via CSS transform. */
 .slide &gt; [class*="-wrap"],
 .slide &gt; [class*="-outer"] {
 width: 1060px !important;
 max-width: none !important;
 transform: scale(var(--pres-mob-scale, 1));
 transform-origin: center center;
 }
 }

 /* ============================================================
 PRINT — one slide per page, hide navigation chrome.
 Use landscape orientation, no margins for best results.
 ============================================================ */
 @media print {
 html {
 scroll-snap-type: none;
 overflow: visible;
 }
 body {
 background: #0a0a1e;
 -webkit-print-color-adjust: exact;
 print-color-adjust: exact;
 }
 .slide {
 height: 100vh;
 width: 100vw;
 page-break-after: always;
 break-after: page;
 page-break-inside: avoid;
 break-inside: avoid;
 scroll-snap-align: none;
 overflow: hidden;
 }
 .slide:last-child {
 page-break-after: auto;
 break-after: auto;
 }
 .pres-dots,
 .pres-counter,
 .pres-hint,
 .pres-back-trigger,
 .pres-mob-toast {
 display: none !important;
 }
 /* Reveal all step-animated elements — force final state */
 .slide * {
 opacity: 1 !important;
 transform: none !important;
 visibility: visible !important;
 transition: none !important;
 animation: none !important;
 }
 }
&lt;/style&gt;

&lt;!-- ============================================================
 Solanica Overview — Customer Presentation
 Slide 01: Title &amp; Core Value Proposition
 ============================================================ --&gt; &lt;style&gt;
 #sol-slide-01 {
 background-color: #0a0a1e;
 background-image:
 radial-gradient(ellipse at 20% 80%, rgba(31, 35, 85, 0.75) 0%, transparent 55%),
 radial-gradient(ellipse at 80% 20%, rgba(31, 35, 85, 0.55) 0%, transparent 50%),
 radial-gradient(circle at 50% 50%, #131333 0%, #080818 100%);
 }

 .sol01-wrap {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-between;
 height: 100%;
 width: 100%;
 position: relative;
 z-index: 1;
 padding: 48px 72px 44px;
 box-sizing: border-box;
 text-align: center;
 }

 .sol01-logo {
 display: block;
 height: 56px;
 width: auto;
 opacity: 0.92;
 }

 .sol01-body {
 flex: 1;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 gap: 0;
 }

 .sol01-eyebrow {
 font-size: 18px;
 letter-spacing: 0.22em;
 text-transform: uppercase;
 color: #7790de;
 font-weight: 600;
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 32px;
 }

 .sol01-title {
 font-size: 96px;
 font-weight: 800;
 color: #ffffff;
 line-height: 1.06;
 letter-spacing: -3px;
 margin: 0 0 32px;
 font-family: 'Inter', system-ui, sans-serif;
 }

 .sol01-title span {
 color: #7790de;
 }

 .sol01-subtitle {
 font-size: 30px;
 font-weight: 300;
 color: rgba(220, 228, 240, 0.55);
 font-family: 'Inter', system-ui, sans-serif;
 margin: 0 0 48px;
 letter-spacing: -0.3px;
 max-width: 1000px;
 line-height: 1.45;
 }

 .sol01-pillars {
 display: flex;
 gap: 24px;
 flex-wrap: wrap;
 justify-content: center;
 }

 .sol01-pill {
 display: inline-flex;
 align-items: center;
 gap: 12px;
 padding: 16px 28px;
 border-radius: 10px;
 font-size: 20px;
 font-weight: 600;
 font-family: 'Inter', system-ui, sans-serif;
 border: 1px solid rgba(119, 144, 222, 0.25);
 background: rgba(119, 144, 222, 0.06);
 color: rgba(200, 212, 228, 0.85);
 }

 .sol01-pill svg {
 flex-shrink: 0;
 width: 22px;
 height: 22px;
 }

 .sol01-footer {
 font-size: 18px;
 color: rgba(200, 212, 228, 0.4);
 font-family: 'Inter', system-ui, sans-serif;
 }

 @media (max-width: 768px) {
 .sol01-title { font-size: clamp(42px, 12vw, 72px); letter-spacing: -1px; }
 .sol01-subtitle { font-size: 22px; }
 .sol01-pillars { flex-direction: column; align-items: center; }
 }
&lt;/style&gt; &lt;div class="slide" id="sol-slide-01"&gt; &lt;div class="sol01-wrap"&gt; &lt;img class="sol01-logo" src="https://solanica.io/images/pages/tild6230-3737-4562-b261-653038343838__white-horizontal.svg" alt="Solanica" /&gt; &lt;div class="sol01-body"&gt; &lt;h1 class="sol01-title"&gt;Run Data Workloads &lt;span&gt;Anywhere.&lt;/span&gt;&lt;/h1&gt; &lt;p class="sol01-subtitle"&gt;No vendor lock-in. No infrastructure constraints. Full control over your data, on your terms — any cloud, on-prem, edge, or hybrid.&lt;/p&gt;</description></item><item><title>Solanica Team</title><link>https://solanica.io/authors/solanica-team/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/authors/solanica-team/</guid><description/></item><item><title>Solanica vs AWS RDS: Open, Portable Databases vs Cloud Lock-In</title><link>https://solanica.io/vs/aws-rds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/vs/aws-rds/</guid><description>&lt;section class="sol-vs-hero"&gt; &lt;div class="sol-vs-hero-container"&gt; &lt;nav class="sol-vs-breadcrumb"&gt; &lt;a href="https://solanica.io/comparisons/" class="sol-vs-breadcrumb-link"&gt;comparisons&lt;/a&gt; &lt;span class="sol-vs-breadcrumb-sep"&gt;❯&lt;/span&gt; &lt;span class="sol-vs-breadcrumb-current"&gt;solanica-vs-aws-rds&lt;/span&gt; &lt;/nav&gt; &lt;div class="sol-vs-hero-label"&gt; &lt;span class="sol-vs-mono"&gt;$ diff solanica.yaml aws-rds.yaml&lt;/span&gt; &lt;/div&gt; &lt;h1&gt;Solanica vs AWS RDS&lt;/h1&gt; &lt;h2&gt;Open, Portable Database Platform vs AWS-Locked Managed Service&lt;/h2&gt; &lt;p class="sol-vs-hero-intro"&gt;Both Solanica and AWS RDS eliminate the need to hand-manage database infrastructure. The fundamental difference: RDS runs your databases deep inside AWS — your backups are in AWS-proprietary format, your extensions are AWS-curated, and your migration path out is painful by design. Solanica runs everything on &lt;strong&gt;your&lt;/strong&gt; Kubernetes clusters — any cloud, any data centre, fully portable.&lt;/p&gt;</description></item><item><title>Terms of Use</title><link>https://solanica.io/terms-of-use/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://solanica.io/terms-of-use/</guid><description>Solanica Terms of Use document.</description></item></channel></rss>