1<!DOCTYPE html> 2<html lang="en" data-theme="dark"> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> 6<title>Portfolio â Shopify Themes & Stores by Codehouse, Pakistan</title> 7<meta name="description" content="See Shopify themes, store designs, apps, checkout, cart and ERP projects built by Codehouse â a Shopify studio in Karachi, Pakistan."> 8<link rel="canonical" href="https://codehouse.pk/portfolio/"> 9<meta property="og:title" content="Portfolio â Shopify Themes & Stores by Codehouse, Pakistan"> 10<meta property="og:description" content="See Shopify themes, store designs, apps, checkout, cart and ERP projects built by Codehouse â a Shopify studio in Karachi, Pakistan."> 11<meta property="og:url" content="https://codehouse.pk/portfolio/"> 12<meta property="og:type" content="website"> 13<meta name="twitter:title" content="Portfolio â Shopify Themes & Stores by Codehouse, Pakistan"> 14<meta name="twitter:description" content="See Shopify themes, store designs, apps, checkout, cart and ERP projects built by Codehouse â a Shopify studio in Karachi, Pakistan."> 15<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 16<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet"> 17<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1"> 18<meta name="theme-color" content="#0a0a14"> 19<meta name="author" content="Codehouse"> 20<meta property="og:site_name" content="Codehouse"> 21<meta property="og:locale" content="en_US"> 22<meta property="og:image" content="https://codehouse.pk/assets/og-image.jpg"> 23<meta property="og:image:width" content="1200"> 24<meta property="og:image:height" content="630"> 25<meta property="og:image:alt" content="Codehouse â Shopify experts and custom development, Karachi, Pakistan"> 26<meta name="twitter:card" content="summary_large_image"> 27<meta name="twitter:image" content="https://codehouse.pk/assets/og-image.jpg"> 28<link rel="icon" href="/favicon.ico" sizes="48x48"> 29<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32.png"> 30<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16.png"> 31<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png"> 32<link rel="manifest" href="/site.webmanifest">
33<script>try{var t=localStorage.getItem('ch-theme');if(t)document.documentElement.setAttribute('data-theme',t)}catch(e){}</script>
33 34<link rel="stylesheet" href="/assets/css/layout.css?v=20261008"> 35<style> 36:root{--g:#7c6cff;--g2:#3d70cb;--bg:#0a0a14;--bg2:#15132a;--tx:#f5f5fb;--mu:#9797a8;--bd:rgba(255,255,255,.1);--card:rgba(255,255,255,.04);--nav:rgba(10,10,20,.72);--sh:0 20px 60px rgba(0,0,0,.5)} 37[data-theme=light]{--bg:#fafaff;--bg2:#f2f0fb;--tx:#0b0b14;--mu:#5f5f6b;--bd:rgba(0,0,0,.1);--card:rgba(255,255,255,.75);--nav:rgba(255,255,255,.8);--sh:0 20px 60px rgba(70,60,180,.15);--g:#6d5ae0} 38*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth} 39body{font-family:'Plus Jakarta Sans',system-ui,-apple-system,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--tx);line-height:1.6;overflow-x:hidden;transition:background .4s,color .4s} 40a{color:inherit;text-decoration:none}img,svg{max-width:100%} 41.wrap{max-width:1440px;margin:0 auto;padding:0 24px}section{position:relative;padding:110px 0;overflow:hidden} 42h1,h2,h3{letter-spacing:-.03em;line-height:1.05} 43h2{font-size:clamp(34px,5.4vw,72px);font-weight:800}.g{color:var(--g)} 44.pill{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--bd);border-radius:99px;padding:8px 16px;font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--g);background:var(--card)} 45.pill:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--g);box-shadow:0 0 10px var(--g);animation:pulse 2s infinite} 46@keyframes pulse{50%{opacity:.3}} 47.btn{display:inline-flex;align-items:center;gap:8px;padding:14px 26px;border-radius:99px;font-weight:700;font-size:15px;border:1px solid var(--bd);position:relative;overflow:hidden;transition:transform .25s,box-shadow .25s;cursor:pointer;font-family:inherit;color:var(--tx);background:var(--card)} 48.btn:hover{transform:translateY(-3px)} 49.btn.p{background:linear-gradient(135deg,#9c8cff,var(--g2));color:#fff;border:0;box-shadow:0 10px 30px rgba(124,108,255,.35)} 50.btn.p:after{content:"";position:absolute;top:0;left:-80%;width:50%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent);transform:skewX(-20deg);transition:left .6s} 51.btn.p:hover:after{left:130%} 52.rv{opacity:0;transform:translateY(40px);transition:opacity .8s,transform .8s cubic-bezier(.2,.7,.2,1)}.rv.in{opacity:1;transform:none} 53.bgfx{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}.wrap{position:relative;z-index:1} 54 55/* hero */ 56.hero{min-height:100vh;display:flex;align-items:center;padding:150px 0 90px} 57#cv{position:absolute;inset:0;width:100%;height:100%} 58.blob{position:absolute;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(124,108,255,.28),transparent 65%);filter:blur(30px);left:var(--mx,60%);top:var(--my,30%);transform:translate(-50%,-50%);transition:left .6s ease-out,top .6s ease-out} 59.hero h1{font-size:clamp(42px,7.4vw,104px);font-weight:800;margin:22px 0} 60.hero p.lead{max-width:600px;color:var(--mu);font-size:18px;margin-bottom:34px} 61.trust{display:flex;flex-wrap:wrap;gap:12px;margin-top:40px} 62.tb{display:flex;align-items:center;gap:10px;padding:12px 18px;border:1px solid var(--bd);border-radius:16px;background:var(--card);backdrop-filter:blur(10px);font-size:14px;font-weight:600;transition:transform .3s,border-color .3s} 63.tb:hover{transform:translateY(-4px);border-color:var(--g)}.tb small{display:block;color:var(--mu);font-weight:500;font-size:12px}.tb .st{color:var(--g);font-size:18px} 64.tb i{width:30px;height:30px;border-radius:8px;background:var(--g);color:#fff;display:grid;place-items:center;font-style:normal;font-weight:800} 65/* marquee */ 66.mq{padding:26px 0;border-block:1px solid var(--bd);background:var(--bg2);overflow:hidden;white-space:nowrap} 67.mq div{display:inline-block;animation:mq 30s linear infinite;font-size:28px;font-weight:800;letter-spacing:-.02em;color:var(--mu)}.mq span{color:var(--g);margin:0 26px} 68@keyframes mq{to{transform:translateX(-50%)}} 69/* floating services */ 70.fl{position:relative;height:640px;margin-top:50px} 71.chip{position:absolute;display:flex;align-items:center;gap:10px;padding:14px 22px;border-radius:99px;background:var(--card);border:1px solid var(--bd);backdrop-filter:blur(12px);font-weight:700;box-shadow:var(--sh);white-space:nowrap;animation:fy 6s ease-in-out infinite;transition:border-color .3s,background .3s} 72.chip:hover{border-color:var(--g);background:rgba(124,108,255,.15)}
73.chip em{font-style:normal;width:34px;height:34px;border-radius:50%;background:var(--g);color:#fff;display:grid;place-items:center;font-size:16px} 74.pl{position:absolute;will-change:transform;transition:transform .25s ease-out} 75@keyframes fy{50%{transform:translateY(-22px) rotate(1.5deg)}} 76.core{position:absolute;left:50%;top:50%;width:170px;height:170px;margin:-85px;border-radius:50%;background:radial-gradient(circle,#9c8cff,var(--g2));display:grid;place-items:center;color:#fff;font-weight:800;text-align:center;box-shadow:0 0 90px rgba(124,108,255,.55);animation:pulse2 3s infinite} 77@keyframes pulse2{50%{box-shadow:0 0 150px rgba(124,108,255,.8)}} 78@media(max-width:760px){.fl{height:auto;display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.chip,.pl,.core{position:static;animation:none;margin:0;transform:none!important}.core{display:none}} 79/* portfolio */ 80.pf{display:grid;grid-template-columns:repeat(2,1fr);gap:40px;margin-top:70px} 81@media(max-width:860px){.pf{grid-template-columns:1fr}} 82.fr{border:1px solid var(--bd);border-radius:26px;background:var(--card);padding:0;overflow:hidden;box-shadow:var(--sh);transition:transform .4s} 83.fr:hover{transform:translateY(-8px)} 84.bar{display:flex;align-items:center;gap:8px;padding:14px 16px}.bar i{width:12px;height:12px;border-radius:50%} 85.bar i:nth-child(1){background:#ff5f57}.bar i:nth-child(2){background:#febc2e}.bar i:nth-child(3){background:#28c840} 86.url{flex:1;margin-left:10px;padding:6px 14px;border-radius:99px;background:var(--bg);border:1px solid var(--bd);font-size:12px;color:var(--mu)} 87.vp{height:420px;overflow:hidden;position:relative;background:#fff;color:#111} 88.pg{transition:transform 5s cubic-bezier(.4,0,.2,1)}.fr:hover .pg{transform:translateY(calc(-100% + 420px))} 89.hv{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);background:#fff;color:#111;border-radius:99px;padding:8px 16px;font-size:13px;font-weight:600;box-shadow:0 6px 24px rgba(0,0,0,.25);z-index:3;transition:opacity .3s}.fr:hover .hv{opacity:0} 90.ft{display:flex;justify-content:space-between;align-items:center;margin-top:20px}.ft h3{font-size:32px} 91.tag{border:1px solid var(--g);color:var(--g);border-radius:99px;padding:7px 16px;font-size:13px;font-weight:600;background:rgba(124,108,255,.08)} 92.mk-h{height:210px;display:flex;flex-direction:column;justify-content:center;padding:0 34px;font-weight:800;font-size:26px;line-height:1.1} 93.mk-r{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:18px}.mk-r b{height:130px;border-radius:12px;display:block} 94/* stats & why */ 95.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:60px}@media(max-width:800px){.stats{grid-template-columns:repeat(2,1fr)}} 96.stat{padding:30px;border:1px solid var(--bd);border-radius:24px;background:var(--card);text-align:center}.stat b{display:block;font-size:52px;color:var(--g);font-weight:800;letter-spacing:-.03em}.stat span{color:var(--mu);font-weight:600} 97.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:60px}@media(max-width:900px){.grid3{grid-template-columns:1fr}} 98.cd{padding:32px;border:1px solid var(--bd);border-radius:24px;background:var(--card);position:relative;overflow:hidden;transition:transform .35s,border-color .35s} 99.cd:before{content:"";position:absolute;inset:0;background:radial-gradient(300px circle at var(--cx,50%) var(--cy,0),rgba(124,108,255,.2),transparent 60%);opacity:0;transition:opacity .3s} 100.cd:hover{transform:translateY(-8px);border-color:var(--g)}.cd:hover:before{opacity:1} 101.cd>*{position:relative}.cd .n{color:var(--g);font-weight:800;font-size:14px;letter-spacing:.1em}.cd h3{font-size:24px;margin:14px 0 10px}.cd p{color:var(--mu)} 102.grid{position:absolute;inset:-50% 0;background-image:linear-gradient(var(--bd) 1px,transparent 1px),linear-gradient(90deg,var(--bd) 1px,transparent 1px);background-size:60px 60px;mask-image:radial-gradient(ellipse at center,#000,transparent 70%);-webkit-mask-image:radial-gradient(ellipse at center,#000,transparent 70%)} 103.scan{position:absolute;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--g),transparent);animation:sc 6s linear infinite}@keyframes sc{from{top:-5%}to{top:105%}} 104.orb{position:absolute;border-radius:50%;filter:blur(60px);background:rgba(124,108,255,.22);animation:fy 9s ease-in-out infinite} 105.cta{--bg:#0a0a14;--bg2:#15132a;--tx:#f5f5fb;--mu:#9797a8;--bd:rgba(255,255,255,.1);--card:rgba(255,255,255,.04);--g:#7c6cff;--g2:#3d70cb;background:var(--bg);color:var(--tx);text-align:center}.cta h2{margin:22px 0 34px}.cta .btn{margin:6px} 106 107@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.rv{opacity:1;transform:none}} 108 109/* ---- subpage extras ---- */ 110.ph{padding-top:150px} 111.crumb{color:var(--mu);font-size:14px;margin-bottom:20px} 112.crumb a{color:var(--mu)}.crumb a:hover{color:var(--g)} 113.ph h1{font-size:clamp(36px,5.6vw,66px);font-weight:800;letter-spacing:-.03em;line-height:1.06;margin:18px 0} 114.lede{max-width:640px;color:var(--mu);font-size:18px;margin-top:6px} 115.herow{display:flex;gap:14px;flex-wrap:wrap;margin-top:30px} 116.pgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:30px;margin-top:46px}
117@media(max-width:860px){.pgrid{grid-template-columns:1fr}} 118.pcard{border:1px solid var(--bd);border-radius:26px;overflow:hidden;background:var(--card);box-shadow:var(--sh);transition:transform .4s,border-color .4s;display:block} 119.pcard:hover{transform:translateY(-8px);border-color:var(--g)} 120.pmedia{height:190px;position:relative;display:flex;align-items:flex-end;padding:18px} 121.pmedia.a{background:linear-gradient(135deg,#7c6cff,#241f52)} 122.pmedia.b{background:linear-gradient(135deg,#f4b400,#5c4400)} 123.pmedia.c{background:linear-gradient(135deg,#6366f1,#1b1b3a)} 124.pmedia.d{background:linear-gradient(135deg,#e9c9c0,#7a2f2f)} 125.pmedia.e{background:linear-gradient(135deg,#3d70cb,#0a1830)} 126.pmedia.f{background:linear-gradient(135deg,#9797a8,#27242f)} 127.ptag{padding:6px 14px;border-radius:99px;background:rgba(0,0,0,.35);backdrop-filter:blur(6px);font-size:12px;font-weight:700;color:#fff} 128.pbody{padding:26px} 129.pbody .cat{color:var(--g);font-weight:700;font-size:11.5px;letter-spacing:.1em;text-transform:uppercase} 130.pbody h3{font-size:23px;margin:10px 0 8px} 131.pbody p{color:var(--mu);font-size:14.5px;line-height:1.6} 132.filters{display:flex;flex-wrap:wrap;gap:10px;margin:46px 0 0} 133.fbtn{padding:10px 18px;border-radius:99px;border:1px solid var(--bd);background:var(--card);font-weight:600;font-size:13.5px;cursor:pointer;font-family:inherit;color:var(--tx);transition:.25s} 134.fbtn.on,.fbtn:hover{border-color:var(--g);color:var(--g)} 135.faq{border:1px solid var(--bd);border-radius:18px;background:var(--card);overflow:hidden;margin-bottom:14px} 136.faq summary{padding:20px 24px;cursor:pointer;font-weight:700;font-size:15.5px;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px} 137.faq summary::-webkit-details-marker{display:none} 138.faq summary:after{content:"+";font-size:22px;color:var(--g);transition:transform .3s;flex:none;line-height:1} 139.faq[open] summary:after{transform:rotate(45deg)} 140.faq p{padding:0 24px 22px;color:var(--mu);line-height:1.7;font-size:14.5px} 141.chgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:10px} 142@media(max-width:860px){.chgrid{grid-template-columns:1fr}} 143.chan{display:flex;flex-direction:column;gap:8px;padding:24px;border:1px solid var(--bd);border-radius:20px;background:var(--card);transition:transform .3s,border-color .3s} 144.chan:hover{transform:translateY(-6px);border-color:var(--g)} 145.chan .ic{font-size:24px} 146.chan h4{font-size:16px} 147.chan span{color:var(--mu);font-size:13.5px} 148.split{display:grid;grid-template-columns:1fr .75fr;gap:50px;align-items:start;margin-top:50px} 149@media(max-width:860px){.split{grid-template-columns:1fr}} 150.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:24px} 151@media(max-width:560px){.fgrid{grid-template-columns:1fr}} 152.fw{display:flex;flex-direction:column;gap:8px} 153.fw.full{grid-column:1/-1} 154.fw label{font-size:12.5px;font-weight:700;color:var(--mu);letter-spacing:.03em} 155.fw input,.fw select,.fw textarea{padding:14px 16px;border-radius:12px;border:1px solid var(--bd);background:var(--bg);color:var(--tx);font-family:inherit;font-size:14.5px} 156.fw textarea{min-height:120px;resize:vertical} 157.fw input:focus,.fw select:focus,.fw textarea:focus{outline:none;border-color:var(--g)} 158.okbox{display:none;margin-top:20px;padding:16px 20px;border-radius:14px;background:rgba(124,108,255,.12);border:1px solid var(--g);color:var(--g);font-weight:600;font-size:14.5px} 159.okbox.on{display:block} 160.note{margin-top:16px;color:var(--mu);font-size:13.5px} 161.infobox{border-radius:26px;border:1px solid var(--bd);background:var(--card);padding:32px;box-shadow:var(--sh)} 162.infobox h3{font-size:20px;margin:14px 0 4px} 163.infobox .row{display:flex;justify-content:space-between;padding:12px 0;border-top:1px solid var(--bd);font-size:14px} 164.infobox .row b{font-weight:800} 165.avail{display:inline-flex;align-items:center;gap:8px;margin-top:22px;font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--g)} 166.avail i{width:7px;height:7px;border-radius:50%;background:var(--g);box-shadow:0 0 10px var(--g);animation:pulse 2s infinite} 167.chk{margin:22px 0 8px;display:flex;flex-direction:column;gap:13px;max-width:560px}
168.chk li{list-style:none;display:flex;gap:12px;align-items:flex-start;color:var(--mu);line-height:1.6;font-size:15.5px} 169.chk li:before{content:"â";color:var(--g);font-weight:800;flex:none} 170.svc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:50px} 171@media(max-width:900px){.svc-grid{grid-template-columns:1fr}} 172.svc-card{padding:30px 28px;border:1px solid var(--bd);border-radius:22px;background:var(--card);transition:transform .3s,border-color .3s;display:block} 173.svc-card:hover{transform:translateY(-6px);border-color:var(--g)} 174.svc-card .ic{width:46px;height:46px;border-radius:14px;background:rgba(124,108,255,.14);color:var(--g);display:grid;place-items:center;font-weight:800;margin-bottom:16px} 175.svc-card h3{font-size:19px;margin-bottom:10px} 176.svc-card p{color:var(--mu);font-size:14.5px;line-height:1.6} 177.svc-card span.go{display:inline-block;margin-top:16px;color:var(--g);font-weight:700;font-size:13.5px} 178 179</style>
180<script type="application/ld+json">{"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://codehouse.pk/"}, {"@type": "ListItem", "position": 2, "name": "Portfolio", "item": "https://codehouse.pk/portfolio/"}]}</script>
180 181</head> 182<body>
183<script src="/assets/js/header.js?v=20261008"></script>
183 184 185<section class="ph" style="padding-bottom:20px"><div class="wrap"> 186<div class="crumb rv"><a href="/">Home</a> / <span>Portfolio</span></div> 187<span class="pill rv">Selected work</span> 188<h1 class="rv">Work we're proud<br>to <span class="g">sign.</span></h1> 189<p class="lede rv">Real projects across theme development, design, apps, checkout, cart and ERP â clean code, documented, and handed over fully owned.</p> 190</div></section> 191 192<section style="padding-top:0"><div class="wrap"> 193<div class="filters rv" id="filters"><button class="fbtn on" data-f="all">All Work</button><button class="fbtn" data-f="theme">Custom Theme</button><button class="fbtn" data-f="design">Store Design</button><button class="fbtn" data-f="app">Shopify App</button><button class="fbtn" data-f="checkout">Checkout</button><button class="fbtn" data-f="cart">Custom Cart</button><button class="fbtn" data-f="erp">CRM / ERP</button></div> 194<div class="pgrid" id="pgrid"> 195<div class="pcard rv" data-cat="theme"><div class="pmedia a"><span class="ptag">Custom Theme</span></div> 196<div class="pbody"><span class="cat">Shopify Theme Development · 2025</span><h3>Kaizen Motors</h3><p>Performance electric bikes for riders who expect more. Full custom Shopify 2.0 theme with custom filtering and a built-in test-ride booking flow.</p></div></div><div class="pcard rv" data-cat="design"><div class="pmedia d"><span class="ptag">Store Design</span></div> 197<div class="pbody"><span class="cat">Shopify Store Design · 2025</span><h3>Khamila Luna</h3><p>Small-batch bath & body brand. Pixel-perfect Figma-to-Shopify conversion with a soft, editorial storefront.</p></div></div><div class="pcard rv" data-cat="app"><div class="pmedia c"><span class="ptag">Shopify App</span></div> 198<div class="pbody"><span class="cat">Shopify App Development · 2025</span><h3>Nexus â ERP Sync App</h3><p>Custom Remix app syncing orders and inventory between Shopify and an external ERP, with a full merchant dashboard.</p></div></div><div class="pcard rv" data-cat="checkout"><div class="pmedia b"><span class="ptag">Checkout</span></div> 199<div class="pbody"><span class="cat">Custom Checkout · 2024</span><h3>Monument Supply Co.</h3><p>Checkout UI extensions adding express pay and a validated discount flow â cut abandoned attempts at the last step.</p></div></div><div class="pcard rv" data-cat="cart"><div class="pmedia e"><span class="ptag">Custom Cart</span></div> 200<div class="pbody"><span class="cat">Custom Cart · 2024</span><h3>Harbor & Reed</h3><p>Slide-out cart drawer with a free-shipping bar and a cross-sell row pulled from real order history.</p></div></div><div class="pcard rv" data-cat="erp"><div class="pmedia f"><span class="ptag">CRM / ERP</span></div> 201<div class="pbody"><span class="cat">CRM / ERP Systems · 2024</span><h3>Monument Portal</h3><p>Laravel distributor portal serving 50+ wholesale accounts across three cities, with order approvals and pricing tiers.</p></div></div> 202</div> 203<div class="rv" style="text-align:center;margin-top:50px"> 204<p style="color:var(--mu);margin-bottom:20px">More projects available on request â including work under NDA.</p> 205<a class="btn" href="/contact/">Ask About Our Work</a> 206</div> 207</div></section> 208 209<section class="cta"><div class="bgfx"><div class="grid"></div><div class="orb" style="width:480px;height:480px;left:50%;top:20%;margin-left:-240px"></div></div> 210<div class="wrap"><span class="pill">Let's build</span><h2 class="rv">Your project could<br>be <span class="g">next.</span></h2><a class="btn p" href="/contact/">Start a Project â</a> <a class="btn" href="mailto:[email protected]">â [email protected]</a></div></section> 211
212<script src="/assets/js/footer.js?v=20261008"></script>
vendor: 1 bytes, line 212
212
213<script src="/assets/js/layout.js?v=20261008"></script>
213 214
215<script> 216 217(function(){ 218var $=function(s){return document.querySelector(s)},R=document.documentElement; 219document.querySelectorAll('.cd').forEach(function(c){c.addEventListener('mousemove',function(e){var r=c.getBoundingClientRect();c.style.setProperty('--cx',e.clientX-r.left+'px');c.style.setProperty('--cy',e.clientY-r.top+'px')})}); 220var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');var n=e.target.querySelector&&e.target.querySelector('[data-n]');if(n&&!n.done){n.done=1;var t=+n.dataset.n,d=+n.dataset.d||0,s=n.dataset.s||'',st=performance.now();(function f(now){var k=Math.min((now-st)/1400,1);n.textContent=(t*k).toFixed(d)+s;if(k<1)requestAnimationFrame(f)})(st)}io.unobserve(e.target)}})},{threshold:.15}); 221document.querySelectorAll('.rv').forEach(function(e){io.observe(e)}); 222 223 224document.querySelectorAll('.fbtn').forEach(function(b){b.addEventListener('click',function(){document.querySelectorAll('.fbtn').forEach(function(x){x.classList.remove('on')});b.classList.add('on');var f=b.dataset.f;document.querySelectorAll('.pcard').forEach(function(c){c.style.display=(f==='all'||c.dataset.cat===f)?'':'none'})})}); 225 226 227 228})(); 229</script>
229 230</body> 231</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.