🚚 Door-Door Delivery — Home Delivery· 🛠️ Annual IT contracts from QAR 450/mo· 🚚 Free delivery on Bulk orders· +974 7445 3733·
Pages
🏠Home 🏢About 🏗️Projects ⚙️Solutions 🛒Shop 📞Contact
Products
💻Laptops 🖥️Computers 🔧Hardware 🎧Accessories CCTV Security Cameras 💿Software
Solutions
🌐IT Solutions & Networking ☁️Hosting 🎨Web Design 🧾POS Systems 🔑Digital Keys
WhatsApp us +974 7445 3733
Contact us

Let’s talk

Sales, support, warranty or a fresh quote — the same Doha team answers every channel, every day we’re open. We reply within 2 working hours.

Reach us directly

Talk to a real team

No call centres and no lost tickets. Pick whichever channel suits you — the same engineers and the same reply-time promise.

📍
Visit usDoha, Qatar — showroom & service centre
🕛
Opening hoursSaturday – Thursday · 9:00 – 21:00Friday · Closed
Response promiseWe reply within 2 working hours — usually much faster.

Send a message

We’ll open a tracked ticket and reply within 2 working hours. Fields marked * are required.

What happens next

Three steps, zero fuss

01
We read your messageEvery message becomes a tracked ticket the moment you send it.
02
We reply within 2 hoursBy phone, WhatsApp or email — whichever you prefer.
03
We sort it outA fixed written quote, a repair or a site visit — one team from start to finish.
🛡️Warranty AvailableSelected products carry up to 6-month warranty
Fast ResponseReplies within 2 working hours
🤝No subcontractorsOur own team does every job
📋Fixed written quoteNo surprises on the invoice

Prefer to talk now?

Jump straight onto WhatsApp or give us a call — we’re a real team in Doha, not a call centre.

