window.__awssatSearchLastFocus?.focus?.())" @keydown.escape.window="if (searchOpen) { searchOpen = false; $nextTick(() => window.__awssatSearchLastFocus?.focus?.()) }" @cookie-preferences:open.window="searchOpen = false" x-effect="
if (searchOpen) mobileOpen = false;
document.body.classList.toggle('awssat-search-open', searchOpen);
document.querySelector('[data-site-layout]')?.toggleAttribute('inert', searchOpen);
document.querySelector('[data-page-scroll-floating]')?.toggleAttribute('inert', searchOpen);
document.querySelector('[data-cookie-banner]')?.toggleAttribute('inert', searchOpen);
document.getElementById('site-cookie-preferences')?.toggleAttribute('inert', searchOpen)
">
window.__awssatSearchLastFocus?.focus?.())" @keydown.escape="searchOpen = false; $nextTick(() => window.__awssatSearchLastFocus?.focus?.())" @keydown.tab="trapFocus($event)">
Search
Type at least 2 characters Esc
Skip to content window.__awssatNavigationMenuLastFocus?.focus?.()) } if (mobileOpen) { mobileOpen = false; $nextTick(() => window.__awssatHomeMenuLastFocus?.focus?.()) }" @resize.window.debounce.100ms="if (mobileOpen && window.matchMedia('(min-width: 80rem)').matches) { mobileOpen = false; $nextTick(() => document.getElementById('home-brand-link')?.focus()) } if (desktopMenuOpen && !window.matchMedia('(min-width: 80rem)').matches) { desktopMenuOpen = false }" x-effect="
document.body.classList.toggle('overflow-y-hidden', mobileOpen);
document.querySelector('[data-home-shell] > main')?.toggleAttribute('inert', mobileOpen);
document.querySelector('[data-home-shell] > footer')?.toggleAttribute('inert', mobileOpen)
">
العربية Blog
Practical insights into software engineering and the technologies behind better systems
We use necessary cookies to run the site. Analytics and marketing stay off unless you consent. Privacy Policy
Privacy center
Cookie Settings
Choose which cookies you allow .. Optional cookies stay off until you consent, and necessary cookies are always on