Files
html/huawei-cloud.html

691 lines
32 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Huawei Cloud — Infrastructure & IA | WEVAL</title>
<meta name="description" content="Partenaire officiel Huawei Cloud - GPU, IA, Kubernetes, Database - Tarifs négociés -40%">
<script src="https://js.stripe.com/v3/"></script>
<style>
* {margin:0;padding:0;box-sizing:border-box}
body {
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
background:linear-gradient(135deg,#0a0d14 0%,#151923 100%);
color:#e2e8f0;
min-height:100vh;
padding:2rem 1rem;
}
.container {max-width:1600px;margin:0 auto}
.header {text-align:center;margin-bottom:3rem}
.header h1 {font-size:2.8rem;font-weight:800;color:#fff;margin-bottom:0.5rem}
.header p {color:#94a3b8;font-size:1.2rem}
.innovation-badge {
display:inline-block;
margin-top:1rem;
padding:0.5rem 1.5rem;
background:linear-gradient(135deg,#e94560,#c13349);
color:white;
border-radius:20px;
font-size:0.9rem;
font-weight:700;
}
.cert-banner {
background:rgba(233,69,96,0.1);
border:1px solid rgba(233,69,96,0.3);
border-radius:16px;
padding:2rem;
margin-bottom:3rem;
display:grid;
grid-template-columns:250px 1fr 180px;
gap:2rem;
align-items:center;
}
.cert-img {max-width:100%;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.3)}
.cert-info h3 {font-size:1.2rem;color:#e94560;margin-bottom:0.5rem}
.cert-info p {color:#94a3b8;line-height:1.6;font-size:0.95rem}
.qr-mini img {width:140px;border-radius:12px;background:white;padding:0.5rem}
.qr-mini small {display:block;margin-top:0.5rem;color:#64748b;font-size:0.75rem;text-align:center}
.products-section {margin:4rem 0}
.section-title {
text-align:center;
font-size:2.2rem;
font-weight:700;
color:#fff;
margin-bottom:0.5rem;
}
.section-subtitle {
text-align:center;
color:#94a3b8;
margin-bottom:3rem;
font-size:1.1rem;
}
.products-grid {
display:grid;
grid-template-columns:repeat(auto-fill,minmax(340px,1fr));
gap:1.8rem;
margin-bottom:3rem;
}
.product-card {
background:rgba(255,255,255,0.03);
border:1px solid rgba(255,255,255,0.1);
border-radius:16px;
padding:1.8rem;
transition:all 0.3s;
position:relative;
}
.product-card:hover {
transform:translateY(-5px);
border-color:rgba(233,69,96,0.5);
box-shadow:0 20px 60px rgba(233,69,96,0.2);
}
.badge {
position:absolute;
top:-10px;
right:15px;
padding:0.3rem 0.9rem;
border-radius:20px;
font-size:0.7rem;
font-weight:700;
text-transform:uppercase;
}
.badge.popular {background:#e94560;color:white}
.badge.new {background:#22c55e;color:white}
.badge.ai {background:#8b5cf6;color:white}
.badge.hot {background:#f59e0b;color:white}
.product-header h3 {
font-size:1.3rem;
color:#fff;
margin-bottom:0.4rem;
}
.product-category {
color:#64748b;
font-size:0.8rem;
text-transform:uppercase;
letter-spacing:0.1em;
margin-bottom:1rem;
}
.product-specs {
background:rgba(0,0,0,0.3);
border-radius:10px;
padding:1.2rem;
margin:1.2rem 0;
}
.spec-row {
display:flex;
justify-content:space-between;
padding:0.4rem 0;
border-bottom:1px solid rgba(255,255,255,0.05);
font-size:0.85rem;
}
.spec-row:last-child {border:none}
.spec-label {color:#94a3b8}
.spec-value {color:#38bdf8;font-weight:600}
.product-price {
display:flex;
align-items:baseline;
gap:0.5rem;
margin:1.2rem 0;
}
.price-amount {
font-size:2.2rem;
font-weight:800;
color:#22c55e;
}
.price-period {color:#64748b;font-size:0.9rem}
.price-original {
color:#64748b;
text-decoration:line-through;
font-size:1.1rem;
}
.product-features {
list-style:none;
margin:1.2rem 0;
}
.product-features li {
padding:0.4rem 0;
color:#cbd5e1;
display:flex;
align-items:center;
gap:0.5rem;
font-size:0.85rem;
}
.product-features li::before {
content:'✓';
color:#22c55e;
font-weight:700;
}
.btn-buy {
width:100%;
padding:0.9rem;
background:linear-gradient(135deg,#e94560 0%,#c13349 100%);
color:white;
border:none;
border-radius:10px;
font-size:1rem;
font-weight:700;
cursor:pointer;
transition:all 0.3s;
}
.btn-buy:hover {
transform:scale(1.02);
box-shadow:0 10px 40px rgba(233,69,96,0.4);
}
.features-grid {
display:grid;
grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
gap:1.3rem;
margin-top:3rem;
}
.feature-card {
background:rgba(233,69,96,0.1);
border:1px solid rgba(233,69,96,0.3);
border-radius:12px;
padding:1.3rem;
text-align:center;
}
.feature-icon {font-size:1.8rem;margin-bottom:0.5rem}
.feature-card h4 {color:#e94560;margin-bottom:0.5rem;font-size:0.95rem}
.feature-card p {color:#94a3b8;font-size:0.85rem}
.footer {
text-align:center;
margin-top:4rem;
padding-top:2rem;
border-top:1px solid rgba(255,255,255,0.1);
color:#64748b;
}
.back-link {
display:inline-block;
margin:1rem 0.5rem;
padding:0.75rem 1.5rem;
background:rgba(255,255,255,0.05);
border-radius:8px;
color:#94a3b8;
text-decoration:none;
transition:all 0.3s;
}
.back-link:hover {
background:rgba(233,69,96,0.2);
color:#e94560;
}
@media (max-width: 768px) {
.cert-banner {grid-template-columns:1fr;text-align:center}
.products-grid {grid-template-columns:1fr}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>🌐 Huawei Cloud — Partenaire Officiel</h1>
<p>Infrastructure Souveraine • Technologies IA • Tarifs Négociés -40%</p>
<span class="innovation-badge">✨ 11 Solutions Cloud & IA</span>
</div>
<div class="cert-banner">
<div style="text-align:center">
<img src="/products/images/huawei/weval-cert.png" alt="Certificat WEVAL" class="cert-img">
</div>
<div class="cert-info">
<h3>📜 Standard Cloud Solution Provider</h3>
<p><strong>WEVAL CONSULTING</strong> — Partenaire officiel Huawei Cloud certifié. Accès direct aux tarifs partenaires négociés avec accompagnement personnalisé.</p>
<p style="margin-top:0.8rem;font-size:0.8rem">Certificat #202512583509DC • Valide jusqu'au 31 janvier 2026</p>
</div>
<div class="qr-mini">
<img src="/products/images/huawei/affiliate-qr.jpg" alt="QR Code">
<small>Scanner pour acheter</small>
</div>
</div>
<div class="products-section">
<h2 class="section-title">Catalogue Produits</h2>
<p class="section-subtitle">GPU, IA, Kubernetes, Database, Serverless & Tokens API</p>
<div class="products-grid">
<!-- 1. Inference Tokens API -->
<div class="product-card">
<span class="badge hot">🔥 Tokens IA</span>
<div class="product-header">
<h3>Inference Tokens — API IA</h3>
<div class="product-category">Huawei Cloud • AI API</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Models</span><span class="spec-value">20+ LLM</span></div>
<div class="spec-row"><span class="spec-label">Tokens</span><span class="spec-value">1M inclus</span></div>
<div class="spec-row"><span class="spec-label">Latence</span><span class="spec-value"><50ms</span></div>
<div class="spec-row"><span class="spec-label">API</span><span class="spec-value">REST + SDK</span></div>
</div>
<div class="product-price">
<span class="price-amount">€25</span>
<span class="price-period">/mois</span>
</div>
<ul class="product-features">
<li>LLM: Llama, Qwen, Claude, GPT</li>
<li>Embedding + RAG ready</li>
<li>1M tokens/mois inclus</li>
<li>Dashboard analytics temps réel</li>
</ul>
<button class="btn-buy" onclick="buyProduct('inference_tokens', 2500)">🛒 Acheter Tokens</button>
</div>
<!-- 2. GPU A100 -->
<div class="product-card">
<span class="badge popular">⭐ Plus vendu</span>
<div class="product-header">
<h3>GPU A100 — IA & ML</h3>
<div class="product-category">Huawei ECS • GPU Instance</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">GPU</span><span class="spec-value">NVIDIA A100 40GB</span></div>
<div class="spec-row"><span class="spec-label">vCPU</span><span class="spec-value">96 cores</span></div>
<div class="spec-row"><span class="spec-label">RAM</span><span class="spec-value">768 GB</span></div>
<div class="spec-row"><span class="spec-label">Stockage</span><span class="spec-value">2TB NVMe</span></div>
</div>
<div class="product-price">
<span class="price-amount">€2,40</span>
<span class="price-period">/h</span>
<span class="price-original">€3,80</span>
</div>
<ul class="product-features">
<li>TensorFlow & PyTorch</li>
<li>ModelArts intégré</li>
<li>25 Gbps réseau</li>
<li>Support 24/7</li>
</ul>
<button class="btn-buy" onclick="buyProduct('gpu_a100', 240)">🛒 Commander</button>
</div>
<!-- 3. ModelArts -->
<div class="product-card">
<span class="badge ai">🤖 IA</span>
<div class="product-header">
<h3>ModelArts — Plateforme IA</h3>
<div class="product-category">Huawei Cloud • AI Platform</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Models</span><span class="spec-value">100+ pré-entraînés</span></div>
<div class="spec-row"><span class="spec-label">Training</span><span class="spec-value">Distribué auto</span></div>
<div class="spec-row"><span class="spec-label">Deploy</span><span class="spec-value">1-click</span></div>
<div class="spec-row"><span class="spec-label">AutoML</span><span class="spec-value">Inclus</span></div>
</div>
<div class="product-price">
<span class="price-amount">€1,20</span>
<span class="price-period">/h GPU</span>
</div>
<ul class="product-features">
<li>Jupyter managé</li>
<li>Data labeling</li>
<li>MLOps complet</li>
<li>API inference</li>
</ul>
<button class="btn-buy" onclick="buyProduct('modelarts', 120)">🛒 Commander</button>
</div>
<!-- 4. Cloud Stack -->
<div class="product-card">
<span class="badge new">✨ Innovation</span>
<div class="product-header">
<h3>Cloud Stack — Hybrid</h3>
<div class="product-category">Huawei Cloud • Infrastructure</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Deploy</span><span class="spec-value">On-premise</span></div>
<div class="spec-row"><span class="spec-label">Nodes</span><span class="spec-value">3-100+ servers</span></div>
<div class="spec-row"><span class="spec-label">Mgmt</span><span class="spec-value">Cloud console</span></div>
<div class="spec-row"><span class="spec-label">Support</span><span class="spec-value">24/7 Premium</span></div>
</div>
<div class="product-price">
<span class="price-amount">€4,500</span>
<span class="price-period">/mois</span>
</div>
<ul class="product-features">
<li>API compatible Cloud</li>
<li>Migration bi-dir</li>
<li>Souveraineté totale</li>
<li>RGPD natif</li>
</ul>
<button class="btn-buy" onclick="buyProduct('cloud_stack', 450000)">🛒 Commander</button>
</div>
<!-- 5. CCE Kubernetes -->
<div class="product-card">
<span class="badge popular">🔥 Top 3</span>
<div class="product-header">
<h3>CCE — Kubernetes</h3>
<div class="product-category">Huawei Cloud • Container</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Version</span><span class="spec-value">K8s 1.28+</span></div>
<div class="spec-row"><span class="spec-label">Nodes</span><span class="spec-value">1-1000</span></div>
<div class="spec-row"><span class="spec-label">Scale</span><span class="spec-value">Auto</span></div>
<div class="spec-row"><span class="spec-label">Monitor</span><span class="spec-value">Prometheus</span></div>
</div>
<div class="product-price">
<span class="price-amount">€0,12</span>
<span class="price-period">/h</span>
</div>
<ul class="product-features">
<li>Control plane managé</li>
<li>Helm repository</li>
<li>Istio service mesh</li>
<li>CI/CD intégré</li>
</ul>
<button class="btn-buy" onclick="buyProduct('cce_k8s', 12)">🛒 Commander</button>
</div>
<!-- 6. ECS Compute -->
<div class="product-card">
<div class="product-header">
<h3>ECS Compute</h3>
<div class="product-category">Huawei ECS • General Purpose</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">vCPU</span><span class="spec-value">32 cores</span></div>
<div class="spec-row"><span class="spec-label">RAM</span><span class="spec-value">128 GB</span></div>
<div class="spec-row"><span class="spec-label">Storage</span><span class="spec-value">1TB SSD</span></div>
<div class="spec-row"><span class="spec-label">Network</span><span class="spec-value">10 Gbps</span></div>
</div>
<div class="product-price">
<span class="price-amount">€0,85</span>
<span class="price-period">/h</span>
</div>
<ul class="product-features">
<li>HA 99.95%</li>
<li>Snapshots auto</li>
<li>Load balancing</li>
<li>Migration assistée</li>
</ul>
<button class="btn-buy" onclick="buyProduct('ecs_compute', 85)">🛒 Commander</button>
</div>
<!-- 7. GPU V100 -->
<div class="product-card">
<div class="product-header">
<h3>GPU V100</h3>
<div class="product-category">Huawei ECS • GPU</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">GPU</span><span class="spec-value">V100 32GB</span></div>
<div class="spec-row"><span class="spec-label">vCPU</span><span class="spec-value">64 cores</span></div>
<div class="spec-row"><span class="spec-label">RAM</span><span class="spec-value">512 GB</span></div>
<div class="spec-row"><span class="spec-label">Storage</span><span class="spec-value">1.5TB NVMe</span></div>
</div>
<div class="product-price">
<span class="price-amount">€1,90</span>
<span class="price-period">/h</span>
</div>
<ul class="product-features">
<li>Tensor Cores</li>
<li>CUDA 11+</li>
<li>NVLink</li>
<li>Formation incluse</li>
</ul>
<button class="btn-buy" onclick="buyProduct('gpu_v100', 190)">🛒 Commander</button>
</div>
<!-- 8. GaussDB -->
<div class="product-card">
<span class="badge new">🆕</span>
<div class="product-header">
<h3>GaussDB — DB IA</h3>
<div class="product-category">Huawei Cloud • Database</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Type</span><span class="spec-value">MySQL compatible</span></div>
<div class="spec-row"><span class="spec-label">Storage</span><span class="spec-value">10TB auto-scale</span></div>
<div class="spec-row"><span class="spec-label">IOPS</span><span class="spec-value">100K+</span></div>
<div class="spec-row"><span class="spec-label">HA</span><span class="spec-value">Multi-AZ</span></div>
</div>
<div class="product-price">
<span class="price-amount">€320</span>
<span class="price-period">/mois</span>
</div>
<ul class="product-features">
<li>AI optimizer</li>
<li>Auto-tuning</li>
<li>Backup 7j auto</li>
<li>Read replicas</li>
</ul>
<button class="btn-buy" onclick="buyProduct('gaussdb', 32000)">🛒 Commander</button>
</div>
<!-- 9. Object Storage -->
<div class="product-card">
<div class="product-header">
<h3>Object Storage</h3>
<div class="product-category">Huawei Cloud • Storage</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Capacity</span><span class="spec-value">10 TB</span></div>
<div class="spec-row"><span class="spec-label">Durability</span><span class="spec-value">11 nines</span></div>
<div class="spec-row"><span class="spec-label">CDN</span><span class="spec-value">Inclus</span></div>
<div class="spec-row"><span class="spec-label">Transfer</span><span class="spec-value">Illimité</span></div>
</div>
<div class="product-price">
<span class="price-amount">€180</span>
<span class="price-period">/mois</span>
</div>
<ul class="product-features">
<li>S3 API compatible</li>
<li>Versioning</li>
<li>Lifecycle policies</li>
<li>Encryption at rest</li>
</ul>
<button class="btn-buy" onclick="buyProduct('obs_storage', 18000)">🛒 Commander</button>
</div>
<!-- 10. Bare Metal -->
<div class="product-card">
<span class="badge popular">💪</span>
<div class="product-header">
<h3>Bare Metal</h3>
<div class="product-category">Huawei Cloud • Dedicated</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">CPU</span><span class="spec-value">Xeon Gold</span></div>
<div class="spec-row"><span class="spec-label">Cores</span><span class="spec-value">96 physical</span></div>
<div class="spec-row"><span class="spec-label">RAM</span><span class="spec-value">1TB DDR4</span></div>
<div class="spec-row"><span class="spec-label">Storage</span><span class="spec-value">8x4TB NVMe</span></div>
</div>
<div class="product-price">
<span class="price-amount">€3,20</span>
<span class="price-period">/h</span>
</div>
<ul class="product-features">
<li>Dédié 100%</li>
<li>RDMA 100 Gbps</li>
<li>Custom hardware</li>
<li>Deploy 30min</li>
</ul>
<button class="btn-buy" onclick="buyProduct('bare_metal', 320)">🛒 Commander</button>
</div>
<!-- 11. FunctionGraph -->
<div class="product-card">
<span class="badge ai"></span>
<div class="product-header">
<h3>FunctionGraph</h3>
<div class="product-category">Huawei Cloud • Serverless</div>
</div>
<div class="product-specs">
<div class="spec-row"><span class="spec-label">Runtime</span><span class="spec-value">Multi-lang</span></div>
<div class="spec-row"><span class="spec-label">Memory</span><span class="spec-value">128MB-3GB</span></div>
<div class="spec-row"><span class="spec-label">Timeout</span><span class="spec-value">900s max</span></div>
<div class="spec-row"><span class="spec-label">Cold start</span><span class="spec-value"><100ms</span></div>
</div>
<div class="product-price">
<span class="price-amount">€0,20</span>
<span class="price-period">/1M calls</span>
</div>
<ul class="product-features">
<li>Pay per invocation</li>
<li>Auto-scaling</li>
<li>Event triggers</li>
<li>1M gratuit/mois</li>
</ul>
<button class="btn-buy" onclick="buyProduct('functiongraph', 20)">🛒 Commander</button>
</div>
</div>
</div>
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">🚀</div>
<h4>Déploiement <5min</h4>
<p>Infrastructure prête immédiatement</p>
</div>
<div class="feature-card">
<div class="feature-icon">💰</div>
<h4>Tarifs -40%</h4>
<p>Prix partenaires négociés</p>
</div>
<div class="feature-card">
<div class="feature-icon">🛡️</div>
<h4>Support 24/7</h4>
<p>Équipe WEVAL dédiée</p>
</div>
<div class="feature-card">
<div class="feature-icon">📊</div>
<h4>Migration A→Z</h4>
<p>Accompagnement complet</p>
</div>
<div class="feature-card">
<div class="feature-icon">🤖</div>
<h4>IA Native</h4>
<p>ModelArts & API Tokens</p>
</div>
<div class="feature-card">
<div class="feature-icon">🌍</div>
<h4>Souveraineté</h4>
<p>Données EU/ME/AF</p>
</div>
</div>
<div class="footer">
<p>Paiement sécurisé Stripe • Facturation mensuelle • Support 24/7 • RGPD</p>
<a href="/" class="back-link">← Accueil WEVAL</a>
<a href="/products/workspace.html" class="back-link">🏠 Workspace</a>
<a href="/products/cloud-providers.html" class="back-link">☁️ Comparateur</a>
</div>
</div>
<script>
const stripe = Stripe('pk_test_51QsnOxP3zyHVnHUlBhv8DKHjREkhPHdMn9aHDpPUhMlvW7FiUgQFe07UrEyFEI5vcCDuCmZ8aJF0yiONwNkEdnqb00V1G2OuWe');
function buyProduct(productId, priceInCents) {
document.querySelectorAll('.btn-buy').forEach(btn => {
btn.disabled = true;
btn.textContent = '⏳ Redirection...';
});
fetch('/api/create-checkout-session.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
product_id: productId,
price: priceInCents,
currency: 'eur'
})
})
.then(response => response.json())
.then(data => {
if (data.sessionId) {
return stripe.redirectToCheckout({ sessionId: data.sessionId });
} else {
throw new Error(data.error || 'Session creation failed');
}
})
.catch(error => {
console.error('Error:', error);
alert('Erreur: ' + error.message + '. Contactez support@weval-consulting.com');
document.querySelectorAll('.btn-buy').forEach(btn => {
btn.disabled = false;
btn.textContent = '🛒 Commander';
});
});
}
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
<script>
(function(){
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
var d = document;
var m = d.createElement('div');
m.id = 'opus-udrill';
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
var inner = d.createElement('div');
inner.id = 'opus-udrill-in';
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
inner.addEventListener('click', function(e){ e.stopPropagation(); });
m.appendChild(inner);
m.addEventListener('click', function(){ m.style.display='none'; });
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
(d.body || d.documentElement).appendChild(m);
function openCard(card) {
// Clone card content + show close btn + increase font-size
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
inner.innerHTML = html;
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
m.style.display = 'flex';
}
function wire(root) {
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
var cards = root.querySelectorAll(sels);
for (var i = 0; i < cards.length; i++) {
var c = cards[i];
if (c.__opusWired) continue;
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
var r = c.getBoundingClientRect();
if (r.width < 60 || r.height < 40) continue;
c.__opusWired = true;
c.style.cursor = 'pointer';
c.setAttribute('role','button');
c.setAttribute('tabindex','0');
c.addEventListener('click', function(ev){
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
if (ev.target.closest('a,button,input,select')) return;
ev.preventDefault(); ev.stopPropagation();
openCard(this);
});
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
}
}
// Initial + mutation observer
var initRun = function(){ wire(d.body || d.documentElement); };
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
else initRun();
var mo = new MutationObserver(function(muts){
var newCard = false;
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
if (newCard) initRun();
});
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
})();
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
<script src="/api/a11y-auto-enhancer.js" defer></script>
</body>
</html>