/* ---- nav master (lang + search + glide) ---- */ (function(){ var lb=document.getElementById('langBtn'); if(lb){lb.onclick=function(){var rtl=document.documentElement.dir==='rtl';document.documentElement.dir=rtl?'ltr':'rtl';lb.textContent=rtl?'ع':'EN';};} var q=document.getElementById('q'); if(q){q.addEventListener('keydown',function(e){if(e.key==='Enter'){location.href='shop.html?q='+encodeURIComponent(q.value);}});} })(); /* ---------- nav: pill glides to the hovered item, parks on the active one ---------- */ (function(){ const nav=document.getElementById('navMain'), g=document.getElementById('navGlide'); if(!nav||!g) return; const park=()=>nav.querySelector('.nl.active')?.parentElement||null; function move(item,show){ if(!item){ g.classList.remove('show'); return; } const a=item.firstElementChild||item; g.style.left=item.offsetLeft+'px'; g.style.width=item.offsetWidth+'px'; g.classList.toggle('show',!!show); } /* the pill borrows the colour of whichever item it is sitting on */ function tintFrom(item){ const c=item&&(item.style.getPropertyValue('--nc')||'').trim(); g.style.setProperty('--nc', c||'#d8bc5a'); } const rest=()=>{const pk=park(); tintFrom(pk); move(pk,!!pk);}; nav.querySelectorAll('.navitem').forEach(it=>{ it.addEventListener('mouseenter',()=>{tintFrom(it);move(it,true)}); it.addEventListener('focusin',()=>{tintFrom(it);move(it,true)}); }); nav.addEventListener('mouseleave',rest); nav.addEventListener('focusout',e=>{ if(!nav.contains(e.relatedTarget)) rest(); }); addEventListener('resize',rest,{passive:true}); /* fonts settle after first paint — measure again so the pill lands true */ requestAnimationFrame(rest); setTimeout(rest,260); addEventListener('load',rest); })(); /* ---- minimal cart (this page lists no products) ---- */ (function(){ var cart=document.getElementById('cart'), scrim=document.getElementById('scrim'), open=document.getElementById('cartBtn'), close=document.getElementById('closeCart'); if(!cart||!scrim||!open) return; function show(on){cart.classList.toggle('open',on);scrim.classList.toggle('on',on);document.body.style.overflow=on?'hidden':'';} open.onclick=function(){show(!cart.classList.contains('open'));}; close.onclick=function(){show(false);}; scrim.onclick=function(){show(false);}; addEventListener('keydown',function(e){if(e.key==='Escape')show(false);}); })(); /* ---------- collapsible footer (Phase 38) ---------- */ (function(){ const grid=document.querySelector('footer .fgrid'); if(!grid) return; const cols=[...grid.children].filter(c=>c.querySelector('h5')&&c.querySelector('ul')); const phone=()=>matchMedia('(max-width:760px)').matches; cols.forEach(col=>{ col.classList.add('facc'); /* wrap the
  • s so the UL can stay a single animatable row while the links themselves lay out in 2 columns (see the Phase-42 CSS note) */ const ul=col.querySelector('ul'); if(ul && !ul.querySelector(':scope > .fcols')){ const box=document.createElement('div'); box.className='fcols'; while(ul.firstChild) box.appendChild(ul.firstChild); ul.appendChild(box); } const h=col.querySelector('h5'); h.setAttribute('role','button'); h.setAttribute('tabindex','0'); h.setAttribute('aria-expanded','false'); const toggle=()=>{ if(!phone()) return; /* desktop keeps everything open */ const open=col.classList.toggle('open'); h.setAttribute('aria-expanded',open); }; h.addEventListener('click',toggle); h.addEventListener('keydown',e=>{ if(e.key==='Enter'||e.key===' '){e.preventDefault();toggle();} }); }); /* "Get in touch" is the panel people actually want -- open it by default on mobile instead of making them hunt for the phone number. */ const contactCol=cols.find(c=>/get in touch/i.test((c.querySelector('h5')||{}).textContent||'')); if(contactCol){ contactCol.classList.add('open'); const ch=contactCol.querySelector('h5'); if(ch) ch.setAttribute('aria-expanded','true'); } /* returning to desktop must not leave content hidden */ const sync=()=>{ if(!phone()) cols.forEach(c=>{ c.classList.remove('open'); const h=c.querySelector('h5'); if(h) h.setAttribute('aria-expanded','true'); }); }; const syncMobile=()=>{ if(phone()&&contactCol&&!contactCol.classList.contains('open')){ contactCol.classList.add('open'); const ch=contactCol.querySelector('h5'); if(ch) ch.setAttribute('aria-expanded','true'); } }; addEventListener('resize',()=>{sync();syncMobile();}); sync(); syncMobile(); })(); /* ================= CURSOR FX ENGINE ================= Three trail modes, one canvas, one RAF loop. web — constellation: nodes spawn on the cursor path and link to each other + the pointer (network topology) dust — drifting embers with turbulence and inherited velocity circuit — PCB traces that snap to 90 degrees with a travelling data pulse and solder pads at every corner ==================================================== */ (function(){ const sw = document.getElementById('fxSwitch'); if (matchMedia('(pointer:coarse)').matches || matchMedia('(prefers-reduced-motion:reduce)').matches){ if(sw) sw.style.display='none'; return; } const dot=document.getElementById('curDot'), lbl=document.getElementById('curLbl'), cv=document.getElementById('trail'), ctx=cv.getContext('2d'); let W=innerWidth,H=innerHeight,dpr=1; function fit(){ dpr=Math.min(devicePixelRatio||1,2); W=innerWidth; H=innerHeight; cv.width=W*dpr; cv.height=H*dpr; cv.style.width=W+'px'; cv.style.height=H+'px'; ctx.setTransform(dpr,0,0,dpr,0,0); } fit(); addEventListener('resize',fit); /* soft sprite so we never pay for per-particle gradients */ function sprite(rgb){ const s=document.createElement('canvas'); s.width=s.height=64; const c=s.getContext('2d'), g=c.createRadialGradient(32,32,0,32,32,32); g.addColorStop(0, 'rgba('+rgb+',1)'); g.addColorStop(.28, 'rgba('+rgb+',.5)'); g.addColorStop(1, 'rgba('+rgb+',0)'); c.fillStyle=g; c.fillRect(0,0,64,64); return s; } let CG=getComputedStyle(document.documentElement).getPropertyValue('--g2-rgb').trim()||'236,214,140'; let CA=getComputedStyle(document.documentElement).getPropertyValue('--acc-rgb').trim()||'120,190,255'; let SP_GOLD=sprite(CG), SP_WHITE=sprite('255,255,255'), SP_BLUE=sprite(CA); addEventListener('themechange',()=>{ CG=getComputedStyle(document.documentElement).getPropertyValue('--g2-rgb').trim()||CG; CA=getComputedStyle(document.documentElement).getPropertyValue('--acc-rgb').trim()||CA; SP_GOLD=sprite(CG); SP_BLUE=sprite(CA); }); /* localStorage throws on opaque origins (sandboxed iframes, private mode) */ const store={ get(k){ try{ return localStorage.getItem(k); }catch(e){ return null; } }, set(k,v){ try{ localStorage.setItem(k,v); }catch(e){} } }; let MODE = store.get('mushabs-fx') || 'web'; let mx=W/2,my=H/2, pmx=mx,pmy=my, vx=0,vy=0; let dx=mx,dy=my, rx=mx,ry=my; const motes=[], nodes=[], verts=[], sparks=[]; let axis=0, anchor={x:mx,y:my}, pulse=0, tick=0; const rnd=(a,b)=>a+Math.random()*(b-a); /* ---------- input ---------- */ addEventListener('mousemove',e=>{ mx=e.clientX; my=e.clientY; document.body.classList.add('cur-on'); const t=e.target.closest('[data-cursor]'); if(t){ document.body.classList.add('cur-hot'); lbl.textContent=t.dataset.cursor; lbl.classList.add('has'); } else if(e.target.closest('a,button,input,.card,.plan,.svc-card')){ document.body.classList.add('cur-hot'); lbl.classList.remove('has'); } else { document.body.classList.remove('cur-hot'); lbl.classList.remove('has'); } },{passive:true}); addEventListener('mouseleave',()=>document.body.classList.remove('cur-on')); addEventListener('mouseup',()=>document.body.classList.remove('cur-down')); addEventListener('mousedown',()=>{ document.body.classList.add('cur-down'); for(let i=0;i<16;i++){ const a=Math.random()*6.283, s=rnd(1.4,5.2); sparks.push({x:mx,y:my,vx:Math.cos(a)*s,vy:Math.sin(a)*s,life:1,decay:rnd(.02,.045),r:rnd(.8,2)}); } }); /* ---------- switcher ---------- */ function paintSwitch(){ sw.querySelectorAll('button').forEach(b=>b.classList.toggle('on',b.dataset.fx===MODE)); } sw.addEventListener('click',e=>{ const b=e.target.closest('button'); if(!b) return; MODE=b.dataset.fx; store.set('mushabs-fx',MODE); motes.length=nodes.length=verts.length=0; anchor={x:mx,y:my}; paintSwitch(); }); paintSwitch(); /* ---------- emitters ---------- */ function emit(){ const speed=Math.hypot(vx,vy); if(MODE==='dust'){ const n = speed>1.2 ? Math.min(4,1+(speed/12|0)) : (Math.random()<.16?1:0); for(let i=0;i280) motes.splice(0,motes.length-280); } if(MODE==='web'){ if(speed>2.2 || (nodes.length<7 && Math.random()<.22)) nodes.push({ x:mx+rnd(-11,11), y:my+rnd(-11,11), vx:rnd(-.3,.3)+vx*.028, vy:rnd(-.3,.3)+vy*.028, life:1, decay:rnd(.007,.013), r:rnd(1,2.3), blue:Math.random()<.22 }); if(nodes.length>62) nodes.splice(0,nodes.length-62); } if(MODE==='circuit'){ const ax=mx-anchor.x, ay=my-anchor.y; if(Math.abs(ax)+Math.abs(ay)>30){ anchor = axis===0 ? {x:mx,y:anchor.y} : {x:anchor.x,y:my}; axis^=1; verts.push({x:anchor.x,y:anchor.y}); if(verts.length>48) verts.shift(); } } } /* ---------- renderers ---------- */ function drawDust(){ for(let i=motes.length-1;i>=0;i--){ const m=motes[i]; m.life-=m.decay; if(m.life<=0){ motes.splice(i,1); continue; } m.ph+=.055; m.x+=m.vx+Math.sin(m.ph)*.20; m.y+=m.vy-.055; /* embers drift upward */ m.vx*=.981; m.vy*=.981; const a=m.life*m.life, s=m.r*(8+ (1-m.life)*5); ctx.globalAlpha=a*.9; ctx.drawImage(m.w?SP_WHITE:SP_GOLD, m.x-s, m.y-s, s*2, s*2); } } function drawWeb(){ for(let i=nodes.length-1;i>=0;i--){ const n=nodes[i]; n.life-=n.decay; if(n.life<=0){ nodes.splice(i,1); continue; } n.x+=n.vx; n.y+=n.vy; n.vx*=.988; n.vy*=.988; } /* node-to-node links */ ctx.lineWidth=1; for(let i=0;i16900) continue; /* 130px */ const o=(1-Math.sqrt(d2)/130)*a.life*b.life; ctx.strokeStyle='rgba(var(--g-rgb),'+(o*.5)+')'; ctx.beginPath(); ctx.moveTo(a.x,a.y); ctx.lineTo(b.x,b.y); ctx.stroke(); } /* link back to the pointer */ const cdx=a.x-mx, cdy=a.y-my, cd2=cdx*cdx+cdy*cdy; if(cd2<28900){ /* 170px */ const o=(1-Math.sqrt(cd2)/170)*a.life; ctx.strokeStyle='rgba(var(--g2-rgb),'+(o*.62)+')'; ctx.lineWidth=1.2; ctx.beginPath(); ctx.moveTo(a.x,a.y); ctx.lineTo(mx,my); ctx.stroke(); ctx.lineWidth=1; } } /* nodes as tiny rotating diamonds */ for(const n of nodes){ const s=n.r*(1+n.life*.6), a=n.life*n.life; ctx.globalAlpha=a; ctx.drawImage(n.blue?SP_BLUE:SP_GOLD, n.x-s*5, n.y-s*5, s*10, s*10); ctx.globalAlpha=1; ctx.save(); ctx.translate(n.x,n.y); ctx.rotate(tick*.02+n.r); ctx.fillStyle = n.blue ? 'rgba('+CA+','+a+')' : 'rgba(var(--g2-rgb),'+a+')'; ctx.fillRect(-s*.62,-s*.62,s*1.24,s*1.24); ctx.restore(); } } function drawCircuit(){ if(verts.length<2) return; const L=verts.length; /* glow underlay + crisp trace */ for(let pass=0;pass<2;pass++){ ctx.lineWidth = pass===0 ? 5 : 1.6; ctx.lineCap='square'; ctx.lineJoin='miter'; for(let i=1;i1) pulse=0; const fi=pulse*(L-1), i0=Math.floor(fi), f=fi-i0; if(verts[i0] && verts[i0+1]){ const px=verts[i0].x+(verts[i0+1].x-verts[i0].x)*f, py=verts[i0].y+(verts[i0+1].y-verts[i0].y)*f; ctx.globalAlpha=.95; ctx.drawImage(SP_GOLD,px-11,py-11,22,22); ctx.globalAlpha=1; ctx.fillStyle='rgba('+CG+',1)'; ctx.fillRect(px-1.6,py-1.6,3.2,3.2); } } function drawSparks(){ for(let i=sparks.length-1;i>=0;i--){ const s=sparks[i]; s.life-=s.decay; if(s.life<=0){ sparks.splice(i,1); continue; } s.x+=s.vx; s.y+=s.vy; s.vx*=.93; s.vy=s.vy*.93+.05; const r=s.r*7*s.life; ctx.globalAlpha=s.life; ctx.drawImage(SP_GOLD,s.x-r,s.y-r,r*2,r*2); } } /* ---------- loop ---------- */ (function loop(){ tick++; vx=mx-pmx; vy=my-pmy; pmx=mx; pmy=my; dx+=(mx-dx)*.45; dy+=(my-dy)*.45; rx+=(mx-rx)*.16; ry+=(my-ry)*.16; dot.style.transform='translate('+dx+'px,'+dy+'px)'; lbl.style.transform='translate('+(rx+16)+'px,'+(ry+16)+'px)'; ctx.clearRect(0,0,W,H); ctx.globalCompositeOperation='lighter'; if(MODE!=='off'){ emit(); if(MODE==='dust') drawDust(); else if(MODE==='web') drawWeb(); else if(MODE==='circuit') drawCircuit(); } drawSparks(); ctx.globalAlpha=1; ctx.globalCompositeOperation='source-over'; requestAnimationFrame(loop); })(); /* magnetic buttons */ document.querySelectorAll('.btn,.icon-btn').forEach(b=>{ b.addEventListener('mousemove',e=>{ const r=b.getBoundingClientRect(); b.style.transform='translate('+((e.clientX-r.left-r.width/2)*.18)+'px,'+((e.clientY-r.top-r.height/2)*.28)+'px)'; }); b.addEventListener('mouseleave',()=>b.style.transform=''); }); })();