1/* Blog 3-up + Partners + Footer */ 2 3const Blog = () => { 4 const posts = (window.BlogStore ? window.BlogStore.getPosts() : []).slice(0, 3); 5 const dateStr = (d) => new Date(d).toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); 6 return ( 7 <section id="blog" className="section"> 8 9 </section> 10 ); 11}; 12 13const PARTNERS = [ 14 { name: 'ICANN', role: 'Recognized ccTLD', logo: 'assets/partner-icann.png' }, 15 { name: 'IANA', role: 'Root-zone authority', logo: 'assets/partner-iana.png' }, 16 { name: 'AfTLD', role: 'African TLD Org.', logo: 'assets/partner-aftld.png' }, 17 { name: 'NCA', role: 'National Communications Authority â Regulator', logo: 'assets/partner-nca.png' }, 18]; 19 20const Partners = () => ( 21 <section id="partners" className="partners"> 22 <div className="wrap"> 23 <div className="partners__head"> 24 <h2>Working with the world's internet community.</h2> 25 <p>Trusted partners and accreditations behind the .so registry.</p> 26 </div> 27 <div className="partners__grid"> 28 {PARTNERS.map(p => ( 29 <div className="partner" key={p.name}> 30 <div className="partner__logo-wrap"> 31 <img src={p.logo} alt={p.name} className="partner__logo-img" /> 32 </div> 33 </div> 34 ))} 35 </div> 36 </div> 37 </section> 38); 39 40const PinIcon = () => (<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M12 21s-7-7-7-12a7 7 0 0 1 14 0c0 5-7 12-7 12z"/><circle cx="12" cy="9" r="2.5"/></svg>); 41const PhoneIcon = () => (<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.37 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.33 1.85.57 2.81.7A2 2 0 0 1 22 16.92z"/></svg>); 42const MailIcon = () => (<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg>); 43 44const Footer = () => ( 45 <footer className="footer"> 46 <div className="footer__topband"> 47 <div className="wrap footer__topband-inner"> 48 <div className="footer__topband-mark"> 49 <img src="assets/sonic-logo-full.png" alt="SONIC â Somali Network Information Center" className="footer__logo-img" /> 50 </div> 51 <div className="footer__topband-cta"> 52 <h3>Stay in the loop on .so</h3> 53 <p>Policy updates, registrar news and outage notices â delivered when it matters.</p> 54 <form className="footer__news" onSubmit={e => e.preventDefault()}> 55 <input type="email" placeholder="[email protected]" aria-label="Email" /> 56 <button type="submit" className="btn btn--primary">Subscribe</button> 57 </form> 58 </div> 59 </div> 60 </div> 61 62 <div className="wrap"> 63 <div className="footer__grid"> 64 <div className="footer__brand"> 65 <p className="footer__about"> 66 Somali Network Information Centre (SONIC) is the registry for .SO Internet 67 Domain Names and maintains the database of names registered in the .so 68 country code TopâLevel Domain. 69 </p> 70 <div className="footer__contact"> 71 <span><PinIcon /> Hamarweine, Mogadishu â Somalia · PO. BOX 77</span> 72 <span><PhoneIcon /> +252 61 9988879</span> 73 <span><MailIcon /> [email protected]</span> 74 </div> 75 </div> 76 <div className="footer__col"> 77 <h4>SONIC</h4> 78 <ul> 79 <li><a href="#">Policies</a></li> 80 <li><a href="#">Domain Disputes</a></li> 81 <li><a href="#">DNS & DNSSEC</a></li> 82 <li><a href="#">FAQs</a></li> 83 </ul> 84 </div>
85 <div className="footer__col"> 86 <h4>Registrars</h4> 87 <ul> 88 <li><a href="#">Registrar Login</a></li> 89 <li><a href="#">Become a Registrar</a></li> 90 <li><a href="#">Local Registrars</a></li> 91 <li><a href="#">International Registrars</a></li> 92 </ul> 93 </div> 94 <div className="footer__col"> 95 <h4>Resources</h4> 96 <ul> 97 <li><a href="https://whois.nic.so/" target="_blank" rel="noopener">WhoIs Lookup â</a></li> 98 <li><a href="https://sigf.so/" target="_blank" rel="noopener">SIGF â</a></li> 99 <li><a href="https://girlsinict.so/" target="_blank" rel="noopener">Girls in ICT â</a></li> 100 <li><a href="https://edu.sonic.so/" target="_blank" rel="noopener">Edutek â</a></li> 101 </ul> 102 </div> 103 </div> 104 <div className="footer__bottom"> 105 <span>© Somali Network Information Centre 2026 â All Rights Reserved</span> 106 <div className="footer__bottom-links"> 107 <a href="#">Home</a><a href="#">About us</a><a href="#">Blog</a><a href="#">FAQs</a> 108 </div> 109 </div> 110 </div> 111 </footer> 112); 113 114window.Blog = Blog; 115window.Partners = Partners; 116window.Footer = Footer;
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.