exports.id=5496,exports.ids=[5496],exports.modules={2719:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,86346,23)),Promise.resolve().then(s.t.bind(s,27924,23)),Promise.resolve().then(s.t.bind(s,35656,23)),Promise.resolve().then(s.t.bind(s,40099,23)),Promise.resolve().then(s.t.bind(s,38243,23)),Promise.resolve().then(s.t.bind(s,28827,23)),Promise.resolve().then(s.t.bind(s,62763,23)),Promise.resolve().then(s.t.bind(s,97173,23))},4780:(e,t,s)=>{"use strict";s.d(t,{cn:()=>o});var r=s(49384),i=s(82348);function o(...e){return(0,i.QP)((0,r.$)(e))}},5069:(e,t,s)=>{"use strict";let r;s.d(t,{A:()=>h});var i=s(3498),o=s.n(i),a=s(29021),n=s.n(a),l=s(33873),c=s.n(l);try{r=s(46293)}catch(e){console.warn("sql.js not installed or failed to load")}let d=null,m=null;try{d=o().createPool({host:process.env.DB_HOST||"localhost",port:Number(process.env.DB_PORT)||3306,user:process.env.DB_USER||"root",password:process.env.DB_PASSWORD||"",database:process.env.DB_NAME||"mobile_insights",charset:"utf8mb4",waitForConnections:!0,connectionLimit:10,connectTimeout:1e3})}catch(e){console.warn("MySQL pool creation failed, using SQLite fallback:",e)}async function p(){if(m)return m;if(!r)throw Error("sql.js is not available");console.log("Initializing in-memory SQLite database...");let e=new(await r()).Database;for(let t of[`CREATE TABLE IF NOT EXISTS brands (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT NOT NULL UNIQUE,
      gsmarena_url TEXT NOT NULL,
      device_count INTEGER DEFAULT 0,
      scraped_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`,`CREATE TABLE IF NOT EXISTS devices (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      brand_id INTEGER NOT NULL,
      name TEXT NOT NULL,
      gsmarena_url TEXT NOT NULL UNIQUE,
      thumbnail_url TEXT DEFAULT NULL,
      summary TEXT DEFAULT NULL,
      scraped_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`,`CREATE TABLE IF NOT EXISTS device_specs (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      device_id INTEGER NOT NULL UNIQUE,
      announced TEXT, status TEXT, network TEXT, os TEXT,
      chipset TEXT, cpu TEXT, gpu TEXT,
      display_size TEXT, display_type TEXT, display_res TEXT,
      ram TEXT, storage TEXT,
      main_camera TEXT, selfie_camera TEXT,
      battery TEXT, charging TEXT,
      nfc TEXT, usb TEXT, bluetooth TEXT, wlan TEXT,
      colors TEXT, weight TEXT, dimensions TEXT,
      sim TEXT, sensors TEXT, popularity TEXT,
      fans TEXT, rating TEXT, full_specs_json TEXT,
      scraped_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`,`CREATE TABLE IF NOT EXISTS device_pictures (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      device_id INTEGER NOT NULL,
      url TEXT NOT NULL,
      position INTEGER DEFAULT 0,
      UNIQUE(device_id, url)
    )`,`CREATE TABLE IF NOT EXISTS wishlist (
      user_id INTEGER NOT NULL,
      device_slug TEXT NOT NULL,
      PRIMARY KEY (user_id, device_slug)
    )`,`CREATE TABLE IF NOT EXISTS comparisons_log (
      slug1 TEXT NOT NULL,
      slug2 TEXT NOT NULL,
      count INTEGER DEFAULT 1,
      last_compared TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (slug1, slug2)
    )`,`CREATE TABLE IF NOT EXISTS users (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT NOT NULL,
      email TEXT NOT NULL UNIQUE,
      password_hash TEXT NOT NULL,
      is_admin INTEGER DEFAULT 0,
      avatar_url TEXT,
      wishlist TEXT DEFAULT '[]',
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`,`CREATE TABLE IF NOT EXISTS seo_meta (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      page_key TEXT NOT NULL UNIQUE,
      title TEXT, description TEXT, keywords TEXT,
      og_title TEXT, og_image TEXT, canonical TEXT,
      json_ld TEXT, noindex INTEGER DEFAULT 0,
      twitter_card TEXT, twitter_title TEXT,
      twitter_description TEXT, twitter_image TEXT,
      schema_type TEXT
    )`,`CREATE TABLE IF NOT EXISTS site_settings (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      key_name TEXT NOT NULL UNIQUE,
      value TEXT
    )`,`CREATE TABLE IF NOT EXISTS news_articles (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      slug TEXT NOT NULL UNIQUE,
      title TEXT NOT NULL,
      excerpt TEXT,
      category TEXT DEFAULT 'news',
      author TEXT DEFAULT 'MobilePhoneCompare',
      thumbnail_url TEXT,
      related_device_slug TEXT,
      related_brand TEXT,
      published_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      is_featured INTEGER DEFAULT 0,
      views INTEGER DEFAULT 0
    )`,`CREATE TABLE IF NOT EXISTS upcoming_phones (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      slug TEXT NOT NULL UNIQUE,
      name TEXT NOT NULL,
      brand TEXT NOT NULL,
      brand_color TEXT DEFAULT '#ff6e14',
      expected_price TEXT,
      launch_quarter TEXT,
      launch_date TEXT,
      status TEXT DEFAULT 'Rumored',
      thumbnail_url TEXT,
      chipset TEXT, ram TEXT, camera TEXT, battery TEXT, display TEXT,
      hype INTEGER DEFAULT 0,
      followers TEXT DEFAULT '0',
      description TEXT,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`])try{e.run(t)}catch(e){console.warn("CREATE TABLE warning:",e.message)}try{let t=c().join(process.cwd(),"mobile_insights.sql");if(n().existsSync(t)){console.log("Loading mobile_insights.sql into SQLite...");let s=n().readFileSync(t,"utf8"),r=[],i="",o=!1;for(let e=0;e<s.length;e++){let t=s[e];if("'"===t&&"\\"!==s[e-1]&&(o=!o),";"!==t||o)i+=t;else{let e=i.trim();e&&!e.startsWith("--")&&r.push(e),i=""}}let a=0;for(let t of r)if(t)try{e.run(t),a++}catch(e){t.trimStart().toUpperCase().startsWith("INSERT")||console.warn("SQL init warning:",t.substring(0,80),"|",e.message)}console.log(`Loaded ${a}/${r.length} statements from mobile_insights.sql`)}else console.warn("mobile_insights.sql not found — run: node scripts/csv_to_sql.mjs")}catch(e){console.error("Failed to load mobile_insights.sql:",e)}try{let s=c().join(process.cwd(),"seed.sql");if(n().existsSync(s)){var t;for(let t of n().readFileSync(s,"utf8").replace(/^\s*--.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/START TRANSACTION;/gi,"").replace(/COMMIT;/gi,"").replace(/LOCK TABLES `[^`]+` WRITE;/gi,"").replace(/UNLOCK TABLES;/gi,"").replace(/SET SQL_MODE[\s\S]*?;/gi,"").replace(/SET time_zone[\s\S]*?;/gi,"").replace(/ALTER TABLE `[^`]+`[\s\S]*?;/gi,"").replace(/ON UPDATE current_timestamp\(\)/gi,"").replace(/DEFAULT current_timestamp\(\)/gi,"DEFAULT CURRENT_TIMESTAMP").replace(/\b(?:int|integer|tinyint|smallint|mediumint|bigint)\(\d+\)(?:\s+unsigned)?/gi,"INTEGER").replace(/\b(?:double|decimal\(\d+,\d+\))\b/gi,"REAL").replace(/\bunsigned\b/gi,"").replace(/\bdatetime\b/gi,"TIMESTAMP").replace(/\blongtext\b/gi,"TEXT").replace(/COLLATE \w+/gi,"").replace(/CHARACTER SET \w+/gi,"").replace(/DEFAULT CHARSET=\w+/gi,"").replace(/ENGINE=InnoDB\b[^;]*;?/gi,";").replace(/\\'/g,"''").replace(/\\"/g,'"').replace(/INSERT IGNORE INTO/gi,"INSERT OR IGNORE INTO").split(";"))if(t=t.trim())try{e.run(t)}catch{}}}catch(e){console.error("Failed to load seed.sql:",e)}return m=e,console.log("In-memory SQLite database initialized successfully."),m}let h={execute:async(e,t=[])=>{if(d)try{return await d.execute(e,t)}catch(e){if(!("ECONNREFUSED"===e.code||"PROTOCOL_CONNECTION_LOST"===e.code||"ETIMEDOUT"===e.code||e.message?.includes("connect")))throw e;console.warn("MySQL connection failed. Falling back to SQLite database...")}let s=await p(),r=function(e){let t=e.replace(/\bUNSIGNED\b/gi,"INTEGER");return(t=t.replace(/\bNOW\(\)/gi,"datetime('now')")).replace(/ON DUPLICATE KEY UPDATE[\s\S]*$/gi,"")}(e);if(/^\s*(INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|ALTER)/i.test(r)){s.run(r,t);let e=0,i=0;try{let t=s.exec("SELECT last_insert_rowid()");t.length>0&&(e=t[0].values[0][0]);let r=s.exec("SELECT changes()");r.length>0&&(i=r[0].values[0][0])}catch(e){}return[{insertId:e,affectedRows:i},void 0]}{let e=s.exec(r,t);if(0===e.length)return[[],void 0];let i=e[0].columns;return[e[0].values.map(e=>{let t={};return i.forEach((s,r)=>{t[s]=e[r]}),t}),void 0]}}}},10096:(e,t,s)=>{"use strict";s.d(t,{default:()=>p});var r=s(60687),i=s(10218),o=s(63213),a=s(43210),n=s(60637),l=s(4780);let c=n.Kq;n.bL,n.l9,a.forwardRef(({className:e,sideOffset:t=4,...s},i)=>(0,r.jsx)(n.UC,{ref:i,sideOffset:t,className:(0,l.cn)("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...s})).displayName=n.UC.displayName;var d=s(52581);let m=({...e})=>{let{theme:t="system"}=(0,i.D)();return(0,r.jsx)(d.l$,{theme:t,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e})};function p({children:e}){return(0,r.jsx)(i.N,{attribute:"class",defaultTheme:"dark",enableSystem:!1,children:(0,r.jsx)(o.O,{children:(0,r.jsxs)(c,{children:[e,(0,r.jsx)(m,{})]})})})}},13622:(e,t,s)=>{"use strict";s.d(t,{default:()=>r});let r=(0,s(12907).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Taukeer19\\\\Desktop\\\\Website\\\\mobile-site\\\\mobile-insights-hub\\\\src\\\\components\\\\Providers.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Taukeer19\\Desktop\\Website\\mobile-site\\mobile-insights-hub\\src\\components\\Providers.tsx","default")},14350:(e,t,s)=>{"use strict";s.d(t,{K:()=>n,p:()=>a});var r=s(5069);let i="https://mobilephonecompare.com",o=`${i}/og-default.jpg`;async function a(e){try{let[t]=await r.A.execute("SELECT * FROM seo_meta WHERE page_key=? LIMIT 1",[e]);return t[0]||null}catch{return null}}function n(e,t){let s=e?.title||t.title,r=e?.description||t.description,a=e?.keywords||t.keywords||void 0,n=e?.canonical||t.canonical||`${i}/`,l=e?.og_title||e?.title||t.title,c=e?.og_image||t.ogImage||o,d=e?.twitter_card||"summary_large_image",m=!!e?.noindex;return{title:s,description:r,...a?{keywords:a.split(",").map(e=>e.trim())}:{},alternates:{canonical:n},openGraph:{title:l,description:(e?.og_title,r),type:t.type||"website",url:n,siteName:"MobilePhoneCompare",images:[{url:c,width:1200,height:630,alt:l}]},twitter:{card:d,title:e?.twitter_title||l,description:e?.twitter_description||r,images:[e?.twitter_image||c]},...m?{robots:{index:!1,follow:!1}}:{robots:{index:!0,follow:!0}}}}},17942:(e,t,s)=>{Promise.resolve().then(s.bind(s,54413))},20871:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,16444,23)),Promise.resolve().then(s.t.bind(s,16042,23)),Promise.resolve().then(s.t.bind(s,88170,23)),Promise.resolve().then(s.t.bind(s,49477,23)),Promise.resolve().then(s.t.bind(s,29345,23)),Promise.resolve().then(s.t.bind(s,12089,23)),Promise.resolve().then(s.t.bind(s,46577,23)),Promise.resolve().then(s.t.bind(s,31307,23))},29190:(e,t,s)=>{"use strict";s.d(t,{A:()=>x});var r=s(60687),i=s(43210),o=s(85814),a=s.n(o),n=s(16189),l=s(99270),c=s(78272),d=s(40083),m=s(11860),p=s(12941),h=s(63213),T=s(62185);let u=[{label:"Mobiles & Tablets",hasDropdown:!0,href:"/phone-finder"},{label:"Top 10",hasDropdown:!1,href:"/top-10"},{label:"Compare",hasDropdown:!1,href:"/compare"},{label:"Upcoming Mobiles",hasDropdown:!1,href:"/upcoming"},{label:"News & Reviews",hasDropdown:!1,href:"/news"},{label:"Phone Finder",hasDropdown:!1,href:"/phone-finder"},{label:"Brands",hasDropdown:!1,href:"/brands"}];function x(){let[e,t]=(0,i.useState)(!1),[s,o]=(0,i.useState)(""),[x,E]=(0,i.useState)([]),[g,b]=(0,i.useState)(!1),[f,N]=(0,i.useState)(!1),y=(0,n.usePathname)(),w=(0,n.useRouter)(),{user:v,isLoggedIn:A,logout:j}=(0,h.A)(),R=(0,i.useRef)(null),I=(0,i.useRef)(null),L=e=>{if(o(e),I.current&&clearTimeout(I.current),e.length<2){E([]),b(!1);return}I.current=setTimeout(async()=>{try{let t=await (0,T.ys)(e);E(t.results.slice(0,6)),b(!0)}catch{E([])}},300)},S=e=>{o(""),E([]),b(!1),w.push(`/phone/${e}`)},U=()=>{j(),N(!1),w.push("/")};return(0,r.jsxs)("header",{className:"sticky top-0 z-50 w-full",style:{backgroundColor:"hsl(220, 25%, 8%)"},children:[(0,r.jsxs)("div",{className:"flex items-center gap-4 px-4 h-14 border-b border-white/10",children:[(0,r.jsx)(a(),{href:"/",className:"flex items-center shrink-0",children:(0,r.jsxs)("span",{className:"font-bold text-xl tracking-tight",children:[(0,r.jsx)("span",{className:"text-white",children:"Mobile"}),(0,r.jsx)("span",{className:"text-primary",children:"PhoneCompare"})]})}),(0,r.jsxs)("div",{className:"hidden md:flex flex-1 relative mx-4",ref:R,children:[(0,r.jsx)("input",{type:"text",value:s,onChange:e=>L(e.target.value),onFocus:()=>x.length>0&&b(!0),placeholder:"Search phones or brands...",className:"w-full bg-white/10 text-white placeholder-white/40 rounded-lg px-4 py-2 pr-10 text-sm border border-white/15 focus:outline-none focus:border-primary/70 focus:bg-white/15 transition-colors"}),(0,r.jsx)(l.A,{size:15,className:"absolute right-3 top-1/2 -translate-y-1/2 text-white/40"}),g&&x.length>0&&(0,r.jsxs)("div",{className:"absolute top-full left-0 right-0 mt-1 bg-white rounded-xl shadow-2xl border border-border/30 overflow-hidden z-50",children:[x.map(e=>(0,r.jsxs)("button",{onClick:()=>S(e.slug),className:"w-full flex items-center gap-3 px-4 py-2.5 hover:bg-primary/5 transition-colors text-left",children:[(0,r.jsx)("img",{src:e.thumbnail,alt:e.name,className:"w-8 h-8 object-contain rounded shrink-0",onError:e=>{e.target.style.display="none"}}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("p",{className:"text-sm font-semibold text-foreground truncate",children:e.name}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:[e.brand," \xb7 ",e.display_size||""]})]})]},e.slug)),(0,r.jsxs)(a(),{href:`/phone-finder?search=${encodeURIComponent(s)}`,onClick:()=>b(!1),className:"flex items-center justify-center gap-1 py-2.5 text-xs text-primary font-semibold border-t border-border/20 hover:bg-primary/5",children:[(0,r.jsx)(l.A,{size:11})," View all results"]})]})]}),(0,r.jsxs)("div",{className:"ml-auto flex items-center gap-2 shrink-0",children:[A&&v?(0,r.jsxs)("div",{className:"relative hidden md:block",children:[(0,r.jsxs)("button",{onClick:()=>N(!f),className:"flex items-center gap-2 px-3 py-1.5 rounded-lg hover:bg-white/10 transition-colors",children:[(0,r.jsx)("div",{className:"w-7 h-7 rounded-full bg-primary flex items-center justify-center text-white text-xs font-bold",children:v.name.charAt(0).toUpperCase()}),(0,r.jsx)("span",{className:"text-sm font-medium text-white/90 max-w-[100px] truncate",children:v.name}),(0,r.jsx)(c.A,{size:12,className:"text-white/50"})]}),f&&(0,r.jsxs)("div",{className:"absolute right-0 top-full mt-1 w-48 bg-white rounded-xl shadow-2xl border border-border/20 overflow-hidden z-50",children:[(0,r.jsxs)("div",{className:"px-4 py-3 border-b border-border/20",children:[(0,r.jsx)("p",{className:"text-sm font-bold text-foreground truncate",children:v.name}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:v.email})]}),(0,r.jsxs)("button",{onClick:U,className:"w-full flex items-center gap-2 px-4 py-2.5 text-sm text-red-600 hover:bg-red-50 transition-colors",children:[(0,r.jsx)(d.A,{size:14}),"Sign out"]})]})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a(),{href:"/login",className:"hidden md:block text-sm font-medium text-white/70 hover:text-white transition-colors px-3 py-1.5 rounded-lg hover:bg-white/10",children:"Login"}),(0,r.jsx)(a(),{href:"/signup",className:"hidden md:block text-sm font-semibold text-white bg-primary hover:bg-primary/90 transition-colors px-4 py-1.5 rounded-lg shadow-md",children:"Sign Up"})]}),(0,r.jsx)("button",{className:"md:hidden text-white p-1",onClick:()=>t(!e),"aria-label":"Toggle menu",children:e?(0,r.jsx)(m.A,{size:22}):(0,r.jsx)(p.A,{size:22})})]})]}),(0,r.jsx)("div",{className:"hidden md:flex items-center gap-0 px-2 border-b border-white/10",children:u.map((e,t)=>{let s=y===e.href;return(0,r.jsxs)(a(),{href:e.href,className:`flex items-center gap-1 px-3 py-2.5 text-sm font-medium transition-colors whitespace-nowrap border-b-2 -mb-px ${s?"text-primary border-primary":"text-white/70 hover:text-white border-transparent hover:border-white/20"}`,children:[e.label,e.hasDropdown&&(0,r.jsx)(c.A,{size:12,className:"opacity-50 mt-px"})]},t)})}),e&&(0,r.jsxs)("div",{className:"md:hidden border-t border-white/10 px-4 py-3 space-y-1",children:[(0,r.jsxs)("div",{className:"relative mb-3",children:[(0,r.jsx)("input",{type:"text",placeholder:"Search phones or brands...",className:"w-full bg-white/10 text-white placeholder-white/40 rounded-lg px-4 py-2 pr-10 text-sm border border-white/15 focus:outline-none"}),(0,r.jsx)(l.A,{size:15,className:"absolute right-3 top-1/2 -translate-y-1/2 text-white/40"})]}),u.map((e,s)=>(0,r.jsxs)(a(),{href:e.href,onClick:()=>t(!1),className:"flex items-center justify-between px-3 py-2.5 text-sm text-white/80 hover:text-white hover:bg-white/10 rounded-lg transition-colors",children:[e.label,e.hasDropdown&&(0,r.jsx)(c.A,{size:14,className:"opacity-50"})]},s)),(0,r.jsx)("div",{className:"pt-2 border-t border-white/10 flex gap-2",children:A&&v?(0,r.jsxs)("button",{onClick:U,className:"flex-1 flex items-center justify-center gap-2 px-3 py-2.5 text-sm text-red-400 hover:bg-white/10 rounded-lg border border-white/15",children:[(0,r.jsx)(d.A,{size:14})," Sign out"]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a(),{href:"/login",onClick:()=>t(!1),className:"flex-1 text-center px-3 py-2.5 text-sm text-white/80 hover:text-white hover:bg-white/10 rounded-lg border border-white/15",children:"Login"}),(0,r.jsx)(a(),{href:"/signup",onClick:()=>t(!1),className:"flex-1 text-center px-3 py-2.5 text-sm font-semibold text-white bg-primary hover:bg-primary/90 rounded-lg",children:"Sign Up"})]})})]})]})}},41502:(e,t,s)=>{Promise.resolve().then(s.bind(s,57347))},51317:(e,t,s)=>{"use strict";s.d(t,{A:()=>u});var r=s(60687),i=s(19526),o=s(72575),a=s(84113),n=s(66232),l=s(17581),c=s(10510),d=s(14952),m=s(85814),p=s.n(m);let h=[{label:"Compare",href:"/compare"},{label:"Phone Finder",href:"/phone-finder"},{label:"Brands",href:"/brands"},{label:"Top 10",href:"/top-10"},{label:"News & Reviews",href:"/news"},{label:"Upcoming Mobiles",href:"/upcoming"},{label:"About Us",href:"/"},{label:"Contact Us",href:"/"},{label:"Privacy Policy",href:"/"},{label:"Terms & Conditions",href:"/"},{label:"Mobile Specifications Database",href:"/phone-finder"}],T=[{name:"Samsung Galaxy F70e",slug:"samsung-galaxy-f70e"},{name:"Apple iPhone 17e",slug:"apple-iphone-17e"},{name:"OnePlus 15R",slug:"oneplus-15r"},{name:"Infinix GT 50 Pro",slug:"infinix-gt-50-pro"},{name:"Samsung Galaxy S26 Ultra",slug:"samsung-galaxy-s26-ultra"},{name:"Xiaomi 17 Ultra",slug:"xiaomi-17-ultra"},{name:"Google Pixel 10 Pro",slug:"google-pixel-10-pro"},{name:"OnePlus Open 2",slug:"oneplus-open-2"},{name:"Vivo X200 Pro",slug:"vivo-x200-pro"},{name:"Motorola Razr 50 Ultra",slug:"motorola-razr-50-ultra"},{name:"Realme GT 7 Pro",slug:"realme-gt-7-pro"},{name:"iPhone 17 Pro Max",slug:"iphone-17-pro-max"}];function u(){return(0,r.jsxs)("footer",{className:"mt-6 bg-foreground text-background",children:[(0,r.jsx)("div",{className:"border-b border-background/10 py-4",children:(0,r.jsx)("div",{className:"px-4 flex flex-wrap items-center justify-center gap-x-4 gap-y-2",children:h.map((e,t)=>(0,r.jsx)(p(),{href:e.href,className:"text-background/70 hover:text-primary text-xs transition-colors",children:e.label},t))})}),(0,r.jsxs)("div",{className:"px-4 py-6",children:[(0,r.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-6",children:(0,r.jsxs)("div",{className:"md:col-span-4",children:[(0,r.jsx)("h4",{className:"text-background/90 font-bold text-sm mb-3 uppercase tracking-wide",children:"New Mobile Phones"}),(0,r.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-1",children:T.map((e,t)=>(0,r.jsx)(p(),{href:`/phone/${e.slug}`,className:"text-background/60 hover:text-primary text-xs py-0.5 transition-colors",children:e.name},t))})]})}),(0,r.jsxs)("div",{className:"border-t border-background/10 mt-6 pt-6 flex flex-col md:flex-row items-center justify-between gap-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-background/50 text-xs",children:"Connect with us on Social media"}),(0,r.jsx)("div",{className:"flex items-center gap-3 mt-2",children:[i.A,o.A,a.A,n.A].map((e,t)=>(0,r.jsx)("a",{href:"#",className:"text-background/50 hover:text-primary transition-colors",children:(0,r.jsx)(e,{size:18})},t))})]}),(0,r.jsxs)("div",{className:"text-center",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 justify-center mb-1",children:[(0,r.jsxs)("div",{className:"bg-primary rounded px-1.5 py-0.5 flex items-center gap-1",children:[(0,r.jsx)(l.A,{size:12,className:"text-white"}),(0,r.jsx)(c.A,{size:10,className:"text-white"})]}),(0,r.jsx)("span",{className:"text-background/90 font-bold text-lg",children:"MobilePhoneCompare"})]}),(0,r.jsx)("p",{className:"text-background/40 text-xs",children:"\xa9 2026 MobilePhoneCompare. All rights reserved."}),(0,r.jsx)("p",{className:"text-background/30 text-xs",children:"The ultimate mobile phone specifications database."})]}),(0,r.jsxs)("a",{href:"#",className:"text-primary text-xs font-semibold hover:underline flex items-center gap-1",children:["Report a Bug ",(0,r.jsx)(d.A,{size:10})]})]})]})]})}},54413:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>r});let r=(0,s(12907).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Taukeer19\\\\Desktop\\\\Website\\\\mobile-site\\\\mobile-insights-hub\\\\src\\\\app\\\\not-found.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Taukeer19\\Desktop\\Website\\mobile-site\\mobile-insights-hub\\src\\app\\not-found.tsx","default")},56707:(e,t,s)=>{Promise.resolve().then(s.bind(s,10096))},57347:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>u});var r=s(60687),i=s(43210),o=s(85814),a=s.n(o),n=s(16189),l=s(17581),c=s(32192),d=s(99270),m=s(28559),p=s(29190),h=s(51317);function T(){let e=(0,n.usePathname)();return(0,r.jsxs)("div",{className:"min-h-screen page-bg",children:[(0,r.jsx)(p.A,{}),(0,r.jsx)("div",{className:"flex items-center justify-center px-4 py-24",children:(0,r.jsxs)("div",{className:"glass-card rounded-2xl p-10 text-center max-w-md w-full",children:[(0,r.jsx)("div",{className:"w-20 h-20 rounded-2xl bg-primary/10 flex items-center justify-center mx-auto mb-6",children:(0,r.jsx)(l.A,{size:36,className:"text-primary opacity-70"})}),(0,r.jsx)("h1",{className:"text-7xl font-black text-primary mb-2",children:"404"}),(0,r.jsx)("h2",{className:"text-xl font-bold mb-2",children:"Page Not Found"}),(0,r.jsxs)("p",{className:"text-sm text-muted-foreground mb-8",children:["The page ",(0,r.jsx)("span",{className:"font-mono text-xs bg-white/50 px-2 py-0.5 rounded border border-border/50",children:e})," doesn't exist."]}),(0,r.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[(0,r.jsxs)(a(),{href:"/",className:"flex items-center justify-center gap-2 bg-primary text-primary-foreground px-6 py-2.5 rounded-xl font-bold text-sm hover:bg-primary/90 transition-colors shadow-lg",children:[(0,r.jsx)(c.A,{size:15}),"Go Home"]}),(0,r.jsxs)(a(),{href:"/phone-finder",className:"flex items-center justify-center gap-2 glass-card px-6 py-2.5 rounded-xl font-bold text-sm hover:border-primary/50 transition-all",children:[(0,r.jsx)(d.A,{size:15,className:"text-primary"}),"Find a Phone"]})]}),(0,r.jsxs)("button",{onClick:()=>window.history.back(),className:"mt-4 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-primary transition-colors mx-auto",children:[(0,r.jsx)(m.A,{size:12}),"Go back"]})]})}),(0,r.jsx)(h.A,{})]})}function u(){return(0,r.jsx)(i.Suspense,{children:(0,r.jsx)(T,{})})}},62185:(e,t,s)=>{"use strict";async function r(e,t={}){let s=await fetch(e,{headers:{"Content-Type":"application/json",...t.headers||{}},credentials:"include",...t}),i=await s.json();if(!s.ok)throw Error(i.error||`HTTP ${s.status}`);return i}s.d(t,{Fs:()=>o,Jp:()=>c,Pf:()=>n,R2:()=>i,ZB:()=>p,aE:()=>m,j1:()=>d,oG:()=>a,s2:()=>h,ys:()=>l});let i={signup:(e,t,s)=>r("/api/auth/signup",{method:"POST",body:JSON.stringify({name:e,email:t,password:s})}),login:(e,t)=>r("/api/auth/login",{method:"POST",body:JSON.stringify({email:e,password:t})}),me:()=>r("/api/auth/me"),logout:()=>r("/api/auth/logout",{method:"POST"})},o=()=>r("/api/brands").then(e=>e.brands),a=(e={})=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,s])=>{void 0!==s&&""!==s&&t.set(e,String(s))}),r(`/api/devices?${t}`)},n=e=>r(`/api/devices/${encodeURIComponent(e)}`),l=e=>r(`/api/search?q=${encodeURIComponent(e)}`),c=(e="fans",t=10)=>r(`/api/top-10?sort=${e}&limit=${t}`),d=(e={})=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,s])=>{s&&t.set(e,s)}),r(`/api/upcoming?${t}`)},m=(e={})=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,s])=>{void 0!==s&&t.set(e,String(s))}),r(`/api/news?${t}`)},p=(e,t)=>r(`/api/compare?slug1=${encodeURIComponent(e)}&slug2=${encodeURIComponent(t)}`),h={add:e=>r("/api/wishlist",{method:"POST",body:JSON.stringify({slug:e})}),remove:e=>r(`/api/wishlist/${e}`,{method:"DELETE"})}},63213:(e,t,s)=>{"use strict";s.d(t,{A:()=>l,O:()=>n});var r=s(60687),i=s(43210),o=s(62185);let a=(0,i.createContext)(null);function n({children:e}){let[t,s]=(0,i.useState)(null),[n,l]=(0,i.useState)(!0),c=async(e,t)=>{s((await o.R2.login(e,t)).user)},d=async(e,t,r)=>{s((await o.R2.signup(e,t,r)).user)},m=async()=>{await o.R2.logout().catch(()=>{}),s(null)};return(0,r.jsx)(a.Provider,{value:{user:t,loading:n,login:c,signup:d,logout:m,isLoggedIn:!!t},children:e})}function l(){let e=(0,i.useContext)(a);if(!e)throw Error("useAuth must be used inside AuthProvider");return e}},64812:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>p,generateMetadata:()=>c});var r=s(37413);void 0!==globalThis.localStorage&&"function"!=typeof globalThis.localStorage.getItem&&Object.defineProperty(globalThis,"localStorage",{value:{getItem:()=>null,setItem:()=>{},removeItem:()=>{},clear:()=>{},key:()=>null,length:0},writable:!0,configurable:!0});var i=s(85041),o=s.n(i);s(73139);var a=s(13622),n=s(14350),l=s(85108);async function c(){let e=await (0,n.p)("home"),t=(0,n.K)(e,{title:"Compare Mobile Phones & Find the Best Deals | MobilePhoneCompare",description:"Compare mobile phones instantly. View side-by-side specs, read real user reviews, and find the best smartphone for your budget today. Start comparing now!",canonical:"https://mobilephonecompare.com",keywords:"mobile phone comparison, mobile phone specs, compare smartphones, phone specifications, best phones 2026, smartphone database, phone finder",type:"website"});return{...t,title:{default:t.title||"MobilePhoneCompare — Mobile Phone Specifications Database",template:"%s | MobilePhoneCompare"},icons:{icon:"/favicon.svg",shortcut:"/favicon.svg"}}}let d={"@context":"https://schema.org","@type":"WebSite",name:"MobilePhoneCompare",url:"https://mobilephonecompare.com",description:"The ultimate mobile phone specifications database. Compare phones, explore brands, and find your perfect device.",potentialAction:{"@type":"SearchAction",target:{"@type":"EntryPoint",urlTemplate:"https://mobilephonecompare.com/phone-finder?search={search_term_string}"},"query-input":"required name=search_term_string"}},m={"@context":"https://schema.org","@type":"Organization",name:"MobilePhoneCompare",url:"https://mobilephonecompare.com",logo:{"@type":"ImageObject",url:"https://mobilephonecompare.com/favicon.svg"},sameAs:[]};function p({children:e}){return(0,r.jsx)("html",{lang:"en",suppressHydrationWarning:!0,children:(0,r.jsxs)("body",{className:o().className,children:[(0,r.jsx)(l.A,{data:[d,m]}),(0,r.jsx)(a.default,{children:e})]})})}},73139:()=>{},80683:(e,t,s)=>{Promise.resolve().then(s.bind(s,13622))},85108:(e,t,s)=>{"use strict";s.d(t,{A:()=>i});var r=s(37413);function i({data:e}){return(0,r.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(e)}})}}};