<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9022839565483764368</id><updated>2026-04-06T02:01:41.023-07:00</updated><category term="Image Converter"/><category term="File Archive"/><category term="Nutrition"/><category term="Security"/><category term="Crypto Converter"/><category term="Health"/><category term="Home Loan Calculator"/><category term="IRCTC"/><category term="Indian Railway"/><category term="SIP Calculator"/><category term="AI Writer"/><category term="Age Calculator"/><category term="Area Measurement"/><category term="BMI Calculator"/><category term="Background Remover"/><category term="Bajaj Personal Loan Calculator"/><category term="Base64 Decoder"/><category term="Base64 Encoder"/><category term="Binary Converter"/><category term="Bitcoin Calculator"/><category term="CAGR"/><category term="Calculator"/><category term="Car Loan Calculator"/><category term="Comma Adder"/><category term="Compound Annual Growth Rate Calculator"/><category term="Compress PDF"/><category term="Credit Card PayOff Calculator"/><category term="Crypto"/><category term="Crypto Tax Calculator"/><category term="Crystal Healing"/><category term="Currency Converter"/><category term="Date Calculator"/><category term="Decrypt"/><category term="EMI Calculator"/><category term="Education Loan Calculator"/><category term="Encrypt"/><category term="Ethereum Calculator"/><category term="Fasting"/><category term="File Hash"/><category term="Flight TimeZone Sync"/><category term="Forex Converter"/><category term="Formating"/><category term="Fruits"/><category term="GST Calculator"/><category term="Gratuity"/><category term="Hardening"/><category term="IFSC Code Finder"/><category term="IP Address Finder"/><category term="Image Resizer"/><category term="India Tax Calculator"/><category term="JPG to PDF"/><category term="Length Converter"/><category term="Linux Permission"/><category term="Meat"/><category term="Merge PDF"/><category term="Mortgage Calculator"/><category term="PDF to JPG"/><category term="PDF to PNG"/><category term="PDF to PPT Converter"/><category term="PDF to Word Converter"/><category term="PNG to PDF"/><category term="PPF Calculator"/><category term="Password Checker"/><category term="Password Generator"/><category term="Percentage Calculator"/><category term="Personal Budget Calculator"/><category term="Personal Loan Calculator"/><category term="Pin Code Finder"/><category term="Powershell"/><category term="SSL/TLS"/><category term="SSY"/><category term="School Admission Calculator"/><category term="Speed Calculator"/><category term="Split PDF"/><category term="Sukanya Samriddhi Yojana"/><category term="Temperature Converter"/><category term="Text Editor"/><category term="Time Converter"/><category term="Tip Calculator"/><category term="Unit Converter"/><category term="Vegetables"/><category term="Vitamins"/><category term="Volume Converter"/><category term="Weather"/><category term="Weight Converter"/><category term="Word Case Converter"/><category term="Word Counter"/><category term="World Clock"/><title type='text'>OTechy - Best Free Online Tools - Smart Tools</title><subtitle type='html'>OTechy offers professional-grade online tools for free. Calculate, convert, and optimize with our smart web utilities. Fast, mobile-friendly, and no registration required.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.otechy.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default'/><link rel='alternate' type='text/html' href='https://www.otechy.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default?start-index=26&amp;max-results=25'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-5487723358189059572</id><published>2026-04-05T10:34:00.000-07:00</published><updated>2026-04-05T10:39:03.397-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gratuity"/><title type='text'>Premium Gratuity Calculator</title><content type='html'>&lt;title&gt;Premium Gratuity Calculator: Private, Govt &amp; 2026 Labor Code Auditor | OTechy&lt;/title&gt;
&lt;meta name=&quot;title&quot; content=&quot;Premium Gratuity Calculator: Private, Govt &amp; 2026 Labor Code Auditor | OTechy&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Audit your gratuity settlement instantly with OTechy. Features 2026 rules: 1-year rule for contractors, 50% wage audit, and latest tax-free limits for private &amp; govt staff.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;gratuity calculator India 2026, contractor gratuity rule, 1 year gratuity rule, gratuity tax free limit 20L, government gratuity calculator, OTechy finance tools&quot;&gt;

&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
&lt;meta property=&quot;og:url&quot; content=&quot;https://www.otechy.com/2026/01/premium-gratuity-calculator.html&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Premium Gratuity Calculator: Private, Govt &amp; 2026 Labor Code Auditor | OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Audit your gratuity settlement instantly with OTechy. Features 2026 rules: 1-year rule for contractors, 50% wage audit, and latest tax-free limits for private &amp; govt staff.&quot;&gt;

&lt;meta property=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta property=&quot;twitter:url&quot; content=&quot;https://www.otechy.com/2026/01/premium-gratuity-calculator.html&quot;&gt;
&lt;meta property=&quot;twitter:title&quot; content=&quot;Premium Gratuity Calculator: Private, Govt &amp; 2026 Labor Code Auditor | OTechy&quot;&gt;
&lt;meta property=&quot;twitter:description&quot; content=&quot;Audit your gratuity settlement instantly with OTechy. Features 2026 rules: 1-year rule for contractors, 50% wage audit, and latest tax-free limits for private &amp; govt staff.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    :root { --primary: #3b82f6; --text-dark: #1e293b; --text-light: #64748b; --card-radius: 16px; --success: #10b981; }
    
    * { box-sizing: border-box; }
    .otechy-tool-wrapper { font-family: &#39;Poppins&#39;, sans-serif; max-width: 900px; margin: 0 auto; color: var(--text-dark); line-height: 1.6; padding: 80px 20px 20px; }
    
    /* Header Styling */
    .tool-header { text-align: center; margin-bottom: 30px; }
    .otechy-badge { display: inline-block; background: #eff6ff; color: var(--primary); padding: 6px 18px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; margin-bottom: 12px; border: 1px solid #dbeafe; }
    .tool-header h1 { font-size: clamp(22px, 5vw, 28px); color: var(--primary); font-weight: 850; margin: 0; }
    .quick-value { color: var(--text-light); font-weight: 500; font-size: 14px; margin-top: 8px; }
    
    /* Ads Styling */
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; background: #f1f5f9; border-radius: 10px; border: 1px dashed #cbd5e1; width: 100%; height: 90px; }

    /* Input Card */
    .otechy-card { background: #ffffff; padding: 25px; border-radius: var(--card-radius); border: 1px solid #000; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; align-items: end; }
    .input-group label { display: block; font-weight: 700; font-size: 11px; text-transform: uppercase; color: var(--text-light); margin-bottom: 8px; letter-spacing: 0.5px; }
    
    .input-with-icon { position: relative; display: flex; align-items: center; }
    .rupee-icon { position: absolute; left: 12px; width: 14px; height: 14px; color: var(--text-dark); pointer-events: none; }
    .input-group input, .input-group select { width: 100%; padding: 12px; border: 2px solid #cbd5e1; border-radius: 10px; font-size: 14px; font-family: &#39;Poppins&#39;; outline: none; transition: 0.2s; }
    .input-with-icon input { padding-left: 35px !important; }
    .input-group input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); }

    /* Buttons */
    .btn-container { display: flex; gap: 10px; margin-top: 20px; }
    .otechy-btn { flex: 1; background: var(--primary); color: white; border: none; padding: 14px; border-radius: 10px; font-size: 14px; font-weight: 700; cursor: pointer; transition: 0.3s; }
    .otechy-btn:hover { background: #2563eb; transform: translateY(-1px); }
    .otechy-btn.secondary { background: #64748b; }

    /* Results Area */
    .result-container { display: none; padding: 25px; background: #f8fbff; border-radius: 12px; border: 1px solid #e2e8f0; border-left: 6px solid var(--primary); margin-top: 30px; }
    .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 20px 0; }
    .stat-item { background: white; padding: 15px 5px; border-radius: 12px; border: 1px solid #e2e8f0; text-align: center; }
    .stat-item span.val-txt { font-weight: 850; color: var(--primary); font-size: 16px; display: flex; align-items: center; justify-content: center; gap: 4px; }
    .stat-item p { font-size: 9px; color: var(--text-light); text-transform: uppercase; margin-top: 4px; font-weight: 700; }

    /* Policy Grid */
    .fruitful-box { background: white; border-radius: 12px; border: 1px solid #e2e8f0; padding: 15px; margin: 20px 0; }
    .sub-title-logic { font-size: 11px; font-weight: 800; color: var(--text-light); margin-bottom: 15px; letter-spacing: 0.5px; text-transform: uppercase; }
    .fruitful-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
    .fruit-card { padding: 10px; border-radius: 8px; background: #f8fafc; border-left: 3px solid #cbd5e1; }
    .fruit-card.active { border-left-color: var(--success); background: #f0fdf4; }
    .fruit-card p { font-size: 9px; font-weight: 700; color: var(--text-light); margin: 0; }
    .fruit-card span { font-size: 11px; font-weight: 600; display: flex; align-items: center; gap: 4px; margin-top: 2px; }

    /* FAQ */
    .faq-section { margin-top: 40px; }
    .faq-card { margin-bottom: 12px; padding: 18px; background: #ffffff; border: 1px solid #e2e8f0; border-radius: 12px; }
    .faq-card strong { display: block; color: var(--text-dark); margin-bottom: 5px; font-size: 14px; font-weight: 700; }
    .faq-card p { margin: 0; color: var(--text-light); font-size: 13px; line-height: 1.5; }

    .icon-svg { width: 14px; height: 14px; vertical-align: middle; }
    .icon-success { color: var(--success); }
    .icon-fail { color: #ef4444; }

    @media (max-width: 768px) {
        .input-grid, .stats-grid, .fruitful-grid { grid-template-columns: 1fr; }
        .btn-container { flex-direction: column; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;div class=&quot;otechy-badge&quot;&gt;Gratuity Toolkit&lt;/div&gt;
        &lt;h1&gt;Premium Gratuity Auditor &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Audit your statutory settlement against Payment of Gratuity Act and India Tax limits.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Monthly Basic + DA&lt;/label&gt;
                &lt;div class=&quot;input-with-icon&quot;&gt;
                    &lt;svg class=&quot;rupee-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;
                    &lt;input type=&quot;text&quot; id=&quot;salary&quot; placeholder=&quot;50,000&quot; oninput=&quot;formatInput(this)&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Total Monthly CTC&lt;/label&gt;
                &lt;div class=&quot;input-with-icon&quot;&gt;
                    &lt;svg class=&quot;rupee-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;
                    &lt;input type=&quot;text&quot; id=&quot;ctc&quot; placeholder=&quot;1,00,000&quot; oninput=&quot;formatInput(this)&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Completed Years&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;years&quot; placeholder=&quot;0&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Months (Current Yr)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;months&quot; placeholder=&quot;0&quot; max=&quot;11&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot; style=&quot;grid-column: 1 / -1;&quot;&gt;
                &lt;label&gt;Employment Category&lt;/label&gt;
                &lt;select id=&quot;type&quot; onchange=&quot;calculateGratuity()&quot;&gt;
                    &lt;option value=&quot;covered&quot;&gt;Private (Covered under Act)&lt;/option&gt;
                    &lt;option value=&quot;govt&quot;&gt;Central / State Govt Staff&lt;/option&gt;
                    &lt;option value=&quot;fixed&quot;&gt;Fixed-Term / Contract (1yr Rule)&lt;/option&gt;
                    &lt;option value=&quot;notcovered&quot;&gt;Establishment Not Covered&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;btn-container&quot;&gt;
            &lt;button class=&quot;otechy-btn&quot; onclick=&quot;calculateGratuity()&quot;&gt;Audit My Settlement&lt;/button&gt;
            &lt;button class=&quot;otechy-btn secondary&quot; id=&quot;pdf-btn&quot; style=&quot;display:none;&quot; onclick=&quot;downloadPDF()&quot;&gt;Export Audit Report&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;result-box&quot; class=&quot;result-container&quot;&gt;
        &lt;div class=&quot;stats-grid&quot;&gt;
            &lt;div class=&quot;stat-item&quot;&gt;
                &lt;span class=&quot;val-txt&quot; id=&quot;res-total&quot;&gt;0&lt;/span&gt;
                &lt;p&gt;Total Gratuity&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-item&quot;&gt;
                &lt;span class=&quot;val-txt&quot; id=&quot;res-taxfree&quot; style=&quot;color: var(--success);&quot;&gt;0&lt;/span&gt;
                &lt;p&gt;Tax-Free Portion&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-item&quot;&gt;
                &lt;span class=&quot;val-txt&quot; id=&quot;res-taxable&quot; style=&quot;color: #ef4444;&quot;&gt;0&lt;/span&gt;
                &lt;p&gt;Taxable Portion&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;fruitful-box&quot;&gt;
            &lt;p class=&quot;sub-title-logic&quot;&gt;Statutory Compliance Audit&lt;/p&gt;
            &lt;div id=&quot;fruitful-content&quot; class=&quot;fruitful-grid&quot;&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-1&quot;&gt;&lt;p&gt;1-Year Rule (FTE)&lt;/p&gt;&lt;span id=&quot;m1-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-2&quot;&gt;&lt;p&gt;5-Year Rule (Reg)&lt;/p&gt;&lt;span id=&quot;m2-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-3&quot;&gt;&lt;p&gt;Wage Audit (50%)&lt;/p&gt;&lt;span id=&quot;m3-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-4&quot;&gt;&lt;p&gt;Tax Limit Check&lt;/p&gt;&lt;span id=&quot;m4-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 style=&quot;font-size: 22px; color: var(--text-dark); font-weight: 700; text-align:center;&quot;&gt;Settlement &amp; Policy FAQs&lt;/h2&gt;
        &lt;div id=&quot;faq-container&quot; style=&quot;margin-top: 30px;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const faqs = [
        [&quot;Can I get gratuity if I resign after 4 years and 8 months?&quot;, &quot;Yes. Most labor courts and latest judicial precedents suggest that service exceeding 240 days in the 5th year qualifies for full gratuity, effectively making the threshold 4.6 years.&quot;],
        [&quot;What happens if my company merges with another?&quot;, &quot;Your service remains &#39;continuous.&#39; The new entity inherits the gratuity liability for your entire tenure from original joining date.&quot;],
        [&quot;Does maternity leave count towards service years?&quot;, &quot;Absolutely. Statutory periods of leave, including maternity leave, are considered part of continuous service for gratuity calculations.&quot;],
        [&quot;Is it true that fixed-term contractors get gratuity in 1 year?&quot;, &quot;Yes, under the Social Security Code 2020, fixed-term employees are eligible for pro-rata gratuity if they complete just one year of their contract.&quot;],
        [&quot;Can gratuity be paid if the employee dies in the 2nd year?&quot;, &quot;Yes. In event of death or permanent disablement, the 5-year minimum service rule is strictly waived, and payout is made to nominees immediately.&quot;],
        [&quot;How does the &#39;50% Wage Rule&#39; affect my payout?&quot;, &quot;New rules mandate that Basic Pay + DA must be at least 50% of your Gross CTC. Our auditor calculates based on this legal floor, potentially increasing your payout.&quot;],
        [&quot;Is gratuity taxable from two different employers?&quot;, &quot;The Rs. 20 Lakh tax-exemption is a lifetime cumulative limit. If you received Rs. 5 Lakh from a previous firm, only Rs. 15 Lakh remains tax-free for future settlements.&quot;],
        [&quot;Can my employer deduct notice period pay from gratuity?&quot;, &quot;No. Gratuity is a statutory right. Notice period recovery or other dues cannot be deducted from gratuity amount unless there is intentional damage to property.&quot;],
        [&quot;What is the 15/26 formula exactly?&quot;, &quot;It calculates 15 days of salary based on a 26-day working month. The formula is: (Basic + DA) x (15/26) x Completed Years.&quot;],
        [&quot;Is there interest on delayed gratuity payments?&quot;, &quot;Yes. Employers must pay gratuity within 30 days of exit. Beyond this, Simple Interest (usually 10%) is mandated by law.&quot;],
        [&quot;Do private school teachers get gratuity?&quot;, &quot;Yes, Supreme Court has confirmed that all employees of educational institutions, including teachers, are entitled to gratuity.&quot;],
        [&quot;Can gratuity be attached by a bank for loan recovery?&quot;, &quot;No. Under the Act, gratuity is legally protected and cannot be attached by any court decree for recovery of debts or loans.&quot;],
        [&quot;What if my organization has only 8 employees?&quot;, &quot;The Act applies to establishments with 10 or more employees. However, once establishment is covered, it remains covered even if headcount drops.&quot;],
        [&quot;Do I need to apply for gratuity?&quot;, &quot;You should formally submit &#39;Form I&#39; to your employer within 30 days of leaving to initiate statutory settlement process.&quot;],
        [&quot;Is DA included for private sector employees?&quot;, &quot;Yes, &#39;Wages&#39; for gratuity calculation strictly means Basic Salary + Dearness Allowance (DA). All other allowances are excluded.&quot;]
    ];

    const rupeeSVG = `&lt;svg class=&quot;icon-svg&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;3&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;`;
    const checkSVG = `&lt;svg class=&quot;icon-svg icon-success&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;3&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;`;
    const crossSVG = `&lt;svg class=&quot;icon-svg icon-fail&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;3&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;6&quot; x2=&quot;6&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; y1=&quot;6&quot; x2=&quot;18&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt;`;

    function formatInput(el) {
        let val = el.value.replace(/,/g, &#39;&#39;);
        if (!isNaN(val) &amp;&amp; val) el.value = Number(val).toLocaleString(&#39;en-IN&#39;);
    }

    function calculateGratuity() {
        let salary = parseFloat(document.getElementById(&#39;salary&#39;).value.replace(/,/g, &#39;&#39;)) || 0;
        let ctc = parseFloat(document.getElementById(&#39;ctc&#39;).value.replace(/,/g, &#39;&#39;)) || 0;
        let y = parseFloat(document.getElementById(&#39;years&#39;).value) || 0;
        let m = parseFloat(document.getElementById(&#39;months&#39;).value) || 0;
        let type = document.getElementById(&#39;type&#39;).value;

        if (salary &lt;= 0 || (y === 0 &amp;&amp; m === 0)) return;

        let wageOk = true;
        if (ctc &gt; 0 &amp;&amp; salary &lt; (ctc * 0.5)) { salary = ctc * 0.5; wageOk = false; }

        let rounded = (m &gt;= 6) ? y + 1 : y;
        let effective = y + (m / 12);
        let total = (type !== &#39;notcovered&#39;) ? (15/26) * salary * rounded : (15/30) * salary * effective;
        let limit = (type === &#39;govt&#39;) ? 2500000 : 2000000;
        let taxfree = Math.min(total, limit);
        let taxable = Math.max(0, total - limit);

        const f = v =&gt; Math.round(v).toLocaleString(&#39;en-IN&#39;);

        document.getElementById(&#39;res-total&#39;).innerHTML = rupeeSVG + f(total);
        document.getElementById(&#39;res-taxfree&#39;).innerHTML = rupeeSVG + f(taxfree);
        document.getElementById(&#39;res-taxable&#39;).innerHTML = rupeeSVG + f(taxable);

        updateUI(&#39;milestone-1&#39;, &#39;m1-span&#39;, effective &gt;= 1, &quot;Eligible&quot;, &quot;Ineligible&quot;);
        updateUI(&#39;milestone-2&#39;, &#39;m2-span&#39;, effective &gt;= 4.6, &quot;Eligible&quot;, (type === &#39;fixed&#39; ? &#39;N/A&#39; : &#39;Pending&#39;));
        updateUI(&#39;milestone-3&#39;, &#39;m3-span&#39;, wageOk, &quot;Compliant&quot;, &quot;Adjusted&quot;);
        updateUI(&#39;milestone-4&#39;, &#39;m4-span&#39;, total &lt;= limit, &quot;Safe&quot;, &quot;Taxable&quot;);

        document.getElementById(&#39;result-box&#39;).style.display = &#39;block&#39;;
        document.getElementById(&#39;pdf-btn&#39;).style.display = &#39;flex&#39;;
        window.auditData = { total, taxfree, taxable, tenure: `${y}y ${m}m`, type };
    }

    function updateUI(cardId, spanId, active, okMsg, failMsg) {
        const el = document.getElementById(cardId);
        const span = document.getElementById(spanId);
        el.className = active ? &quot;fruit-card active&quot; : &quot;fruit-card&quot;;
        span.innerHTML = (active ? checkSVG : crossSVG) + &quot; &quot; + (active ? okMsg : failMsg);
    }

    function downloadPDF() {
        const { jsPDF } = window.jspdf; let doc = new jsPDF();
        const f = v =&gt; &quot;Rs. &quot; + Math.round(v).toLocaleString(&#39;en-IN&#39;);
        doc.setFillColor(59, 130, 246); doc.rect(0, 0, 210, 40, &#39;F&#39;);
        doc.setTextColor(255); doc.setFontSize(22); doc.text(&quot;OTechy Gratuity Audit Pro&quot;, 20, 25);
        doc.autoTable({
            startY: 50, theme: &#39;striped&#39;,
            body: [
                [&quot;Employment Type&quot;, window.auditData.type.toUpperCase()],
                [&quot;Total Tenure&quot;, window.auditData.tenure],
                [&quot;Calculated Gratuity&quot;, f(window.auditData.total)],
                [&quot;Tax Exempt Amount&quot;, f(window.auditData.taxfree)],
                [&quot;Taxable Portion&quot;, f(window.auditData.taxable)]
            ]
        });
        doc.save(&quot;Gratuity_Report.pdf&quot;);
    }

    window.onload = () =&gt; {
        const container = document.getElementById(&#39;faq-container&#39;);
        faqs.forEach(q =&gt; {
            container.innerHTML += `&lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;${q[0]}&lt;/strong&gt;&lt;p&gt;${q[1]}&lt;/p&gt;&lt;/div&gt;`;
        });
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
    };
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5487723358189059572'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5487723358189059572'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/premium-gratuity-calculator.html' title='Premium Gratuity Calculator'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-3682772864662103961</id><published>2026-04-05T00:22:00.000-07:00</published><updated>2026-04-05T00:22:05.171-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SSY"/><category scheme="http://www.blogger.com/atom/ns#" term="Sukanya Samriddhi Yojana"/><title type='text'>Smart SSY Calculator: Sukanya Samriddhi Yojana Returns | OTechy</title><content type='html'>&lt;title&gt;Smart SSY Calculator: Sukanya Samriddhi Yojana Returns&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Calculate your daughter&#39;s future wealth with OTechy Smart SSY Calculator. Project 21-year maturity, 8.2% tax-free interest, and secure her education and marriage.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;SSY calculator, Sukanya Samriddhi Yojana calculator, SSY interest rate 2026, girl child investment India, tax free investment, SSY maturity calculator, OTechy finance&quot;&gt;

&lt;meta property=&quot;og:title&quot; content=&quot;Smart SSY Calculator | Secure Her Future - OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Plan your daughter&#39;s financial freedom. Calculate exact SSY maturity value and see power of compounding with 8.2% tax-free interest.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
&lt;meta property=&quot;og:url&quot; content=&quot;https://www.otechy.com/2026/01/smart-ssy-calculator.html&quot;&gt;

&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;Smart SSY Calculator: Plan Her Tax-Free Wealth&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;Find out exactly how much your SSY investment will grow over 21 years. Fast, accurate, and optimized for latest 8.2% interest rates.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* Premium Pink Colors Restored */
    :root { 
        --primary: #ec4899; 
        --primary-dark: #be185d; 
        --text-dark: #1e293b; 
        --accent: #64748b; 
        --border: #e2e8f0; 
        --soft-pink: #fdf2f8; 
        --success: #10b981; 
        --white: #ffffff; 
    }
    
    * { box-sizing: border-box; }
    .otechy-tool-wrapper { font-family: &#39;Poppins&#39;, sans-serif; max-width: 900px; margin: 0 auto; color: var(--text-dark); line-height: 1.6; padding: 60px 20px 20px; overflow-x: hidden; }
    .otechy-badge { display: table; margin: 0 auto 10px; background: var(--soft-pink); color: var(--primary-dark); padding: 6px 16px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #fbcfe8; }
    
    .tool-header { text-align: center; margin-bottom: 30px; }
    .tool-header h1 { font-size: clamp(22px, 5vw, 32px); color: var(--primary); font-weight: 850; margin: 0; letter-spacing: -0.5px;}
    .quick-value { color: var(--accent); font-weight: 500; font-size: 14px; margin-top: 8px; }
    
    /* Navigation Links */
    .tool-navigation { display: flex; justify-content: center; gap: 12px; margin-top: 25px; margin-bottom: 25px; flex-wrap: wrap; }
    .nav-link { display: inline-flex; align-items: center; gap: 6px; padding: 8px 18px; background-color: #fff; color: var(--text-dark); text-decoration: none; font-size: 13px; font-weight: 700; border-radius: 50px; border: 1px solid var(--border); transition: all 0.3s ease; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.02); }
    .nav-link:hover { background-color: var(--soft-pink); color: var(--primary-dark); border-color: var(--primary); transform: translateY(-2px); box-shadow: 0 6px 12px rgba(236, 72, 153, 0.15); }
    
    .otechy-card { background: #ffffff; padding: clamp(20px, 4vw, 35px); border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 4px 15px rgba(0,0,0,0.03); margin-bottom:30px;}
    
    .input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: end; }
    .input-group label { display: block; font-size: 11px; font-weight: 800; color: var(--accent); text-transform: uppercase; margin-bottom: 6px; letter-spacing: 0.5px; }
    .input-with-symbol { position: relative; display: flex; align-items: center; }
    .currency-symbol { position: absolute; left: 15px; font-weight: 700; color: var(--text-dark); }
    .input-with-symbol input { padding-left: 35px !important; }
    .input-group input, .input-group select { width: 100%; padding: 14px; border: 2px solid #cbd5e1; border-radius: 10px; font-size: 14px; font-family: &#39;Poppins&#39;, sans-serif; font-weight: 600; outline: none; transition: 0.2s; color: var(--text-dark); background:#fff;}
    .input-group input:focus, .input-group select:focus { border-color: var(--primary); box-shadow: 0 0 0 4px rgba(236, 72, 153, 0.1); }
    
    .result-container { display: none; padding: 25px; background: var(--soft-pink); border-radius: 12px; border-left: 6px solid var(--primary); margin-top: 25px; }
    .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; margin-bottom: 20px; }
    .stat-item { background: #fff; padding: 15px 10px; border-radius: 10px; text-align: center; border: 1px solid #fbcfe8; box-shadow: 0 2px 6px rgba(236, 72, 153, 0.05); }
    .stat-item .val-txt { font-weight: 850; color: var(--primary-dark); font-size: clamp(14px, 2.5vw, 18px); display: block; }
    .stat-item p { font-size: 10px; font-weight: 700; color: var(--accent); text-transform: uppercase; margin: 6px 0 0; }
    
    .wealth-visual { margin: 25px 0; }
    .bar-label { display: flex; justify-content: space-between; font-size: 12px; font-weight: 700; margin-bottom: 8px; color: var(--text-dark); }
    .bar-bg { background: #e2e8f0; height: 10px; border-radius: 50px; overflow: hidden; }
    .bar-fill { height: 100%; background: var(--success); width: 0%; transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1); }
    
    .action-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 25px; }
    .otechy-btn { background: var(--primary); color: #fff; border: none; padding: 15px; border-radius: 10px; font-weight: 700; font-size: 14px; cursor: pointer; transition: 0.3s; font-family: &#39;Poppins&#39;, sans-serif; display: flex; align-items: center; justify-content: center; gap: 8px;}
    .otechy-btn:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 4px 10px rgba(236, 72, 153, 0.2); }
    .otechy-btn.secondary { background: var(--text-dark); }
    .otechy-btn.secondary:hover { background: #000; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); }
    
    .hidden-ledger { display: none; }
    .table-scroll { overflow-x: auto; margin-top: 15px; border: 1px solid var(--border); border-radius: 10px; }
    table { width: 100%; border-collapse: collapse; background: #fff; font-size: 13px; min-width: 500px; }
    th { background: #f8fafc; padding: 14px 12px; text-align: left; border-bottom: 2px solid var(--border); color: var(--text-dark); font-weight: 700; }
    td { padding: 12px; border-bottom: 1px solid var(--border); color: var(--accent); }
    
    .geo-citation { background: #fff; padding: 25px; border-radius: 12px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0; border: 1px solid var(--border); box-shadow: 0 2px 10px rgba(0,0,0,0.02); }
    .section-h2 { font-size: clamp(18px, 4vw, 22px); font-weight: 850; margin-bottom: 20px; text-align: center; }
    
    /* New CSS Block for Rules and Scenarios */
    .rules-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 15px; margin-top: 20px; margin-bottom: 40px;}
    .rule-box { background: #fff; border-left: 4px solid var(--primary); padding: 20px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.04); border-top: 1px solid var(--border); border-right: 1px solid var(--border); border-bottom: 1px solid var(--border); transition: transform 0.2s;}
    .rule-box:hover { transform: translateY(-2px); }
    .rule-box h4 { margin: 0 0 8px 0; color: var(--text-dark); font-size: 15px; font-weight: 800; display: flex; align-items: center; gap: 8px;}
    .rule-box p { margin: 0; font-size: 13px; color: var(--accent); line-height: 1.5; }
    .rule-icon { color: var(--primary); font-size: 16px; }

    .how-to-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; margin-bottom: 40px;}
    .step-card { display: flex; align-items: flex-start; gap: 15px; background: #fff; border: 1px solid var(--border); padding: 20px; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.02); }
    .step-icon { width: 28px; height: 28px; background: var(--soft-pink); color: var(--primary); border: 1px solid #fbcfe8; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 850; flex-shrink: 0; font-size: 12px; }
    .step-card p { margin: 0; font-size: 13px; color: var(--accent); }
    .step-card strong { color: var(--text-dark); display: block; margin-bottom: 4px; }
    
    .faq-container { display: grid; grid-template-columns: 1fr; gap: 15px; margin-top: 25px; }
    .faq-card { background: #fff; padding: 20px; border-radius: 12px; border: 1px solid var(--border); font-size: 13px; color: var(--accent); box-shadow: 0 2px 8px rgba(0,0,0,0.02); }
    .faq-card strong { font-size: 15px; color: var(--text-dark); display: block; margin-bottom: 8px; font-weight: 700; }
    
    .svg-alert { background: #fffbeb; color: #92400e; padding: 12px 15px; border-radius: 8px; border: 1px solid #fde68a; font-size: 12px; margin-top: 15px; font-weight: 600; display:none;}
    .detailed-stats { display: flex; justify-content: space-between; font-size: 12px; color: var(--accent); margin-top: 20px; border-top: 1px solid #fbcfe8; padding-top: 15px; font-weight: 500; }
    
    /* Ads CSS */
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; background: #f1f5f9; border-radius: 10px; border: 2px dashed #cbd5e1; width: 100%; box-sizing: border-box; overflow: hidden; text-align: center;}

    /* Mobile Overrides */
    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 30px 15px 20px; }
        .otechy-card { padding: 20px; }
        .input-grid { grid-template-columns: 1fr; gap: 15px; }
        .action-grid { grid-template-columns: 1fr; gap: 12px; }
        
        .stats-grid { grid-template-columns: 1fr !important; gap: 10px; }
        .stat-item { 
            display: flex; 
            flex-direction: row-reverse; 
            justify-content: space-between; 
            align-items: center; 
            text-align: left; 
            padding: 15px 20px; 
            gap: 15px;
        }
        .stat-item p { margin: 0; font-size: 13px; }
        .stat-item .val-txt { font-size: 16px; text-align: right; }
        
        .detailed-stats { flex-direction: column; align-items: center; gap: 10px; text-align: center; }
        .how-to-steps, .rules-container { grid-template-columns: 1fr; }
        .tool-navigation { gap: 8px; }
        .nav-link { padding: 6px 14px; font-size: 12px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;otechy-badge&quot;&gt;Girl Child Finance Kit &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;

    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;Smart SSY Planner 👧&lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Calculate exact 21-year maturity value and tax-free interest for Sukanya Samriddhi Yojana.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;tool-navigation&quot;&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?find=ppf&quot; class=&quot;nav-link&quot;&gt;📈 PPF Calculator&lt;/a&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?find=education+loan&quot; class=&quot;nav-link&quot;&gt;🎓 Education Loan&lt;/a&gt;
        &lt;a href=&quot;https://www.otechy.com/p/financial-calculators.html&quot; class=&quot;nav-link&quot;&gt;🧮 All Finance Tools&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Yearly Deposit (Max ₹1.5L)&lt;/label&gt;
                &lt;div class=&quot;input-with-symbol&quot;&gt;
                    &lt;span class=&quot;currency-symbol&quot;&gt;₹&lt;/span&gt;
                    &lt;input type=&quot;text&quot; id=&quot;ssy-yearly&quot; placeholder=&quot;1,50,000&quot; oninput=&quot;formatInput(this)&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Girl Child&#39;s Age (Max 10 Years)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;ssy-age&quot; value=&quot;1&quot; min=&quot;0&quot; max=&quot;10&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot; style=&quot;grid-column: 1 / -1;&quot;&gt;
                &lt;label&gt;Account Opening Year&lt;/label&gt;
                &lt;select id=&quot;ssy-start-year&quot;&gt;&lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-top: 10px; margin-bottom: 30px;&quot;&gt;
            &lt;button class=&quot;otechy-btn&quot; style=&quot;width: 100%;&quot; onclick=&quot;calculateSSY()&quot;&gt;
                &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;
                Calculate Maturity Returns
            &lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;ssy-alert&quot; class=&quot;svg-alert&quot;&gt;
            &lt;span id=&quot;alert-text&quot;&gt;&lt;/span&gt;
        &lt;/div&gt;

        &lt;div id=&quot;ssy-result-box&quot; class=&quot;result-container&quot;&gt;
            &lt;div class=&quot;stats-grid&quot;&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;val-txt&quot;&gt;₹&lt;span id=&quot;res-invested&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
                    &lt;p&gt;Total Invested&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;val-txt&quot; style=&quot;color:var(--success);&quot;&gt;+ ₹&lt;span id=&quot;res-interest&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
                    &lt;p&gt;Wealth Gained (8.2%)&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;val-txt&quot;&gt;₹&lt;span id=&quot;res-maturity&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
                    &lt;p&gt;Maturity Value&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;wealth-visual&quot;&gt;
                &lt;div class=&quot;bar-label&quot;&gt;&lt;span&gt;Compounding Growth Ratio&lt;/span&gt;&lt;span id=&quot;label-interest-ratio&quot;&gt;0%&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;bar-bg&quot;&gt;&lt;div id=&quot;bar-ssy&quot; class=&quot;bar-fill&quot;&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;detailed-stats&quot;&gt;
                &lt;p&gt;&lt;strong&gt;Maturity Year:&lt;/strong&gt; &lt;span id=&quot;maturity-year-val&quot;&gt;-&lt;/span&gt; (Age &lt;span id=&quot;maturity-age-val&quot;&gt;-&lt;/span&gt;)&lt;/p&gt;
                &lt;p&gt;Status: &lt;strong style=&quot;color:var(--success);&quot;&gt;100% Tax-Free (EEE)&lt;/strong&gt;&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;action-grid&quot;&gt;
            &lt;button class=&quot;otechy-btn&quot; onclick=&quot;generateSSYPDF()&quot;&gt;Save Audit PDF&lt;/button&gt;
            &lt;button class=&quot;otechy-btn secondary&quot; id=&quot;toggle-ledger&quot; onclick=&quot;toggleAmortization()&quot;&gt;View Detailed Report&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;amort-section&quot; class=&quot;hidden-ledger&quot;&gt;
            &lt;h3 style=&quot;font-size: 16px; margin: 25px 0 10px; color: #1e293b;&quot;&gt;21-Year SSY Growth Ledger&lt;/h3&gt;
            &lt;div class=&quot;table-scroll&quot;&gt;
                &lt;table id=&quot;amort-table&quot;&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;&lt;th&gt;Year&lt;/th&gt;&lt;th&gt;Child&#39;s Age&lt;/th&gt;&lt;th&gt;Annual Deposit&lt;/th&gt;&lt;th&gt;Interest (8.2%)&lt;/th&gt;&lt;th&gt;Closing Balance&lt;/th&gt;&lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody id=&quot;amort-body&quot;&gt;&lt;/tbody&gt;
                &lt;/table&gt;
            &lt;/div&gt;
            &lt;p style=&quot;font-size: 11px; color: var(--accent); margin-top: 10px;&quot;&gt;*Note: Deposits are required only for first 15 years. Interest continues to compound until maturity at 21 years.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;section&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;SSY Scheme Rules &amp; Conditions&lt;/h2&gt;
        &lt;div class=&quot;rules-container&quot;&gt;
            &lt;div class=&quot;rule-box&quot;&gt;
                &lt;h4&gt;&lt;span class=&quot;rule-icon&quot;&gt;👶&lt;/span&gt; Eligibility Criteria&lt;/h4&gt;
                &lt;p&gt;Parents or legal guardians can open an account for a girl child aged under 10 years. Maximum two accounts per family are permitted.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-box&quot;&gt;
                &lt;h4&gt;&lt;span class=&quot;rule-icon&quot;&gt;💰&lt;/span&gt; Deposit Limits&lt;/h4&gt;
                &lt;p&gt;Minimum annual deposit is ₹250. Maximum allowable deposit is ₹1.5 Lakh per financial year. Excess deposits earn zero interest.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-box&quot;&gt;
                &lt;h4&gt;&lt;span class=&quot;rule-icon&quot;&gt;⏳&lt;/span&gt; Lock-In Period&lt;/h4&gt;
                &lt;p&gt;Deposits must be made for 15 consecutive years. Account reaches full maturity 21 years after opening date.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-box&quot;&gt;
                &lt;h4&gt;&lt;span class=&quot;rule-icon&quot;&gt;🎓&lt;/span&gt; Early Withdrawal&lt;/h4&gt;
                &lt;p&gt;Up to 50% of balance can be withdrawn for higher education once she turns 18 or passes 10th standard.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-box&quot;&gt;
                &lt;h4&gt;&lt;span class=&quot;rule-icon&quot;&gt;💍&lt;/span&gt; Marriage Closure&lt;/h4&gt;
                &lt;p&gt;Account can be closed prematurely if she marries after attaining 18 years of age. Full amount is paid out.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-box&quot;&gt;
                &lt;h4&gt;&lt;span class=&quot;rule-icon&quot;&gt;🛡️&lt;/span&gt; Tax Benefits (EEE)&lt;/h4&gt;
                &lt;p&gt;Deposits qualify for 80C deductions. Accrued interest and final maturity amount are completely exempt from income tax.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        Sukanya Samriddhi Yojana (SSY) is a government-backed savings scheme in Bharat designed to secure education and marriage of a girl child. OTechy&#39;s SSY Planner applies exact 15-year deposit window and 21-year maturity horizon with latest 8.2% tax-free interest rate to provide institutional-grade accuracy.
    &lt;/div&gt;

    &lt;section class=&quot;how-to-section&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;How SSY Calculator Works&lt;/h2&gt;
        &lt;div class=&quot;how-to-steps&quot;&gt;
            &lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;step-icon&quot;&gt;1&lt;/div&gt;&lt;p&gt;&lt;strong&gt;15-Year Horizon:&lt;/strong&gt; You only deposit money for first 15 years. Our calculator automatically stops adding deposits in Year 16.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;step-icon&quot;&gt;2&lt;/div&gt;&lt;p&gt;&lt;strong&gt;21-Year Horizon:&lt;/strong&gt; Although you stop paying after 15 years, account continues to earn compound interest until it matures after 21 years.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;step-icon&quot;&gt;3&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Max Cap Enforcement:&lt;/strong&gt; If you enter an amount higher than ₹1.5 Lakh, our tool automatically adjusts it down to match Indian tax law limits.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

&lt;section class=&quot;seo-content-area&quot; style=&quot;margin-top: 50px;&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;Sukanya Samriddhi Yojana (SSY) FAQs&lt;/h2&gt;
        &lt;div class=&quot;faq-container&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What is Sukanya Samriddhi Yojana (SSY) and why was it introduced?&lt;/strong&gt; Sukanya Samriddhi Yojana stands as a government-backed savings scheme exclusively created for girl children. It aims to encourage parents to build a fund for future education and marriage expenses of their daughters.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Who is eligible to open an SSY account?&lt;/strong&gt; Biological parents or legal guardians can open this account on behalf of a girl child. This child must be an Indian resident and under ten years old at account opening.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What is maximum age limit to open this account?&lt;/strong&gt; A girl child must not have crossed her tenth birthday to be eligible. You can open it anytime from her birth until she completes ten years of age.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;How many accounts can a family open?&lt;/strong&gt; A family can open a maximum of two accounts, strictly one for each daughter. Exceptions exist only if a family has twin or triplet girls during a second birth.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What happens if a family has twin girls?&lt;/strong&gt; In cases involving twin or triplet daughters, authorities allow opening more than two accounts. You must provide medical certificates to prove multiple births to avail this exception.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What is minimum annual deposit required to keep an account active?&lt;/strong&gt; You must deposit at least ₹250 every financial year to maintain an active status. Failure to make this minimum payment results in an inactive or defaulted account state.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What is maximum annual deposit allowed in an SSY account?&lt;/strong&gt; Government rules cap maximum deposits at ₹1.5 Lakh per financial year. Any amount deposited beyond this limit will not earn interest and does not qualify for tax deductions.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What occurs if I miss making my yearly minimum deposit?&lt;/strong&gt; Missing a yearly payment turns your account into a defaulted state. You can revive it by paying a ₹50 penalty for each defaulted year, along with all pending minimum deposits.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;For how many years must I deposit money?&lt;/strong&gt; You are required to make deposits for exactly fifteen years from your account opening date. After fifteen years, you stop paying, but your corpus continues earning interest.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;When does an SSY account reach full maturity?&lt;/strong&gt; Full maturity occurs exactly twenty-one years after your account opening date. It does not depend on your daughter reaching twenty-one years of age.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What is current interest rate offered on SSY?&lt;/strong&gt; As of recent updates, this scheme offers a highly attractive 8.2% annual interest rate. Officials review and compound this interest yearly, adding it directly to your principal balance.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Are there any tax benefits associated with SSY deposits?&lt;/strong&gt; Yes, deposits qualify for tax deductions under Section 80C of Indian Income Tax Act. You can claim deductions up to ₹1.5 Lakh every financial year to reduce taxable income.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Is interest earned subject to income tax?&lt;/strong&gt; No, interest earned remains completely exempt from income tax. This scheme falls under an Exempt-Exempt-Exempt (EEE) category, ensuring totally tax-free returns.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Is final maturity amount taxable?&lt;/strong&gt; Final maturity proceeds are entirely tax-free. When you withdraw total corpus after twenty-one years, you owe zero taxes to income tax authorities.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Can I withdraw funds for my daughter&#39;s education?&lt;/strong&gt; Yes, you can withdraw up to fifty percent of your previous year&#39;s closing balance. This withdrawal becomes available only after she turns eighteen or completes her tenth standard education.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Are premature closures allowed for marriage?&lt;/strong&gt; You can prematurely close an account if your daughter intends to marry after turning eighteen. You must submit a wedding application within one month before or three months after her marriage.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Can Non-Resident Indians (NRIs) open an SSY account?&lt;/strong&gt; No, NRIs do not hold eligibility to open new accounts under this scheme. Only resident Indian citizens can initiate and maintain these specific girl child savings plans.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What if our citizenship changes to NRI after opening?&lt;/strong&gt; If a girl child becomes an NRI, you must inform your bank or post office within one month. Authorities will close her account and return accumulated funds without further SSY interest.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Can I transfer this account to another city or bank?&lt;/strong&gt; Yes, transferability is fully supported across India. You can shift an account from a post office to an authorized bank, or between different bank branches without any hassle.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Who operates an account in its early years?&lt;/strong&gt; A designated parent or legal guardian handles all operations initially. This guardian holds responsibility for making deposits and managing records during her childhood.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;When can a girl child operate her own account?&lt;/strong&gt; Once she reaches eighteen years of age, she can take full independent control. She must submit necessary KYC documents to her bank to authorize this operational transition.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Are loans available against an SSY balance?&lt;/strong&gt; Unlike Public Provident Fund accounts, Sukanya Samriddhi Yojana does not offer loan facilities. You cannot pledge this corpus as collateral to secure any personal or educational loans.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Can grandparents open an account for their granddaughter?&lt;/strong&gt; Grandparents cannot open this account unless they hold official legal guardianship of said child. Normally, only biological parents hold authorization to act as primary depositors.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;Can I make online deposits into an SSY account?&lt;/strong&gt; Yes, most authorized banks and post offices support digital transfers. You can easily set up standing instructions or use digital payment apps to ensure timely yearly investments.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;What happens if account holder passes away?&lt;/strong&gt; In unfortunate cases of death, authorities will immediately close said account. They will hand over total accumulated balance plus interest to her parent or registered legal guardian.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    let auditData = { rows: [], summary: {} };

    function formatInput(el) {
        let val = el.value.replace(/,/g, &#39;&#39;);
        if (!isNaN(val) &amp;&amp; val.length &gt; 0) {
            el.value = Number(val).toLocaleString(&#39;en-IN&#39;);
        }
    }

    function populateYears() {
        const select = document.getElementById(&#39;ssy-start-year&#39;);
        const thisYear = new Date().getFullYear();
        for (let i = thisYear; i &gt;= thisYear - 10; i--) {
            let option = document.createElement(&#39;option&#39;);
            option.value = i;
            option.text = i;
            select.appendChild(option);
        }
    }

    function calculateSSY() {
        let depositInput = parseFloat(document.getElementById(&#39;ssy-yearly&#39;).value.replace(/,/g, &#39;&#39;)) || 0;
        let ageInput = parseInt(document.getElementById(&#39;ssy-age&#39;).value) || 0;
        const startYear = parseInt(document.getElementById(&#39;ssy-start-year&#39;).value);
        const rate = 8.2; 
        const maxAge = 10;
        const depositYears = 15;
        const maturityYears = 21;
        const cap = 150000;

        const alertBox = document.getElementById(&#39;ssy-alert&#39;);
        const alertText = document.getElementById(&#39;alert-text&#39;);
        
        if (depositInput &lt;= 0) return;

        let alertMsg = &quot;&quot;;
        if (ageInput &gt; maxAge) {
            ageInput = maxAge;
            document.getElementById(&#39;ssy-age&#39;).value = maxAge;
            alertMsg += &quot;Age capped at 10 years (Scheme Rules). &quot;;
        }
        
        if (depositInput &gt; cap) {
            depositInput = cap;
            document.getElementById(&#39;ssy-yearly&#39;).value = &quot;1,50,000&quot;;
            alertMsg += `Deposit capped at ₹1.5 Lakh. `;
        }

        if (alertMsg !== &quot;&quot;) {
            alertBox.style.display = &#39;block&#39;;
            alertText.textContent = &quot;Note: &quot; + alertMsg;
        } else {
            alertBox.style.display = &#39;none&#39;;
        }

        let balance = 0;
        let totalInvested = 0;
        let totalInterest = 0;
        let rows = [];

        const f = (v) =&gt; Math.round(v).toLocaleString(&#39;en-IN&#39;);

        for (let y = 1; y &lt;= maturityYears; y++) {
            let currentYear = startYear + y - 1;
            let currentAge = ageInput + y - 1;
            
            // Only add deposit for first 15 years
            let currentDeposit = (y &lt;= depositYears) ? depositInput : 0;
            
            // Calculate interest on opening balance + current deposit
            let interestEarningPrincipal = balance + currentDeposit;
            let interestEarned = interestEarningPrincipal * (rate / 100);

            balance += currentDeposit + interestEarned;
            totalInvested += currentDeposit;
            totalInterest += interestEarned;

            // FIXED FOR PDF: Using &quot;Rs.&quot; instead of rupee symbol so PDF exports perfectly without encoding errors.
            rows.push([
                currentYear,
                currentAge,
                &quot;Rs. &quot; + f(currentDeposit),
                &quot;Rs. &quot; + f(interestEarned),
                &quot;Rs. &quot; + f(balance)
            ]);
        }

        const maturityYear = startYear + maturityYears;
        const maturityAge = ageInput + maturityYears;

        document.getElementById(&#39;res-invested&#39;).innerText = f(totalInvested);
        document.getElementById(&#39;res-interest&#39;).innerText = f(totalInterest);
        document.getElementById(&#39;res-maturity&#39;).innerText = f(balance);
        document.getElementById(&#39;maturity-year-val&#39;).innerText = maturityYear;
        document.getElementById(&#39;maturity-age-val&#39;).innerText = maturityAge;

        const ratio = (totalInterest / balance) * 100;
        document.getElementById(&#39;label-interest-ratio&#39;).innerText = Math.round(ratio) + &quot;% Wealth Gain&quot;;
        
        setTimeout(() =&gt; { document.getElementById(&#39;bar-ssy&#39;).style.width = ratio + &quot;%&quot;; }, 100);

        document.getElementById(&#39;ssy-result-box&#39;).style.display = &#39;block&#39;;

        const tbody = document.getElementById(&#39;amort-body&#39;);
        tbody.innerHTML = rows.map((r, i) =&gt; {
            let rowStyle = (i &gt;= 15) ? &quot;background-color: #f8fafc;&quot; : &quot;&quot;;
            // Replace &quot;Rs.&quot; back to rupee symbol for HTML display so UI still looks great
            let htmlDeposit = r[2].replace(&#39;Rs.&#39;, &#39;₹&#39;);
            let htmlInterest = r[3].replace(&#39;Rs.&#39;, &#39;₹&#39;);
            let htmlBalance = r[4].replace(&#39;Rs.&#39;, &#39;₹&#39;);
            
            let depositTxt = (i &gt;= 15) ? `&lt;span style=&quot;color:var(--accent);&quot;&gt;₹ 0 (Lock Phase)&lt;/span&gt;` : `&lt;strong&gt;${htmlDeposit}&lt;/strong&gt;`;
            return `&lt;tr style=&quot;${rowStyle}&quot;&gt;&lt;td&gt;${r[0]}&lt;/td&gt;&lt;td&gt;${r[1]} yrs&lt;/td&gt;&lt;td&gt;${depositTxt}&lt;/td&gt;&lt;td&gt;${htmlInterest}&lt;/td&gt;&lt;td&gt;&lt;strong&gt;${htmlBalance}&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;`;
        }).join(&#39;&#39;);

        auditData = {
            rows,
            summary: { depositInput, totalInvested, totalInterest, balance, maturityYear, maturityAge, rate }
        };
    }

    function toggleAmortization() {
        const sec = document.getElementById(&#39;amort-section&#39;);
        const btn = document.getElementById(&#39;toggle-ledger&#39;);
        const isHidden = sec.style.display === &#39;none&#39; || sec.style.display === &#39;&#39;;
        sec.style.display = isHidden ? &#39;block&#39; : &#39;none&#39;;
        btn.innerText = isHidden ? &#39;Hide Detailed Report&#39; : &#39;View Detailed Report&#39;;
    }

    function generateSSYPDF() {
        if (auditData.rows.length === 0) return;
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();

        doc.setFillColor(236, 72, 153); doc.rect(0, 0, 210, 40, &#39;F&#39;);
        doc.setTextColor(255); doc.setFontSize(22); doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;OTechy Finance Audit Pro&quot;, 20, 25);
        doc.setFontSize(10); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(&quot;Sukanya Samriddhi Yojana (SSY) Maturity Report&quot;, 20, 32);

        doc.setTextColor(30, 41, 59); doc.setFontSize(13); doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;Executive Summary&quot;, 20, 55);
        doc.setFontSize(10); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`Projected Maturity: Rs. ${Math.round(auditData.summary.balance).toLocaleString(&#39;en-IN&#39;)}`, 20, 65);
        doc.text(`Total Invested: Rs. ${Math.round(auditData.summary.totalInvested).toLocaleString(&#39;en-IN&#39;)}`, 20, 72);
        doc.text(`Maturity Year: ${auditData.summary.maturityYear} (Daughter&#39;s Age: ${auditData.summary.maturityAge})`, 20, 79);
        doc.text(`Interest Rate Applied: ${auditData.summary.rate}% (Tax Free)`, 20, 86);

        doc.autoTable({
            startY: 95,
            head: [[&#39;Year&#39;, &#39;Age&#39;, &#39;Annual Deposit&#39;, &#39;Interest Earned&#39;, &#39;Closing Balance&#39;]],
            body: auditData.rows,
            theme: &#39;striped&#39;,
            headStyles: { fillColor: [236, 72, 153], fontSize: 9 }, // Pink header
            styles: { fontSize: 8 }
        });

        const pageCount = doc.internal.getNumberOfPages();
        for (let i = 1; i &lt;= pageCount; i++) {
            doc.setPage(i);
            const pHeight = doc.internal.pageSize.height;
            doc.setFillColor(253, 242, 248); doc.rect(0, pHeight - 20, 210, 20, &#39;F&#39;);
            doc.setFontSize(8); doc.setTextColor(100, 116, 139);
            doc.text(&quot;Generated by OTechy.com - Your Digital Toolkit&quot;, 20, pHeight - 12);
            doc.text(&quot;Disclaimer: Based on Govt. of India 8.2% fixed rate logic. Page &quot; + i, 20, pHeight - 6);
        }
        doc.save(`SSY_Plan_OTechy_${Date.now()}.pdf`);
    }

    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
        populateYears();
    });
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/3682772864662103961'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/3682772864662103961'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/smart-ssy-calculator-sukanya-samriddhi.html' title='Smart SSY Calculator: Sukanya Samriddhi Yojana Returns | OTechy'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-7950394497491267945</id><published>2026-04-05T00:03:00.000-07:00</published><updated>2026-04-05T10:32:05.715-07:00</updated><title type='text'>test</title><content type='html'>&lt;title&gt;Premium Gratuity Calculator: Private, Govt &amp; Contractual | OTechy&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Audit your gratuity under 2026 New Labour Codes. Features 1-year rule for contractors, 50% wage rule, and tax-free limit checks for Private &amp; Govt staff.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    :root { --primary: #3b82f6; --text-dark: #1e293b; --text-light: #64748b; --card-radius: 16px; --success: #10b981; }
    
    * { box-sizing: border-box; }
    .otechy-tool-wrapper { font-family: &#39;Poppins&#39;, sans-serif; max-width: 900px; margin: 0 auto; color: var(--text-dark); line-height: 1.6; padding: 80px 20px 20px; }
    
    /* Header Styling */
    .tool-header { text-align: center; margin-bottom: 30px; }
    .otechy-badge { display: inline-block; background: #eff6ff; color: var(--primary); padding: 6px 18px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; margin-bottom: 12px; border: 1px solid #dbeafe; }
    .tool-header h1 { font-size: clamp(22px, 5vw, 28px); color: var(--primary); font-weight: 850; margin: 0; }
    .quick-value { color: var(--text-light); font-weight: 500; font-size: 14px; margin-top: 8px; }
    
    /* Input Card */
    .otechy-card { background: #ffffff; padding: 25px; border-radius: var(--card-radius); border: 1px solid #000; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; align-items: end; }
    .input-group label { display: block; font-weight: 700; font-size: 11px; text-transform: uppercase; color: var(--text-light); margin-bottom: 8px; letter-spacing: 0.5px; }
    
    /* Input with SVG Rupee Icon */
    .input-with-icon { position: relative; display: flex; align-items: center; }
    .rupee-icon { position: absolute; left: 12px; width: 14px; height: 14px; color: var(--text-dark); pointer-events: none; }
    .input-group input, .input-group select { width: 100%; padding: 12px; border: 2px solid #cbd5e1; border-radius: 10px; font-size: 14px; font-family: &#39;Poppins&#39;; outline: none; transition: 0.2s; }
    .input-with-icon input { padding-left: 35px !important; }
    .input-group input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); }

    /* Buttons */
    .btn-container { display: flex; gap: 10px; margin-top: 20px; }
    .otechy-btn { flex: 1; background: var(--primary); color: white; border: none; padding: 14px; border-radius: 10px; font-size: 14px; font-weight: 700; cursor: pointer; transition: 0.3s; }
    .otechy-btn:hover { background: #2563eb; transform: translateY(-1px); }
    .otechy-btn.secondary { background: #64748b; }

    /* Results Area */
    .result-container { display: none; padding: 25px; background: #f8fbff; border-radius: 12px; border: 1px solid #e2e8f0; border-left: 6px solid var(--primary); margin-top: 30px; }
    
    /* Stats Grid */
    .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 20px 0; }
    .stat-item { background: white; padding: 15px 5px; border-radius: 12px; border: 1px solid #e2e8f0; text-align: center; }
    .stat-item span.val-txt { font-weight: 850; color: var(--primary); font-size: 16px; display: flex; align-items: center; justify-content: center; gap: 4px; }
    .stat-item p { font-size: 9px; color: var(--text-light); text-transform: uppercase; margin-top: 4px; font-weight: 700; }

    /* Policy Grid */
    .fruitful-box { background: white; border-radius: 12px; border: 1px solid #e2e8f0; padding: 15px; margin: 20px 0; }
    .sub-title-logic { font-size: 11px; font-weight: 800; color: var(--text-light); margin-bottom: 15px; letter-spacing: 0.5px; text-transform: uppercase; }
    .fruitful-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
    .fruit-card { padding: 10px; border-radius: 8px; background: #f8fafc; border-left: 3px solid #cbd5e1; }
    .fruit-card.active { border-left-color: var(--success); background: #f0fdf4; }
    .fruit-card p { font-size: 9px; font-weight: 700; color: var(--text-light); margin: 0; }
    .fruit-card span { font-size: 11px; font-weight: 600; display: flex; align-items: center; gap: 4px; margin-top: 2px; }

    /* FAQ */
    .faq-section { margin-top: 40px; }
    .faq-card { margin-bottom: 12px; padding: 18px; background: #ffffff; border: 1px solid #e2e8f0; border-radius: 12px; }
    .faq-card strong { display: block; color: var(--text-dark); margin-bottom: 5px; font-size: 14px; font-weight: 700; }
    .faq-card p { margin: 0; color: var(--text-light); font-size: 13px; line-height: 1.5; }

    /* SVG Style Classes */
    .icon-svg { width: 14px; height: 14px; vertical-align: middle; }
    .icon-success { color: var(--success); }
    .icon-fail { color: #ef4444; }

    @media (max-width: 768px) {
        .input-grid, .stats-grid, .fruitful-grid { grid-template-columns: 1fr; }
        .btn-container { flex-direction: column; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;div class=&quot;otechy-badge&quot;&gt;Workforce Settlement&lt;/div&gt;
        &lt;h1&gt;Premium Gratuity Auditor &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Audit your statutory settlement against Payment of Gratuity Act and India Tax limits.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Monthly Basic + DA&lt;/label&gt;
                &lt;div class=&quot;input-with-icon&quot;&gt;
                    &lt;svg class=&quot;rupee-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;
                    &lt;input type=&quot;text&quot; id=&quot;salary&quot; placeholder=&quot;50,000&quot; oninput=&quot;formatInput(this)&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Total Monthly CTC&lt;/label&gt;
                &lt;div class=&quot;input-with-icon&quot;&gt;
                    &lt;svg class=&quot;rupee-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;
                    &lt;input type=&quot;text&quot; id=&quot;ctc&quot; placeholder=&quot;1,00,000&quot; oninput=&quot;formatInput(this)&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Completed Years&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;years&quot; placeholder=&quot;0&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Months (Current Yr)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;months&quot; placeholder=&quot;0&quot; max=&quot;11&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot; style=&quot;grid-column: 1 / -1;&quot;&gt;
                &lt;label&gt;Employment Category&lt;/label&gt;
                &lt;select id=&quot;type&quot; onchange=&quot;calculateGratuity()&quot;&gt;
                    &lt;option value=&quot;covered&quot;&gt;Private (Covered under Act)&lt;/option&gt;
                    &lt;option value=&quot;govt&quot;&gt;Central / State Govt Staff&lt;/option&gt;
                    &lt;option value=&quot;fixed&quot;&gt;Fixed-Term / Contract (1yr Rule)&lt;/option&gt;
                    &lt;option value=&quot;notcovered&quot;&gt;Establishment Not Covered&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;btn-container&quot;&gt;
            &lt;button class=&quot;otechy-btn&quot; onclick=&quot;calculateGratuity()&quot;&gt;Audit My Settlement&lt;/button&gt;
            &lt;button class=&quot;otechy-btn secondary&quot; id=&quot;pdf-btn&quot; style=&quot;display:none;&quot; onclick=&quot;downloadPDF()&quot;&gt;Export Audit Report&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;result-box&quot; class=&quot;result-container&quot;&gt;
        &lt;div class=&quot;stats-grid&quot;&gt;
            &lt;div class=&quot;stat-item&quot;&gt;
                &lt;span class=&quot;val-txt&quot; id=&quot;res-total&quot;&gt;0&lt;/span&gt;
                &lt;p&gt;Total Gratuity&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-item&quot;&gt;
                &lt;span class=&quot;val-txt&quot; id=&quot;res-taxfree&quot; style=&quot;color: var(--success);&quot;&gt;0&lt;/span&gt;
                &lt;p&gt;Tax-Free Portion&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-item&quot;&gt;
                &lt;span class=&quot;val-txt&quot; id=&quot;res-taxable&quot; style=&quot;color: #ef4444;&quot;&gt;0&lt;/span&gt;
                &lt;p&gt;Taxable Portion&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;fruitful-box&quot;&gt;
            &lt;p class=&quot;sub-title-logic&quot;&gt;Statutory Compliance Audit&lt;/p&gt;
            &lt;div id=&quot;fruitful-content&quot; class=&quot;fruitful-grid&quot;&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-1&quot;&gt;&lt;p&gt;1-Year Rule (FTE)&lt;/p&gt;&lt;span id=&quot;m1-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-2&quot;&gt;&lt;p&gt;5-Year Rule (Reg)&lt;/p&gt;&lt;span id=&quot;m2-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-3&quot;&gt;&lt;p&gt;Wage Audit (50%)&lt;/p&gt;&lt;span id=&quot;m3-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;fruit-card&quot; id=&quot;milestone-4&quot;&gt;&lt;p&gt;Tax Limit Check&lt;/p&gt;&lt;span id=&quot;m4-span&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 style=&quot;font-size: 22px; color: var(--text-dark); font-weight: 700; text-align:center;&quot;&gt;Settlement &amp; Policy FAQs&lt;/h2&gt;
        &lt;div id=&quot;faq-container&quot; style=&quot;margin-top: 30px;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const faqs = [
        [&quot;Can I get gratuity if I resign after 4 years and 8 months?&quot;, &quot;Yes. Most labor courts and the latest judicial precedents suggest that service exceeding 240 days in the 5th year qualifies for full gratuity, effectively making the threshold 4.6 years.&quot;],
        [&quot;What happens if my company merges with another?&quot;, &quot;Your service remains &#39;continuous.&#39; The new entity inherits the gratuity liability for your entire tenure from the original joining date.&quot;],
        [&quot;Does maternity leave count towards service years?&quot;, &quot;Absolutely. Statutory periods of leave, including maternity leave, are considered part of continuous service for gratuity calculations.&quot;],
        [&quot;Is it true that fixed-term contractors get gratuity in 1 year?&quot;, &quot;Yes, under the Social Security Code 2020, fixed-term employees are eligible for pro-rata gratuity if they complete just one year of their contract.&quot;],
        [&quot;Can gratuity be paid to a nominee if the employee dies in the 2nd year?&quot;, &quot;Yes. In the event of death or permanent disablement, the 5-year minimum service rule is strictly waived, and the payout is made immediately.&quot;],
        [&quot;How does the &#39;50% Wage Rule&#39; affect my payout?&quot;, &quot;New rules mandate that Basic Pay + DA must be at least 50% of your Gross CTC. If your employer kept your Basic pay artificially low, our auditor calculates based on the legal 50% floor, potentially increasing your payout.&quot;],
        [&quot;Is gratuity taxable if I receive it from two different employers?&quot;, &quot;The ₹20 Lakh tax-exemption is a lifetime cumulative limit. If you received ₹5 Lakh from a previous firm, only ₹15 Lakh remains tax-free for future settlements.&quot;],
        [&quot;Can my employer deduct notice period pay from gratuity?&quot;, &quot;No. Gratuity is a statutory right. Notice period recovery or other dues cannot be deducted from the gratuity amount unless there is intentional damage to property.&quot;],
        [&quot;What is the 15/26 formula exactly?&quot;, &quot;It calculates 15 days of salary based on a 26-day working month. The formula is: (Basic + DA) x (15/26) x Completed Years.&quot;],
        [&quot;Is there interest on delayed gratuity payments?&quot;, &quot;Yes. Employers must pay gratuity within 30 days of exit. Beyond this, Simple Interest (usually 10%) is mandated by law.&quot;],
        [&quot;Do private school teachers get gratuity?&quot;, &quot;Yes, the Supreme Court has confirmed that all employees of educational institutions, including teachers, are entitled to gratuity.&quot;],
        [&quot;Can gratuity be attached by a bank for loan recovery?&quot;, &quot;No. Under the Act, gratuity is legally protected and cannot be attached by any court decree for the recovery of debts or loans.&quot;],
        [&quot;What if my organization has only 8 employees?&quot;, &quot;The Act applies to establishments with 10 or more employees. However, once an establishment is covered, it remains covered even if the headcount drops below 10.&quot;],
        [&quot;Do I need to apply for gratuity, or is it automatic?&quot;, &quot;You should formally submit &#39;Form I&#39; to your employer within 30 days of leaving to initiate the statutory settlement process.&quot;],
        [&quot;Is DA included for private sector employees?&quot;, &quot;Yes, &#39;Wages&#39; for gratuity calculation strictly means Basic Salary + Dearness Allowance (DA). All other allowances are excluded.&quot;]
    ];

    const rupeeSVG = `&lt;svg class=&quot;icon-svg&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;3&quot;&gt;&lt;path d=&quot;M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6&quot;/&gt;&lt;/svg&gt;`;
    const checkSVG = `&lt;svg class=&quot;icon-svg icon-success&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;3&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;`;
    const crossSVG = `&lt;svg class=&quot;icon-svg icon-fail&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;3&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;6&quot; x2=&quot;6&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; y1=&quot;6&quot; x2=&quot;18&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt;`;

    function formatInput(el) {
        let val = el.value.replace(/,/g, &#39;&#39;);
        if (!isNaN(val) &amp;&amp; val) el.value = Number(val).toLocaleString(&#39;en-IN&#39;);
    }

    function calculateGratuity() {
        let salary = parseFloat(document.getElementById(&#39;salary&#39;).value.replace(/,/g, &#39;&#39;)) || 0;
        let ctc = parseFloat(document.getElementById(&#39;ctc&#39;).value.replace(/,/g, &#39;&#39;)) || 0;
        let y = parseFloat(document.getElementById(&#39;years&#39;).value) || 0;
        let m = parseFloat(document.getElementById(&#39;months&#39;).value) || 0;
        let type = document.getElementById(&#39;type&#39;).value;

        if (salary &lt;= 0 || (y === 0 &amp;&amp; m === 0)) return;

        let wageOk = true;
        if (ctc &gt; 0 &amp;&amp; salary &lt; (ctc * 0.5)) { salary = ctc * 0.5; wageOk = false; }

        let rounded = (m &gt;= 6) ? y + 1 : y;
        let effective = y + (m / 12);
        let total = (type !== &#39;notcovered&#39;) ? (15/26) * salary * rounded : (15/30) * salary * effective;
        let limit = (type === &#39;govt&#39;) ? 2500000 : 2000000;
        let taxfree = Math.min(total, limit);
        let taxable = Math.max(0, total - limit);

        const f = v =&gt; Math.round(v).toLocaleString(&#39;en-IN&#39;);

        document.getElementById(&#39;res-total&#39;).innerHTML = rupeeSVG + f(total);
        document.getElementById(&#39;res-taxfree&#39;).innerHTML = rupeeSVG + f(taxfree);
        document.getElementById(&#39;res-taxable&#39;).innerHTML = rupeeSVG + f(taxable);

        updateUI(&#39;milestone-1&#39;, &#39;m1-span&#39;, effective &gt;= 1, &quot;Eligible&quot;, &quot;Ineligible&quot;);
        updateUI(&#39;milestone-2&#39;, &#39;m2-span&#39;, effective &gt;= 4.6, &quot;Eligible&quot;, (type === &#39;fixed&#39; ? &#39;N/A&#39; : &#39;Pending&#39;));
        updateUI(&#39;milestone-3&#39;, &#39;m3-span&#39;, wageOk, &quot;Compliant&quot;, &quot;Adjusted&quot;);
        updateUI(&#39;milestone-4&#39;, &#39;m4-span&#39;, total &lt;= limit, &quot;Safe&quot;, &quot;Taxable&quot;);

        document.getElementById(&#39;result-box&#39;).style.display = &#39;block&#39;;
        document.getElementById(&#39;pdf-btn&#39;).style.display = &#39;flex&#39;;
        window.auditData = { total, taxfree, taxable, tenure: `${y}y ${m}m`, type };
    }

    function updateUI(cardId, spanId, active, okMsg, failMsg) {
        const el = document.getElementById(cardId);
        const span = document.getElementById(spanId);
        el.className = active ? &quot;fruit-card active&quot; : &quot;fruit-card&quot;;
        span.innerHTML = (active ? checkSVG : crossSVG) + &quot; &quot; + (active ? okMsg : failMsg);
    }

    function downloadPDF() {
        const { jsPDF } = window.jspdf; let doc = new jsPDF();
        const f = v =&gt; &quot;Rs. &quot; + Math.round(v).toLocaleString(&#39;en-IN&#39;);
        doc.setFillColor(59, 130, 246); doc.rect(0, 0, 210, 40, &#39;F&#39;);
        doc.setTextColor(255); doc.setFontSize(22); doc.text(&quot;OTechy Gratuity Audit Pro&quot;, 20, 25);
        doc.autoTable({
            startY: 50, theme: &#39;striped&#39;,
            body: [
                [&quot;Employment Type&quot;, window.auditData.type.toUpperCase()],
                [&quot;Total Tenure&quot;, window.auditData.tenure],
                [&quot;Calculated Gratuity&quot;, f(window.auditData.total)],
                [&quot;Tax Exempt Amount&quot;, f(window.auditData.taxfree)],
                [&quot;Taxable Portion&quot;, f(window.auditData.taxable)]
            ]
        });
        doc.save(&quot;Gratuity_Audit_Report.pdf&quot;);
    }

    window.onload = () =&gt; {
        const container = document.getElementById(&#39;faq-container&#39;);
        faqs.forEach(q =&gt; {
            container.innerHTML += `&lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;${q[0]}&lt;/strong&gt;&lt;p&gt;${q[1]}&lt;/p&gt;&lt;/div&gt;`;
        });
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
    };
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7950394497491267945'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7950394497491267945'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/test.html' title='test'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-7416333315509930262</id><published>2026-04-04T09:02:00.000-07:00</published><updated>2026-04-06T02:01:40.899-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Meat"/><category scheme="http://www.blogger.com/atom/ns#" term="Nutrition"/><title type='text'>Meat &amp; Seafood Nutrition Database | Macros per 100g</title><content type='html'>&lt;title&gt;Precision Meat &amp; Seafood Database | 10+ Nutrients per 100g - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Precision nutrition for Meat, Poultry &amp; Seafood. Track Heme-Iron, B12, Zinc, Selenium, and Omega-3 per 100g standardized servings. Includes Bengali regional fish.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,850;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System: Carnivore V3 (Precision) --- */
    :root { 
        --primary: #dc2626; --primary-dark: #991b1b; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-bg: #fef2f2; --font-main: &#39;Poppins&#39;, sans-serif;
        --carb-color: #3b82f6; --pro-color: #8b5cf6; --fat-color: #eab308;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1350px; margin: 0 auto; padding: 70px 15px 60px; }

    /* Ads System */
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; background: #f1f5f9; border-radius: 10px; border: 1px dashed #cbd5e1; width: 100%; height: 90px; margin-bottom: 20px; }

    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; padding: 50px 20px; background: linear-gradient(135deg, #fef2f2 0%, #ffffff 100%); border-radius: 24px; border: 1px solid var(--border); box-shadow: 0 10px 30px rgba(220, 38, 38, 0.05); }
    .hero-section h1 { font-size: clamp(24px, 5vw, 42px); font-weight: 850; margin: 0; letter-spacing: -1px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 14px; font-weight: 500; max-width: 850px; margin: 10px auto 25px; }

    /* Filters System */
    .filter-tier { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 25px; }
    .filter-btn { background: var(--white); border: 1px solid var(--border); color: var(--accent); padding: 8px 16px; border-radius: 50px; font-weight: 700; font-size: 11px; cursor: pointer; transition: 0.2s; text-transform: uppercase; }
    .filter-btn:hover { border-color: var(--primary); color: var(--primary); background: var(--soft-bg); }
    .filter-btn.active { background: var(--text-dark); color: #fff; border-color: var(--text-dark); }

    /* Search Bar */
    .search-bar { position: relative; max-width: 700px; margin: 0 auto 30px; width: 100%; }
    .search-bar input { width: 100%; padding: 14px 20px 14px 45px; border-radius: 14px; border: 2px solid var(--border); font-family: var(--font-main); font-size: 15px; font-weight: 600; outline: none; box-shadow: 0 8px 25px rgba(0,0,0,0.03); }
    .search-icon { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: var(--accent); }

    /* Grid &amp; Cards */
    .bio-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px; }
    .bio-card { background: var(--white); border-radius: 20px; border: 1px solid #000; padding: 20px; transition: 0.3s; box-shadow: 0 4px 12px rgba(0,0,0,0.05); display: flex; flex-direction: column; }
    .bio-card:hover { border-color: var(--primary); transform: translateY(-3px); }
    
    .bio-name { font-size: 19px; font-weight: 850; color: var(--text-dark); display: flex; align-items: center; gap: 10px; margin-bottom: 15px; }
    
    .macro-mini { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; background: #f8fafc; padding: 12px; border-radius: 12px; margin-bottom: 15px; border: 1px solid var(--border); }
    .m-item { text-align: center; }
    .m-item span { font-size: 14px; font-weight: 850; display: block; }
    .m-item label { font-size: 9px; font-weight: 700; color: var(--accent); text-transform: uppercase; }

    .micro-grid { border-top: 1px solid var(--border); padding-top: 10px; margin-bottom: 15px; }
    .micro-row { display: flex; justify-content: space-between; font-size: 11px; padding: 4px 0; border-bottom: 1px dashed #f1f5f9; }
    .micro-lbl { color: var(--accent); font-weight: 600; }
    .micro-val { font-weight: 800; color: var(--text-dark); }

    .fact-tag { font-size: 11px; font-weight: 500; padding: 12px; background: #fef2f2; border-radius: 10px; border-left: 4px solid var(--primary); color: #991b1b; margin-top: auto; line-height: 1.4; }
  
  .db-stats { display: flex; justify-content: center; gap: 15px; flex-wrap: wrap; margin-bottom: 20px; }
    .stat-pill { background: var(--white); border: 1px solid var(--border); padding: 8px 16px; border-radius: 50px; font-size: 12px; font-weight: 800; color: var(--primary-dark); box-shadow: 0 4px 10px rgba(0,0,0,0.02); display: flex; align-items: center; gap: 6px; }

    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 40px 12px; }
        .bio-grid { grid-template-columns: 1fr; }
        .hero-section { padding: 30px 15px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;h1&gt;Meat &amp; Seafood &lt;span&gt;Nutrition &lt;/span&gt; Index&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Standardized 100g raw data. Verified profiles for Heme-Iron, Vitamin B12, Zinc, Selenium, and Phosphorus across Poultry, Red Meat, and Bengali Seafood.&lt;/p&gt;
      
              &lt;div class=&quot;db-stats&quot;&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;⚖️ Standardized 100g Servings&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🩸 B12 &amp; Iron Tracking&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🐟 Seafood Database&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

    &lt;div class=&quot;controls-area&quot;&gt;
        &lt;div class=&quot;search-bar&quot;&gt;
            &lt;svg class=&quot;search-icon&quot; width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;21&quot; y1=&quot;21&quot; x2=&quot;16.65&quot; y2=&quot;16.65&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            &lt;input type=&quot;text&quot; id=&quot;searchInput&quot; placeholder=&quot;Search Hilsa, Mutton, Zinc, B12...&quot; oninput=&quot;renderGrid()&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;filter-tier&quot; id=&quot;mainFilters&quot;&gt;
            &lt;button class=&quot;filter-btn active&quot; onclick=&quot;setFilter(&#39;All&#39;)&quot;&gt;All Items&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Seafood&#39;)&quot;&gt;🐟 Seafood&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Red Meat&#39;)&quot;&gt;🥩 Red Meat&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Poultry&#39;)&quot;&gt;🍗 Poultry&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Local&#39;)&quot;&gt;🇮🇳 Local / Bengali&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;bio-grid&quot; id=&quot;dataGrid&quot;&gt;&lt;/div&gt;

   &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;
  
    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
/* --- Precision Meat &amp; Seafood Database (Values per 100g RAW) --- */
const db = [
    // === POULTRY &amp; EGGS ===
    { name: &quot;Chicken Breast&quot;, emoji: &quot;🍗&quot;, category: [&quot;Poultry&quot;, &quot;High Protein&quot;], cals: 165, pro: 31, fat: 3.6, b12: &quot;0.3mcg&quot;, iron: &quot;1.0mg&quot;, zinc: &quot;1.0mg&quot;, selenium: &quot;27mcg&quot;, potas: &quot;256mg&quot;, phos: &quot;228mg&quot;, fact: &quot;The leanest common protein source. High Selenium and Phosphorus support thyroid and metabolic health.&quot; },
    { name: &quot;Chicken Thigh&quot;, emoji: &quot;🍗&quot;, category: [&quot;Poultry&quot;], cals: 209, pro: 26, fat: 10.9, b12: &quot;0.4mcg&quot;, iron: &quot;1.3mg&quot;, zinc: &quot;2.0mg&quot;, selenium: &quot;22mcg&quot;, potas: &quot;220mg&quot;, phos: &quot;180mg&quot;, fact: &quot;Higher myoglobin content makes thighs richer in Iron and Zinc compared to breast meat.&quot; },
    { name: &quot;Duck Meat&quot;, emoji: &quot;🦆&quot;, category: [&quot;Poultry&quot;], cals: 201, pro: 19, fat: 13, b12: &quot;0.4mcg&quot;, iron: &quot;2.4mg&quot;, zinc: &quot;1.9mg&quot;, selenium: &quot;14mcg&quot;, potas: &quot;210mg&quot;, phos: &quot;150mg&quot;, fact: &quot;A nutrient-dense &#39;red&#39; bird; duck fat is highly stable and rich in heart-healthy monounsaturated fats.&quot; },
    { name: &quot;Turkey Breast&quot;, emoji: &quot;🦃&quot;, category: [&quot;Poultry&quot;, &quot;High Protein&quot;], cals: 135, pro: 30, fat: 0.7, b12: &quot;0.4mcg&quot;, iron: &quot;1.1mg&quot;, zinc: &quot;1.5mg&quot;, selenium: &quot;30mcg&quot;, potas: &quot;300mg&quot;, phos: &quot;210mg&quot;, fact: &quot;Rich in Tryptophan, an amino acid essential for Serotonin production and better sleep cycles.&quot; },
    { name: &quot;Quail&quot;, emoji: &quot;🐦&quot;, category: [&quot;Poultry&quot;], cals: 134, pro: 22, fat: 4.5, b12: &quot;0.5mcg&quot;, iron: &quot;4.0mg&quot;, zinc: &quot;2.7mg&quot;, selenium: &quot;17mcg&quot;, potas: &quot;230mg&quot;, phos: &quot;310mg&quot;, fact: &quot;Gram-for-gram, quail provides nearly 4x more Iron than chicken, ideal for treating anemia.&quot; },
    { name: &quot;Egg (Whole)&quot;, emoji: &quot;🥚&quot;, category: [&quot;Poultry&quot;, &quot;Local&quot;], cals: 143, pro: 12.6, fat: 9.5, b12: &quot;0.9mcg&quot;, iron: &quot;1.8mg&quot;, zinc: &quot;1.3mg&quot;, selenium: &quot;31mcg&quot;, potas: &quot;138mg&quot;, phos: &quot;198mg&quot;, fact: &quot;The gold standard for protein. Contains Choline for brain development and bioavailable Vitamin D.&quot; },
    { name: &quot;Egg White&quot;, emoji: &quot;🥚&quot;, category: [&quot;Poultry&quot;, &quot;High Protein&quot;], cals: 52, pro: 10.9, fat: 0.2, b12: &quot;0.1mcg&quot;, iron: &quot;0.1mg&quot;, zinc: &quot;0.0mg&quot;, selenium: &quot;20mcg&quot;, potas: &quot;163mg&quot;, phos: &quot;15mg&quot;, fact: &quot;Purest albumin protein source with zero fat/cholesterol; ideal for strict calorie counting.&quot; },

    // === RED MEAT &amp; OFFAL ===
    { name: &quot;Mutton / Goat (Lean)&quot;, emoji: &quot;🐐&quot;, category: [&quot;Red Meat&quot;, &quot;Local&quot;, &quot;High Protein&quot;], cals: 143, pro: 27, fat: 3, b12: &quot;1.2mcg&quot;, iron: &quot;3.7mg&quot;, zinc: &quot;5.3mg&quot;, selenium: &quot;22mcg&quot;, potas: &quot;405mg&quot;, phos: &quot;200mg&quot;, fact: &quot;The best bioavailable source of Heme-Iron and Zinc for the Indian sub-continent.&quot; },
    { name: &quot;Lamb (Chops)&quot;, emoji: &quot;🐑&quot;, category: [&quot;Red Meat&quot;], cals: 250, pro: 25, fat: 16, b12: &quot;2.6mcg&quot;, iron: &quot;2.0mg&quot;, zinc: &quot;4.4mg&quot;, selenium: &quot;25mcg&quot;, potas: &quot;310mg&quot;, phos: &quot;190mg&quot;, fact: &quot;Rich in CLA (Conjugated Linoleic Acid) which helps in improving body composition and fat loss.&quot; },
    { name: &quot;Beef (Lean)&quot;, emoji: &quot;🥩&quot;, category: [&quot;Red Meat&quot;, &quot;High Protein&quot;], cals: 250, pro: 26, fat: 15, b12: &quot;2.6mcg&quot;, iron: &quot;2.6mg&quot;, zinc: &quot;6.3mg&quot;, selenium: &quot;33mcg&quot;, potas: &quot;350mg&quot;, phos: &quot;210mg&quot;, fact: &quot;High Creatine and Carnosine levels support muscle ATP production and anti-aging.&quot; },
    { name: &quot;Beef Liver&quot;, emoji: &quot;🩸&quot;, category: [&quot;Red Meat&quot;, &quot;High Protein&quot;], cals: 135, pro: 20.4, fat: 3.6, b12: &quot;59mcg&quot;, iron: &quot;4.9mg&quot;, zinc: &quot;4.0mg&quot;, selenium: &quot;39mcg&quot;, potas: &quot;313mg&quot;, phos: &quot;387mg&quot;, fact: &quot;A &#39;Superfood&#39; density profile; contains massive Vitamin A and B12 for nerve repair.&quot; },
    { name: &quot;Chicken Liver&quot;, emoji: &quot;🩸&quot;, category: [&quot;Poultry&quot;, &quot;High Protein&quot;], cals: 167, pro: 24.5, fat: 4.8, b12: &quot;16.6mcg&quot;, iron: &quot;9.0mg&quot;, zinc: &quot;2.7mg&quot;, selenium: &quot;54mcg&quot;, potas: &quot;230mg&quot;, phos: &quot;290mg&quot;, fact: &quot;One of the highest sources of Folate and Vitamin A among all animal-based foods.&quot; },
    { name: &quot;Lamb Brain&quot;, emoji: &quot;🧠&quot;, category: [&quot;Red Meat&quot;], cals: 143, pro: 11, fat: 10, b12: &quot;9.5mcg&quot;, iron: &quot;1.6mg&quot;, zinc: &quot;1.4mg&quot;, selenium: &quot;21mcg&quot;, potas: &quot;270mg&quot;, phos: &quot;330mg&quot;, fact: &quot;Incredibly high in DHA and Phospholipids; essential for neurological health and cell membrane repair.&quot; },
    { name: &quot;Mutton Paya (Trotters)&quot;, emoji: &quot;🍲&quot;, category: [&quot;Red Meat&quot;, &quot;Local&quot;], cals: 190, pro: 18, fat: 13, b12: &quot;0.8mcg&quot;, iron: &quot;1.5mg&quot;, zinc: &quot;1.2mg&quot;, selenium: &quot;5mcg&quot;, potas: &quot;80mg&quot;, phos: &quot;110mg&quot;, fact: &quot;Natural source of Collagen and Glycine; essential for joint flexibility and gut lining recovery.&quot; },

    // === SEAFOOD (GLOBAL) ===
    { name: &quot;Salmon&quot;, emoji: &quot;🍣&quot;, category: [&quot;Seafood&quot;, &quot;Omega-3 Rich&quot;], cals: 208, pro: 20, fat: 13, b12: &quot;3.2mcg&quot;, iron: &quot;0.3mg&quot;, zinc: &quot;0.6mg&quot;, selenium: &quot;36mcg&quot;, potas: &quot;363mg&quot;, phos: &quot;250mg&quot;, fact: &quot;Rich in EPA/DHA Omega-3s. Reduces systemic inflammation and protects heart rhythm.&quot; },
    { name: &quot;Tuna (Yellowfin)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;High Protein&quot;], cals: 109, pro: 24, fat: 0.5, b12: &quot;2.1mcg&quot;, iron: &quot;0.8mg&quot;, zinc: &quot;0.6mg&quot;, selenium: &quot;90mcg&quot;, potas: &quot;441mg&quot;, phos: &quot;280mg&quot;, fact: &quot;Extremely high Selenium content helps counter mercury toxicity levels found in large fish.&quot; },
    { name: &quot;Sardines&quot;, emoji: &quot;🥫&quot;, category: [&quot;Seafood&quot;, &quot;Omega-3 Rich&quot;], cals: 208, pro: 25, fat: 11, b12: &quot;8.9mcg&quot;, iron: &quot;2.9mg&quot;, zinc: &quot;1.3mg&quot;, selenium: &quot;52mcg&quot;, potas: &quot;397mg&quot;, phos: &quot;490mg&quot;, fact: &quot;Eaten with bones, they provide the best bioavailable Calcium and Vitamin D3 combo.&quot; },
    { name: &quot;Oysters&quot;, emoji: &quot;🦪&quot;, category: [&quot;Seafood&quot;], cals: 81, pro: 9, fat: 2.3, b12: &quot;16mcg&quot;, iron: &quot;5.1mg&quot;, zinc: &quot;78mg&quot;, selenium: &quot;77mcg&quot;, potas: &quot;156mg&quot;, phos: &quot;135mg&quot;, fact: &quot;The highest Zinc source on Earth; critical for testosterone, immunity, and skin healing.&quot; },
    { name: &quot;Shrimp / Prawns&quot;, emoji: &quot;🦐&quot;, category: [&quot;Seafood&quot;, &quot;High Protein&quot;], cals: 99, pro: 24, fat: 0.3, b12: &quot;1.6mcg&quot;, iron: &quot;0.5mg&quot;, zinc: &quot;1.6mg&quot;, selenium: &quot;38mcg&quot;, potas: &quot;259mg&quot;, phos: &quot;218mg&quot;, fact: &quot;Contains Astaxanthin, a powerful antioxidant that protects the skin against UV damage.&quot; },
    { name: &quot;Crab&quot;, emoji: &quot;🦀&quot;, category: [&quot;Seafood&quot;], cals: 87, pro: 18, fat: 1.1, b12: &quot;3.3mcg&quot;, iron: &quot;0.7mg&quot;, zinc: &quot;3.8mg&quot;, selenium: &quot;42mcg&quot;, potas: &quot;329mg&quot;, phos: &quot;230mg&quot;, fact: &quot;High Copper and Vitamin B12 levels support central nervous system and metabolic rate.&quot; },
    { name: &quot;Squid / Calamari&quot;, emoji: &quot;🦑&quot;, category: [&quot;Seafood&quot;], cals: 92, pro: 16, fat: 1.4, b12: &quot;1.3mcg&quot;, iron: &quot;0.7mg&quot;, zinc: &quot;1.5mg&quot;, selenium: &quot;44mcg&quot;, potas: &quot;246mg&quot;, phos: &quot;220mg&quot;, fact: &quot;Rich in Copper; helps the body store and utilize iron for hemoglobin formation.&quot; },
    { name: &quot;Lobster&quot;, emoji: &quot;🦞&quot;, category: [&quot;Seafood&quot;], cals: 89, pro: 19, fat: 0.9, b12: &quot;1.4mcg&quot;, iron: &quot;0.3mg&quot;, zinc: &quot;3.0mg&quot;, selenium: &quot;63mcg&quot;, potas: &quot;230mg&quot;, phos: &quot;185mg&quot;, fact: &quot;Low calorie and high Selenium; protects cells from oxidative stress and thyroid dysfunction.&quot; },

    // === BENGALI / INDIAN SEAFOOD ===
    { name: &quot;Hilsa (Ilish)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;, &quot;Omega-3 Rich&quot;], cals: 310, pro: 22, fat: 24, b12: &quot;2.5mcg&quot;, iron: &quot;1.2mg&quot;, zinc: &quot;1.1mg&quot;, selenium: &quot;36mcg&quot;, potas: &quot;320mg&quot;, phos: &quot;250mg&quot;, fact: &quot;Bengali legend; its high fat content consists mostly of heart-healthy Omega-3 fatty acids.&quot; },
    { name: &quot;Rohu (Rui)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 97, pro: 16, fat: 1.4, b12: &quot;1.5mcg&quot;, iron: &quot;1.0mg&quot;, zinc: &quot;0.8mg&quot;, selenium: &quot;12mcg&quot;, potas: &quot;280mg&quot;, phos: &quot;180mg&quot;, fact: &quot;Easily digestible lean protein. High Calcium content in freshwater carp supports bone health.&quot; },
    { name: &quot;Katla&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 111, pro: 19, fat: 2.5, b12: &quot;1.6mcg&quot;, iron: &quot;1.1mg&quot;, zinc: &quot;0.9mg&quot;, selenium: &quot;15mcg&quot;, potas: &quot;300mg&quot;, phos: &quot;210mg&quot;, fact: &quot;Excellent source of Vitamin D and lean protein for traditional Indian fish curries.&quot; },
    { name: &quot;Bhetki (Barramundi)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;, &quot;High Protein&quot;], cals: 105, pro: 20, fat: 2.0, b12: &quot;1.1mcg&quot;, iron: &quot;0.6mg&quot;, zinc: &quot;0.7mg&quot;, selenium: &quot;30mcg&quot;, potas: &quot;250mg&quot;, phos: &quot;200mg&quot;, fact: &quot;The chef&#39;s favorite; low bone count and high Phosphorus for skeletal health.&quot; },
    { name: &quot;Magur (Catfish)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 105, pro: 18, fat: 3.5, b12: &quot;1.5mcg&quot;, iron: &quot;1.4mg&quot;, zinc: &quot;0.6mg&quot;, selenium: &quot;15mcg&quot;, potas: &quot;310mg&quot;, phos: &quot;220mg&quot;, fact: &quot;Prescribed in traditional medicine for fast recovery due to its high Iron and B12 density.&quot; },
    { name: &quot;Tangra (Catfish)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 120, pro: 19.5, fat: 4.2, b12: &quot;1.2mcg&quot;, iron: &quot;1.8mg&quot;, zinc: &quot;0.9mg&quot;, selenium: &quot;14mcg&quot;, potas: &quot;290mg&quot;, phos: &quot;190mg&quot;, fact: &quot;Small fish provide excellent mineral variety when eaten with minimal processing.&quot; },
    { name: &quot;Boal (Catfish)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 130, pro: 18, fat: 6, b12: &quot;1.8mcg&quot;, iron: &quot;1.1mg&quot;, zinc: &quot;1.0mg&quot;, selenium: &quot;18mcg&quot;, potas: &quot;260mg&quot;, phos: &quot;210mg&quot;, fact: &quot;Rich in fat-soluble vitamins; provides high energy and muscle-repairing proteins.&quot; },
    { name: &quot;Pomfret (White)&quot;, emoji: &quot;🐠&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;, &quot;High Protein&quot;], cals: 96, pro: 19, fat: 1.7, b12: &quot;1.2mcg&quot;, iron: &quot;0.8mg&quot;, zinc: &quot;0.6mg&quot;, selenium: &quot;28mcg&quot;, potas: &quot;320mg&quot;, phos: &quot;215mg&quot;, fact: &quot;Elite marine fish with single central bone; high Selenium profile supports metabolic function.&quot; },
    { name: &quot;Golda Chingri (Prawn)&quot;, emoji: &quot;🦐&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 105, pro: 23, fat: 1, b12: &quot;1.8mcg&quot;, iron: &quot;0.6mg&quot;, zinc: &quot;1.7mg&quot;, selenium: &quot;40mcg&quot;, potas: &quot;220mg&quot;, phos: &quot;250mg&quot;, fact: &quot;Massive Jumbo prawns provide nearly zero saturated fat with massive protein density.&quot; },
    { name: &quot;Lote (Bombay Duck)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 80, pro: 15, fat: 2.1, b12: &quot;0.9mcg&quot;, iron: &quot;1.1mg&quot;, zinc: &quot;0.5mg&quot;, selenium: &quot;10mcg&quot;, potas: &quot;190mg&quot;, phos: &quot;140mg&quot;, fact: &quot;High water content makes it the lowest calorie protein source in the Bengali seafood list.&quot; },
    { name: &quot;Pabda (Catfish)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 115, pro: 18, fat: 4.5, b12: &quot;1.4mcg&quot;, iron: &quot;1.3mg&quot;, zinc: &quot;1.0mg&quot;, selenium: &quot;16mcg&quot;, potas: &quot;280mg&quot;, phos: &quot;205mg&quot;, fact: &quot;Tender skin and high oil content; provides sustained energy and nerve-repairing B12.&quot; },
    { name: &quot;Koi (Climbing Perch)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 110, pro: 17, fat: 4.2, b12: &quot;1.2mcg&quot;, iron: &quot;2.1mg&quot;, zinc: &quot;0.9mg&quot;, selenium: &quot;12mcg&quot;, potas: &quot;250mg&quot;, phos: &quot;195mg&quot;, fact: &quot;Traditionally known to increase red blood cells quickly due to its high Iron bioavailability.&quot; },
    { name: &quot;Mrigal&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 95, pro: 16.5, fat: 1.2, b12: &quot;1.3mcg&quot;, iron: &quot;0.9mg&quot;, zinc: &quot;0.8mg&quot;, selenium: &quot;11mcg&quot;, potas: &quot;270mg&quot;, phos: &quot;175mg&quot;, fact: &quot;Freshwater carp with a clean macro profile; ideal for calorie-restricted protein diets.&quot; },
    { name: &quot;Singi (Catfish)&quot;, emoji: &quot;🐟&quot;, category: [&quot;Seafood&quot;, &quot;Local&quot;], cals: 102, pro: 19, fat: 2.2, b12: &quot;1.6mcg&quot;, iron: &quot;2.4mg&quot;, zinc: &quot;1.1mg&quot;, selenium: &quot;18mcg&quot;, potas: &quot;320mg&quot;, phos: &quot;240mg&quot;, fact: &quot;Considered the most medicinal fish for hemoglobin recovery and post-surgery healing.&quot; }
];

    let currentFilter = &#39;All&#39;;

    function setFilter(f) {
        currentFilter = f;
        document.querySelectorAll(&#39;.filter-btn&#39;).forEach(btn =&gt; btn.classList.remove(&#39;active&#39;));
        event.target.classList.add(&#39;active&#39;);
        renderGrid();
    }

    function handleSearch() { renderGrid(); }

    function renderGrid() {
        const grid = document.getElementById(&#39;dataGrid&#39;);
        const query = document.getElementById(&#39;searchInput&#39;).value.toLowerCase();
        grid.innerHTML = &#39;&#39;;

        const filtered = db.filter(f =&gt; {
            const matchesQuery = f.name.toLowerCase().includes(query) || f.fact.toLowerCase().includes(query);
            const matchesFilter = (currentFilter === &#39;All&#39;) || f.category.includes(currentFilter);
            return matchesQuery &amp;&amp; matchesFilter;
        });

        filtered.forEach(f =&gt; {
            const card = document.createElement(&#39;div&#39;);
            card.className = &#39;bio-card&#39;;

            card.innerHTML = `
                &lt;div class=&quot;bio-name&quot;&gt;&lt;span&gt;${f.emoji}&lt;/span&gt; ${f.name}&lt;/div&gt;
                
                &lt;div class=&quot;macro-mini&quot;&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Cals&lt;/label&gt;&lt;span&gt;${f.cals}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Protein&lt;/label&gt;&lt;span&gt;${f.pro}g&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Fats&lt;/label&gt;&lt;span&gt;${f.fat}g&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;micro-grid&quot;&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Vit B12 / Iron&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.b12} / ${f.iron}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Zinc / Selenium&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.zinc} / ${f.selenium}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Potassium / Phos&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.potas || &#39;-&#39;} / ${f.phos || &#39;-&#39;}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Specials&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.vitA || f.copper || f.choline || &#39;Standard&#39;}&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;fact-tag&quot;&gt;&lt;strong&gt;Clinical Note:&lt;/strong&gt; ${f.fact}&lt;/div&gt;
            `;
            grid.appendChild(card);
        });
    }

    renderGrid();
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7416333315509930262'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7416333315509930262'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/meat-seafood-nutrition-database-macros.html' title='Meat &amp; Seafood Nutrition Database | Macros per 100g'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-7740042230728598284</id><published>2026-04-04T08:51:00.000-07:00</published><updated>2026-04-04T09:36:48.775-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fasting"/><category scheme="http://www.blogger.com/atom/ns#" term="Health"/><title type='text'>36-Hour Fasting Bio-Timeline: Hourly Body Changes</title><content type='html'>&lt;title&gt;36-Hour Fasting Bio-Timeline: Hourly Body Changes &amp; Pulse Protocol&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Track metabolic shifts, autophagy, and hormone surges across a 36-hour fast. Use the OTechy Pulse Protocol to prevent metabolic slowdown and maximize fat loss.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;36 hour fasting timeline, autophagy stages, metabolic pulse protocol, 16:8 fasting results, OTechy health tools, how to break a fast, growth hormone surge&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- Core Design System --- */
    :root { --primary: #3b82f6; --success: #10b981; --text-dark: #1e293b; --text-muted: #64748b; }
    
    * { box-sizing: border-box; }
    body { margin: 0; font-family: &#39;Poppins&#39;, sans-serif; background: #f8fafc; color: var(--text-dark); line-height: 1.6; }
    
    .otechy-tool-wrapper { max-width: 950px; margin: 0 auto; padding: 40px 20px; }
    
    .tool-header { text-align: center; margin-bottom: 40px; }
    .tool-header h1 { font-size: clamp(22px, 5vw, 28px); color: var(--primary); font-weight: 850; margin: 10px 0; }
    .otechy-badge { display: inline-block; background: #eff6ff; color: var(--primary); padding: 6px 18px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #dbeafe; }
    .quick-value { color: var(--text-muted); font-size: 15px; margin: 0; }
    
    .otechy-card { background: #fff; padding: 25px; border-radius: 12px; border: 1px solid #e2e8f0; box-shadow: 0 4px 12px rgba(0,0,0,0.05); margin-bottom: 20px; }
    
    /* Tracker Elements */
    .status-result-box { background: #f8fafc; border-radius: 10px; padding: 20px; border-left: 6px solid var(--primary); margin-top: 20px; }
    .status-header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; }
    .hour-tag { font-size: 24px; font-weight: 850; color: var(--primary); }
    .phase-badge { background: var(--primary); color: #fff; padding: 4px 12px; border-radius: 50px; font-size: 12px; font-weight: 700; }
    
    /* Buttons &amp; Inputs */
    .otechy-btn { background: var(--primary); color: #fff; border: none; padding: 14px 25px; border-radius: 8px; font-size: 14px; font-weight: 700; cursor: pointer; transition: 0.3s; width: 100%; }
    .otechy-btn:hover { background: #2563eb; transform: translateY(-1px); }
    
    /* Grids */
    .strategy-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px; }
    .expert-protocol-section { background: #fff; border: 1px solid #e2e8f0; border-radius: 15px; padding: 30px; margin-top: 40px; }
    .protocol-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 25px; margin-top: 25px; }
    .protocol-card { background: #f8fafc; padding: 20px; border-radius: 10px; border: 1px solid #f1f5f9; }
    .protocol-card h3 { font-size: 16px; color: var(--primary); margin-bottom: 10px; border-bottom: 2px solid #e2e8f0; padding-bottom: 5px; }
    .protocol-card p { font-size: 13px; color: #475569; margin-bottom: 10px; }
    
    .warning-box { background: #fff1f2; color: #991b1b; padding: 15px; border-radius: 8px; border: 1px solid #fecdd3; margin-top: 25px; font-size: 13.5px; }

    /* Expert Insights Area */
    .expert-insights-highlight { margin-top: 40px; background: #f0f9ff; border: 2px solid #dbeafe; border-radius: 15px; padding: 30px; }
    .expert-insights-highlight h2 { color: #1e40af; font-size: 22px; margin-bottom: 20px; text-align: center; }
    .insight-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
    .insight-item { background: #ffffff; padding: 15px; border-radius: 10px; border-left: 4px solid #3b82f6; }
    .insight-item strong { color: #1e3a8a; font-size: 14px; display: block; margin-bottom: 5px; }
    .insight-item p { font-size: 13px; color: #475569; margin: 0; }

    /* FAQs */
    .faq-container { margin-top: 30px; }
    .faq-card { background: #fff; border: 1px solid #e2e8f0; padding: 20px; border-radius: 10px; margin-bottom: 15px; font-size: 14px; box-shadow: 0 2px 5px rgba(0,0,0,0.02); }
    .faq-card strong { color: var(--primary); display: block; margin-bottom: 8px; font-size: 15px; }

    .geo-citation { background: #f1f5f9; padding: 20px; border-radius: 8px; font-style: italic; margin-top: 40px; border-left: 4px solid var(--primary); font-size: 12px; }

    /* --- MOBILE RESPONSIVENESS OVERRIDES --- */
    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 20px 15px; }
        .strategy-grid, .protocol-grid, .insight-grid { grid-template-columns: 1fr; gap: 15px; }
        .expert-protocol-section { padding: 20px 15px; }
        .expert-insights-highlight { padding: 20px 15px; }
        .status-result-box { padding: 15px; }
        .hour-tag { font-size: 20px; }
        .otechy-card { padding: 15px; }
        .faq-card { padding: 15px; font-size: 13px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;div class=&quot;otechy-badge&quot;&gt;Fasting Toolkit&lt;/div&gt;
        &lt;h1&gt;Master Fasting Timeline (0-36h) &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt; &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; style=&quot;vertical-align: middle; margin-left: 8px;&quot;&gt;&lt;defs&gt;&lt;clipPath id=&quot;circleView&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;12&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;g clip-path=&quot;url(#circleView)&quot;&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;0&quot; fill=&quot;#FF9933&quot;/&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;8&quot; fill=&quot;#FFFFFF&quot;/&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;16&quot; fill=&quot;#138808&quot;/&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;3&quot; fill=&quot;none&quot; stroke=&quot;#000080&quot; stroke-width=&quot;0.5&quot;/&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;0.8&quot; fill=&quot;#000080&quot;/&gt;&lt;g stroke=&quot;#000080&quot; stroke-width=&quot;0.2&quot;&gt;&lt;line x1=&quot;12&quot; y1=&quot;9&quot; x2=&quot;12&quot; y2=&quot;15&quot;/&gt;&lt;line x1=&quot;9&quot; y1=&quot;12&quot; x2=&quot;15&quot; y2=&quot;12&quot;/&gt;&lt;line x1=&quot;9.8&quot; y1=&quot;9.8&quot; x2=&quot;14.2&quot; y2=&quot;14.2&quot;/&gt;&lt;line x1=&quot;9.8&quot; y1=&quot;14.2&quot; x2=&quot;14.2&quot; y2=&quot;9.8&quot;/&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Visualize your metabolic switch from glucose to deep cellular repair.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 12px; border: 1px dashed #cbd5e1;&quot;&gt;AD SLOT TOP&lt;/div&gt;
  
    &lt;div class=&quot;otechy-card&quot;&gt;
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label style=&quot;font-weight: 700; color: #1e293b; display: block; margin-bottom: 10px;&quot;&gt;Slide to your current fasting hour:&lt;/label&gt;
            &lt;input type=&quot;range&quot; id=&quot;fast-range&quot; min=&quot;0&quot; max=&quot;36&quot; value=&quot;0&quot; step=&quot;1&quot; oninput=&quot;updateFastTracker(this.value)&quot; style=&quot;width:100%; margin: 10px 0 20px; cursor: pointer;&quot;&gt;
            &lt;div style=&quot;display:flex; justify-content:space-between; font-size:12px; color:#64748b; font-weight:700;&quot;&gt;
                &lt;span&gt;0h&lt;/span&gt;&lt;span&gt;12h&lt;/span&gt;&lt;span&gt;18h&lt;/span&gt;&lt;span&gt;24h&lt;/span&gt;&lt;span&gt;30h&lt;/span&gt;&lt;span&gt;36h&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;status-result-box&quot; id=&quot;status-box&quot;&gt;
            &lt;div class=&quot;status-header&quot;&gt;
                &lt;span class=&quot;hour-tag&quot;&gt;&lt;span id=&quot;hour-val&quot;&gt;0&lt;/span&gt; Hours In&lt;/span&gt;
                &lt;span id=&quot;phase-tag&quot; class=&quot;phase-badge&quot;&gt;Digestion&lt;/span&gt;
            &lt;/div&gt;
            &lt;div id=&quot;fun-fact-container&quot; style=&quot;background: #eff6ff; padding: 10px 15px; border-radius: 8px; margin: 15px 0; font-size: 13px; color: #1d4ed8; border: 1px solid #dbeafe;&quot;&gt;
                &lt;strong&gt;Did you know?&lt;/strong&gt; &lt;span id=&quot;fun-fact-text&quot;&gt;Insulin acts like a traffic cop, directing fuel into cells.&lt;/span&gt;
            &lt;/div&gt;
            &lt;h3 id=&quot;status-title&quot; style=&quot;margin-top:10px; color:#1e293b;&quot;&gt;Waiting for Start...&lt;/h3&gt;
            &lt;p id=&quot;status-desc&quot; style=&quot;font-size:14px; color:#475569; line-height: 1.6; margin-bottom: 0;&quot;&gt;Move the slider to see what&#39;s happening inside your body.&lt;/p&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-top: 25px;&quot;&gt;
            &lt;button class=&quot;otechy-btn&quot; onclick=&quot;generateFastPDF()&quot;&gt;Export Bio-Report (PDF)&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;strategy-grid&quot;&gt;
        &lt;div class=&quot;otechy-card highlight-start&quot;&gt;
            &lt;h4 style=&quot;color:#3b82f6; margin-top:0; margin-bottom: 10px;&quot;&gt;🚀 How to Start&lt;/h4&gt;
            &lt;p style=&quot;font-size:13px; color: #475569; margin: 0;&quot;&gt;The most efficient route is the &lt;strong&gt;&quot;Dinner-to-Sleep&quot;&lt;/strong&gt; method. Eat a protein-heavy dinner, then start your clock. Sleeping through the first 8 hours bypasses initial hunger. Avoid a massive &quot;final breakfast&quot; as the high insulin spike makes the first 6 hours of fasting much harder.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class=&quot;otechy-card highlight-end&quot;&gt;
            &lt;h4 style=&quot;color:#10b981; margin-top:0; margin-bottom: 10px;&quot;&gt;🥗 How to Break&lt;/h4&gt;
            &lt;p style=&quot;font-size:13px; color: #475569; margin: 0;&quot;&gt;Break gently with &lt;strong&gt;Protein and healthy fats&lt;/strong&gt; (e.g., eggs or bone broth). Avoid high-carb meals immediately. Since your insulin sensitivity is at a peak, a large carb load can cause an aggressive sugar spike, undoing much of your hard work.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 12px; border: 1px dashed #cbd5e1;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;
  
    &lt;section class=&quot;expert-protocol-section&quot;&gt;
        &lt;div class=&quot;expert-header&quot; style=&quot;margin-bottom: 25px;&quot;&gt;
            &lt;h2 style=&quot;color: #1e293b; font-size: clamp(20px, 4vw, 24px); margin-top: 0;&quot;&gt;&quot;Pulse&quot; Protocol: Expert Recommendations&lt;/h2&gt;
            &lt;p style=&quot;color: #64748b; font-style: italic; margin: 0;&quot;&gt;Fasting is a biological stimulus that is beneficial in specific doses but detrimental when it becomes chronic.&lt;/p&gt;
        &lt;/div&gt;

        &lt;div class=&quot;protocol-grid&quot;&gt;
            &lt;div class=&quot;protocol-card&quot;&gt;
                &lt;h3&gt;1. Biphasic Metabolic Response&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;The Stimulation Phase (24–36h):&lt;/strong&gt; Your body spikes adrenaline and norepinephrine, increasing energy expenditure and shifting into high-gear fat oxidation. Metabolism may increase by up to 14%.&lt;/p&gt;
                &lt;p style=&quot;margin-bottom: 0;&quot;&gt;&lt;strong&gt;The Conservation Phase (72h+):&lt;/strong&gt; Beyond the sweet spot, the body triggers &quot;adaptive thermogenesis,&quot; slowing your metabolism to survive a perceived famine.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;protocol-card&quot;&gt;
                &lt;h3&gt;2. The Risk of Daily 16:8&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Metabolic Tanking:&lt;/strong&gt; Constant daily restriction can drop your resting metabolic rate by over 260 calories per day within 2-3 weeks.&lt;/p&gt;
                &lt;p style=&quot;margin-bottom: 0;&quot;&gt;&lt;strong&gt;Muscle Atrophy:&lt;/strong&gt; Chronic under-eating can lead to a 5% loss in muscle mass in just 21 days, degrading your long-term fat-burning potential.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;protocol-card&quot;&gt;
                &lt;h3&gt;3. Metabolic Flexibility&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;The Paradox:&lt;/strong&gt; While a 72-hour fast burns fat, it can temporarily impair glucose tolerance, making you &quot;stuck&quot; in fat-burning mode.&lt;/p&gt;
                &lt;p style=&quot;margin-bottom: 0;&quot;&gt;&lt;strong&gt;The Solution:&lt;/strong&gt; Intermittent, non-consecutive fasts (e.g., two 24-hour fasts per week) improve insulin sensitivity by providing &quot;breaks&quot; to switch fuel sources.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;protocol-card&quot;&gt;
                &lt;h3&gt;4. Clinical Guidelines&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;For 16:8 Users:&lt;/strong&gt; Take a 2–3 day &quot;reset&quot; every 7 to 14 days where you eat normally to let your metabolism &quot;breathe.&quot;&lt;/p&gt;
                &lt;p style=&quot;margin-bottom: 0;&quot;&gt;&lt;strong&gt;Anabolic Support:&lt;/strong&gt; Keep protein intake high during eating windows. Fasting provides the &quot;signal&quot; for repair; protein provides the &quot;bricks.&quot;&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
            &lt;strong&gt;⚠️ Warning Signs:&lt;/strong&gt; If you experience a drop in grip strength, persistent low energy, or disrupted sleep, your body is entering metabolic conservation and requires an immediate refeed period.
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;section class=&quot;expert-insights-highlight&quot;&gt;
        &lt;h2&gt;🧬 Biology of the Fast: Expert Insights&lt;/h2&gt;
        
        &lt;div class=&quot;insight-grid&quot;&gt;
            &lt;div class=&quot;insight-item&quot;&gt;
                &lt;strong&gt;&quot;Traffic Cop&quot; Effect&lt;/strong&gt;
                &lt;p&gt;In the first 4 hours, insulin acts as a traffic director, pushing glucose into cells and signaling your body that it does not need to burn fat yet.&lt;/p&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;insight-item&quot;&gt;
                &lt;strong&gt;Water Weight Release&lt;/strong&gt;
                &lt;p&gt;Between hours 4 and 8, every molecule of glycogen burned releases three molecules of water, explaining the rapid initial &quot;weight loss&quot;.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;insight-item&quot;&gt;
                &lt;strong&gt;14% Metabolic Boost&lt;/strong&gt;
                &lt;p&gt;By hour 12, your metabolic rate may actually increase by up to 14% as adrenaline and norepinephrine rise to keep you alert.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;insight-item&quot;&gt;
                &lt;strong&gt;70% Brain Efficiency&lt;/strong&gt;
                &lt;p&gt;Between hours 12-16, the brain begins running on ketones, which are up to 70% more efficient than glucose for mental focus.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;insight-item&quot;&gt;
                &lt;strong&gt;Stem Cell Regeneration&lt;/strong&gt;
                &lt;p&gt;At the 24-hour mark, fasting has been shown to increase stem cell production, helping your body repair itself from the inside out.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;insight-item&quot;&gt;
                &lt;strong&gt;5x Growth Hormone Surge&lt;/strong&gt;
                &lt;p&gt;Growth hormone levels can skyrocket by up to five times, melting fat while strictly preserving your vital muscle mass.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-top: 25px; padding: 15px; background: #fffbeb; border: 1px solid #fde68a; border-radius: 10px;&quot;&gt;
            &lt;h4 style=&quot;color: #92400e; margin: 0 0 10px 0; font-size: 15px;&quot;&gt;💡 Expert Strategy: Gentle Break&lt;/h4&gt;
            &lt;p style=&quot;font-size: 13px; color: #78350f; margin: 0;&quot;&gt;The biggest mistake is &quot;slamming&quot; your body with high-carb meals immediately after a fast. This causes a massive insulin spike that can undo your hard work. &lt;strong&gt;Recommended Route:&lt;/strong&gt; Break with protein (eggs/meat) and &lt;strong&gt;Bone Broth&lt;/strong&gt; to replenish electrolytes and support gut healing.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/section&gt;
  
    &lt;section id=&quot;faq-section&quot;&gt;
        &lt;h2 style=&quot;text-align:center; margin: 40px 0 20px; font-size: clamp(20px, 4vw, 24px);&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
        &lt;div class=&quot;faq-container&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;1. Why does 16:8 stop working after a few weeks?&lt;/strong&gt; Your body is a survival machine. If you fast every single day, it recognizes the pattern and downshifts your metabolism to match the lower energy intake, often stalling weight loss entirely.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;2. Can I use fasting for a &quot;baby&quot; or infant?&lt;/strong&gt; Absolutely not. Babies and growing children are in a state of constant tissue expansion. Fasting acts as a stressor that can disrupt their necessary growth phases and nutrient requirements.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;3. What happens to my muscle mass during long fasts?&lt;/strong&gt; If you don&#39;t eat enough protein during your windows, your body may start breaking down muscle for amino acids. High-protein intake is your &quot;metabolic insurance policy.&quot;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;4. Why do I feel &quot;flat&quot; and tired?&lt;/strong&gt; This is a symptom of your &quot;metabolic engine&quot; cooling down. It usually happens when fasting frequency is too high and your body begins conserving energy.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;5. How does fasting impact brain fog?&lt;/strong&gt; By hour 10-12, the liver produces ketones. Your brain runs up to 70% more efficiently on ketones than glucose, which results in &quot;crystal clear&quot; thinking.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;6. Does fasting help with anti-aging?&lt;/strong&gt; Yes, through Autophagy. Starting around hour 16, your cells begin identifying and recycling old, damaged proteins, which is a key process in cellular longevity.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;7. Is black coffee allowed?&lt;/strong&gt; Yes. Plain black coffee does not trigger an insulin response, so it keeps your body in the &quot;fasted state&quot; while potentially boosting metabolism via adrenaline.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;8. What is the best way to start my first fast?&lt;/strong&gt; Start after dinner. By the time you wake up, you are already 8-10 hours into the fast, making the remaining hours much more manageable.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;9. Can I fast if I have a high-stress lifestyle?&lt;/strong&gt; Fasting is a &quot;hormetic stress.&quot; If your life stress is already maximum, adding the stress of fasting can lead to burnout and metabolic crashes.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;10. Does 16:8 impact sleep?&lt;/strong&gt; It can. If you are under-eating, your body may produce more cortisol and adrenaline to keep you alert for &quot;hunting,&quot; which can cause insomnia.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;11. What is &quot;Adaptive Thermogenesis&quot;?&lt;/strong&gt; This is the biological process where your body reduces its internal heat production and energy use to prevent starvation.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;12. Why do I get headaches?&lt;/strong&gt; Often due to dehydration or electrolyte loss. For every molecule of glycogen burned, your body releases three molecules of water, making hydration critical.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;13. How do I know if I&#39;m losing muscle?&lt;/strong&gt; Pay attention to your &quot;grip strength&quot; or your ability to lift the same weights. If strength drops, you are likely losing muscle tissue.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;14. Is 36 hours better than 16 hours?&lt;/strong&gt; For deep cellular repair (Autophagy), longer fasts are better. For daily weight management, shorter fasts with regular &quot;reset days&quot; are more sustainable.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;15. Can I fast while pregnant?&lt;/strong&gt; No. Like the &quot;baby&quot; rule, pregnancy requires a consistent nutrient flow for the developing fetus. Fasting should be avoided.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;16. What is &quot;Metabolic Flexibility&quot;?&lt;/strong&gt; It is the ability of your body to switch effortlessly between burning carbohydrates and burning stored body fat. Fasting &quot;trains&quot; this metabolic muscle.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;17. Does fasting lower inflammation?&lt;/strong&gt; Yes. Studies show that inflammation markers typically drop during the repair phase (Hours 16-20) of a fast.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;18. Should I workout while fasted?&lt;/strong&gt; Yes, light-to-moderate activity can accelerate the transition from glycogen burning to fat burning.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;19. What is the &quot;Sweet Spot&quot; for fat loss?&lt;/strong&gt; The 24 to 36-hour mark is the peak for norepinephrine-induced fat burning before the body starts defensive energy conservation.&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;strong&gt;20. How often should I do a 36-hour fast?&lt;/strong&gt; For most, once a week or once every two weeks is sufficient to get the &quot;metabolic pop&quot; without triggering the starvation response.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 12px; border: 1px dashed #cbd5e1;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;
  
    &lt;div class=&quot;geo-citation&quot;&gt;
        &lt;strong&gt;Fasting Bio-Architecture&lt;/strong&gt; by OTechy.com. This utility combines metabolic curve data with clinical pulse protocols to provide a sustainable roadmap for fat loss and cellular repair in &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;.
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const fastData = {
        0: { title: &quot;Feeding &amp; Digestion&quot;, phase: &quot;Digestion&quot;, fact: &quot;Insulin acts like a traffic cop, directing energy into cells and stopping fat burn.&quot;, desc: &quot;Your body is processing your last meal. Muscles and brain are using glucose for energy. Digestion is at peak activity.&quot; },
        4: { title: &quot;Glycogen Burn&quot;, phase: &quot;Post-Absorptive&quot;, fact: &quot;For every glycogen molecule burned, your body releases 3 molecules of water.&quot;, desc: &quot;Insulin levels fall. Your body begins tapping into stored glycogen in the liver for energy. You may notice rapid water loss.&quot; },
        10: { title: &quot;Ketone Power&quot;, phase: &quot;Fat Burning&quot;, fact: &quot;Your brain runs up to 70% more efficiently on Ketones than on Glucose.&quot;, desc: &quot;Fat stores are releasing energy. The liver produces Ketone bodies, which act as premium fuel for the brain, enhancing focus.&quot; },
        16: { title: &quot;Autophagy Cleanup&quot;, phase: &quot;Cellular Repair&quot;, fact: &quot;The 2016 Nobel Prize was awarded for the discovery of this &#39;Self-Eating&#39; cleanup process.&quot;, desc: &quot;Cells begin identifying damaged proteins and old mitochondria to recycle them. This is your body&#39;s natural detox system.&quot; },
        24: { title: &quot;Hormone Surge&quot;, phase: &quot;Peak Anabolic&quot;, fact: &quot;Growth hormone levels skyrocket by up to 5x to preserve your muscle mass.&quot;, desc: &quot;Fat oxidation is maximized. Inflammation continues to drop. Growth hormones ensure you lose fat, not muscle.&quot; },
        30: { title: &quot;Metabolic Increase&quot;, phase: &quot;Hyper-Burn&quot;, fact: &quot;Metabolic rate can increase by up to 14% due to adrenaline spikes.&quot;, desc: &quot;Adrenaline and norepinephrine levels rise, keeping you alert and focused. This is a survival mechanism from our hunter-gatherer days.&quot; },
        36: { title: &quot;The Sweet Spot&quot;, phase: &quot;Maximum ROI&quot;, fact: &quot;This is the optimal balance of fat burning and repair before conservation kicks in.&quot;, desc: &quot;Maximum cellular housekeeping is complete. Your body is optimized for fat loss and insulin sensitivity is at its peak.&quot; }
    };

    function updateFastTracker(h) {
        document.getElementById(&#39;hour-val&#39;).innerText = h;
        let data = fastData[0];
        Object.keys(fastData).forEach(key =&gt; { if (parseInt(h) &gt;= parseInt(key)) data = fastData[key]; });

        document.getElementById(&#39;status-title&#39;).innerText = data.title;
        document.getElementById(&#39;phase-tag&#39;).innerText = data.phase;
        document.getElementById(&#39;status-desc&#39;).innerText = data.desc;
        document.getElementById(&#39;fun-fact-text&#39;).innerText = data.fact;
    }

    function generateFastPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();
        const hour = document.getElementById(&#39;hour-val&#39;).innerText;
        const y = new Date().getFullYear();

        doc.setFillColor(59, 130, 246); doc.rect(0, 0, 210, 40, &#39;F&#39;);
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.setFontSize(22); doc.setTextColor(255, 255, 255);
        doc.text(&quot;OTechy Fasting Bio-Report&quot;, 20, 25);
        doc.setFontSize(10); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`Metabolic Roadmap &amp; Timeline Analysis - ${y}`, 20, 32);

        doc.setTextColor(30, 41, 59); doc.setFontSize(16); doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(`Analysis: Hour ${hour} of Fasting`, 20, 55);
        
        doc.setFontSize(12);
        doc.text(`Phase: ${document.getElementById(&#39;phase-tag&#39;).innerText}`, 20, 65);
        doc.text(`Status: ${document.getElementById(&#39;status-title&#39;).innerText}`, 20, 72);
        
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        const splitText = doc.splitTextToSize(document.getElementById(&#39;status-desc&#39;).innerText, 170);
        doc.text(splitText, 20, 82);

        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;Fun Fact at this stage:&quot;, 20, 110);
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`- ${document.getElementById(&#39;fun-fact-text&#39;).innerText}`, 20, 118);

        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;Expert Recommendations:&quot;, 20, 135);
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(&quot;- Break fast with protein/fats (eggs, bone broth).&quot;, 20, 145);
        doc.text(&quot;- Do not repeat daily 16:8 indefinitely; use rest days.&quot;, 20, 152);
        doc.text(&quot;- Monitor sleep and grip strength for safety.&quot;, 20, 159);

        doc.save(`OTechy_Fasting_Report_Hour${hour}.pdf`);
    }

    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
        const y = new Date().getFullYear();
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = y);
        updateFastTracker(0);
    });
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7740042230728598284'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7740042230728598284'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/36-hour-fasting-bio-timeline-hourly.html' title='36-Hour Fasting Bio-Timeline: Hourly Body Changes'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-5013709601734478720</id><published>2026-04-04T05:53:00.000-07:00</published><updated>2026-04-06T01:45:36.058-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Nutrition"/><category scheme="http://www.blogger.com/atom/ns#" term="Vegetables"/><title type='text'>Vegetable &amp; Dairy Nutrition Database | Macro per 100g</title><content type='html'>&lt;title&gt;Precision Veg &amp; Dairy Database | 75+ Varieties &amp; Full Micros - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Standardized 100g database for vegetables, Indian Saag, and Dairy. Track Calcium, Potassium, Vit C, Vit K, B12, and Iron with precision logic.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,850;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System: Farm Fresh V3 (Mobile Responsive) --- */
    :root { 
        --primary: #16a34a; --primary-dark: #15803d; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-bg: #f0fdf4; --font-main: &#39;Poppins&#39;, sans-serif;
        --carb-color: #3b82f6; --pro-color: #8b5cf6; --fat-color: #eab308;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1350px; margin: 0 auto; padding: 70px 15px 60px; }
    
    /* Ads System */
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; background: #f1f5f9; border-radius: 10px; border: 1px dashed #cbd5e1; width: 100%; height: 90px; margin-bottom: 20px; }

    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; padding: clamp(40px, 8vw, 60px) 20px; background: linear-gradient(135deg, #dcfce7 0%, #ffffff 100%); border-radius: 24px; border: 1px solid var(--border); box-shadow: 0 10px 30px rgba(22, 163, 74, 0.05); }
    .hero-section h1 { font-size: clamp(24px, 5vw, 42px); font-weight: 850; margin: 0; letter-spacing: -1px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: clamp(12px, 3vw, 14px); font-weight: 500; max-width: 850px; margin: 10px auto 25px; }

    /* Filters System */
    .filter-tier { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 25px; }
    .filter-btn { background: var(--white); border: 1px solid var(--border); color: var(--accent); padding: 8px 16px; border-radius: 50px; font-weight: 700; font-size: 11px; cursor: pointer; transition: 0.2s; text-transform: uppercase; }
    .filter-btn:hover { border-color: var(--primary); color: var(--primary); background: var(--soft-bg); }
    .filter-btn.active { background: var(--text-dark); color: #fff; border-color: var(--text-dark); }
    .filter-btn.fav { color: #ef4444; border-color: #fecaca; background: #fef2f2; }

    /* Search Bar */
    .search-bar { position: relative; max-width: 700px; margin: 0 auto 30px; width: 100%; }
    .search-bar input { width: 100%; padding: 14px 20px 14px 45px; border-radius: 14px; border: 2px solid var(--border); font-family: var(--font-main); font-size: 15px; font-weight: 600; outline: none; box-shadow: 0 8px 25px rgba(0,0,0,0.03); }
    .search-icon { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: var(--accent); }

    /* Grid &amp; Cards */
    .bio-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 20px; }
    .bio-card { background: var(--white); border-radius: 20px; border: 1px solid #000; padding: 20px; transition: 0.3s; box-shadow: 0 4px 12px rgba(0,0,0,0.05); position: relative; }
    .bio-card:hover { border-color: var(--primary); transform: translateY(-3px); }
    
    .card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; }
    .bio-name { font-size: 19px; font-weight: 850; color: var(--text-dark); display: flex; align-items: center; gap: 10px; }
    .fav-btn { cursor: pointer; font-size: 20px; user-select: none; }
    
    .macro-mini { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; background: #f8fafc; padding: 12px; border-radius: 12px; margin-bottom: 15px; border: 1px solid var(--border); }
    .m-item { text-align: center; }
    .m-item span { font-size: 14px; font-weight: 850; display: block; }
    .m-item label { font-size: 9px; font-weight: 700; color: var(--accent); text-transform: uppercase; }

    .micro-grid { border-top: 1px solid var(--border); padding-top: 10px; margin-bottom: 15px; }
    .micro-row { display: flex; justify-content: space-between; font-size: 11px; padding: 4px 0; border-bottom: 1px dashed #f1f5f9; }
    .micro-lbl { color: var(--accent); font-weight: 600; }
    .micro-val { font-weight: 800; color: var(--text-dark); }

    .fact-tag { font-size: 11px; font-weight: 500; padding: 12px; background: #f0fdf4; border-radius: 10px; border-left: 4px solid var(--primary); color: #166534; margin-top: auto; line-height: 1.4; }

    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 40px 12px; }
        .bio-grid { grid-template-columns: 1fr; }
        .hero-section { padding: 30px 15px; }
        .filter-btn { font-size: 10px; padding: 6px 12px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;hero-section&quot;&gt;
     
        &lt;h1&gt;Global &amp; Regional  &lt;span&gt; Veggie Explorer&lt;/span&gt; Index&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Detailed profiles for 75+ items. Optimize your diet. Explore the exact macronutrients, net carbs, and mineral profiles of fresh vegetables, local Indian leafy greens (Saag), and dairy products based on a standardized 100g serving.&lt;/p&gt;
         &lt;p&gt; Tracking Calcium, Potassium, Vitamin K, B12, and Iron per 100g raw base.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;controls-area&quot;&gt;
        &lt;div class=&quot;search-bar&quot;&gt;
            &lt;svg class=&quot;search-icon&quot; width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;21&quot; y1=&quot;21&quot; x2=&quot;16.65&quot; y2=&quot;16.65&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            &lt;input type=&quot;text&quot; id=&quot;searchInput&quot; placeholder=&quot;Search Lal Saag, B12, Calcium...&quot; oninput=&quot;handleSearch()&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;filter-tier&quot; id=&quot;mainFilters&quot;&gt;
            &lt;button class=&quot;filter-btn active&quot; onclick=&quot;setFilter(&#39;All&#39;)&quot;&gt;All Items&lt;/button&gt;
            &lt;button class=&quot;filter-btn fav&quot; onclick=&quot;setFilter(&#39;Favorites&#39;)&quot;&gt;❤️ Tracked&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Leafy Greens&#39;)&quot;&gt;🥬 Leafy Greens (Saag)&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Indian&#39;)&quot;&gt;🇮🇳 Indian&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Vegetables&#39;)&quot;&gt;🥦 Vegetables&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Dairy&#39;)&quot;&gt;🥛 Dairy&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Keto-Friendly&#39;)&quot;&gt;🥑 Keto / Low Carb&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;High Protein&#39;)&quot;&gt;🧀 High Protein&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Calcium Rich&#39;)&quot;&gt;🦴 Calcium Rich&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;bio-grid&quot; id=&quot;dataGrid&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; style=&quot;margin-top:30px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;
    &lt;div class=&quot;otechy-ad-bottom&quot; style=&quot;margin-top:30px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const db = [
/* --- Remaining 72 Precision Database Entries --- */
{ name: &quot;Moringa Leaves (Sajne Pata)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Calcium Rich&quot;], cals: 64, carbs: 8.3, fiber: 2.0, pro: 9.4, fat: 1.4, calc: &quot;440mg&quot;, potas: &quot;337mg&quot;, vitC: &quot;51mg&quot;, vitK: &quot;108mcg&quot;, iron: &quot;4mg&quot;, mag: &quot;147mg&quot;, fact: &quot;A Bengali superfood with 4x more Calcium than milk and significant plant-based protein.&quot; },
{ name: &quot;Broccoli&quot;, emoji: &quot;🥦&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 34, carbs: 6.6, fiber: 2.6, pro: 2.8, fat: 0.4, calc: &quot;47mg&quot;, potas: &quot;316mg&quot;, vitC: &quot;89mg&quot;, vitK: &quot;101mcg&quot;, iron: &quot;0.7mg&quot;, mag: &quot;21mg&quot;, fact: &quot;High in Sulforaphane and Vitamin C. Steaming preserves the delicate folate and vitamin K.&quot; },
{ name: &quot;Fenugreek Leaves (Methi)&quot;, emoji: &quot;🌱&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 49, carbs: 6.0, fiber: 4.8, pro: 4.4, fat: 0.9, calc: &quot;395mg&quot;, potas: &quot;77mg&quot;, vitC: &quot;52mg&quot;, vitK: &quot;150mcg&quot;, iron: &quot;3.7mg&quot;, mag: &quot;50mg&quot;, fact: &quot;Highly effective for controlling blood sugar spikes and improving insulin response.&quot; },
{ name: &quot;Cauliflower (Fulkopi)&quot;, emoji: &quot;🥦&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 25, carbs: 5.0, fiber: 2.0, pro: 1.9, fat: 0.3, calc: &quot;22mg&quot;, potas: &quot;299mg&quot;, vitC: &quot;48mg&quot;, vitK: &quot;15mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;15mg&quot;, fact: &quot;The ultimate low-carb rice substitute. Packed with choline for brain health.&quot; },
{ name: &quot;Greek Yogurt&quot;, emoji: &quot;🥛&quot;, category: [&quot;Dairy&quot;, &quot;Keto-Friendly&quot;, &quot;High Protein&quot;, &quot;Calcium Rich&quot;], cals: 59, carbs: 3.6, fiber: 0, pro: 10.0, fat: 0.4, calc: &quot;110mg&quot;, potas: &quot;141mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.7mcg&quot;, iron: &quot;0.1mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Strained to double the protein and B12 concentration compared to regular curd.&quot; },
{ name: &quot;Bitter Gourd (Korola)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 17, carbs: 3.7, fiber: 2.8, pro: 1.0, fat: 0.2, calc: &quot;19mg&quot;, potas: &quot;296mg&quot;, vitC: &quot;84mg&quot;, vitK: &quot;4mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;17mg&quot;, fact: &quot;Contains Polypeptide-p, a plant insulin that naturally lowers blood glucose levels.&quot; },
{ name: &quot;Pointed Gourd (Potol)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 20, carbs: 2.2, fiber: 1.5, pro: 1.2, fat: 0.2, calc: &quot;30mg&quot;, potas: &quot;125mg&quot;, vitC: &quot;29mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;9mg&quot;, fact: &quot;A Bengali staple; great for digestion and managing seasonal fevers.&quot; },
{ name: &quot;Cabbage (Badhakopi)&quot;, emoji: &quot;🥬&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 25, carbs: 5.8, fiber: 2.5, pro: 1.3, fat: 0.1, calc: &quot;40mg&quot;, potas: &quot;170mg&quot;, vitC: &quot;36mg&quot;, vitK: &quot;76mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;12mg&quot;, fact: &quot;Rich in Glutamine, an amino acid that specifically heals the stomach lining.&quot; },
{ name: &quot;Bottle Gourd (Lau)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 14, carbs: 3.4, fiber: 0.5, pro: 0.6, fat: 0.1, calc: &quot;26mg&quot;, potas: &quot;150mg&quot;, vitC: &quot;10mg&quot;, vitK: &quot;1mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;11mg&quot;, fact: &quot;96% water; acts as a powerful natural diuretic and body coolant.&quot; },
{ name: &quot;Ridge Gourd (Jhinge)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 15, carbs: 3.0, fiber: 1.0, pro: 0.7, fat: 0.2, calc: &quot;18mg&quot;, potas: &quot;139mg&quot;, vitC: &quot;12mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;14mg&quot;, fact: &quot;Excellent for blood purification and boosting liver health.&quot; },
{ name: &quot;Drumstick (Sajne)&quot;, emoji: &quot;🎋&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 37, carbs: 8.5, fiber: 3.2, pro: 2.1, fat: 0.2, calc: &quot;30mg&quot;, potas: &quot;259mg&quot;, vitC: &quot;141mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;45mg&quot;, fact: &quot;The pods contain massive Vitamin C levels, higher than many citrus fruits.&quot; },
{ name: &quot;Pumpkin (Kumro)&quot;, emoji: &quot;🎃&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 26, carbs: 6.5, fiber: 0.5, pro: 1.0, fat: 0.1, calc: &quot;21mg&quot;, potas: &quot;340mg&quot;, vitC: &quot;9mg&quot;, vitK: &quot;1mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;12mg&quot;, fact: &quot;Extremely rich in Beta-Carotene (Vitamin A) for eye and skin health.&quot; },
{ name: &quot;Eggplant (Begun)&quot;, emoji: &quot;🍆&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 25, carbs: 5.9, fiber: 3.0, pro: 1.0, fat: 0.2, calc: &quot;9mg&quot;, potas: &quot;229mg&quot;, vitC: &quot;2mg&quot;, vitK: &quot;3mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;14mg&quot;, fact: &quot;Skin contains Nasunin, a potent antioxidant that protects brain cell membranes.&quot; },
{ name: &quot;Okra (Bhindi)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 33, carbs: 7.5, fiber: 3.2, pro: 1.9, fat: 0.2, calc: &quot;82mg&quot;, potas: &quot;299mg&quot;, vitC: &quot;23mg&quot;, vitK: &quot;31mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;57mg&quot;, fact: &quot;The mucilage (slime) binds to cholesterol during digestion, helping to flush it out.&quot; },
{ name: &quot;Carrot (Gajor)&quot;, emoji: &quot;🥕&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 41, carbs: 9.6, fiber: 2.8, pro: 0.9, fat: 0.2, calc: &quot;33mg&quot;, potas: &quot;320mg&quot;, vitC: &quot;6mg&quot;, vitK: &quot;13mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;12mg&quot;, fact: &quot;Bioavailability of Vitamin A increases significantly when carrots are cooked with a little fat.&quot; },
{ name: &quot;Beetroot&quot;, emoji: &quot;🧶&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 43, carbs: 9.6, fiber: 2.8, pro: 1.6, fat: 0.2, calc: &quot;16mg&quot;, potas: &quot;325mg&quot;, vitC: &quot;5mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;23mg&quot;, fact: &quot;High in nitrates which convert to nitric oxide, improving blood flow and stamina.&quot; },
{ name: &quot;Radish (Mulo)&quot;, emoji: &quot;🥕&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 16, carbs: 3.4, fiber: 1.6, pro: 0.7, fat: 0.1, calc: &quot;25mg&quot;, potas: &quot;233mg&quot;, vitC: &quot;15mg&quot;, vitK: &quot;1mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;10mg&quot;, fact: &quot;Natural antifungal properties and excellent for clearing sinus congestion.&quot; },
{ name: &quot;Snake Gourd (Chichinga)&quot;, emoji: &quot;🐍&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 18, carbs: 3.7, fiber: 0.8, pro: 0.6, fat: 0.3, calc: &quot;26mg&quot;, potas: &quot;150mg&quot;, vitC: &quot;9mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Used in Ayurveda to reduce heart inflammation and fever.&quot; },
{ name: &quot;Ash Gourd (Chalkumro)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 13, carbs: 3.0, fiber: 2.9, pro: 0.4, fat: 0.2, calc: &quot;19mg&quot;, potas: &quot;150mg&quot;, vitC: &quot;13mg&quot;, vitK: &quot;1mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;10mg&quot;, fact: &quot;The most alkaline vegetable; provides a massive energy boost to the nervous system.&quot; },
{ name: &quot;Potato&quot;, emoji: &quot;🥔&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 77, carbs: 17.5, fiber: 2.2, pro: 2.0, fat: 0.1, calc: &quot;12mg&quot;, potas: &quot;421mg&quot;, vitC: &quot;20mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;23mg&quot;, fact: &quot;Resistant starch forms when potatoes are cooled after cooking, benefiting gut health.&quot; },
{ name: &quot;Sweet Potato&quot;, emoji: &quot;🍠&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 86, carbs: 20.1, fiber: 3.0, pro: 1.6, fat: 0.1, calc: &quot;30mg&quot;, potas: &quot;337mg&quot;, vitC: &quot;2.4mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;25mg&quot;, fact: &quot;Packed with Vitamin A. Low GI makes it a superior carb choice over white potatoes.&quot; },
{ name: &quot;Green Peas (Matar)&quot;, emoji: &quot;🥣&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;High Protein&quot;], cals: 81, carbs: 14.5, fiber: 5.1, pro: 5.4, fat: 0.4, calc: &quot;25mg&quot;, potas: &quot;244mg&quot;, vitC: &quot;40mg&quot;, vitK: &quot;25mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;33mg&quot;, fact: &quot;High protein and fiber profile helps slow down sugar absorption in the blood.&quot; },
{ name: &quot;Bell Pepper (Capsicum)&quot;, emoji: &quot;🫑&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 20, carbs: 4.6, fiber: 1.7, pro: 0.9, fat: 0.2, calc: &quot;7mg&quot;, potas: &quot;175mg&quot;, vitC: &quot;80mg&quot;, vitK: &quot;5mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;10mg&quot;, fact: &quot;Red varieties contain 2x more Vitamin C than green ones.&quot; },
{ name: &quot;Tomato&quot;, emoji: &quot;🍅&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 18, carbs: 3.9, fiber: 1.2, pro: 0.9, fat: 0.2, calc: &quot;10mg&quot;, potas: &quot;237mg&quot;, vitC: &quot;14mg&quot;, vitK: &quot;8mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Cooking tomatoes releases Lycopene, which is essential for male prostate health.&quot; },
{ name: &quot;Cucumber (Sosra)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 15, carbs: 3.6, fiber: 0.5, pro: 0.7, fat: 0.1, calc: &quot;16mg&quot;, potas: &quot;147mg&quot;, vitC: &quot;2.8mg&quot;, vitK: &quot;16mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;13mg&quot;, fact: &quot;Most nutrients are in the peel. High silica content supports hair and nail growth.&quot; },
{ name: &quot;Garlic&quot;, emoji: &quot;🧄&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 149, carbs: 33.1, fiber: 2.1, pro: 6.4, fat: 0.5, calc: &quot;181mg&quot;, potas: &quot;401mg&quot;, vitC: &quot;31mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;1.7mg&quot;, mag: &quot;25mg&quot;, fact: &quot;Contains Allicin; crushing and letting it sit for 10 mins activates its medicinal power.&quot; },
{ name: &quot;Onion&quot;, emoji: &quot;🧅&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 40, carbs: 9.3, fiber: 1.7, pro: 1.1, fat: 0.1, calc: &quot;23mg&quot;, potas: &quot;146mg&quot;, vitC: &quot;7mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;10mg&quot;, fact: &quot;Rich in Quercetin, a flavonoid that helps combat allergies and inflammation.&quot; },
{ name: &quot;Ginger&quot;, emoji: &quot;🫚&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 80, carbs: 18.0, fiber: 2.0, pro: 1.8, fat: 0.8, calc: &quot;16mg&quot;, potas: &quot;415mg&quot;, vitC: &quot;5mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;43mg&quot;, fact: &quot;Contains Gingerol; highly effective against morning sickness and muscle pain.&quot; },
{ name: &quot;Green Chili&quot;, emoji: &quot;🌶️&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 40, carbs: 8.8, fiber: 1.5, pro: 1.9, fat: 0.4, calc: &quot;14mg&quot;, potas: &quot;322mg&quot;, vitC: &quot;242mg&quot;, vitK: &quot;14mcg&quot;, iron: &quot;1.0mg&quot;, mag: &quot;23mg&quot;, fact: &quot;One of the highest sources of Vitamin C per gram; boosts metabolism instantly.&quot; },
{ name: &quot;Colocasia Root (Gathi Kochu)&quot;, emoji: &quot;🥔&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 112, carbs: 26.5, fiber: 4.1, pro: 1.5, fat: 0.2, calc: &quot;43mg&quot;, potas: &quot;591mg&quot;, vitC: &quot;4.5mg&quot;, vitK: &quot;1mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;33mg&quot;, fact: &quot;Low GI carb that provides steady energy without insulin spikes.&quot; },
{ name: &quot;Yam (Ol)&quot;, emoji: &quot;🥔&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 118, carbs: 27.9, fiber: 4.1, pro: 1.5, fat: 0.2, calc: &quot;17mg&quot;, potas: &quot;816mg&quot;, vitC: &quot;17mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;21mg&quot;, fact: &quot;Massive Potassium content helps in regulating blood pressure and fluid balance.&quot; },
{ name: &quot;Amaranth Leaves (Note Saag)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Calcium Rich&quot;], cals: 23, carbs: 4.0, fiber: 2.1, pro: 2.5, fat: 0.3, calc: &quot;215mg&quot;, potas: &quot;611mg&quot;, vitC: &quot;43mg&quot;, vitK: &quot;1140mcg&quot;, iron: &quot;2.3mg&quot;, mag: &quot;55mg&quot;, fact: &quot;Highest Vitamin K content among regional greens, vital for blood clotting.&quot; },
{ name: &quot;Basella (Pui Saag)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Calcium Rich&quot;], cals: 19, carbs: 3.4, fiber: 1.0, pro: 1.8, fat: 0.3, calc: &quot;109mg&quot;, potas: &quot;510mg&quot;, vitC: &quot;102mg&quot;, vitK: &quot;160mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;65mg&quot;, fact: &quot;Exceptional Vitamin C source; the mucilage helps in soothing the digestive tract.&quot; },
{ name: &quot;Bottle Gourd Greens (Lau Pata)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 30, carbs: 4.0, fiber: 2.5, pro: 3.0, fat: 0.4, calc: &quot;120mg&quot;, potas: &quot;350mg&quot;, vitC: &quot;15mg&quot;, vitK: &quot;200mcg&quot;, iron: &quot;2.1mg&quot;, mag: &quot;40mg&quot;, fact: &quot;High iron and magnesium make it a perfect green for nursing mothers.&quot; },
{ name: &quot;Pumpkin Greens (Kumro Pata)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 19, carbs: 2.3, fiber: 1.8, pro: 2.0, fat: 0.2, calc: &quot;39mg&quot;, potas: &quot;438mg&quot;, vitC: &quot;11mg&quot;, vitK: &quot;180mcg&quot;, iron: &quot;2.2mg&quot;, mag: &quot;38mg&quot;, fact: &quot;Rich in Vitamin K and minerals; helps in faster wound healing.&quot; },
{ name: &quot;Water Spinach (Kolmi Saag)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 19, carbs: 3.1, fiber: 2.1, pro: 2.6, fat: 0.2, calc: &quot;77mg&quot;, potas: &quot;312mg&quot;, vitC: &quot;55mg&quot;, vitK: &quot;483mcg&quot;, iron: &quot;1.7mg&quot;, mag: &quot;71mg&quot;, fact: &quot;Contains a wealth of B-vitamins and is traditionally used to treat insomnia.&quot; },
{ name: &quot;Mustard Greens (Sarson Saag)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 27, carbs: 4.7, fiber: 3.2, pro: 2.9, fat: 0.4, calc: &quot;115mg&quot;, potas: &quot;384mg&quot;, vitC: &quot;70mg&quot;, vitK: &quot;257mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;32mg&quot;, fact: &quot;Contains glucosinolates which have potent cancer-fighting properties.&quot; },
{ name: &quot;Radish Greens (Mulo Saag)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 28, carbs: 4.0, fiber: 3.5, pro: 2.2, fat: 0.3, calc: &quot;265mg&quot;, potas: &quot;450mg&quot;, vitC: &quot;80mg&quot;, vitK: &quot;300mcg&quot;, iron: &quot;3.5mg&quot;, mag: &quot;60mg&quot;, fact: &quot;Often thrown away, but actually contains 4x more calcium and vitamin C than the radish itself.&quot; },
{ name: &quot;Bathua (Chenopodium)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 43, carbs: 7.0, fiber: 3.5, pro: 4.2, fat: 0.8, calc: &quot;280mg&quot;, potas: &quot;450mg&quot;, vitC: &quot;35mg&quot;, vitK: &quot;220mcg&quot;, iron: &quot;4.0mg&quot;, mag: &quot;45mg&quot;, fact: &quot;Powerful blood purifier and high in amino acids; a seasonal winter delicacy.&quot; },
{ name: &quot;Ipomoea (Kalmi Saag)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 19, carbs: 3.1, fiber: 2.0, pro: 2.6, fat: 0.2, calc: &quot;77mg&quot;, potas: &quot;312mg&quot;, vitC: &quot;55mg&quot;, vitK: &quot;450mcg&quot;, iron: &quot;1.6mg&quot;, mag: &quot;71mg&quot;, fact: &quot;Commonly found in Bengal; excellent for eye health and iron deficiency.&quot; },
{ name: &quot;Dill Leaves (Shepu)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 43, carbs: 7.0, fiber: 2.1, pro: 3.5, fat: 1.1, calc: &quot;208mg&quot;, potas: &quot;738mg&quot;, vitC: &quot;85mg&quot;, vitK: &quot;600mcg&quot;, iron: &quot;6.6mg&quot;, mag: &quot;55mg&quot;, fact: &quot;Massive Iron content; essential for new mothers to improve lactation.&quot; },
{ name: &quot;Paneer (Store)&quot;, emoji: &quot;🧀&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;High Protein&quot;, &quot;Calcium Rich&quot;], cals: 265, carbs: 3.5, fiber: 0, pro: 18.3, fat: 20.8, calc: &quot;480mg&quot;, potas: &quot;50mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.8mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;15mg&quot;, fact: &quot;Casein protein provides a slow release of amino acids, ideal for muscle repair.&quot; },
{ name: &quot;Curd (Homemade)&quot;, emoji: &quot;🥣&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;High Protein&quot;, &quot;Calcium Rich&quot;], cals: 61, carbs: 4.7, fiber: 0, pro: 3.5, fat: 3.3, calc: &quot;121mg&quot;, potas: &quot;155mg&quot;, vitC: &quot;0.5mg&quot;, vitB12: &quot;0.4mcg&quot;, mag: &quot;12mg&quot;, fact: &quot;Live cultures improve B12 synthesis in the gut. Best for digestive harmony.&quot; },
{ name: &quot;Cow Milk (Full Cream)&quot;, emoji: &quot;🥛&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;Calcium Rich&quot;], cals: 62, carbs: 4.8, fiber: 0, pro: 3.2, fat: 3.5, calc: &quot;120mg&quot;, potas: &quot;145mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.5mcg&quot;, iron: &quot;0.0mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Standard for bioavailable Calcium and Vitamin D (if fortified).&quot; },
{ name: &quot;Skimmed Milk&quot;, emoji: &quot;🥛&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 34, carbs: 5.0, fiber: 0, pro: 3.4, fat: 0.1, calc: &quot;125mg&quot;, potas: &quot;150mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.4mcg&quot;, iron: &quot;0.0mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Zero fat but retains all original Calcium and Protein of full-cream milk.&quot; },
{ name: &quot;Butter (Makhon)&quot;, emoji: &quot;🧈&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 717, carbs: 0.1, fiber: 0, pro: 0.9, fat: 81.1, calc: &quot;24mg&quot;, potas: &quot;24mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.2mcg&quot;, iron: &quot;0.0mg&quot;, mag: &quot;2mg&quot;, fact: &quot;Excellent source of Butyrate, a fatty acid that reduces intestinal inflammation.&quot; },
{ name: &quot;Ghee (Clarified Butter)&quot;, emoji: &quot;🫙&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 883, carbs: 0, fiber: 0, pro: 0, fat: 99.5, calc: &quot;0mg&quot;, potas: &quot;0mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0mcg&quot;, iron: &quot;0mg&quot;, mag: &quot;0mg&quot;, fact: &quot;Pure lipid source with high smoke point; supports vitamin absorption (A, D, E, K).&quot; },
{ name: &quot;Cheese (Cheddar)&quot;, emoji: &quot;🧀&quot;, category: [&quot;Dairy&quot;, &quot;Keto-Friendly&quot;, &quot;High Protein&quot;, &quot;Calcium Rich&quot;], cals: 403, carbs: 1.3, fiber: 0, pro: 24.9, fat: 33.1, calc: &quot;721mg&quot;, potas: &quot;98mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;1.1mcg&quot;, iron: &quot;0.1mg&quot;, mag: &quot;28mg&quot;, fact: &quot;Extremely high Calcium and B12 density. Perfect for low-carb energy.&quot; },
{ name: &quot;Mozzarella cheese&quot;, emoji: &quot;🧀&quot;, category: [&quot;Dairy&quot;, &quot;High Protein&quot;], cals: 280, carbs: 3.1, fiber: 0, pro: 22.2, fat: 17.1, calc: &quot;505mg&quot;, potas: &quot;76mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.6mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;20mg&quot;, fact: &quot;Higher water content and slightly lower calories than hard cheeses.&quot; },
{ name: &quot;Khoa (Mawa)&quot;, emoji: &quot;🧁&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;High Protein&quot;], cals: 300, carbs: 25.0, fiber: 0, pro: 14.5, fat: 20.0, calc: &quot;650mg&quot;, potas: &quot;350mg&quot;, vitC: &quot;1.2mg&quot;, vitB12: &quot;0.9mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;40mg&quot;, fact: &quot;Concentrated milk solids; extremely high in Calcium and Protein per bite.&quot; },
{ name: &quot;Mushroom (Button)&quot;, emoji: &quot;🍄&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 22, carbs: 3.3, fiber: 1.0, pro: 3.1, fat: 0.3, calc: &quot;3mg&quot;, potas: &quot;318mg&quot;, vitC: &quot;2.1mg&quot;, vitB12: &quot;0.1mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;9mg&quot;, fact: &quot;One of the few plant sources of Vitamin D if exposed to UV light.&quot; },
{ name: &quot;Coriander Leaves (Dhone Pata)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 23, carbs: 3.7, fiber: 2.8, pro: 2.1, fat: 0.5, calc: &quot;67mg&quot;, potas: &quot;521mg&quot;, vitC: &quot;27mg&quot;, vitK: &quot;310mcg&quot;, iron: &quot;1.8mg&quot;, mag: &quot;26mg&quot;, fact: &quot;Excellent heavy-metal detoxifier and aids in reducing skin inflammation.&quot; },
{ name: &quot;Mint Leaves (Pudina)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 70, carbs: 14.9, fiber: 8.0, pro: 3.8, fat: 0.9, calc: &quot;243mg&quot;, potas: &quot;569mg&quot;, vitC: &quot;31mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;5.1mg&quot;, mag: &quot;80mg&quot;, fact: &quot;Massive Iron and Magnesium levels; powerful remedy for indigestion and nausea.&quot; },
{ name: &quot;Curry Leaves (Kadi Patta)&quot;, emoji: &quot;🍃&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 108, carbs: 18.7, fiber: 6.4, pro: 6.1, fat: 1.0, calc: &quot;830mg&quot;, potas: &quot;570mg&quot;, vitC: &quot;4mg&quot;, vitA: &quot;126mcg&quot;, iron: &quot;0.9mg&quot;, mag: &quot;45mg&quot;, fact: &quot;Superior Calcium levels (830mg!); essential for hair strength and lipid control.&quot; },
{ name: &quot;Spring Onion&quot;, emoji: &quot;🌱&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 32, carbs: 7.3, fiber: 2.6, pro: 1.8, fat: 0.2, calc: &quot;72mg&quot;, potas: &quot;276mg&quot;, vitC: &quot;18.8mg&quot;, vitK: &quot;207mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;20mg&quot;, fact: &quot;High Vitamin K levels protect bone health and assist in heart protection.&quot; },
{ name: &quot;Celery&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 16, carbs: 3.0, fiber: 1.6, pro: 0.7, fat: 0.2, calc: &quot;40mg&quot;, potas: &quot;260mg&quot;, vitC: &quot;3mg&quot;, vitK: &quot;29mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Contains apigenin; excellent for lowering blood pressure and systemic stress.&quot; },
{ name: &quot;Zucchini&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 17, carbs: 3.1, fiber: 1.0, pro: 1.2, fat: 0.3, calc: &quot;16mg&quot;, potas: &quot;261mg&quot;, vitC: &quot;18mg&quot;, vitK: &quot;4mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;18mg&quot;, fact: &quot;High Manganese levels help the body produce collagen for joint health.&quot; },
{ name: &quot;Asparagus&quot;, emoji: &quot;🎋&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 20, carbs: 3.9, fiber: 2.1, pro: 2.2, fat: 0.1, calc: &quot;24mg&quot;, potas: &quot;202mg&quot;, vitC: &quot;5.6mg&quot;, vitK: &quot;41mcg&quot;, iron: &quot;2.1mg&quot;, mag: &quot;14mg&quot;, fact: &quot;Rich in Asparagine, which acts as a natural diuretic and kidney cleanser.&quot; },
{ name: &quot;Brussels Sprouts&quot;, emoji: &quot;🥦&quot;, category: [&quot;Vegetables&quot;], cals: 43, carbs: 9.0, fiber: 3.8, pro: 3.4, fat: 0.3, calc: &quot;42mg&quot;, potas: &quot;389mg&quot;, vitC: &quot;85mg&quot;, vitK: &quot;177mcg&quot;, iron: &quot;1.4mg&quot;, mag: &quot;23mg&quot;, fact: &quot;Massive Vitamin K content; essential for regulating calcium distribution in the body.&quot; },
{ name: &quot;Kale&quot;, emoji: &quot;🥬&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Calcium Rich&quot;], cals: 49, carbs: 8.8, fiber: 3.6, pro: 4.3, fat: 0.9, calc: &quot;150mg&quot;, potas: &quot;491mg&quot;, vitC: &quot;120mg&quot;, vitK: &quot;817mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;47mg&quot;, fact: &quot;One of the most nutrient-dense foods on Earth; unmatched Vitamin K and C profile.&quot; },
{ name: &quot;Artichoke&quot;, emoji: &quot;🍏&quot;, category: [&quot;Vegetables&quot;], cals: 47, carbs: 10.5, fiber: 5.4, pro: 3.3, fat: 0.2, calc: &quot;44mg&quot;, potas: &quot;370mg&quot;, vitC: &quot;11.7mg&quot;, vitK: &quot;14mcg&quot;, iron: &quot;1.3mg&quot;, mag: &quot;60mg&quot;, fact: &quot;Contains Cynarin; aggressively improves liver bile production and digestion.&quot; },
{ name: &quot;Leek&quot;, emoji: &quot;🌱&quot;, category: [&quot;Vegetables&quot;], cals: 61, carbs: 14.2, fiber: 1.8, pro: 1.5, fat: 0.3, calc: &quot;59mg&quot;, potas: &quot;180mg&quot;, vitC: &quot;12mg&quot;, vitK: &quot;47mcg&quot;, iron: &quot;2.1mg&quot;, mag: &quot;28mg&quot;, fact: &quot;Great source of Kaempferol, a flavonoid that protects blood vessel linings.&quot; },
{ name: &quot;Sweet Corn&quot;, emoji: &quot;🌽&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 86, carbs: 18.7, fiber: 2.0, pro: 3.3, fat: 1.4, calc: &quot;2mg&quot;, potas: &quot;270mg&quot;, vitC: &quot;7mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;37mg&quot;, fact: &quot;High in Lutein and Zeaxanthin, critical antioxidants for retinal (eye) health.&quot; },
{ name: &quot;Turnip (Shalgam)&quot;, emoji: &quot;🧅&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 28, carbs: 6.4, fiber: 1.8, pro: 0.9, fat: 0.1, calc: &quot;30mg&quot;, potas: &quot;191mg&quot;, vitC: &quot;21mg&quot;, vitK: &quot;0mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;11mg&quot;, fact: &quot;Glucosinolates in turnips help reduce gut inflammation and oxidative stress.&quot; },
{ name: &quot;Snake Gourd Greens&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 22, carbs: 3.5, fiber: 2.0, pro: 2.5, fat: 0.3, calc: &quot;90mg&quot;, potas: &quot;300mg&quot;, vitC: &quot;12mg&quot;, vitK: &quot;150mcg&quot;, iron: &quot;1.8mg&quot;, mag: &quot;35mg&quot;, fact: &quot;Commonly used in regional Bengali mashes (Bhorta) to treat seasonal digestive issues.&quot; },
{ name: &quot;Red Cabbage&quot;, emoji: &quot;🥬&quot;, category: [&quot;Vegetables&quot;, &quot;Keto-Friendly&quot;], cals: 31, carbs: 7.4, fiber: 2.1, pro: 1.4, fat: 0.2, calc: &quot;45mg&quot;, potas: &quot;243mg&quot;, vitC: &quot;57mg&quot;, vitK: &quot;38mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;16mg&quot;, fact: &quot;Contains Anthocyanins (purple pigment) that aggressively fight cellular inflammation.&quot; },
{ name: &quot;Bok Choy&quot;, emoji: &quot;🥬&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Keto-Friendly&quot;], cals: 13, carbs: 2.2, fiber: 1.0, pro: 1.5, fat: 0.2, calc: &quot;105mg&quot;, potas: &quot;252mg&quot;, vitC: &quot;45mg&quot;, vitK: &quot;63mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;19mg&quot;, fact: &quot;Low in oxalates, making its massive Calcium content very easy for the body to absorb.&quot; },
{ name: &quot;Tofu (Extra Firm)&quot;, emoji: &quot;🧊&quot;, category: [&quot;Vegetables&quot;, &quot;High Protein&quot;, &quot;Keto-Friendly&quot;], cals: 83, carbs: 2.3, fiber: 1.0, pro: 10.0, fat: 5.0, calc: &quot;350mg&quot;, potas: &quot;120mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;37mg&quot;, fact: &quot;Complete plant protein; Calcium content depends on whether it was set with calcium sulfate.&quot; },
{ name: &quot;Broad Beans (Seem)&quot;, emoji: &quot;🫘&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;High Protein&quot;], cals: 34, carbs: 5.8, fiber: 4.5, pro: 3.5, fat: 0.3, calc: &quot;45mg&quot;, potas: &quot;220mg&quot;, vitC: &quot;18mg&quot;, vitK: &quot;15mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;35mg&quot;, fact: &quot;A Bengali winter staple; high fiber assists in cleaning the digestive tract.&quot; },
{ name: &quot;French Beans&quot;, emoji: &quot;🎋&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 31, carbs: 7.0, fiber: 2.7, pro: 1.8, fat: 0.2, calc: &quot;37mg&quot;, potas: &quot;211mg&quot;, vitC: &quot;12.2mg&quot;, vitK: &quot;43mcg&quot;, iron: &quot;1.0mg&quot;, mag: &quot;25mg&quot;, fact: &quot;Good source of Silicon, which is vital for bone health and skin elasticity.&quot; },
{ name: &quot;Arugula&quot;, emoji: &quot;🥬&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Keto-Friendly&quot;], cals: 25, carbs: 3.7, fiber: 1.6, pro: 2.6, fat: 0.7, calc: &quot;160mg&quot;, potas: &quot;369mg&quot;, vitC: &quot;15mg&quot;, vitK: &quot;109mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;47mg&quot;, fact: &quot;Contains dietary nitrates that improve sports performance and lower blood pressure.&quot; },
{ name: &quot;Brie Cheese&quot;, emoji: &quot;🧀&quot;, category: [&quot;Dairy&quot;, &quot;Keto-Friendly&quot;, &quot;High Protein&quot;], cals: 334, carbs: 0.5, fiber: 0, pro: 20.8, fat: 27.7, calc: &quot;184mg&quot;, potas: &quot;152mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;1.7mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;20mg&quot;, fact: &quot;Highest B12 profile among soft cheeses; essential for DNA production and nerve health.&quot; },
{ name: &quot;Pui Saag (Basella/Malabar Spinach)&quot;, emoji: &quot;🌿&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;, &quot;Calcium Rich&quot;], cals: 19, carbs: 3.4, fiber: 1.0, pro: 1.8, fat: 0.3, calc: &quot;109mg&quot;, potas: &quot;510mg&quot;, vitC: &quot;102mg&quot;, vitK: &quot;160mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;65mg&quot;, fact: &quot;The high mucilage content acts as a natural prebiotic, protecting the gut lining from inflammation.&quot; },
{ name: &quot;Kulekhara (Hygrophila)&quot;, emoji: &quot;🌱&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 35, carbs: 5.2, fiber: 2.1, pro: 2.4, fat: 0.2, calc: &quot;210mg&quot;, potas: &quot;420mg&quot;, vitC: &quot;15mg&quot;, vitK: &quot;90mcg&quot;, iron: &quot;9.8mg&quot;, mag: &quot;44mg&quot;, fact: &quot;Known as the &#39;Iron King&#39; of Bengali greens; clinically proven to significantly boost hemoglobin levels.&quot; },
{ name: &quot;Sushni Saag&quot;, emoji: &quot;🍀&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 28, carbs: 4.5, fiber: 1.8, pro: 2.1, fat: 0.3, calc: &quot;180mg&quot;, potas: &quot;390mg&quot;, vitC: &quot;12mg&quot;, vitK: &quot;110mcg&quot;, iron: &quot;3.2mg&quot;, mag: &quot;52mg&quot;, fact: &quot;Traditionally used in Bengal to treat insomnia and anxiety due to its mild sedative properties.&quot; },
{ name: &quot;Thankuni Pata (Centella)&quot;, emoji: &quot;🍃&quot;, category: [&quot;Vegetables&quot;, &quot;Leafy Greens&quot;, &quot;Indian&quot;], cals: 37, carbs: 6.8, fiber: 2.4, pro: 2.0, fat: 0.2, calc: &quot;170mg&quot;, potas: &quot;410mg&quot;, vitC: &quot;10mg&quot;, vitK: &quot;80mcg&quot;, iron: &quot;2.1mg&quot;, mag: &quot;38mg&quot;, fact: &quot;Contains triterpenoids that speed up wound healing and improve cognitive function/focus.&quot; },
{ name: &quot;Chhena (Fresh Paneer Whey-Drained)&quot;, emoji: &quot;🥛&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;High Protein&quot;, &quot;Calcium Rich&quot;], cals: 155, carbs: 2.8, fiber: 0, pro: 14.2, fat: 9.5, calc: &quot;320mg&quot;, potas: &quot;80mg&quot;, vitC: &quot;0mg&quot;, vitB12: &quot;0.6mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;12mg&quot;, fact: &quot;Unpressed curd is easier to digest than block paneer; ideal for sensitive stomachs and child nutrition.&quot; },
{ name: &quot;Buttermilk (Ghol/Chhaas)&quot;, emoji: &quot;🥛&quot;, category: [&quot;Dairy&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 30, carbs: 4.1, fiber: 0, pro: 3.0, fat: 0.2, calc: &quot;110mg&quot;, potas: &quot;140mg&quot;, vitC: &quot;1mg&quot;, vitB12: &quot;0.4mcg&quot;, iron: &quot;0.0mg&quot;, mag: &quot;10mg&quot;, fact: &quot;Natural probiotic and body coolant; the lactic acid aids in cleaning the digestive tract post-meal.&quot; },
{ name: &quot;Radish Pods (Sengri/Mulo-r Phol)&quot;, emoji: &quot;🎋&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 28, carbs: 4.5, fiber: 2.0, pro: 1.8, fat: 0.2, calc: &quot;35mg&quot;, potas: &quot;210mg&quot;, vitC: &quot;32mg&quot;, vitK: &quot;18mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;14mg&quot;, fact: &quot;Tastes like radish but higher in Vitamin C; great for detoxification and liver enzyme support.&quot; },
{ name: &quot;Elephant Foot Yam (Ol Kochu)&quot;, emoji: &quot;🥔&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;], cals: 118, carbs: 25.0, fiber: 4.0, pro: 1.5, fat: 0.2, calc: &quot;50mg&quot;, potas: &quot;816mg&quot;, vitC: &quot;15mg&quot;, vitK: &quot;5mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;25mg&quot;, fact: &quot;Rich in Isoflavones which help regulate hormones; needs thorough cooking to remove calcium oxalates.&quot; },
{ name: &quot;Lotus Stem (Kamal Kakdi)&quot;, emoji: &quot;🍥&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Digestion&quot;], cals: 74, carbs: 17.2, fiber: 4.9, pro: 2.6, fat: 0.1, calc: &quot;45mg&quot;, potas: &quot;556mg&quot;, vitC: &quot;44mg&quot;, vitB6: &quot;0.25mg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;23mg&quot;, fact: &quot;High in dietary fiber and B-Vitamins; helps manage stress and supports red blood cell production.&quot; },
{ name: &quot;Pointed Gourd (Potol)&quot;, emoji: &quot;🥒&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 20, carbs: 2.2, fiber: 1.6, pro: 1.2, fat: 0.2, calc: &quot;30mg&quot;, potas: &quot;125mg&quot;, vitC: &quot;29mg&quot;, vitK: &quot;2mcg&quot;, iron: &quot;1.5mg&quot;, mag: &quot;10mg&quot;, fact: &quot;Seed-rich gourds that aid in digestion and have traditionally been used to manage seasonal fevers.&quot; },
{ name: &quot;Cluster Beans (Gwar Phali)&quot;, emoji: &quot;🎋&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;High Protein&quot;], cals: 54, carbs: 10.8, fiber: 5.4, pro: 3.3, fat: 0.4, calc: &quot;130mg&quot;, potas: &quot;285mg&quot;, vitC: &quot;15mg&quot;, vitK: &quot;45mcg&quot;, iron: &quot;1.1mg&quot;, mag: &quot;40mg&quot;, fact: &quot;High in Guar Gum (soluble fiber) which significantly lowers blood cholesterol and sugar.&quot; },
{ name: &quot;Spiny Gourd (Kakrol)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Keto-Friendly&quot;], cals: 22, carbs: 3.5, fiber: 3.0, pro: 1.5, fat: 0.2, calc: &quot;25mg&quot;, potas: &quot;230mg&quot;, vitC: &quot;40mg&quot;, vitK: &quot;10mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;18mg&quot;, fact: &quot;Bengali seasonal favorite; contains high levels of antioxidants that protect the liver from toxins.&quot; },
{ name: &quot;Raw Papaya (Pepe)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Digestion&quot;], cals: 32, carbs: 7.2, fiber: 1.8, pro: 0.6, fat: 0.1, calc: &quot;20mg&quot;, potas: &quot;250mg&quot;, vitC: &quot;45mg&quot;, vitK: &quot;5mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;10mg&quot;, fact: &quot;Contains Papain in its most active form; unmatched for tenderizing meat and curing chronic bloating.&quot; },
{ name: &quot;Broad Beans (Seem)&quot;, emoji: &quot;🫘&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;High Protein&quot;], cals: 34, carbs: 5.8, fiber: 4.5, pro: 3.5, fat: 0.3, calc: &quot;45mg&quot;, potas: &quot;220mg&quot;, vitC: &quot;18mg&quot;, vitK: &quot;15mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;35mg&quot;, fact: &quot;Excellent source of L-dopa, a precursor to dopamine which supports motor function and mood.&quot; },
{ name: &quot;Water Caltrop (Paniphal)&quot;, emoji: &quot;🌰&quot;, category: [&quot;Vegetables&quot;, &quot;Indian&quot;, &quot;Bengali Local&quot;], cals: 97, carbs: 23.9, fiber: 3.0, pro: 1.4, fat: 0.1, calc: &quot;12mg&quot;, potas: &quot;580mg&quot;, vitC: &quot;4mg&quot;, vitB6: &quot;0.3mg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;22mg&quot;, fact: &quot;Massive Vitamin B6 and Potassium for nervous system health; traditionally eaten during fasts for energy.&quot; }      
    ];

    let currentFilter = &#39;All&#39;;
    let userFavorites = JSON.parse(localStorage.getItem(&#39;otechy_veg_favs_v3&#39;)) || [];

    function setFilter(f) {
        currentFilter = f;
        document.querySelectorAll(&#39;.filter-btn&#39;).forEach(btn =&gt; btn.classList.remove(&#39;active&#39;));
        event.target.classList.add(&#39;active&#39;);
        renderGrid();
    }

    function toggleFavorite(name) {
        if (userFavorites.includes(name)) {
            userFavorites = userFavorites.filter(n =&gt; n !== name);
        } else {
            userFavorites.push(name);
        }
        localStorage.setItem(&#39;otechy_veg_favs_v3&#39;, JSON.stringify(userFavorites));
        renderGrid();
    }

    function handleSearch() { renderGrid(); }

    function renderGrid() {
        const grid = document.getElementById(&#39;dataGrid&#39;);
        const query = document.getElementById(&#39;searchInput&#39;).value.toLowerCase();
        grid.innerHTML = &#39;&#39;;

        let filtered = db.filter(f =&gt; {
            const matchesQuery = f.name.toLowerCase().includes(query) || f.fact.toLowerCase().includes(query);
            const matchesFilter = (currentFilter === &#39;All&#39;) || 
                                 (currentFilter === &#39;Favorites&#39; ? userFavorites.includes(f.name) : f.category.includes(currentFilter));
            return matchesQuery &amp;&amp; matchesFilter;
        });

        filtered.forEach(f =&gt; {
            const isFav = userFavorites.includes(f.name);
            const card = document.createElement(&#39;div&#39;);
            card.className = &#39;bio-card&#39;;
            const netCarbs = Math.max(0, f.carbs - f.fiber).toFixed(1);

            card.innerHTML = `
                &lt;div class=&quot;card-header&quot;&gt;
                    &lt;div class=&quot;bio-name&quot;&gt;&lt;span&gt;${f.emoji}&lt;/span&gt; ${f.name}&lt;/div&gt;
                    &lt;div class=&quot;fav-btn&quot; onclick=&quot;toggleFavorite(&#39;${f.name}&#39;)&quot;&gt;${isFav ? &#39;❤️&#39; : &#39;🤍&#39;}&lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;macro-mini&quot;&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Cals&lt;/label&gt;&lt;span&gt;${f.cals}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Net Carbs&lt;/label&gt;&lt;span&gt;${netCarbs}g&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Protein&lt;/label&gt;&lt;span&gt;${f.pro}g&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;micro-grid&quot;&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Calcium / Potassium&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.calc} / ${f.potas}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Vit C / Iron&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.vitC} / ${f.iron || &#39;-&#39;}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Vit K / B12&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.vitK || &#39;-&#39;} / ${f.vitB12 || &#39;-&#39;}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;micro-row&quot;&gt;&lt;span class=&quot;micro-lbl&quot;&gt;Magnesium&lt;/span&gt;&lt;span class=&quot;micro-val&quot;&gt;${f.mag || &#39;-&#39;}&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;fact-tag&quot;&gt;&lt;strong&gt;Clinical Note:&lt;/strong&gt; ${f.fact}&lt;/div&gt;
            `;
            grid.appendChild(card);
        });
    }

    renderGrid();
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5013709601734478720'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5013709601734478720'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/vegetable-dairy-nutrition-database.html' title='Vegetable &amp; Dairy Nutrition Database | Macro per 100g'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-5285286746452999488</id><published>2026-04-04T05:37:00.000-07:00</published><updated>2026-04-06T01:53:52.598-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fruits"/><category scheme="http://www.blogger.com/atom/ns#" term="Nutrition"/><title type='text'>Fruit Nutrition Database | Macros per 100g</title><content type='html'>&lt;title&gt;Global Fruit Nutrition Database | 100+ Varieties &amp; 12+ Nutrients - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Ultimate 100g fruit database. Detailed breakdown of Vitamins (A, B6, C, K, Folate) and Minerals (Iron, Magnesium, Potassium, Calcium) for global and regional fruits.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,850;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Fresh Fruit Theme V5 --- */
    :root { 
        --primary: #ea580c; --primary-dark: #c2410c; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-bg: #ffedd5; --font-main: &#39;Poppins&#39;, sans-serif;
        --carb-color: #3b82f6; --pro-color: #8b5cf6; --fat-color: #eab308;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1350px; margin: 0 auto; padding: 70px 15px 60px; }
    
    /* Hide default Blogger title */
    .post-content &gt; h2:first-of-type, .post-area &gt; .post-content &gt; h2:first-child { display: none !important; }
    .otechy-tool-wrapper br { display: none !important; }

    /* Ads System */
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; background: #f1f5f9; border-radius: 10px; border: 1px dashed #cbd5e1; width: 100%; height: 90px; margin-bottom: 20px; }

    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; padding: clamp(40px, 8vw, 60px) 20px; background: linear-gradient(135deg, #ffedd5 0%, #ffffff 100%); border-radius: 24px; border: 1px solid var(--border); box-shadow: 0 10px 30px rgba(234, 88, 12, 0.05); }
    .hero-section h1 { font-size: clamp(24px, 5vw, 42px); font-weight: 850; margin: 0; letter-spacing: -1px; line-height: 1.1; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: clamp(12px, 3vw, 14px); font-weight: 500; max-width: 850px; margin: 15px auto 25px; }
    
    .db-stats { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; margin-bottom: 20px; }
    .stat-pill { background: var(--white); border: 1px solid var(--border); padding: 6px 14px; border-radius: 50px; font-size: 10px; font-weight: 800; color: var(--primary-dark); text-transform: uppercase; }

    /* Filters System */
    .filter-tier { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; max-width: 1100px; margin-left: auto; margin-right: auto; }
    .filter-btn { background: var(--white); border: 1px solid var(--border); color: var(--accent); padding: 8px 16px; border-radius: 50px; font-family: var(--font-main); font-weight: 700; font-size: 11px; cursor: pointer; transition: 0.2s; text-transform: uppercase; letter-spacing: 0.5px; box-shadow: 0 2px 5px rgba(0,0,0,0.02);}
    .filter-btn:hover { border-color: var(--primary); color: var(--primary); background: var(--soft-bg); }
    .filter-btn.active { background: var(--text-dark); color: #fff; border-color: var(--text-dark); box-shadow: 0 6px 15px rgba(0,0,0,0.1); }
    .filter-btn.fav { color: #ef4444; border-color: #fecaca; background: #fef2f2; }

    /* Search Bar */
    .search-bar { position: relative; max-width: 700px; margin: 0 auto 30px; width: 100%; }
    .search-bar input { width: 100%; padding: 14px 20px 14px 45px; border-radius: 14px; border: 2px solid var(--border); font-family: var(--font-main); font-size: 15px; font-weight: 600; outline: none; box-shadow: 0 8px 25px rgba(0,0,0,0.03); transition: 0.2s; }
    .search-bar input:focus { border-color: var(--primary); background: #fff; }
    .search-icon { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: var(--accent); }

    /* Grid &amp; Cards */
    .bio-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 20px; }
    .bio-card { background: var(--white); border-radius: 20px; border: 1px solid #000; padding: 20px; display: flex; flex-direction: column; transition: 0.3s; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    .bio-card:hover { border-color: var(--primary); transform: translateY(-3px); }
    
    .card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; }
    .bio-name { font-size: 19px; font-weight: 850; color: var(--text-dark); display: flex; align-items: center; gap: 10px; margin: 0; }
    .fav-icon { cursor: pointer; font-size: 20px; user-select: none; }
    
    .macro-mini { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; background: #f8fafc; padding: 12px; border-radius: 12px; margin-bottom: 15px; border: 1px solid var(--border); }
    .m-item { text-align: center; }
    .m-item span { font-size: 14px; font-weight: 850; display: block; color: var(--text-dark); }
    .m-item label { font-size: 9px; font-weight: 700; color: var(--accent); text-transform: uppercase; letter-spacing: 0.5px; }

    /* Micro Table Style */
    .micro-table { width: 100%; border-collapse: collapse; margin-top: 10px; margin-bottom: 15px; border-top: 1px solid var(--border); }
    .micro-table td { font-size: 11px; padding: 6px 0; border-bottom: 1px dashed #f1f5f9; }
    .micro-table td:nth-child(2) { text-align: right; font-weight: 800; color: var(--text-dark); }
    .micro-lbl { color: var(--accent); font-weight: 600; }

    .fact-tag { font-size: 11px; font-weight: 500; padding: 12px; background: #fdf2f8; border-radius: 10px; border-left: 4px solid var(--primary); color: #831843; margin-top: auto; line-height: 1.4; }

    /* --- MOBILE RESPONSIVENESS --- */
    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 40px 12px 40px; }
        .hero-section { padding: 30px 15px; border-radius: 16px; }
        .bio-grid { grid-template-columns: 1fr; }
        .search-bar { margin-bottom: 20px; }
        .filter-btn { font-size: 10px; padding: 6px 12px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;otechy-badge&quot; style=&quot;background:var(--white); color:var(--primary); padding: 5px 15px; border-radius: 50px; font-size: 10px; font-weight: 800; margin-bottom: 15px; display: inline-block; border: 1px solid var(--border);&quot;&gt;Precision Bio-Index&lt;/div&gt;
        &lt;h1&gt;Global &lt;span&gt;Fruit&lt;/span&gt; Nutrient DB&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Standardized 100g serving data. Detailed micronutrient mapping for Vitamins (A, B6, C, K, Folate) and Minerals (Iron, Magnesium, Potassium, Calcium).&lt;/p&gt;
        &lt;div class=&quot;db-stats&quot;&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🔬 100+ Fruits&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🌴 Regional Varieties&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;⚖️ 100g Raw Base&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;controls-area&quot;&gt;
        &lt;div class=&quot;search-bar&quot;&gt;
            &lt;svg class=&quot;search-icon&quot; width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;21&quot; y1=&quot;21&quot; x2=&quot;16.65&quot; y2=&quot;16.65&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            &lt;input type=&quot;text&quot; id=&quot;searchInput&quot; placeholder=&quot;Search Sugarcane, Jamrul, Folate, Iron...&quot; oninput=&quot;handleSearch()&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;filter-tier&quot; id=&quot;mainFilters&quot;&gt;
            &lt;button class=&quot;filter-btn active&quot; onclick=&quot;setFilter(&#39;All&#39;)&quot;&gt;All Fruits&lt;/button&gt;
            &lt;button class=&quot;filter-btn fav&quot; onclick=&quot;setFilter(&#39;Favorites&#39;)&quot;&gt;❤️ Tracked&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Regional&#39;)&quot;&gt;🌴 Regional&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Exotic&#39;)&quot;&gt;🌍 Exotic&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Keto-Friendly&#39;)&quot;&gt;🥑 Keto / Low Carb&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Immunity&#39;)&quot;&gt;🍊 Immunity&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Digestion&#39;)&quot;&gt;🍏 Digestion&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Hydration&#39;)&quot;&gt;🍉 Hydration&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Energy&#39;)&quot;&gt;⚡ Energy&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;bio-grid&quot; id=&quot;dataGrid&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    const fruitDB = [
        { name: &quot;Lotkon&quot;, emoji: &quot;🍇&quot;, category: [&quot;Regional&quot;, &quot;Immunity&quot;], cals: 55, carbs: 13, fiber: 1.2, pro: 0.8, fat: 0.2, vitC: &quot;55mg&quot;, vitA: &quot;5mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;15mcg&quot;, iron: &quot;0.9mg&quot;, mag: &quot;14mg&quot;, potas: &quot;200mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;Regional favorite with higher iron and vitamin C content than grapes.&quot; },
        { name: &quot;Sugarcane (Raw)&quot;, emoji: &quot;🎋&quot;, category: [&quot;Regional&quot;, &quot;Energy&quot;, &quot;Hydration&quot;], cals: 73, carbs: 18.1, fiber: 0.4, pro: 0.2, fat: 0.1, vitC: &quot;2.1mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;2mcg&quot;, iron: &quot;1.1mg&quot;, mag: &quot;12mg&quot;, potas: &quot;63mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;A natural source of iron and essential electrolytes for hydration.&quot; },
        { name: &quot;Jamrul (Water Apple)&quot;, emoji: &quot;🌸&quot;, category: [&quot;Regional&quot;, &quot;Hydration&quot;, &quot;Keto-Friendly&quot;], cals: 25, carbs: 5.7, fiber: 1.5, pro: 0.6, fat: 0.3, vitC: &quot;22mg&quot;, vitA: &quot;17mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;4mcg&quot;, iron: &quot;0.07mg&quot;, mag: &quot;5mg&quot;, potas: &quot;123mg&quot;, calcium: &quot;29mg&quot;, fact: &quot;Low calorie and extremely hydrating. Good for cooling the body.&quot; },
        { name: &quot;Bael (Wood Apple)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Regional&quot;, &quot;Digestion&quot;], cals: 137, carbs: 31.8, fiber: 2.9, pro: 1.8, fat: 0.3, vitC: &quot;8.5mg&quot;, vitA: &quot;55mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;12mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;18mg&quot;, potas: &quot;600mg&quot;, calcium: &quot;85mg&quot;, fact: &quot;Super-rich in Potassium and Calcium. Excellent for gastrointestinal health.&quot; },
        { name: &quot;Indian Amla&quot;, emoji: &quot;🍏&quot;, category: [&quot;Regional&quot;, &quot;Immunity&quot;], cals: 44, carbs: 10.2, fiber: 4.3, pro: 0.9, fat: 0.6, vitC: &quot;600mg&quot;, vitA: &quot;15mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;20mg&quot;, potas: &quot;198mg&quot;, calcium: &quot;50mg&quot;, fact: &quot;The king of Vitamin C. Boosts collagen and natural immunity.&quot; },
        { name: &quot;Avocado&quot;, emoji: &quot;🥑&quot;, category: [&quot;Keto-Friendly&quot;, &quot;Digestion&quot;, &quot;Energy&quot;], cals: 160, carbs: 8.5, fiber: 6.7, pro: 2, fat: 14.7, vitC: &quot;10mg&quot;, vitA: &quot;7mcg&quot;, vitB6: &quot;0.26mg&quot;, folate: &quot;81mcg&quot;, iron: &quot;0.55mg&quot;, mag: &quot;29mg&quot;, potas: &quot;485mg&quot;, calcium: &quot;12mg&quot;, fact: &quot;Unmatched monounsaturated fats, Magnesium, and Vitamin K levels.&quot; },
        { name: &quot;Banana&quot;, emoji: &quot;🍌&quot;, category: [&quot;Energy&quot;, &quot;Digestion&quot;], cals: 89, carbs: 22.8, fiber: 2.6, pro: 1.1, fat: 0.3, vitC: &quot;8.7mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.37mg&quot;, folate: &quot;20mcg&quot;, iron: &quot;0.26mg&quot;, mag: &quot;27mg&quot;, potas: &quot;358mg&quot;, calcium: &quot;5mg&quot;, fact: &quot;Best source of Vitamin B6 for brain health and glycogen storage.&quot; },
        { name: &quot;Guava&quot;, emoji: &quot;🍈&quot;, category: [&quot;Regional&quot;, &quot;Immunity&quot;, &quot;Digestion&quot;], cals: 68, carbs: 14.3, fiber: 5.4, pro: 2.6, fat: 1.0, vitC: &quot;228mg&quot;, vitA: &quot;31mcg&quot;, vitB6: &quot;0.11mg&quot;, folate: &quot;49mcg&quot;, iron: &quot;0.26mg&quot;, mag: &quot;22mg&quot;, potas: &quot;417mg&quot;, calcium: &quot;18mg&quot;, fact: &quot;High fiber and Vitamin C density aid in blood sugar management.&quot; },
        { name: &quot;Pomegranate&quot;, emoji: &quot;🍎&quot;, category: [&quot;Immunity&quot;, &quot;Hydration&quot;], cals: 83, carbs: 18.7, fiber: 4.0, pro: 1.7, fat: 1.2, vitC: &quot;10.2mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;38mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;12mg&quot;, potas: &quot;236mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;Contains powerful anti-inflammatories for heart and blood flow.&quot; },
        { name: &quot;Custard Apple (Ata)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Regional&quot;, &quot;Energy&quot;], cals: 94, carbs: 23.6, fiber: 4.4, pro: 2.1, fat: 0.3, vitC: &quot;36.3mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.2mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;21mg&quot;, potas: &quot;247mg&quot;, calcium: &quot;24mg&quot;, fact: &quot;High in Copper and Magnesium, supporting bone health and hemoglobin.&quot; },
        { name: &quot;Jackfruit (Ripe)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Regional&quot;, &quot;Energy&quot;], cals: 95, carbs: 23.2, fiber: 1.5, pro: 1.7, fat: 0.6, vitC: &quot;13.7mg&quot;, vitA: &quot;5mcg&quot;, vitB6: &quot;0.33mg&quot;, folate: &quot;24mcg&quot;, iron: &quot;0.23mg&quot;, mag: &quot;29mg&quot;, potas: &quot;448mg&quot;, calcium: &quot;24mg&quot;, fact: &quot;A complex carb profile with high B-vitamins for muscle metabolism.&quot; },
        { name: &quot;Papaya&quot;, emoji: &quot;🍈&quot;, category: [&quot;Digestion&quot;, &quot;Immunity&quot;], cals: 43, carbs: 10.8, fiber: 1.7, pro: 0.5, fat: 0.3, vitC: &quot;61.8mg&quot;, vitA: &quot;47mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;37mcg&quot;, iron: &quot;0.25mg&quot;, mag: &quot;21mg&quot;, potas: &quot;182mg&quot;, calcium: &quot;20mg&quot;, fact: &quot;Contains papain enzyme and lycopene for skin repair and digestion.&quot; },
        { name: &quot;Chikoo (Sapodilla)&quot;, emoji: &quot;🥔&quot;, category: [&quot;Regional&quot;, &quot;Energy&quot;, &quot;Digestion&quot;], cals: 83, carbs: 20, fiber: 5.3, pro: 0.4, fat: 1.1, vitC: &quot;14.7mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;12mg&quot;, potas: &quot;193mg&quot;, calcium: &quot;21mg&quot;, fact: &quot;Extremely high in dietary fiber and tannins for gut health.&quot; },
        { name: &quot;Lychee&quot;, emoji: &quot;🍒&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;, &quot;Regional&quot;], cals: 66, carbs: 16.5, fiber: 1.3, pro: 0.8, fat: 0.4, vitC: &quot;71.5mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;7mcg&quot;, iron: &quot;0.31mg&quot;, mag: &quot;10mg&quot;, potas: &quot;171mg&quot;, calcium: &quot;5mg&quot;, fact: &quot;High in Polyphenols and Vitamin C for heart protection.&quot; },
        { name: &quot;Apple&quot;, emoji: &quot;🍎&quot;, category: [&quot;Digestion&quot;], cals: 52, carbs: 13.8, fiber: 2.4, pro: 0.3, fat: 0.2, vitC: &quot;4.6mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;3mcg&quot;, iron: &quot;0.12mg&quot;, mag: &quot;5mg&quot;, potas: &quot;107mg&quot;, calcium: &quot;6mg&quot;, fact: &quot;Pectin fiber aids in lowering cholesterol and stabilizing energy.&quot; },
        { name: &quot;Orange&quot;, emoji: &quot;🍊&quot;, category: [&quot;Immunity&quot;, &quot;Hydration&quot;], cals: 47, carbs: 11.8, fiber: 2.4, pro: 0.9, fat: 0.1, vitC: &quot;53.2mg&quot;, vitA: &quot;11mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;30mcg&quot;, iron: &quot;0.1mg&quot;, mag: &quot;10mg&quot;, potas: &quot;181mg&quot;, calcium: &quot;40mg&quot;, fact: &quot;Solid source of Calcium and Vitamin C for bone and immune support.&quot; },
        { name: &quot;Pineapple&quot;, emoji: &quot;🍍&quot;, category: [&quot;Digestion&quot;, &quot;Energy&quot;], cals: 50, carbs: 13.1, fiber: 1.4, pro: 0.5, fat: 0.1, vitC: &quot;47.8mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.11mg&quot;, folate: &quot;18mcg&quot;, iron: &quot;0.29mg&quot;, mag: &quot;12mg&quot;, potas: &quot;109mg&quot;, calcium: &quot;13mg&quot;, fact: &quot;Unique source of Bromelain for protein digestion and inflammation.&quot; },
        { name: &quot;Watermelon&quot;, emoji: &quot;🍉&quot;, category: [&quot;Hydration&quot;], cals: 30, carbs: 7.6, fiber: 0.4, pro: 0.6, fat: 0.2, vitC: &quot;8.1mg&quot;, vitA: &quot;28mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;3mcg&quot;, iron: &quot;0.24mg&quot;, mag: &quot;10mg&quot;, potas: &quot;112mg&quot;, calcium: &quot;7mg&quot;, fact: &quot;92% water with citrulline for athletic recovery and blood flow.&quot; },
        { name: &quot;Blackberry&quot;, emoji: &quot;🫐&quot;, category: [&quot;Keto-Friendly&quot;, &quot;Digestion&quot;, &quot;Immunity&quot;], cals: 43, carbs: 9.6, fiber: 5.3, pro: 1.4, fat: 0.5, vitC: &quot;21mg&quot;, vitA: &quot;11mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;25mcg&quot;, iron: &quot;0.62mg&quot;, mag: &quot;20mg&quot;, potas: &quot;162mg&quot;, calcium: &quot;29mg&quot;, fact: &quot;Elite keto-friendly fruit with high magnesium and fiber.&quot; },
        { name: &quot;Blueberry&quot;, emoji: &quot;🫐&quot;, category: [&quot;Immunity&quot;, &quot;Keto-Friendly&quot;], cals: 57, carbs: 14.5, fiber: 2.4, pro: 0.7, fat: 0.3, vitC: &quot;9.7mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;0.28mg&quot;, mag: &quot;6mg&quot;, potas: &quot;77mg&quot;, calcium: &quot;6mg&quot;, fact: &quot;Packed with anthocyanins for cognitive function and brain health.&quot; },
        { name: &quot;Strawberry&quot;, emoji: &quot;🍓&quot;, category: [&quot;Keto-Friendly&quot;, &quot;Immunity&quot;], cals: 32, carbs: 7.7, fiber: 2, pro: 0.7, fat: 0.3, vitC: &quot;58.8mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;24mcg&quot;, iron: &quot;0.41mg&quot;, mag: &quot;13mg&quot;, potas: &quot;153mg&quot;, calcium: &quot;16mg&quot;, fact: &quot;High Manganese and Folate for blood sugar and heart health.&quot; },
        { name: &quot;Raspberry&quot;, emoji: &quot;🍓&quot;, category: [&quot;Keto-Friendly&quot;, &quot;Digestion&quot;], cals: 52, carbs: 11.9, fiber: 6.5, pro: 1.2, fat: 0.7, vitC: &quot;26.2mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;21mcg&quot;, iron: &quot;0.69mg&quot;, mag: &quot;22mg&quot;, potas: &quot;151mg&quot;, calcium: &quot;25mg&quot;, fact: &quot;Highest fiber-to-carb ratio of any common berry.&quot; },
        { name: &quot;Kiwi&quot;, emoji: &quot;🥝&quot;, category: [&quot;Immunity&quot;, &quot;Digestion&quot;], cals: 61, carbs: 14.7, fiber: 3, pro: 1.1, fat: 0.5, vitC: &quot;92.7mg&quot;, vitA: &quot;4mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;25mcg&quot;, iron: &quot;0.31mg&quot;, mag: &quot;17mg&quot;, potas: &quot;312mg&quot;, calcium: &quot;34mg&quot;, fact: &quot;Contains actinidain for protein digestion and high serotonin levels.&quot; },
        { name: &quot;Peach&quot;, emoji: &quot;🍑&quot;, category: [&quot;Digestion&quot;, &quot;Hydration&quot;], cals: 39, carbs: 9.5, fiber: 1.5, pro: 0.9, fat: 0.3, vitC: &quot;6.6mg&quot;, vitA: &quot;16mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;4mcg&quot;, iron: &quot;0.25mg&quot;, mag: &quot;9mg&quot;, potas: &quot;190mg&quot;, calcium: &quot;6mg&quot;, fact: &quot;Great source of phenolic acids for skin health and UV protection.&quot; },
        { name: &quot;Plum&quot;, emoji: &quot;🍑&quot;, category: [&quot;Digestion&quot;], cals: 46, carbs: 11.4, fiber: 1.4, pro: 0.7, fat: 0.3, vitC: &quot;9.5mg&quot;, vitA: &quot;17mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;5mcg&quot;, iron: &quot;0.17mg&quot;, mag: &quot;7mg&quot;, potas: &quot;157mg&quot;, calcium: &quot;6mg&quot;, fact: &quot;Improves bone density through high phytonutrient concentrations.&quot; },
        { name: &quot;Pear&quot;, emoji: &quot;🍐&quot;, category: [&quot;Digestion&quot;], cals: 57, carbs: 15.2, fiber: 3.1, pro: 0.4, fat: 0.1, vitC: &quot;4.3mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;7mcg&quot;, iron: &quot;0.18mg&quot;, mag: &quot;7mg&quot;, potas: &quot;116mg&quot;, calcium: &quot;9mg&quot;, fact: &quot;Excellent hypoallergenic fruit high in soluble fiber.&quot; },
        { name: &quot;Cherry&quot;, emoji: &quot;🍒&quot;, category: [&quot;Energy&quot;], cals: 50, carbs: 12.2, fiber: 1.6, pro: 1, fat: 0.3, vitC: &quot;7mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;4mcg&quot;, iron: &quot;0.36mg&quot;, mag: &quot;11mg&quot;, potas: &quot;222mg&quot;, calcium: &quot;13mg&quot;, fact: &quot;Natural melatonin source to aid sleep and muscle inflammation.&quot; },
        { name: &quot;Apricot&quot;, emoji: &quot;🍑&quot;, category: [&quot;Digestion&quot;, &quot;Immunity&quot;], cals: 48, carbs: 11.1, fiber: 2, pro: 1.4, fat: 0.4, vitC: &quot;10mg&quot;, vitA: &quot;96mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;9mcg&quot;, iron: &quot;0.39mg&quot;, mag: &quot;10mg&quot;, potas: &quot;259mg&quot;, calcium: &quot;13mg&quot;, fact: &quot;Massive Beta-Carotene (Vit A) levels for eye and skin health.&quot; },
        { name: &quot;Grapefruit&quot;, emoji: &quot;🍊&quot;, category: [&quot;Hydration&quot;, &quot;Immunity&quot;], cals: 42, carbs: 10.7, fiber: 1.6, pro: 0.8, fat: 0.1, vitC: &quot;31.2mg&quot;, vitA: &quot;58mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;13mcg&quot;, iron: &quot;0.08mg&quot;, mag: &quot;9mg&quot;, potas: &quot;135mg&quot;, calcium: &quot;22mg&quot;, fact: &quot;Aids insulin sensitivity and has fat-burning properties.&quot; },
        { name: &quot;Fig (Fresh)&quot;, emoji: &quot;🍒&quot;, category: [&quot;Digestion&quot;, &quot;Energy&quot;], cals: 74, carbs: 19.2, fiber: 2.9, pro: 0.8, fat: 0.3, vitC: &quot;2mg&quot;, vitA: &quot;7mcg&quot;, vitB6: &quot;0.11mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;0.37mg&quot;, mag: &quot;17mg&quot;, potas: &quot;232mg&quot;, calcium: &quot;35mg&quot;, fact: &quot;Highest mineral content of most common fruits; very alkaline.&quot; },
        { name: &quot;Date&quot;, emoji: &quot;🌴&quot;, category: [&quot;Energy&quot;, &quot;Digestion&quot;], cals: 282, carbs: 75, fiber: 8, pro: 2.5, fat: 0.4, vitC: &quot;0.4mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.19mg&quot;, folate: &quot;15mcg&quot;, iron: &quot;0.9mg&quot;, mag: &quot;54mg&quot;, potas: &quot;656mg&quot;, calcium: &quot;64mg&quot;, fact: &quot;Extreme energy density with high Magnesium for nerve function.&quot; },
        { name: &quot;Dragon Fruit&quot;, emoji: &quot;🐉&quot;, category: [&quot;Exotic&quot;, &quot;Hydration&quot;], cals: 60, carbs: 12.9, fiber: 2.9, pro: 1.2, fat: 0, vitC: &quot;2.5mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;1mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;40mg&quot;, potas: &quot;116mg&quot;, calcium: &quot;8mg&quot;, fact: &quot;Prebiotic fiber source that feeds healthy gut bacteria.&quot; },
        { name: &quot;Durian&quot;, emoji: &quot;🦔&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 147, carbs: 27.1, fiber: 3.8, pro: 1.5, fat: 5.3, vitC: &quot;19.7mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.32mg&quot;, folate: &quot;36mcg&quot;, iron: &quot;0.43mg&quot;, mag: &quot;30mg&quot;, potas: &quot;436mg&quot;, calcium: &quot;6mg&quot;, fact: &quot;Highest fat and B-vitamin content of almost any fruit.&quot; },
        { name: &quot;Lemon&quot;, emoji: &quot;🍋&quot;, category: [&quot;Immunity&quot;, &quot;Keto-Friendly&quot;], cals: 29, carbs: 9.3, fiber: 2.8, pro: 1.1, fat: 0.3, vitC: &quot;53mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;11mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;8mg&quot;, potas: &quot;138mg&quot;, calcium: &quot;26mg&quot;, fact: &quot;Citric acid increases mineral absorption from other foods.&quot; },
        { name: &quot;Lime&quot;, emoji: &quot;🍋&quot;, category: [&quot;Immunity&quot;, &quot;Hydration&quot;], cals: 30, carbs: 10.5, fiber: 2.8, pro: 0.7, fat: 0.2, vitC: &quot;29mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;6mg&quot;, potas: &quot;102mg&quot;, calcium: &quot;33mg&quot;, fact: &quot;Perfect for electrolyte balance and alkalizing the body.&quot; },
        { name: &quot;Cantaloupe&quot;, emoji: &quot;🍈&quot;, category: [&quot;Hydration&quot;, &quot;Immunity&quot;], cals: 34, carbs: 8.2, fiber: 0.9, pro: 0.8, fat: 0.2, vitC: &quot;36.7mg&quot;, vitA: &quot;169mcg&quot;, vitB6: &quot;0.07mg&quot;, folate: &quot;21mcg&quot;, iron: &quot;0.21mg&quot;, mag: &quot;12mg&quot;, potas: &quot;267mg&quot;, calcium: &quot;9mg&quot;, fact: &quot;Unmatched Vitamin A levels for skin and immune repair.&quot; },
        { name: &quot;Honeydew&quot;, emoji: &quot;🍈&quot;, category: [&quot;Hydration&quot;], cals: 36, carbs: 9.1, fiber: 0.8, pro: 0.5, fat: 0.1, vitC: &quot;18mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.09mg&quot;, folate: &quot;19mcg&quot;, iron: &quot;0.17mg&quot;, mag: &quot;10mg&quot;, potas: &quot;228mg&quot;, calcium: &quot;6mg&quot;, fact: &quot;High water and electrolyte content for cellular hydration.&quot; },
        { name: &quot;Passion Fruit&quot;, emoji: &quot;🥭&quot;, category: [&quot;Exotic&quot;, &quot;Digestion&quot;], cals: 97, carbs: 23.4, fiber: 10.4, pro: 2.2, fat: 0.7, vitC: &quot;30mg&quot;, vitA: &quot;64mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;1.6mg&quot;, mag: &quot;29mg&quot;, potas: &quot;348mg&quot;, calcium: &quot;12mg&quot;, fact: &quot;Highest fiber content and excellent plant-based iron.&quot; },
        { name: &quot;Persimmon&quot;, emoji: &quot;🍅&quot;, category: [&quot;Energy&quot;, &quot;Immunity&quot;], cals: 81, carbs: 18.6, fiber: 3.6, pro: 0.6, fat: 0.2, vitC: &quot;7.5mg&quot;, vitA: &quot;81mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.15mg&quot;, mag: &quot;9mg&quot;, potas: &quot;161mg&quot;, calcium: &quot;8mg&quot;, fact: &quot;High in Tannins and Vitamin A for arterial health.&quot; },
        { name: &quot;Starfruit&quot;, emoji: &quot;🌟&quot;, category: [&quot;Hydration&quot;, &quot;Keto-Friendly&quot;, &quot;Regional&quot;], cals: 31, carbs: 6.7, fiber: 2.8, pro: 1, fat: 0.3, vitC: &quot;34.4mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;12mcg&quot;, iron: &quot;0.08mg&quot;, mag: &quot;10mg&quot;, potas: &quot;133mg&quot;, calcium: &quot;3mg&quot;, fact: &quot;Low calorie, low carb, but high in oxalate (caution for kidneys).&quot; },
        { name: &quot;Tamarind&quot;, emoji: &quot;🫘&quot;, category: [&quot;Exotic&quot;, &quot;Digestion&quot;], cals: 239, carbs: 62.5, fiber: 5.1, pro: 2.8, fat: 0.6, vitC: &quot;3.5mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.07mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;2.8mg&quot;, mag: &quot;92mg&quot;, potas: &quot;628mg&quot;, calcium: &quot;74mg&quot;, fact: &quot;Incredible Magnesium and Iron levels for blood and muscle.&quot; },
        { name: &quot;Grapes (Red)&quot;, emoji: &quot;🍇&quot;, category: [&quot;Energy&quot;, &quot;Hydration&quot;], cals: 69, carbs: 18.1, fiber: 0.9, pro: 0.7, fat: 0.2, vitC: &quot;3.2mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.09mg&quot;, folate: &quot;2mcg&quot;, iron: &quot;0.36mg&quot;, mag: &quot;7mg&quot;, potas: &quot;191mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;Rich in resveratrol for anti-aging and heart health.&quot; },
        { name: &quot;Jalpai (Olive)&quot;, emoji: &quot;🫒&quot;, category: [&quot;Digestion&quot;, &quot;Regional&quot;], cals: 45, carbs: 9, fiber: 3, pro: 1, fat: 0.5, vitC: &quot;15mg&quot;, vitA: &quot;10mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;12mg&quot;, potas: &quot;150mg&quot;, calcium: &quot;22mg&quot;, fact: &quot;High antioxidant profile, especially for anti-inflammatory use.&quot; },
        { name: &quot;Amra (Hog Plum)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Digestion&quot;, &quot;Immunity&quot;, &quot;Regional&quot;], cals: 46, carbs: 11, fiber: 2.5, pro: 0.7, fat: 0.3, vitC: &quot;46mg&quot;, vitA: &quot;20mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;5mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;15mg&quot;, potas: &quot;250mg&quot;, calcium: &quot;15mg&quot;, fact: &quot;Very effective for digestion and relieving seasonal colds.&quot; },
        { name: &quot;Boroi (Jujube)&quot;, emoji: &quot;🍒&quot;, category: [&quot;Immunity&quot;, &quot;Regional&quot;], cals: 79, carbs: 20, fiber: 6, pro: 1.2, fat: 0.2, vitC: &quot;69mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;10mg&quot;, potas: &quot;250mg&quot;, calcium: &quot;21mg&quot;, fact: &quot;Excellent for anxiety relief and boosting night-time sleep.&quot; },
        { name: &quot;Karamcha&quot;, emoji: &quot;🍒&quot;, category: [&quot;Exotic&quot;, &quot;Digestion&quot;, &quot;Regional&quot;], cals: 42, carbs: 10, fiber: 4, pro: 0.8, fat: 0.2, vitC: &quot;31mg&quot;, vitA: &quot;40mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;12mg&quot;, potas: &quot;220mg&quot;, calcium: &quot;25mg&quot;, fact: &quot;Strong tart fruit high in iron for managing anemia.&quot; },
        { name: &quot;Gub (Velvet Apple)&quot;, emoji: &quot;🍑&quot;, category: [&quot;Energy&quot;, &quot;Regional&quot;], cals: 50, carbs: 11, fiber: 2.5, pro: 0.8, fat: 0.2, vitC: &quot;18mg&quot;, vitA: &quot;12mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;12mg&quot;, potas: &quot;180mg&quot;, calcium: &quot;22mg&quot;, fact: &quot;Provides consistent B-vitamins for local energy metabolism.&quot; },
        { name: &quot;Sapote (Mamey)&quot;, emoji: &quot;🍮&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 124, carbs: 32.1, fiber: 5.4, pro: 1.5, fat: 0.5, vitC: &quot;23mg&quot;, vitA: &quot;7mcg&quot;, vitB6: &quot;0.7mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;11mg&quot;, potas: &quot;454mg&quot;, calcium: &quot;18mg&quot;, fact: &quot;Massive Vitamin B6 and Potassium for nerve and muscle health.&quot; },
        { name: &quot;Mangosteen&quot;, emoji: &quot;🧄&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 73, carbs: 17.9, fiber: 1.8, pro: 0.4, fat: 0.6, vitC: &quot;2.9mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;31mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;13mg&quot;, potas: &quot;48mg&quot;, calcium: &quot;12mg&quot;, fact: &quot;Contains xanthones, a unique class of powerful antioxidants.&quot; },
        { name: &quot;Rambutan&quot;, emoji: &quot;🦠&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 82, carbs: 20.9, fiber: 0.9, pro: 0.7, fat: 0.2, vitC: &quot;4.9mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.35mg&quot;, mag: &quot;7mg&quot;, potas: &quot;42mg&quot;, calcium: &quot;22mg&quot;, fact: &quot;Aids in production of red blood cells through high copper/iron.&quot; },
        { name: &quot;Longan&quot;, emoji: &quot;🔴&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 60, carbs: 15.1, fiber: 1.1, pro: 1.3, fat: 0.1, vitC: &quot;84mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;2mcg&quot;, iron: &quot;0.13mg&quot;, mag: &quot;10mg&quot;, potas: &quot;266mg&quot;, calcium: &quot;1mg&quot;, fact: &quot;Superior Vitamin C content even compared to Lychees.&quot; },
        { name: &quot;Soursop&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 66, carbs: 16.8, fiber: 3.3, pro: 1, fat: 0.3, vitC: &quot;20.6mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;21mg&quot;, potas: &quot;278mg&quot;, calcium: &quot;14mg&quot;, fact: &quot;Studied for neuro-protective properties and cellular energy.&quot; },
        { name: &quot;Camu Camu&quot;, emoji: &quot;🍒&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 24, carbs: 5, fiber: 1, pro: 0.4, fat: 0.2, vitC: &quot;2145mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.01mg&quot;, folate: &quot;1mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;10mg&quot;, potas: &quot;80mg&quot;, calcium: &quot;15mg&quot;, fact: &quot;The undisputed king of Vitamin C; 40x higher than oranges.&quot; },
        { name: &quot;Prickly Pear&quot;, emoji: &quot;🌵&quot;, category: [&quot;Exotic&quot;, &quot;Hydration&quot;], cals: 41, carbs: 9.6, fiber: 3.6, pro: 0.7, fat: 0.5, vitC: &quot;14mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;85mg&quot;, potas: &quot;220mg&quot;, calcium: &quot;56mg&quot;, fact: &quot;Excellent Magnesium and Calcium levels for desert hydration.&quot; },
        { name: &quot;Arazá&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 30, carbs: 7, fiber: 1.5, pro: 0.8, fat: 0.2, vitC: &quot;150mg&quot;, vitA: &quot;5mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;4mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;12mg&quot;, potas: &quot;120mg&quot;, calcium: &quot;18mg&quot;, fact: &quot;Amazonian super-fruit with intense acidity and Vitamin C.&quot; },
        { name: &quot;Breadfruit&quot;, emoji: &quot;🍞&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 103, carbs: 27.1, fiber: 4.9, pro: 1.1, fat: 0.2, vitC: &quot;29mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.54mg&quot;, mag: &quot;25mg&quot;, potas: &quot;490mg&quot;, calcium: &quot;17mg&quot;, fact: &quot;High starch and potassium for long-duration energy output.&quot; },
        { name: &quot;Cherimoya&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 75, carbs: 17.7, fiber: 3, pro: 1.6, fat: 0.7, vitC: &quot;12.6mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.26mg&quot;, folate: &quot;23mcg&quot;, iron: &quot;0.27mg&quot;, mag: &quot;17mg&quot;, potas: &quot;287mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;High B6 and Folate supports nerve repair and Empathy peaks.&quot; },
        { name: &quot;Chayote&quot;, emoji: &quot;🍐&quot;, category: [&quot;Keto-Friendly&quot;, &quot;Hydration&quot;], cals: 19, carbs: 4.5, fiber: 1.7, pro: 0.8, fat: 0.1, vitC: &quot;7.7mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;93mcg&quot;, iron: &quot;0.34mg&quot;, mag: &quot;12mg&quot;, potas: &quot;125mg&quot;, calcium: &quot;17mg&quot;, fact: &quot;Highest Folate levels for any hydrating fruit; excellent for pregnancy.&quot; },
        { name: &quot;Quince&quot;, emoji: &quot;🍐&quot;, category: [&quot;Digestion&quot;], cals: 57, carbs: 15.3, fiber: 1.9, pro: 0.4, fat: 0.1, vitC: &quot;15mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;3mcg&quot;, iron: &quot;0.7mg&quot;, mag: &quot;8mg&quot;, potas: &quot;197mg&quot;, calcium: &quot;11mg&quot;, fact: &quot;High tannin and fiber aids in severe gastrointestinal issues.&quot; },
        { name: &quot;Ice Apple&quot;, emoji: &quot;🧊&quot;, category: [&quot;Exotic&quot;, &quot;Hydration&quot;, &quot;Regional&quot;], cals: 43, carbs: 11, fiber: 0, pro: 0.8, fat: 0.1, vitC: &quot;5mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;1mcg&quot;, iron: &quot;1.2mg&quot;, mag: &quot;10mg&quot;, potas: &quot;150mg&quot;, calcium: &quot;27mg&quot;, fact: &quot;Natural coolant with high Iron/Calcium levels for summer hydration.&quot; },
        { name: &quot;Phalsa&quot;, emoji: &quot;🫐&quot;, category: [&quot;Exotic&quot;, &quot;Hydration&quot;], cals: 35, carbs: 8.5, fiber: 3, pro: 0.7, fat: 0.2, vitC: &quot;20mg&quot;, vitA: &quot;15mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;5mcg&quot;, iron: &quot;1.1mg&quot;, mag: &quot;8mg&quot;, potas: &quot;180mg&quot;, calcium: &quot;12mg&quot;, fact: &quot;Potent anti-oxidant berry for blood purification.&quot; },
        { name: &quot;Tamarillo&quot;, emoji: &quot;🍅&quot;, category: [&quot;Exotic&quot;, &quot;Hydration&quot;], cals: 31, carbs: 7.1, fiber: 2, pro: 1.8, fat: 0.2, vitC: &quot;25mg&quot;, vitA: &quot;200mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;20mg&quot;, potas: &quot;300mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;Extreme Vitamin A (Beta-carotene) source for ocular health.&quot; },
        { name: &quot;Mulberry&quot;, emoji: &quot;🍇&quot;, category: [&quot;Digestion&quot;], cals: 43, carbs: 9.8, fiber: 1.7, pro: 1.4, fat: 0.4, vitC: &quot;36.4mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;1.85mg&quot;, mag: &quot;18mg&quot;, potas: &quot;194mg&quot;, calcium: &quot;39mg&quot;, fact: &quot;One of the highest iron-bearing fruits; great for red blood cells.&quot; },
        { name: &quot;Cranberry&quot;, emoji: &quot;🍒&quot;, category: [&quot;Immunity&quot;], cals: 46, carbs: 12.2, fiber: 4.6, pro: 0.4, fat: 0.1, vitC: &quot;13.3mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;1mcg&quot;, iron: &quot;0.25mg&quot;, mag: &quot;6mg&quot;, potas: &quot;85mg&quot;, calcium: &quot;8mg&quot;, fact: &quot;Prevents UTI through unique A-type proanthocyanidins.&quot; },
        { name: &quot;Gooseberry (European)&quot;, emoji: &quot;🍒&quot;, category: [&quot;Digestion&quot;], cals: 44, carbs: 10, fiber: 4.3, pro: 0.9, fat: 0.6, vitC: &quot;27mg&quot;, vitA: &quot;15mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;10mg&quot;, potas: &quot;198mg&quot;, calcium: &quot;25mg&quot;, fact: &quot;High organic acids aid in kidney function and detoxification.&quot; },
        { name: &quot;Black Currant&quot;, emoji: &quot;🫐&quot;, category: [&quot;Immunity&quot;], cals: 63, carbs: 15.4, fiber: 0, pro: 1.4, fat: 0.4, vitC: &quot;181mg&quot;, vitA: &quot;12mcg&quot;, vitB6: &quot;0.07mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;1.54mg&quot;, mag: &quot;24mg&quot;, potas: &quot;322mg&quot;, calcium: &quot;55mg&quot;, fact: &quot;Vastly superior Vitamin C and Iron levels compared to most berries.&quot; },
        { name: &quot;Elderberry&quot;, emoji: &quot;🫐&quot;, category: [&quot;Immunity&quot;], cals: 73, carbs: 18.4, fiber: 7, pro: 0.6, fat: 0.5, vitC: &quot;36mg&quot;, vitA: &quot;30mcg&quot;, vitB6: &quot;0.23mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;1.6mg&quot;, mag: &quot;5mg&quot;, potas: &quot;280mg&quot;, calcium: &quot;38mg&quot;, fact: &quot;World-class anti-viral berry with high B6 for immune defense.&quot; },
        { name: &quot;Loquat&quot;, emoji: &quot;🍑&quot;, category: [&quot;Immunity&quot;], cals: 47, carbs: 12.1, fiber: 1.7, pro: 0.4, fat: 0.2, vitC: &quot;1mg&quot;, vitA: &quot;76mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.28mg&quot;, mag: &quot;13mg&quot;, potas: &quot;266mg&quot;, calcium: &quot;13mg&quot;, fact: &quot;Excellent source of Vitamin A and Folate for lung health.&quot; },
        { name: &quot;Kumquat&quot;, emoji: &quot;🍊&quot;, category: [&quot;Digestion&quot;, &quot;Immunity&quot;], cals: 71, carbs: 15.9, fiber: 6.5, pro: 1.9, fat: 0.9, vitC: &quot;43.9mg&quot;, vitA: &quot;15mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;17mcg&quot;, iron: &quot;0.86mg&quot;, mag: &quot;20mg&quot;, potas: &quot;186mg&quot;, calcium: &quot;62mg&quot;, fact: &quot;The skin is edible and contains massive fiber and essential oils.&quot; },
        { name: &quot;Pomelo&quot;, emoji: &quot;🍋&quot;, category: [&quot;Immunity&quot;, &quot;Hydration&quot;, &quot;Regional&quot;], cals: 38, carbs: 9.6, fiber: 1, pro: 0.8, fat: 0, vitC: &quot;61mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;21mcg&quot;, iron: &quot;0.11mg&quot;, mag: &quot;6mg&quot;, potas: &quot;216mg&quot;, calcium: &quot;4mg&quot;, fact: &quot;Highest vitamin C concentration in the citrus family.&quot; },
        { name: &quot;Persian Lime&quot;, emoji: &quot;🍋&quot;, category: [&quot;Hydration&quot;, &quot;Immunity&quot;], cals: 30, carbs: 10, fiber: 2.8, pro: 0.7, fat: 0.2, vitC: &quot;29mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;6mg&quot;, potas: &quot;102mg&quot;, calcium: &quot;33mg&quot;, fact: &quot;Helps maintain blood pH and improves iron bioavailability.&quot; },
        { name: &quot;Olive (Ripe)&quot;, emoji: &quot;🫒&quot;, category: [&quot;Keto-Friendly&quot;], cals: 115, carbs: 6.3, fiber: 3.2, pro: 0.8, fat: 10.7, vitC: &quot;0.9mg&quot;, vitA: &quot;20mcg&quot;, vitB6: &quot;0.01mg&quot;, folate: &quot;0mcg&quot;, iron: &quot;3.3mg&quot;, mag: &quot;4mg&quot;, potas: &quot;8mg&quot;, calcium: &quot;52mg&quot;, fact: &quot;Rich in Oleic acid and Iron; technically a high-fat fruit.&quot; },
        { name: &quot;Buddha’s Hand&quot;, emoji: &quot;🍋&quot;, category: [&quot;Exotic&quot;], cals: 20, carbs: 6, fiber: 3, pro: 0.5, fat: 0.1, vitC: &quot;40mg&quot;, vitA: &quot;1mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;1mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;8mg&quot;, potas: &quot;100mg&quot;, calcium: &quot;15mg&quot;, fact: &quot;Mainly used for aromatic peels rich in flavonoids.&quot; },
        { name: &quot;Miracle Fruit&quot;, emoji: &quot;🍒&quot;, category: [&quot;Exotic&quot;], cals: 40, carbs: 10, fiber: 2, pro: 1, fat: 0, vitC: &quot;15mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.01mg&quot;, folate: &quot;0mcg&quot;, iron: &quot;0.1mg&quot;, mag: &quot;5mg&quot;, potas: &quot;80mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;Contains miraculin protein which modifies taste receptors.&quot; },
        { name: &quot;Medlar&quot;, emoji: &quot;🍐&quot;, category: [&quot;Exotic&quot;, &quot;Digestion&quot;], cals: 45, carbs: 12, fiber: 3.5, pro: 0.6, fat: 0.2, vitC: &quot;4mg&quot;, vitA: &quot;10mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;11mg&quot;, potas: &quot;130mg&quot;, calcium: &quot;18mg&quot;, fact: &quot;Ancient fruit must be &#39;bletted&#39; to maximize digestive sugars.&quot; },
        { name: &quot;Salak (Snake Fruit)&quot;, emoji: &quot;🐍&quot;, category: [&quot;Exotic&quot;, &quot;Hydration&quot;], cals: 82, carbs: 20, fiber: 3, pro: 1, fat: 0.5, vitC: &quot;15mg&quot;, vitA: &quot;10mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;14mg&quot;, potas: &quot;280mg&quot;, calcium: &quot;25mg&quot;, fact: &quot;Unique fruit containing high antioxidant tannins.&quot; },
        { name: &quot;Santol&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 70, carbs: 16, fiber: 2.2, pro: 1, fat: 0.2, vitC: &quot;18mg&quot;, vitA: &quot;20mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;0.4mg&quot;, mag: &quot;12mg&quot;, potas: &quot;210mg&quot;, calcium: &quot;18mg&quot;, fact: &quot;High fiber and bioactive compounds for gut regulation.&quot; },
        { name: &quot;Nance&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 55, carbs: 12.5, fiber: 2, pro: 0.8, fat: 0.2, vitC: &quot;15mg&quot;, vitA: &quot;20mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;12mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;10mg&quot;, potas: &quot;180mg&quot;, calcium: &quot;20mg&quot;, fact: &quot;Sweet starchy fruit high in local minerals.&quot; },
        { name: &quot;Mangaba&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 65, carbs: 15, fiber: 2, pro: 1.3, fat: 0.3, vitC: &quot;20mg&quot;, vitA: &quot;30mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;15mcg&quot;, iron: &quot;0.5mg&quot;, mag: &quot;14mg&quot;, potas: &quot;220mg&quot;, calcium: &quot;25mg&quot;, fact: &quot;Brazilian local fruit with creamy pulp and mineral profile.&quot; },
        { name: &quot;Tangerine&quot;, emoji: &quot;🍊&quot;, category: [&quot;Hydration&quot;, &quot;Immunity&quot;], cals: 53, carbs: 13.3, fiber: 1.8, pro: 0.8, fat: 0.3, vitC: &quot;26.7mg&quot;, vitA: &quot;11mcg&quot;, vitB6: &quot;0.08mg&quot;, folate: &quot;16mcg&quot;, iron: &quot;0.15mg&quot;, mag: &quot;12mg&quot;, potas: &quot;166mg&quot;, calcium: &quot;37mg&quot;, fact: &quot;Sweeter citrus easier to peel; provides consistent electrolyte balance.&quot; },
        { name: &quot;Clementine&quot;, emoji: &quot;🍊&quot;, category: [&quot;Hydration&quot;, &quot;Immunity&quot;], cals: 47, carbs: 12.0, fiber: 1.7, pro: 0.9, fat: 0.3, vitC: &quot;48.8mg&quot;, vitA: &quot;22mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.14mg&quot;, mag: &quot;10mg&quot;, potas: &quot;177mg&quot;, calcium: &quot;30mg&quot;, fact: &quot;Seedless mandarin hybrid that provides quick energy and portable hydration.&quot; },
        { name: &quot;Bel (Bengal Quince)&quot;, emoji: &quot;🍈&quot;, category: [&quot;Regional&quot;, &quot;Digestion&quot;], cals: 137, carbs: 31.8, fiber: 2.9, pro: 1.8, fat: 0.3, vitC: &quot;60mg&quot;, vitA: &quot;55mcg&quot;, vitB6: &quot;0.11mg&quot;, folate: &quot;18mcg&quot;, iron: &quot;0.55mg&quot;, mag: &quot;18mg&quot;, potas: &quot;600mg&quot;, calcium: &quot;85mg&quot;, fact: &quot;Superior Potassium and Calcium levels; unmatched for restoring gut lining.&quot; },
        { name: &quot;Kamranga (Star Fruit)&quot;, emoji: &quot;🌟&quot;, category: [&quot;Regional&quot;, &quot;Hydration&quot;], cals: 31, carbs: 6.7, fiber: 2.8, pro: 1.0, fat: 0.3, vitC: &quot;34.4mg&quot;, vitA: &quot;3mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;12mcg&quot;, iron: &quot;0.08mg&quot;, mag: &quot;10mg&quot;, potas: &quot;133mg&quot;, calcium: &quot;3mg&quot;, fact: &quot;High in Quercetin and Gallic acid; aids in regulating blood sugar spikes.&quot; },
        { name: &quot;Chalta (Elephant Apple)&quot;, emoji: &quot;🍏&quot;, category: [&quot;Regional&quot;, &quot;Digestion&quot;], cals: 59, carbs: 14.0, fiber: 2.5, pro: 0.8, fat: 0.2, vitC: &quot;26mg&quot;, vitA: &quot;15mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;9mcg&quot;, iron: &quot;1.9mg&quot;, mag: &quot;12mg&quot;, potas: &quot;180mg&quot;, calcium: &quot;16mg&quot;, fact: &quot;High organic acid content; a natural kidney detoxifier.&quot; },
        { name: &quot;Wood Apple (Kodbel)&quot;, emoji: &quot;🥥&quot;, category: [&quot;Regional&quot;, &quot;Digestion&quot;], cals: 140, carbs: 31.0, fiber: 5.0, pro: 3.5, fat: 0.6, vitC: &quot;3mg&quot;, vitA: &quot;15mcg&quot;, vitB6: &quot;0.09mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;0.48mg&quot;, mag: &quot;14mg&quot;, potas: &quot;550mg&quot;, calcium: &quot;130mg&quot;, fact: &quot;Surprising Protein and Calcium levels for a fruit; essential for bones.&quot; },
        { name: &quot;Noni&quot;, emoji: &quot;🍈&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 47, carbs: 11.0, fiber: 0.2, pro: 0.4, fat: 0.1, vitC: &quot;33.6mg&quot;, vitA: &quot;2mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;8mcg&quot;, iron: &quot;0.3mg&quot;, mag: &quot;16mg&quot;, potas: &quot;180mg&quot;, calcium: &quot;20mg&quot;, fact: &quot;Contains Xeronine, which helps the body repair damaged cells.&quot; },
        { name: &quot;Dragon Fruit (Yellow)&quot;, emoji: &quot;🐉&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 60, carbs: 13.0, fiber: 2.9, pro: 1.2, fat: 0.1, vitC: &quot;4.5mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;1mcg&quot;, iron: &quot;0.65mg&quot;, mag: &quot;40mg&quot;, potas: &quot;270mg&quot;, calcium: &quot;10mg&quot;, fact: &quot;Higher natural sugar and mineral content than the red variety.&quot; },
        { name: &quot;Goji Berry (Fresh)&quot;, emoji: &quot;🍒&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 73, carbs: 18.0, fiber: 4.8, pro: 3.8, fat: 0.4, vitC: &quot;48mg&quot;, vitA: &quot;430mcg&quot;, vitB6: &quot;0.1mg&quot;, folate: &quot;12mcg&quot;, iron: &quot;6.8mg&quot;, mag: &quot;34mg&quot;, potas: &quot;440mg&quot;, calcium: &quot;190mg&quot;, fact: &quot;The elite mineral fruit; massive Iron and Calcium levels aid in blood.&quot; },
        { name: &quot;Ackee&quot;, emoji: &quot;🍐&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 151, carbs: 9.6, fiber: 3.5, pro: 2.9, fat: 15.2, vitC: &quot;30mg&quot;, vitA: &quot;10mcg&quot;, vitB6: &quot;0.15mg&quot;, folate: &quot;40mcg&quot;, iron: &quot;0.7mg&quot;, mag: &quot;40mg&quot;, potas: &quot;270mg&quot;, calcium: &quot;45mg&quot;, fact: &quot;High-fat fruit with an excellent Folate profile.&quot; },
        { name: &quot;Acai Berry&quot;, emoji: &quot;🫐&quot;, category: [&quot;Exotic&quot;, &quot;Keto-Friendly&quot;], cals: 70, carbs: 4.0, fiber: 3.0, pro: 1.0, fat: 5.0, vitC: &quot;0.1mg&quot;, vitA: &quot;30mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;3mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;15mg&quot;, potas: &quot;105mg&quot;, calcium: &quot;35mg&quot;, fact: &quot;Extremely low net carbs with high heart-healthy fats.&quot; },
        { name: &quot;Langsat&quot;, emoji: &quot;🟡&quot;, category: [&quot;Exotic&quot;, &quot;Energy&quot;], cals: 57, carbs: 14.2, fiber: 2.3, pro: 0.8, fat: 0.2, vitC: &quot;13mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.05mg&quot;, folate: &quot;6mcg&quot;, iron: &quot;0.9mg&quot;, mag: &quot;12mg&quot;, potas: &quot;230mg&quot;, calcium: &quot;19mg&quot;, fact: &quot;Contains Lansium acid, which helps lower body temperature during fever.&quot; },
        { name: &quot;Rhubarb&quot;, emoji: &quot;🌿&quot;, category: [&quot;Digestion&quot;], cals: 21, carbs: 4.5, fiber: 1.8, pro: 0.9, fat: 0.2, vitC: &quot;8mg&quot;, vitA: &quot;5mcg&quot;, vitB6: &quot;0.02mg&quot;, folate: &quot;7mcg&quot;, iron: &quot;0.22mg&quot;, mag: &quot;12mg&quot;, potas: &quot;288mg&quot;, calcium: &quot;86mg&quot;, fact: &quot;Technically a vegetable but used as fruit; high Calcium and Vitamin K.&quot; },
        { name: &quot;Soursop (Lakshman Phal)&quot;, emoji: &quot;🍐&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 66, carbs: 16.8, fiber: 3.3, pro: 1.0, fat: 0.3, vitC: &quot;20.6mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.06mg&quot;, folate: &quot;14mcg&quot;, iron: &quot;0.6mg&quot;, mag: &quot;21mg&quot;, potas: &quot;278mg&quot;, calcium: &quot;14mg&quot;, fact: &quot;Rich in Acetogenins; used to support cellular integrity.&quot; },
        { name: &quot;Water Caltrop (Paniphal)&quot;, emoji: &quot;🌰&quot;, category: [&quot;Regional&quot;, &quot;Energy&quot;], cals: 97, carbs: 23.9, fiber: 3.0, pro: 1.4, fat: 0.1, vitC: &quot;4mg&quot;, vitA: &quot;0mcg&quot;, vitB6: &quot;0.3mg&quot;, folate: &quot;10mcg&quot;, iron: &quot;0.8mg&quot;, mag: &quot;22mg&quot;, potas: &quot;580mg&quot;, calcium: &quot;12mg&quot;, fact: &quot;Massive Vitamin B6 and Potassium for nervous system health.&quot; },
        { name: &quot;Cape Gooseberry&quot;, emoji: &quot;🟠&quot;, category: [&quot;Exotic&quot;, &quot;Immunity&quot;], cals: 53, carbs: 11.2, fiber: 4.8, pro: 1.9, fat: 0.7, vitC: &quot;11mg&quot;, vitA: &quot;36mcg&quot;, vitB6: &quot;0.04mg&quot;, folate: &quot;11mcg&quot;, iron: &quot;1.0mg&quot;, mag: &quot;20mg&quot;, potas: &quot;170mg&quot;, calcium: &quot;9mg&quot;, fact: &quot;Contains withanolides; traditionally used to reduce inflammation.&quot; },
        { name: &quot;Snake Gourd (Fruit)&quot;, emoji: &quot;🐍&quot;, category: [&quot;Hydration&quot;], cals: 18, carbs: 3.7, fiber: 0.8, pro: 0.6, fat: 0.3, vitC: &quot;9mg&quot;, vitA: &quot;48mcg&quot;, vitB6: &quot;0.03mg&quot;, folate: &quot;15mcg&quot;, iron: &quot;0.2mg&quot;, mag: &quot;11mg&quot;, potas: &quot;150mg&quot;, calcium: &quot;26mg&quot;, fact: &quot;Extremely low calorie and hydrating; used in Ayurveda.&quot; }
    ];

    let currentFilter = &#39;All&#39;;
    let userFavorites = JSON.parse(localStorage.getItem(&#39;otechy_fruit_favs_v5&#39;)) || [];

    function setFilter(f) {
        currentFilter = f;
        document.querySelectorAll(&#39;.filter-btn&#39;).forEach(btn =&gt; btn.classList.remove(&#39;active&#39;));
        event.target.classList.add(&#39;active&#39;);
        renderGrid();
    }

    function toggleFavorite(name) {
        if (userFavorites.includes(name)) {
            userFavorites = userFavorites.filter(n =&gt; n !== name);
        } else {
            userFavorites.push(name);
        }
        localStorage.setItem(&#39;otechy_fruit_favs_v5&#39;, JSON.stringify(userFavorites));
        renderGrid();
    }

    function handleSearch() { renderGrid(); }

    function renderGrid() {
        const grid = document.getElementById(&#39;dataGrid&#39;);
        const query = document.getElementById(&#39;searchInput&#39;).value.toLowerCase();
        grid.innerHTML = &#39;&#39;;

        const filtered = fruitDB.filter(f =&gt; {
            const matchesQuery = f.name.toLowerCase().includes(query) || f.fact.toLowerCase().includes(query);
            const matchesFilter = (currentFilter === &#39;All&#39;) || 
                                 (currentFilter === &#39;Favorites&#39; ? userFavorites.includes(f.name) : f.category.includes(currentFilter));
            return matchesQuery &amp;&amp; matchesFilter;
        });

        filtered.forEach(f =&gt; {
            const isFav = userFavorites.includes(f.name);
            const card = document.createElement(&#39;div&#39;);
            card.className = &#39;bio-card&#39;;
            const netCarbs = (f.carbs - f.fiber).toFixed(1);

            card.innerHTML = `
                &lt;div class=&quot;card-header&quot;&gt;
                    &lt;div class=&quot;bio-name&quot;&gt;&lt;span&gt;${f.emoji}&lt;/span&gt; ${f.name}&lt;/div&gt;
                    &lt;div class=&quot;fav-icon&quot; onclick=&quot;toggleFavorite(&#39;${f.name}&#39;)&quot;&gt;${isFav ? &#39;❤️&#39; : &#39;🤍&#39;}&lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;macro-mini&quot;&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Cals&lt;/label&gt;&lt;span&gt;${f.cals}&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Net Carbs&lt;/label&gt;&lt;span&gt;${netCarbs}g&lt;/span&gt;&lt;/div&gt;
                    &lt;div class=&quot;m-item&quot;&gt;&lt;label&gt;Protein&lt;/label&gt;&lt;span&gt;${f.pro}g&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;table class=&quot;micro-table&quot;&gt;
                    &lt;tbody&gt;
                        &lt;tr&gt;&lt;td class=&quot;micro-lbl&quot;&gt;Vitamin C / A&lt;/td&gt;&lt;td&gt;${f.vitC} / ${f.vitA}&lt;/td&gt;&lt;/tr&gt;
                        &lt;tr&gt;&lt;td class=&quot;micro-lbl&quot;&gt;Vit B6 / Folate&lt;/td&gt;&lt;td&gt;${f.vitB6} / ${f.folate}&lt;/td&gt;&lt;/tr&gt;
                        &lt;tr&gt;&lt;td class=&quot;micro-lbl&quot;&gt;Iron / Mag&lt;/td&gt;&lt;td&gt;${f.iron} / ${f.mag}&lt;/td&gt;&lt;/tr&gt;
                        &lt;tr&gt;&lt;td class=&quot;micro-lbl&quot;&gt;Potas / Calc&lt;/td&gt;&lt;td&gt;${f.potas} / ${f.calcium}&lt;/td&gt;&lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;

                &lt;div class=&quot;fact-tag&quot;&gt;&lt;strong&gt;Clinical Note:&lt;/strong&gt; ${f.fact}&lt;/div&gt;
            `;
            grid.appendChild(card);
        });
    }

    renderGrid();
    document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5285286746452999488'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5285286746452999488'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/fruit-nutrition-database-macros-per-100g.html' title='Fruit Nutrition Database | Macros per 100g'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-1405387841879515067</id><published>2026-04-04T05:08:00.000-07:00</published><updated>2026-04-04T09:33:05.939-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Health"/><category scheme="http://www.blogger.com/atom/ns#" term="Nutrition"/><category scheme="http://www.blogger.com/atom/ns#" term="Vitamins"/><title type='text'>Ultimate Health Database | Vitamins, Minerals &amp; Organs</title><content type='html'>&lt;title&gt;Ultimate BioNutrient &amp; Organ Database | Vitamins, Minerals, Anatomy - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;The definitive biological database. Explore essential vitamins, trace minerals, vital human organs, and essential compounds like Omega-3 and CoQ10.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,850;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System: Premium Bio V7 --- */
    :root { 
        --primary: #059669; --primary-dark: #047857; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-green: #ecfdf5; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1250px; margin: 0 auto; padding: 40px 20px 60px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 20px; position: relative; padding: 60px 20px; background: linear-gradient(135deg, #f0fdf4 0%, #ffffff 100%); border-radius: 24px; border: 1px solid var(--border); box-shadow: 0 10px 30px rgba(5, 150, 105, 0.05); overflow: hidden; }
    .bio-orb { width: 80px; height: 80px; border-radius: 50%; margin: 0 auto 20px; position: relative; background: radial-gradient(circle at 30% 30%, #a7f3d0, #34d399, #059669); box-shadow: 0 0 30px rgba(52, 211, 153, 0.4), inset -8px -8px 15px rgba(0,0,0,0.1); animation: pulse 3s infinite alternate; }
    @keyframes pulse { 0% { transform: scale(0.95); box-shadow: 0 0 20px rgba(52, 211, 153, 0.3); } 100% { transform: scale(1.05); box-shadow: 0 0 40px rgba(52, 211, 153, 0.6); } }
    .hero-section h1 { font-size: clamp(26px, 5vw, 42px); font-weight: 850; margin: 0 0 10px 0; letter-spacing: -1px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 15px; font-weight: 500; max-width: 750px; margin: 0 auto 25px; line-height: 1.6; }
    
    .db-stats { display: flex; justify-content: center; gap: 15px; flex-wrap: wrap; margin-bottom: 20px; }
    .stat-pill { background: var(--white); border: 1px solid var(--border); padding: 8px 16px; border-radius: 50px; font-size: 12px; font-weight: 800; color: var(--primary-dark); box-shadow: 0 4px 10px rgba(0,0,0,0.02); }

    /* Controls */
    .controls-area { margin: 40px 0; display: flex; flex-direction: column; gap: 20px; align-items: center; }
    .search-bar { width: 100%; max-width: 650px; position: relative; }
    .search-bar input { width: 100%; padding: 18px 20px 18px 55px; border-radius: 50px; border: 2px solid var(--border); font-family: var(--font-main); font-size: 16px; font-weight: 600; outline: none; transition: 0.2s; box-shadow: 0 8px 25px rgba(0,0,0,0.03); color: var(--text-dark); }
    .search-bar input:focus { border-color: var(--primary); box-shadow: 0 0 0 4px rgba(5, 150, 105, 0.1); }
    .search-icon { position: absolute; left: 22px; top: 50%; transform: translateY(-50%); color: var(--accent); }

    /* Filter Tiers */
    .filter-tier { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; max-width: 1000px; margin-bottom: 10px; }
    .filter-btn { background: var(--white); border: 1px solid var(--border); color: var(--accent); padding: 8px 18px; border-radius: 50px; font-family: var(--font-main); font-weight: 700; font-size: 12px; cursor: pointer; transition: 0.2s; text-transform: uppercase; letter-spacing: 0.5px; box-shadow: 0 2px 5px rgba(0,0,0,0.02);}
    .filter-btn:hover { border-color: var(--primary); color: var(--primary); background: var(--soft-green); transform: translateY(-1px); }
    .filter-btn.active { background: var(--text-dark); color: #fff; border-color: var(--text-dark); box-shadow: 0 6px 15px rgba(0,0,0,0.1); }
    
    .filter-sub-tier { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; max-width: 1000px; padding-top: 15px; border-top: 1px dashed var(--border); }
    .sub-btn { background: #f8fafc; border: 1px solid var(--border); color: var(--accent); padding: 6px 14px; border-radius: 8px; font-size: 11px; font-weight: 600; cursor: pointer; transition: 0.2s; }
    .sub-btn:hover { background: #e2e8f0; color: var(--text-dark); }
    .sub-btn.active { background: var(--primary); color: #fff; border-color: var(--primary-dark); }

    /* Result Counter */
    .result-counter { width: 100%; max-width: 1100px; text-align: left; font-size: 14px; font-weight: 700; color: var(--accent); margin: 0 auto 15px; padding: 0 10px; }
    .result-counter span { color: var(--primary-dark); }

    /* Grid Layout */
    .bio-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 30px; }
    .bio-card { background: var(--white); border-radius: 20px; border: 1px solid var(--border); padding: 25px; transition: 0.3s; position: relative; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.03); display: flex; flex-direction: column; }
    .bio-card:hover { transform: translateY(-5px); border-color: var(--primary); box-shadow: 0 15px 35px rgba(5, 150, 105, 0.08); }
    
    .card-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 15px; }
    .bio-name { font-size: 21px; font-weight: 850; margin: 0; color: var(--text-dark); letter-spacing: -0.5px; display: flex; align-items: center; gap: 12px; line-height: 1.2; }
    .bio-color-tag { width: 18px; height: 18px; border-radius: 50%; border: 1px solid rgba(0,0,0,0.1); box-shadow: 0 2px 4px rgba(0,0,0,0.1); flex-shrink: 0; }
    .organ-emoji { font-size: 26px; }
    
    .fav-icon { cursor: pointer; font-size: 24px; color: var(--border); transition: 0.2s; user-select: none; }
    .fav-icon.is-fav { color: #ef4444; }
    .fav-icon:hover { transform: scale(1.1); }

    /* Badges */
    .expert-badges { display: flex; gap: 8px; margin-bottom: 15px; flex-wrap: wrap; }
    .badge-base { font-size: 10px; font-weight: 800; text-transform: uppercase; padding: 4px 10px; border-radius: 6px; border: 1px solid; }
    .badge-crucial { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }
    .badge-daily { background: #f0fdf4; color: #15803d; border-color: #bbf7d0; }
    .badge-macro { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
    .badge-trace { background: #fdf4ff; color: #a21caf; border-color: #fae8ff; }
    .badge-organ { background: #fffbeb; color: #b45309; border-color: #fde68a; }
    .badge-compound { background: #f3e8ff; color: #7e22ce; border-color: #e9d5ff; }

    /* Dosage */
    .dosage-box { background: #0f172a; color: #f8fafc; padding: 12px 18px; border-radius: 10px; font-size: 12px; font-weight: 600; display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
    .dosage-box strong { color: #94a3b8; font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; }
    .dosage-box span { color: #34d399; font-weight: 850; font-size: 16px; text-align: right; }

    /* Details */
    .info-group { margin-bottom: 15px; font-size: 13px; line-height: 1.6; background: #f8fafc; padding: 16px; border-radius: 12px; border: 1px solid var(--border); flex-grow: 1; }
    .alert-group { background: #fef2f2; border-color: #fecaca; }
    .info-lbl { color: var(--primary-dark); font-weight: 850; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
    .alert-group .info-lbl { color: #b91c1c; }
    .info-val { color: var(--text-dark); font-weight: 500; }

    .pairings-box { font-size: 12px; font-weight: 500; color: var(--text-dark); padding: 16px; background: #f1f5f9; border-radius: 12px; margin-bottom: 15px; border: 1px dashed #cbd5e1; line-height: 1.6;}
    .syn-mix { color: #15803d; font-weight: 800; font-size: 11px; text-transform: uppercase; }
    .syn-avoid { color: #b91c1c; font-weight: 800; font-size: 11px; text-transform: uppercase; }

    /* Tags */
    .cleanse-tags { display: flex; gap: 8px; margin-top: auto; border-top: 1px solid var(--border); padding-top: 18px; flex-wrap: wrap; }
    .section-title { width: 100%; font-size: 10px; font-weight: 850; color: var(--accent); text-transform: uppercase; margin-bottom: 6px; letter-spacing: 0.5px; }
    .c-tag { font-size: 11px; padding: 6px 12px; border-radius: 8px; display: flex; align-items: center; gap: 6px; font-weight: 700; border: 1px solid #bbf7d0; background: #f0fdf4; color: #065f46; }
    .o-tag { font-size: 11px; padding: 6px 12px; border-radius: 8px; background: var(--primary); color: #fff; font-weight: 700; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }

      /* --- MOBILE RESPONSIVENESS OVERRIDES --- */
    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 15px 10px; }
        .hero-section { padding: 40px 15px; }
        .search-sort-row { flex-direction: column; width: 100%; gap: 10px; }
        .sort-dropdown { width: 100%; }
        .filter-tier { gap: 6px; }
        .filter-btn { padding: 6px 12px; font-size: 10px; }
        .bio-grid { grid-template-columns: 1fr; gap: 15px; }
        .bio-card { padding: 20px 15px; }
        .card-header { margin-bottom: 10px; }
        .bio-name { font-size: 18px; }
        .db-stats { display: flex; flex-direction: column; gap: 8px; width: 100%; }
        .stat-pill { width: 100%; justify-content: center; }
        .result-counter { flex-direction: column; align-items: center; text-align: center; gap: 5px; }
        .micro-grid { grid-template-columns: 1fr; }
    }
  
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;bio-orb&quot;&gt;&lt;/div&gt;
        &lt;h1&gt;Clinical &lt;span&gt;Biological&lt;/span&gt; Database&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;The definitive guide to human optimization. Explore essential vitamins, critical trace minerals, vital compounds, and all major anatomical systems.&lt;/p&gt;
        
        &lt;div class=&quot;db-stats&quot;&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;💊 13 Essential Vitamins&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🪨 13 Vital Minerals&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🧪 Essential Compounds&lt;/span&gt;
            &lt;span class=&quot;stat-pill&quot;&gt;🧬 26 Anatomical Systems&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;controls-area&quot;&gt;
        &lt;div class=&quot;search-bar&quot;&gt;
            &lt;svg class=&quot;search-icon&quot; width=&quot;22&quot; height=&quot;22&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;21&quot; y1=&quot;21&quot; x2=&quot;16.65&quot; y2=&quot;16.65&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            &lt;input type=&quot;text&quot; id=&quot;searchInput&quot; placeholder=&quot;Search a vitamin (B9), compound (CoQ10), organ (Gallbladder), or symptom (Fatigue)...&quot; oninput=&quot;handleSearch()&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;filter-tier&quot; id=&quot;mainFilters&quot;&gt;
            &lt;button class=&quot;filter-btn active&quot; onclick=&quot;setMainFilter(&#39;All&#39;)&quot;&gt;All Database&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; style=&quot;color: #ef4444; border-color: #fecaca; background: #fef2f2;&quot; onclick=&quot;setMainFilter(&#39;Favorites&#39;)&quot;&gt;❤️ My Tracked List&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setMainFilter(&#39;Vitamins&#39;)&quot;&gt;💊 Vitamins&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setMainFilter(&#39;Minerals&#39;)&quot;&gt;🪨 Minerals&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setMainFilter(&#39;Compounds&#39;)&quot;&gt;🧪 Essential Compounds&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setMainFilter(&#39;Organs&#39;)&quot;&gt;🧬 Human Anatomy&lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;filter-sub-tier&quot; id=&quot;subFilters&quot;&gt;
            &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;result-counter&quot; id=&quot;resultCounter&quot;&gt;Showing &lt;span id=&quot;countNum&quot;&gt;0&lt;/span&gt; biological records&lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;bio-grid&quot; id=&quot;dataGrid&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- COMPREHENSIVE BIOLOGICAL DATABASE (V7) ---
    const bioDB = [
        // ================= VITAMINS =================
        { name: &quot;Vitamin A (Retinol)&quot;, color: &quot;#f97316&quot;, type: &quot;Vitamins&quot;, subType: &quot;Fat-Soluble&quot;, dosage: &quot;900 mcg (M) / 700 mcg (W)&quot;, role: &quot;Essential for vision (rhodopsin production), immune system integrity, and cellular communication.&quot;, deficiency: &quot;Night blindness, dry/scaly skin (hyperkeratosis), and severe immune suppression.&quot;, synergy: &quot;&lt;strong&gt;Fat &amp; Zinc:&lt;/strong&gt; Requires dietary fat for absorption and Zinc to transport retinol from the liver.&quot;, antagonism: &quot;&lt;strong&gt;Alcohol:&lt;/strong&gt; Rapidly depletes liver stores of Vitamin A. Note: High doses can be toxic.&quot;, sources: [&quot;Liver&quot;, &quot;Sweet Potatoes&quot;, &quot;Carrots&quot;, &quot;Spinach&quot;], targets: [&quot;Eyes&quot;, &quot;Skin&quot;, &quot;Immune&quot;] },
        { name: &quot;Vitamin B1 (Thiamine)&quot;, color: &quot;#ef4444&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;1.2 mg&quot;, role: &quot;Crucial for glucose metabolism. Converts food into ATP (cellular energy) and synthesizes neurotransmitters.&quot;, deficiency: &quot;Beri-beri, extreme muscle weakness, nerve damage, and memory loss.&quot;, synergy: &quot;&lt;strong&gt;Magnesium:&lt;/strong&gt; Required to convert Thiamine into its active biological form.&quot;, antagonism: &quot;&lt;strong&gt;Raw Seafood &amp; Tannins:&lt;/strong&gt; Contain thiaminases which actively destroy B1 in the gut.&quot;, sources: [&quot;Pork&quot;, &quot;Sunflower Seeds&quot;, &quot;Black Beans&quot;], targets: [&quot;Brain&quot;, &quot;Nerves&quot;, &quot;Heart&quot;] },
        { name: &quot;Vitamin B2 (Riboflavin)&quot;, color: &quot;#eab308&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;1.3 mg&quot;, role: &quot;A core component of coenzymes FAD and FMN, driving cellular energy production and fat metabolism.&quot;, deficiency: &quot;Cracked lips (cheilosis), a swollen magenta tongue, and severe light sensitivity.&quot;, synergy: &quot;&lt;strong&gt;Other B-Vitamins:&lt;/strong&gt; B2 is strictly required to activate Vitamin B6 and Folate (B9).&quot;, antagonism: &quot;&lt;strong&gt;UV Light:&lt;/strong&gt; Riboflavin is rapidly destroyed by prolonged exposure to sunlight.&quot;, sources: [&quot;Milk&quot;, &quot;Almonds&quot;, &quot;Eggs&quot;, &quot;Beef&quot;], targets: [&quot;Skin&quot;, &quot;Eyes&quot;, &quot;Metabolism&quot;] },
        { name: &quot;Vitamin B3 (Niacin)&quot;, color: &quot;#dc2626&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;16 mg&quot;, role: &quot;Precursor to NAD/NADP. Vital for DNA repair, hundreds of metabolic reactions, and managing cholesterol.&quot;, deficiency: &quot;Pellagra (the 4 D&#39;s: Dermatitis, Diarrhea, Dementia, and ultimately Death).&quot;, synergy: &quot;&lt;strong&gt;Tryptophan:&lt;/strong&gt; The body can synthesize its own B3 from the amino acid Tryptophan.&quot;, antagonism: &quot;&lt;strong&gt;Excessive Dosing:&lt;/strong&gt; High doses cause the famous &#39;Niacin Flush&#39; (red, itchy skin) and liver stress.&quot;, sources: [&quot;Chicken&quot;, &quot;Tuna&quot;, &quot;Peanuts&quot;, &quot;Mushrooms&quot;], targets: [&quot;Brain&quot;, &quot;Skin&quot;, &quot;Blood Vessels&quot;] },
        { name: &quot;Vitamin B5 (Pantothenic Acid)&quot;, color: &quot;#b91c1c&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;5 mg&quot;, role: &quot;Used to synthesize Coenzyme A (CoA), which is mandatory to synthesize fatty acids, cholesterol, and steroid hormones.&quot;, deficiency: &quot;Rare, but causes &#39;burning feet syndrome&#39;, severe fatigue, and sleep disturbances.&quot;, synergy: &quot;&lt;strong&gt;B-Complex:&lt;/strong&gt; Works seamlessly with all B vitamins to extract energy from macronutrients.&quot;, antagonism: &quot;&lt;strong&gt;Oral Contraceptives:&lt;/strong&gt; May increase the requirement for B5.&quot;, sources: [&quot;Avocado&quot;, &quot;Yogurt&quot;, &quot;Liver&quot;, &quot;Broccoli&quot;], targets: [&quot;Adrenal Glands&quot;, &quot;Metabolism&quot;] },
        { name: &quot;Vitamin B6 (Pyridoxine)&quot;, color: &quot;#991b1b&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;1.3 - 1.7 mg&quot;, role: &quot;Involved in 100+ enzyme reactions, mostly protein metabolism. Essential for creating serotonin and dopamine.&quot;, deficiency: &quot;Microcytic anemia, severe depression, confusion, and weakened immune function.&quot;, synergy: &quot;&lt;strong&gt;Magnesium &amp; Zinc:&lt;/strong&gt; Enhance B6 absorption and utilization in the brain.&quot;, antagonism: &quot;&lt;strong&gt;Alcohol &amp; NSAIDs:&lt;/strong&gt; Rapidly destroy B6 reserves and inhibit its active form.&quot;, sources: [&quot;Chickpeas&quot;, &quot;Salmon&quot;, &quot;Potatoes&quot;, &quot;Bananas&quot;], targets: [&quot;Brain&quot;, &quot;Blood&quot;, &quot;Nerves&quot;] },
        { name: &quot;Vitamin B7 (Biotin)&quot;, color: &quot;#7f1d1d&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;30 mcg&quot;, role: &quot;Acts as a coenzyme for carboxylase enzymes, critical for synthesizing fatty acids, glucose, and keratin.&quot;, deficiency: &quot;Hair thinning, brittle nails, scaly red rashes around the eyes/mouth, and lethargy.&quot;, synergy: &quot;&lt;strong&gt;Chromium:&lt;/strong&gt; Works together to stabilize blood sugar and insulin levels.&quot;, antagonism: &quot;&lt;strong&gt;Raw Egg Whites:&lt;/strong&gt; Contain avidin, a protein that firmly binds to biotin.&quot;, sources: [&quot;Egg Yolks&quot;, &quot;Organ Meats&quot;, &quot;Nuts&quot;, &quot;Sweet Potatoes&quot;], targets: [&quot;Hair&quot;, &quot;Skin&quot;, &quot;Nails&quot;] },
        { name: &quot;Vitamin B9 (Folate / Preconception)&quot;, color: &quot;#ef4444&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;400 - 800 mcg&quot;, role: &quot;Critical for DNA methylation and rapid cell division. In women, prevents neural tube defects; in men, essential for high-quality sperm DNA synthesis.&quot;, deficiency: &quot;Female: Risk of birth defects and infertility. Male: Fragmented sperm DNA and reduced sperm count.&quot;, synergy: &quot;&lt;strong&gt;B12 &amp; Zinc:&lt;/strong&gt; Works with B12 for DNA synthesis and Zinc to ensure proper absorption in the gut.&quot;, antagonism: &quot;&lt;strong&gt;Alcohol &amp; MTHFR:&lt;/strong&gt; Alcohol blocks folate absorption; individuals with the MTHFR gene mutation require &#39;Methyl-Folate&#39; instead.&quot;, sources: [&quot;Spinach&quot;, &quot;Lentils&quot;, &quot;Asparagus&quot;, &quot;Beef Liver&quot;], targets: [&quot;Reproductive&quot;, &quot;DNA Synthesis&quot;, &quot;Fetal Development&quot;] },
        { name: &quot;Vitamin B12 (Cobalamin)&quot;, color: &quot;#b91c1c&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;2.4 mcg&quot;, role: &quot;Maintains the myelin sheath (nerve protection), synthesizes DNA, and produces red blood cells.&quot;, deficiency: &quot;Permanent nerve damage, brain fog, tingling hands/feet, and extreme fatigue.&quot;, synergy: &quot;&lt;strong&gt;Folate (B9):&lt;/strong&gt; They rely entirely on each other for cellular division.&quot;, antagonism: &quot;&lt;strong&gt;Vegan Diets:&lt;/strong&gt; B12 is exclusively found in animal products; supplementation is mandatory.&quot;, sources: [&quot;Clams&quot;, &quot;Beef Liver&quot;, &quot;Trout&quot;, &quot;Eggs&quot;], targets: [&quot;Brain&quot;, &quot;Nerves&quot;, &quot;Blood&quot;] },
        { name: &quot;Vitamin C (Ascorbic Acid)&quot;, color: &quot;#fb923c&quot;, type: &quot;Vitamins&quot;, subType: &quot;Water-Soluble&quot;, dosage: &quot;90 mg&quot;, role: &quot;Produces collagen for tissues and gums, neutralizes free radicals, and synthesizes neurotransmitters.&quot;, deficiency: &quot;Scurvy (bleeding gums, teeth falling out, unhealed wounds), and severe immune collapse.&quot;, synergy: &quot;&lt;strong&gt;Non-Heme Iron:&lt;/strong&gt; Increases plant-based iron absorption by up to 67%.&quot;, antagonism: &quot;&lt;strong&gt;Glucose:&lt;/strong&gt; Sugar and Vitamin C share the same cellular transport pathway; high sugar blocks Vit C.&quot;, sources: [&quot;Citrus&quot;, &quot;Kiwi&quot;, &quot;Bell Peppers&quot;, &quot;Strawberries&quot;], targets: [&quot;Immune&quot;, &quot;Skin&quot;, &quot;Gums&quot;] },
        { name: &quot;Vitamin D3 (Cholecalciferol)&quot;, color: &quot;#facc15&quot;, type: &quot;Vitamins&quot;, subType: &quot;Fat-Soluble&quot;, dosage: &quot;600 - 800 IU&quot;, role: &quot;A pro-hormone that controls Calcium absorption in the gut. Modulates the immune system and genes.&quot;, deficiency: &quot;Rickets, osteoporosis, severe bone pain, depression, and immune dysfunction.&quot;, synergy: &quot;&lt;strong&gt;Magnesium &amp; K2:&lt;/strong&gt; Mag activates D3; K2 tells the absorbed Calcium to go to bones, not arteries.&quot;, antagonism: &quot;&lt;strong&gt;Fat-Free Diets:&lt;/strong&gt; Requires dietary fat to be absorbed. Sunscreen blocks its natural production.&quot;, sources: [&quot;Sunlight&quot;, &quot;Salmon&quot;, &quot;Egg Yolks&quot;, &quot;Mushrooms&quot;], targets: [&quot;Bones&quot;, &quot;Immune&quot;, &quot;Brain&quot;] },
        { name: &quot;Vitamin E (Tocopherol)&quot;, color: &quot;#fcd34d&quot;, type: &quot;Vitamins&quot;, subType: &quot;Fat-Soluble&quot;, dosage: &quot;15 mg&quot;, role: &quot;A highly potent fat-soluble antioxidant. Protects cellular membranes and circulating cholesterol from oxidation.&quot;, deficiency: &quot;Muscle weakness, visual disturbances, and neurological deterioration.&quot;, synergy: &quot;&lt;strong&gt;Vitamin C:&lt;/strong&gt; Vitamin C &#39;recharges&#39; Vitamin E after it neutralizes a free radical.&quot;, antagonism: &quot;&lt;strong&gt;Iron Supplements:&lt;/strong&gt; Inorganic iron destroys Vitamin E in the digestive tract. Separate doses.&quot;, sources: [&quot;Sunflower Seeds&quot;, &quot;Almonds&quot;, &quot;Spinach&quot;, &quot;Avocado&quot;], targets: [&quot;Skin&quot;, &quot;Eyes&quot;, &quot;Blood&quot;] },
        { name: &quot;Vitamin K (K1 &amp; K2)&quot;, color: &quot;#4ade80&quot;, type: &quot;Vitamins&quot;, subType: &quot;Fat-Soluble&quot;, dosage: &quot;120 mcg&quot;, role: &quot;K1 handles blood clotting. K2 regulates calcium deposition (putting calcium in bones and removing it from arteries).&quot;, deficiency: &quot;Excessive bleeding (K1), arterial calcification, and weak bones (K2).&quot;, synergy: &quot;&lt;strong&gt;Vitamin D3 &amp; Calcium:&lt;/strong&gt; Creates the biological &#39;Holy Trinity&#39; for unbreakable bone density.&quot;, antagonism: &quot;&lt;strong&gt;Blood Thinners (Warfarin):&lt;/strong&gt; Vitamin K directly antagonizes anticoagulant medications.&quot;, sources: [&quot;Kale (K1)&quot;, &quot;Natto (K2)&quot;, &quot;Cheese (K2)&quot;, &quot;Broccoli (K1)&quot;], targets: [&quot;Blood&quot;, &quot;Bones&quot;, &quot;Heart&quot;] },

        // ================= MINERALS =================
        { name: &quot;Calcium&quot;, color: &quot;#e2e8f0&quot;, type: &quot;Minerals&quot;, subType: &quot;Macro Mineral&quot;, dosage: &quot;1000 - 1200 mg&quot;, role: &quot;The most abundant mineral. Provides bone and teeth rigidity, triggers muscle contractions, and regulates heart rhythm.&quot;, deficiency: &quot;Osteopenia, osteoporosis, severe muscle cramps (tetany), and numbness.&quot;, synergy: &quot;&lt;strong&gt;Vitamin D3 &amp; Boron:&lt;/strong&gt; Maximizes absorption and reduces calcium loss in urine.&quot;, antagonism: &quot;&lt;strong&gt;Iron &amp; Zinc:&lt;/strong&gt; Calcium physically blocks their absorption in the small intestine.&quot;, sources: [&quot;Dairy&quot;, &quot;Chia Seeds&quot;, &quot;Sardines&quot;, &quot;Tofu&quot;], targets: [&quot;Bones&quot;, &quot;Teeth&quot;, &quot;Muscles&quot;] },
        { name: &quot;Magnesium&quot;, color: &quot;#22c55e&quot;, type: &quot;Minerals&quot;, subType: &quot;Macro Mineral&quot;, dosage: &quot;400 - 420 mg&quot;, role: &quot;Cofactor in 300+ enzymes. Relaxes muscles, stabilizes the nervous system, and generates ATP (energy).&quot;, deficiency: &quot;Insomnia, severe anxiety, restless legs, heart arrhythmias, and migraines.&quot;, synergy: &quot;&lt;strong&gt;B6 &amp; Vitamin D3:&lt;/strong&gt; B6 escorts Magnesium into cells. Magnesium activates D3.&quot;, antagonism: &quot;&lt;strong&gt;Refined Sugar:&lt;/strong&gt; The body uses up stored Magnesium specifically to process refined sugars.&quot;, sources: [&quot;Spinach&quot;, &quot;Pumpkin Seeds&quot;, &quot;Dark Chocolate&quot;, &quot;Black Beans&quot;], targets: [&quot;Heart&quot;, &quot;Muscles&quot;, &quot;Brain&quot;] },
        { name: &quot;Potassium&quot;, color: &quot;#3b82f6&quot;, type: &quot;Minerals&quot;, subType: &quot;Macro Mineral&quot;, dosage: &quot;3400 mg&quot;, role: &quot;The primary intracellular electrolyte. Regulates fluid balance, nerve signals, and opposes sodium to lower blood pressure.&quot;, deficiency: &quot;Hypokalemia: weakness, severe muscle cramps, heart palpitations, and breathing difficulties.&quot;, synergy: &quot;&lt;strong&gt;Sodium:&lt;/strong&gt; Must maintain a strict biological balance with Sodium (Sodium/Potassium pump).&quot;, antagonism: &quot;&lt;strong&gt;Diuretics &amp; Caffeine:&lt;/strong&gt; Force the kidneys to excrete massive amounts of Potassium.&quot;, sources: [&quot;Bananas&quot;, &quot;Sweet Potatoes&quot;, &quot;Avocado&quot;, &quot;White Beans&quot;], targets: [&quot;Heart&quot;, &quot;Kidneys&quot;, &quot;Nerves&quot;] },
        { name: &quot;Sodium&quot;, color: &quot;#94a3b8&quot;, type: &quot;Minerals&quot;, subType: &quot;Macro Mineral&quot;, dosage: &quot;1500 - 2300 mg&quot;, role: &quot;The primary extracellular electrolyte. Maintains blood volume, cellular osmotic pressure, and nerve impulse conduction.&quot;, deficiency: &quot;Hyponatremia: Confusion, seizures, lethargy, and potentially fatal brain swelling (often from over-hydration).&quot;, synergy: &quot;&lt;strong&gt;Glucose:&lt;/strong&gt; Required in the gut to actively transport glucose and amino acids into the blood.&quot;, antagonism: &quot;&lt;strong&gt;High Intakes:&lt;/strong&gt; Chronic excessive sodium stiffens blood vessels, causing hypertension.&quot;, sources: [&quot;Sea Salt&quot;, &quot;Olives&quot;, &quot;Celery&quot;, &quot;Broth&quot;], targets: [&quot;Blood&quot;, &quot;Nerves&quot;, &quot;Muscles&quot;] },
        { name: &quot;Iron&quot;, color: &quot;#b91c1c&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;8 mg (M) / 18 mg (W)&quot;, role: &quot;Forms the absolute core of hemoglobin (red blood cells) and myoglobin (muscles) to transport oxygen systemically.&quot;, deficiency: &quot;Anemia, chronic exhaustion, pale skin, shortness of breath, and brain fog.&quot;, synergy: &quot;&lt;strong&gt;Vitamin C:&lt;/strong&gt; Radically boosts the absorption of non-heme (plant-based) iron.&quot;, antagonism: &quot;&lt;strong&gt;Tannins &amp; Calcium:&lt;/strong&gt; Tea, coffee, and milk physically bind to iron and block absorption.&quot;, sources: [&quot;Red Meat&quot;, &quot;Lentils&quot;, &quot;Spinach&quot;, &quot;Oysters&quot;], targets: [&quot;Blood&quot;, &quot;Lungs&quot;, &quot;Brain&quot;] },
        { name: &quot;Zinc (Immunity &amp; Fertility)&quot;, color: &quot;#8b5cf6&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;11 mg (M) / 8 mg (W)&quot;, role: &quot;The master fertility and immune mineral. In men, it dictates testosterone levels and sperm motility. In women, it is required for egg maturation and hormonal balance.&quot;, deficiency: &quot;Male: Low testosterone and poor sperm quality. Female: Irregular cycles and inability for eggs to mature. General: Hair loss and immune collapse.&quot;, synergy: &quot;&lt;strong&gt;Vitamin C &amp; Selenium:&lt;/strong&gt; Protects reproductive cells from oxidative damage while Zinc builds them.&quot;, antagonism: &quot;&lt;strong&gt;Phytic Acid &amp; Copper:&lt;/strong&gt; High intake of grains can block Zinc; high Zinc levels can deplete Copper reserves.&quot;, sources: [&quot;Oysters&quot;, &quot;Pumpkin Seeds&quot;, &quot;Beef&quot;, &quot;Chickpeas&quot;], targets: [&quot;Hormones&quot;, &quot;Sperm Quality&quot;, &quot;Immune&quot;] },
        { name: &quot;Iodine&quot;, color: &quot;#a855f7&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;150 mcg&quot;, role: &quot;The fundamental building block for thyroid hormones (T3 and T4), which dictate total body metabolism.&quot;, deficiency: &quot;Goiter (enlarged thyroid), extreme fatigue, weight gain, and severe cognitive delays in fetuses.&quot;, synergy: &quot;&lt;strong&gt;Selenium:&lt;/strong&gt; Required to convert the inactive thyroid hormone (T4) into the active form (T3).&quot;, antagonism: &quot;&lt;strong&gt;Goitrogens (Raw Kale/Soy):&lt;/strong&gt; Interfere with the thyroid gland&#39;s ability to uptake Iodine.&quot;, sources: [&quot;Kelp&quot;, &quot;Cod&quot;, &quot;Eggs&quot;, &quot;Iodized Salt&quot;], targets: [&quot;Thyroid&quot;, &quot;Brain&quot;, &quot;Metabolism&quot;] },
        { name: &quot;Selenium (Thyroid &amp; Repro)&quot;, color: &quot;#64748b&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;55 - 70 mcg&quot;, role: &quot;A critical antioxidant for thyroid and sperm health. Required for the creation of &#39;Selenoproteins&#39; that maintain sperm structural integrity.&quot;, deficiency: &quot;Sperm with &#39;broken tails&#39; or misshapen heads that cannot successfully fertilize an egg. Weakened thyroid function.&quot;, synergy: &quot;&lt;strong&gt;Vitamin E:&lt;/strong&gt; Works together to prevent lipid peroxidation in the delicate membranes of reproductive cells.&quot;, antagonism: &quot;&lt;strong&gt;Heavy Metals:&lt;/strong&gt; Mercury can bind to Selenium, making it unavailable for its reproductive roles.&quot;, sources: [&quot;Brazil Nuts&quot;, &quot;Tuna&quot;, &quot;Sunflower Seeds&quot;, &quot;Eggs&quot;], targets: [&quot;Sperm Morphology&quot;, &quot;Thyroid&quot;, &quot;Immune&quot;] },
        { name: &quot;Copper&quot;, color: &quot;#d97706&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;900 mcg&quot;, role: &quot;Works with iron to form red blood cells. Maintains blood vessels, nerves, and immune function.&quot;, deficiency: &quot;Anemia, dangerously low body temperature, bone fractures, and loss of skin pigmentation.&quot;, synergy: &quot;&lt;strong&gt;Iron:&lt;/strong&gt; Copper is strictly required to oxidize iron so it can bind to transferrin in the blood.&quot;, antagonism: &quot;&lt;strong&gt;Excess Zinc:&lt;/strong&gt; Zinc upregulates a protein that binds and traps copper in the intestinal wall.&quot;, sources: [&quot;Liver&quot;, &quot;Oysters&quot;, &quot;Spirulina&quot;, &quot;Shiitake Mushrooms&quot;], targets: [&quot;Blood&quot;, &quot;Nerves&quot;, &quot;Bones&quot;] },
        { name: &quot;Chromium&quot;, color: &quot;#14b8a6&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;35 mcg&quot;, role: &quot;Enhances the action of insulin, heavily regulating the metabolism and storage of carbohydrates, fats, and proteins.&quot;, deficiency: &quot;Impaired glucose tolerance, elevated blood sugar, and increased insulin requirements.&quot;, synergy: &quot;&lt;strong&gt;Vitamin C &amp; B3:&lt;/strong&gt; Niacin and Vitamin C significantly enhance the absorption of chromium.&quot;, antagonism: &quot;&lt;strong&gt;Refined Carbs:&lt;/strong&gt; Diets high in simple sugars drastically increase chromium excretion in urine.&quot;, sources: [&quot;Broccoli&quot;, &quot;Grape Juice&quot;, &quot;Meat&quot;, &quot;Whole Wheat&quot;], targets: [&quot;Pancreas&quot;, &quot;Metabolism&quot;] },
        { name: &quot;Manganese&quot;, color: &quot;#84cc16&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;2.3 mg (M) / 1.8 mg (W)&quot;, role: &quot;A coenzyme for the antioxidant SOD, vital for bone cartilage formation, blood clotting, and amino acid metabolism.&quot;, deficiency: &quot;Impaired growth, skeletal abnormalities, and altered lipid/carbohydrate metabolism.&quot;, synergy: &quot;&lt;strong&gt;Glucosamine:&lt;/strong&gt; Works synergistically to repair cartilage and maintain joint health.&quot;, antagonism: &quot;&lt;strong&gt;High Iron &amp; Calcium:&lt;/strong&gt; Excessive intake of iron or calcium inhibits manganese absorption in the gut.&quot;, sources: [&quot;Pecans&quot;, &quot;Oats&quot;, &quot;Pineapple&quot;, &quot;Brown Rice&quot;], targets: [&quot;Bones&quot;, &quot;Joints&quot;, &quot;Metabolism&quot;] },
        { name: &quot;Molybdenum&quot;, color: &quot;#6b7280&quot;, type: &quot;Minerals&quot;, subType: &quot;Trace Mineral&quot;, dosage: &quot;45 mcg&quot;, role: &quot;An essential cofactor for enzymes that break down sulfites, toxic compounds, and purines in the liver.&quot;, deficiency: &quot;Extremely rare. Sulfite toxicity (rapid heartbeat, shortness of breath, headache after eating preservatives).&quot;, synergy: &quot;&lt;strong&gt;Riboflavin (B2):&lt;/strong&gt; Works alongside B2 in critical enzyme functions.&quot;, antagonism: &quot;&lt;strong&gt;High Sulfur/Copper:&lt;/strong&gt; Excessive dietary sulfur or copper can reduce molybdenum absorption.&quot;, sources: [&quot;Lentils&quot;, &quot;Black-eyed Peas&quot;, &quot;Lima Beans&quot;, &quot;Liver&quot;], targets: [&quot;Liver&quot;, &quot;Detoxification&quot;] },

        // ================= ESSENTIAL COMPOUNDS =================
        { name: &quot;Omega-3 Fatty Acids (EPA/DHA)&quot;, color: &quot;#0ea5e9&quot;, type: &quot;Compounds&quot;, subType: &quot;Fatty Acids&quot;, dosage: &quot;250 - 500 mg&quot;, role: &quot;Forms the structural cell membranes in the brain and eyes. Actively reduces blood triglycerides and arterial inflammation.&quot;, deficiency: &quot;Dry skin, poor memory, mood swings, joint pain, and increased cardiovascular risks.&quot;, synergy: &quot;&lt;strong&gt;Vitamin E:&lt;/strong&gt; Acts as an antioxidant, preventing the delicate Omega-3 oils from going rancid (oxidizing) inside the body.&quot;, antagonism: &quot;&lt;strong&gt;High Omega-6:&lt;/strong&gt; Consuming too much Omega-6 (seed oils/fried foods) negates the anti-inflammatory benefits.&quot;, sources: [&quot;Salmon&quot;, &quot;Walnuts&quot;, &quot;Flaxseed&quot;, &quot;Chia&quot;], targets: [&quot;Brain&quot;, &quot;Eyes&quot;, &quot;Heart&quot;] },
        { name: &quot;CoQ10 (Ubiquinone)&quot;, emoji: &quot;🔋&quot;, type: &quot;Compounds&quot;, subType: &quot;Antioxidants&quot;, dosage: &quot;100 - 200 mg&quot;, role: &quot;The spark plug for the mitochondria. Provides the immense energy required for heart function, egg maturation, and sperm motility.&quot;, deficiency: &quot;Muscle aches, severe fatigue, poor egg quality in older maternal ages, and &#39;sluggish&#39; sperm.&quot;, synergy: &quot;&lt;strong&gt;Omega-3 Fats:&lt;/strong&gt; Being fat-soluble, CoQ10 requires healthy dietary fats for maximum biological uptake.&quot;, antagonism: &quot;&lt;strong&gt;Statins:&lt;/strong&gt; Cholesterol-lowering drugs significantly block the body&#39;s natural CoQ10 production pathway.&quot;, sources: [&quot;Organ Meats&quot;, &quot;Fatty Fish&quot;, &quot;Peanuts&quot;, &quot;Spinach&quot;], targets: [&quot;Heart&quot;, &quot;Mitochondria&quot;, &quot;Reproductive&quot;] },

        // ================= HUMAN ORGANS &amp; ANATOMY =================
        { name: &quot;Brain&quot;, emoji: &quot;🧠&quot;, type: &quot;Organs&quot;, subType: &quot;Nervous System&quot;, dosage: &quot;20% of Body Energy&quot;, role: &quot;The command center of the central nervous system. Processes sensory data, stores memory, and regulates systemic homeostasis.&quot;, deficiency: &quot;Biological stress manifests as severe brain fog, memory loss, anxiety, depression, and neurodegeneration.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; DHA (Omega-3), B12, Magnesium, and uninterrupted deep REM sleep.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Chronic stress (cortisol), refined sugars, trans fats, and sleep deprivation.&quot;, sources: [&quot;Mental Rest&quot;, &quot;Hydration&quot;, &quot;Healthy Fats&quot;, &quot;Learning&quot;], targets: [&quot;Central Nervous System&quot;] },
        { name: &quot;Peripheral Nerves &amp; Reflexes&quot;, emoji: &quot;⚡&quot;, type: &quot;Organs&quot;, subType: &quot;Nervous System&quot;, dosage: &quot;Systemic Network&quot;, role: &quot;The biological wiring that transmits instantaneous electrical motor commands from the brain to the muscles and organs.&quot;, deficiency: &quot;Slow reaction times, involuntary twitching, numbness, neuropathy (tingling), and poor physical coordination.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Magnesium (nerve relaxation), B12 (protects myelin sheath), and Potassium.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Alcohol neurotoxicity, untreated diabetes (high blood sugar damages nerves), and heavy metals.&quot;, sources: [&quot;Electrolytes&quot;, &quot;B-Vitamins&quot;, &quot;Stretching&quot;, &quot;Sleep&quot;], targets: [&quot;Motor Function&quot;, &quot;Sensory&quot;] },
        { name: &quot;Heart&quot;, emoji: &quot;🫀&quot;, type: &quot;Organs&quot;, subType: &quot;Circulatory System&quot;, dosage: &quot;100,000 Beats/Day&quot;, role: &quot;A muscular organ that pumps oxygenated blood and nutrients to the entire body via the circulatory system.&quot;, deficiency: &quot;Stress manifests as high blood pressure, arrhythmias, angina, and systemic fatigue due to poor oxygen delivery.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; CoQ10 (for cellular energy), Potassium, Magnesium, and consistent aerobic exercise.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; High blood triglycerides, smoking, extreme stress, and severe sodium imbalances.&quot;, sources: [&quot;Cardio&quot;, &quot;Hydration&quot;, &quot;Leafy Greens&quot;, &quot;Omega-3s&quot;], targets: [&quot;Cardiovascular&quot;] },
        { name: &quot;Hemoglobin &amp; Blood&quot;, emoji: &quot;🩸&quot;, type: &quot;Organs&quot;, subType: &quot;Circulatory System&quot;, dosage: &quot;5 Liters (Average)&quot;, role: &quot;The systemic transport fluid. Hemoglobin binds oxygen in the lungs and delivers it to every cell in the body.&quot;, deficiency: &quot;Anemia, chronic fatigue, pale nail beds, breathlessness on exertion, and poor extremity circulation.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Iron, Vitamin B12, Folate (B9), and Copper (for iron oxidation).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Blood loss, iron-blocking tannins (tea/coffee with meals), and chronic systemic inflammation.&quot;, sources: [&quot;Red Meat&quot;, &quot;Spinach&quot;, &quot;Liver&quot;, &quot;Beets&quot;], targets: [&quot;Oxygen Transport&quot;, &quot;Immune&quot;] },
        { name: &quot;Lungs&quot;, emoji: &quot;🫁&quot;, type: &quot;Organs&quot;, subType: &quot;Respiratory System&quot;, dosage: &quot;22,000 Breaths/Day&quot;, role: &quot;Facilitates gas exchange. Extracts oxygen from the atmosphere to oxygenate the blood, and expels carbon dioxide waste.&quot;, deficiency: &quot;Stress causes severe shortness of breath, asthma exacerbation, low stamina, and frequent respiratory infections.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Antioxidants (Vitamin C, E) to protect lung tissue, Omega-3s to reduce airway inflammation.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Smoking, severe air pollution, and sedentary lifestyles that weaken diaphragm strength.&quot;, sources: [&quot;Deep Breathing&quot;, &quot;Clean Air&quot;, &quot;Cardio&quot;, &quot;Citrus&quot;], targets: [&quot;Oxygenation&quot;, &quot;Detox&quot;] },
        { name: &quot;Throat &amp; Vocal Cords&quot;, emoji: &quot;🗣️&quot;, type: &quot;Organs&quot;, subType: &quot;Respiratory System&quot;, dosage: &quot;Mucous Membrane&quot;, role: &quot;Serves as the gateway for air and food. Houses the vocal cords for phonation and tonsils for first-line immune defense.&quot;, deficiency: &quot;Chronic sore throat, hoarseness, laryngitis, and susceptibility to strep/tonsillitis.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Vitamin C, Zinc, raw honey, and vocal rest to reduce structural inflammation.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Smoking, acid reflux (GERD backing up into the throat), chronic dehydration, and shouting.&quot;, sources: [&quot;Warm Teas&quot;, &quot;Hydration&quot;, &quot;Zinc Lozenges&quot;, &quot;Honey&quot;], targets: [&quot;Speech&quot;, &quot;Immune&quot;, &quot;Swallowing&quot;] },
        { name: &quot;Liver&quot;, emoji: &quot;🤎&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;500+ Functions&quot;, role: &quot;The ultimate biochemical factory. Detoxifies blood, metabolizes drugs, synthesizes proteins, and produces bile for fat digestion.&quot;, deficiency: &quot;Overload results in Non-Alcoholic Fatty Liver Disease (NAFLD), jaundice, chronic fatigue, and toxin buildup.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Choline, Milk Thistle (Silymarin), Cruciferous vegetables, and fasting.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; High Fructose Corn Syrup, excessive alcohol, and Acetaminophen (Paracetamol) toxicity.&quot;, sources: [&quot;Clean Diet&quot;, &quot;Water&quot;, &quot;Fasting&quot;, &quot;Broccoli&quot;], targets: [&quot;Metabolism&quot;, &quot;Detox&quot;] },
        { name: &quot;Gallbladder&quot;, emoji: &quot;🍐&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;Bile Storage&quot;, role: &quot;Stores and concentrates bile produced by the liver. Squirts it into the intestine to emulsify and absorb fat-soluble vitamins (A, D, E, K).&quot;, deficiency: &quot;Gallstones, biliary colic, and an inability to absorb essential fats, resulting in systemic fat-soluble vitamin deficiency.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Choline and Taurine help keep bile thin and flowing effectively.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Rapid crash dieting and ultra-low-fat diets cause bile to stagnate and turn into stones.&quot;, sources: [&quot;Beets&quot;, &quot;Artichokes&quot;, &quot;Bitter Greens&quot;, &quot;Apple Cider Vinegar&quot;], targets: [&quot;Fat Absorption&quot;, &quot;Digestion&quot;] },
        { name: &quot;Stomach&quot;, emoji: &quot;🍲&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;pH 1.5 - 3.5&quot;, role: &quot;Secretes powerful hydrochloric acid and digestive enzymes to churn and chemically break down heavy proteins and destroy pathogens.&quot;, deficiency: &quot;Low acid (hypochlorhydria) causes severe acid reflux, indigestion, bloating, and total malabsorption of B12/Iron.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Zinc (required to produce stomach acid), Ginger, and mindful, slow chewing.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Chronic stress shuts down acid production. Drinking massive amounts of water during meals dilutes enzymes.&quot;, sources: [&quot;Mindful Eating&quot;, &quot;Ginger&quot;, &quot;Zinc&quot;, &quot;Fermented Foods&quot;], targets: [&quot;Protein Breakdown&quot;, &quot;Immune&quot;] },
        { name: &quot;Small Intestine&quot;, emoji: &quot;🍝&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;20 Feet Long&quot;, role: &quot;The primary site of systemic absorption. Villi extract vitamins, minerals, and macronutrients directly into the bloodstream.&quot;, deficiency: &quot;Damage causes Leaky Gut Syndrome, severe bloating, diarrhea, cramps, and systemic nutrient deficiencies.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; L-Glutamine (repairs the intestinal wall), Vitamin D, and digestive enzymes.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; NSAIDs (Ibuprofen) damage the lining. Gluten (in sensitive individuals) destroys the absorptive villi.&quot;, sources: [&quot;Bone Broth&quot;, &quot;Glutamine&quot;, &quot;Enzymes&quot;, &quot;Kefir&quot;], targets: [&quot;Nutrient Absorption&quot;] },
        { name: &quot;Large Intestine (Colon)&quot;, emoji: &quot;💩&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;Waste Compactor&quot;, role: &quot;Reabsorbs water and electrolytes, and compacts waste into stool for safe biological elimination.&quot;, deficiency: &quot;Imbalance causes chronic constipation, irritable bowel syndrome, severe bloating, and toxic reabsorption.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Soluble/Insoluble Fiber, and Magnesium (draws water into the bowel to soften stool).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Low fiber diets stagnate waste, and chronic dehydration leads to severe impaction.&quot;, sources: [&quot;Fiber&quot;, &quot;Water&quot;, &quot;Legumes&quot;, &quot;Magnesium&quot;], targets: [&quot;Waste Removal&quot;, &quot;Hydration&quot;] },
        { name: &quot;Gut Microbiome&quot;, emoji: &quot;🦠&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;39 Trillion Microbes&quot;, role: &quot;Functions as an acquired organ. Synthesizes Vitamin K and B-vitamins, produces 95% of the body&#39;s serotonin, and trains the immune system.&quot;, deficiency: &quot;Dysbiosis. Causes profound systemic inflammation, severe anxiety/depression, IBS, and autoimmune triggers.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Prebiotic fibers (Inulin, Pectin) feed the bacteria; diverse plant foods expand microbial variety.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Broad-spectrum antibiotics obliterate diversity. Emulsifiers and artificial sweeteners degrade the mucus lining.&quot;, sources: [&quot;Kefir&quot;, &quot;Kimchi&quot;, &quot;Garlic&quot;, &quot;Leeks&quot;], targets: [&quot;Immunity&quot;, &quot;Brain&quot;, &quot;Digestion&quot;] },
        { name: &quot;Teeth &amp; Gums&quot;, emoji: &quot;🦷&quot;, type: &quot;Organs&quot;, subType: &quot;Digestive System&quot;, dosage: &quot;32 Adult Teeth&quot;, role: &quot;Initiates mechanical digestion. Gums provide the protective mucosal seal around the tooth root to prevent systemic infection.&quot;, deficiency: &quot;Bleeding gums (scurvy/Vit C deficiency), enamel erosion, tooth decay, and periodontitis.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Vitamin C (for gum collagen integrity), Calcium, D3, and K2 (for enamel remineralization).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Refined sugars, highly acidic beverages (soda), and mouth breathing (dries out protective saliva).&quot;, sources: [&quot;Dairy&quot;, &quot;Citrus&quot;, &quot;Crunchy Veg&quot;, &quot;Green Tea&quot;], targets: [&quot;Mechanical Digestion&quot;, &quot;Oral Health&quot;] },
        { name: &quot;Kidneys&quot;, emoji: &quot;🫘&quot;, type: &quot;Organs&quot;, subType: &quot;Excretory System&quot;, dosage: &quot;Filters 150Q Blood/Day&quot;, role: &quot;Filters waste metabolites and excess water from the blood to create urine. Strictly regulates total body electrolytes and blood pressure.&quot;, deficiency: &quot;Stress results in peripheral edema (swelling), chronic lethargy, kidney stones, and hypertension.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Optimal hydration, balanced Potassium/Sodium ratios, and Vitamin B6 (prevents oxalate stones).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Chronic dehydration, extremely high protein diets without water, and chronic high blood pressure.&quot;, sources: [&quot;Water&quot;, &quot;Electrolytes&quot;, &quot;Cranberries&quot;, &quot;Citrus&quot;], targets: [&quot;Fluid Balance&quot;, &quot;Toxin Removal&quot;] },
        { name: &quot;Thyroid&quot;, emoji: &quot;🦋&quot;, type: &quot;Organs&quot;, subType: &quot;Endocrine System&quot;, dosage: &quot;Master Regulator&quot;, role: &quot;A butterfly-shaped gland that produces hormones (T3/T4) dictating the basal metabolic rate, heart rate, and body temperature.&quot;, deficiency: &quot;Hypothyroidism causes extreme fatigue, rapid weight gain, hair loss, feeling constantly cold, and depression.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Iodine (the building block), Selenium (for conversion), and Tyrosine.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Goitrogens (raw soy/cruciferous veg in massive amounts), fluoride, and chronic systemic stress.&quot;, sources: [&quot;Seaweed&quot;, &quot;Brazil Nuts&quot;, &quot;Rest&quot;, &quot;Eggs&quot;], targets: [&quot;Metabolism&quot;, &quot;Energy&quot;] },
        { name: &quot;Pancreas&quot;, emoji: &quot;🩸&quot;, type: &quot;Organs&quot;, subType: &quot;Endocrine System&quot;, dosage: &quot;Dual Function&quot;, role: &quot;Endocrine function: Secretes insulin to lower blood sugar. Exocrine function: Secretes digestive enzymes to break down carbs/fats/proteins.&quot;, deficiency: &quot;Dysfunction results in Type 2 Diabetes, massive blood sugar spikes, extreme post-meal fatigue, and maldigestion.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Chromium (enhances insulin), Alpha-Lipoic Acid, and balanced macronutrient meals.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Liquid sugars, severe obesity, and chronic alcohol abuse (causes pancreatitis).&quot;, sources: [&quot;Low GI Foods&quot;, &quot;Cinnamon&quot;, &quot;Fasting&quot;, &quot;Fiber&quot;], targets: [&quot;Blood Sugar&quot;, &quot;Digestion&quot;] },
        { name: &quot;Ovaries &amp; Uterine Lining&quot;, emoji: &quot;🥚&quot;, type: &quot;Organs&quot;, subType: &quot;Reproductive System&quot;, dosage: &quot;Cyclical Hormones&quot;, role: &quot;The female reproductive centers. Responsible for monthly egg release (ovulation) and maintaining a nutrient-rich lining for embryo implantation.&quot;, deficiency: &quot;Irregular ovulation (PCOS), thin uterine lining, and hormonal &#39;Phase Defects&#39; (low Progesterone).&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Inositol &amp; Vitamin D help regulate insulin and support the follicle-stimulating hormone (FSH).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Endocrine Disruptors like plastics (BPA/Phthalates) mimic estrogen and disrupt the ovulation signal.&quot;, sources: [&quot;Healthy Fats&quot;, &quot;Leafy Greens&quot;, &quot;Rest&quot;, &quot;Vitamin D&quot;], targets: [&quot;Ovulation&quot;, &quot;Implantation&quot;, &quot;Hormones&quot;] },
        { name: &quot;Testes (Sperm Production)&quot;, emoji: &quot;🧬&quot;, type: &quot;Organs&quot;, subType: &quot;Reproductive System&quot;, dosage: &quot;70-90 Day Cycle&quot;, role: &quot;The primary male reproductive organ. Produces testosterone and generates millions of new sperm cells daily in a 3-month cycle.&quot;, deficiency: &quot;Low sperm count (Oligospermia), poor morphology (shape), and reduced libido.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Selenium &amp; L-Carnitine protect sperm from heat stress and provide energy for swimming.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Excess heat (laptops/saunas) and oxidative stress (smoking) kill developing sperm cells.&quot;, sources: [&quot;Brazil Nuts&quot;, &quot;Zinc&quot;, &quot;Cold Exposure&quot;, &quot;Antioxidants&quot;], targets: [&quot;Sperm Production&quot;, &quot;Testosterone&quot;] },
        { name: &quot;Immune System&quot;, emoji: &quot;🛡️&quot;, type: &quot;Organs&quot;, subType: &quot;Immune System&quot;, dosage: &quot;System-Wide&quot;, role: &quot;A complex network of white blood cells, antibodies, and organs that relentlessly defend the body against viruses, bacteria, and cancer cells.&quot;, deficiency: &quot;Collapse results in constant sickness, slow wound healing, autoimmune disorders, and severe susceptibility to infections.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Vitamin C, Vitamin D3, Zinc, and adequate, high-quality sleep.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Sleep deprivation, chronic cortisol elevation (stress), and severe nutrient deficiencies.&quot;, sources: [&quot;Sleep&quot;, &quot;Nutrition&quot;, &quot;Sunlight&quot;, &quot;Garlic&quot;], targets: [&quot;Pathogen Defense&quot;] },
        { name: &quot;Lymphatic System&quot;, emoji: &quot;🌊&quot;, type: &quot;Organs&quot;, subType: &quot;Immune System&quot;, dosage: &quot;Body-Wide Network&quot;, role: &quot;The body&#39;s biological &#39;sewage system&#39;. Maintains fluid balance, absorbs dietary fats, and transports immune cells (lymphocytes).&quot;, deficiency: &quot;Lymphedema (severe swelling), chronic infections, and toxic cellular buildup in tissues.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Hydration, deep diaphragmatic breathing, and physical movement (lymph has no pump, it requires muscle contraction).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Sedentary lifestyle, tight clothing, and chronic dehydration stagnate lymph flow.&quot;, sources: [&quot;Rebounding (Trampoline)&quot;, &quot;Dry Brushing&quot;, &quot;Massage&quot;, &quot;Water&quot;], targets: [&quot;Detox&quot;, &quot;Immunity&quot;] },
        { name: &quot;Skin&quot;, emoji: &quot;✋&quot;, type: &quot;Organs&quot;, subType: &quot;Integumentary System&quot;, dosage: &quot;Largest Organ&quot;, role: &quot;The body&#39;s primary physical barrier against pathogens. Regulates temperature, prevents water loss, and synthesizes Vitamin D.&quot;, deficiency: &quot;Compromised skin exhibits chronic dryness, eczema, acne, premature aging/wrinkling, and slow healing.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Collagen, Vitamin C, Omega-3s, and adequate hydration.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; UV radiation without protection, smoking (destroys collagen), and high-sugar diets (glycation).&quot;, sources: [&quot;Hydration&quot;, &quot;Healthy Fats&quot;, &quot;Antioxidants&quot;, &quot;Zinc&quot;], targets: [&quot;Barrier Defense&quot;, &quot;Temperature&quot;] },
        { name: &quot;Hair &amp; Follicles&quot;, emoji: &quot;💇&quot;, type: &quot;Organs&quot;, subType: &quot;Integumentary System&quot;, dosage: &quot;100,000+ Follicles&quot;, role: &quot;Protects the scalp, regulates temperature, and serves as an external biological indicator of systemic nutritional health.&quot;, deficiency: &quot;Hair thinning, premature graying, alopecia (hair loss), and extremely brittle texture.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Biotin (B7), Zinc, Iron, and Collagen protein.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Severe stress (telogen effluvium), crash dieting, and thyroid dysfunction.&quot;, sources: [&quot;Eggs&quot;, &quot;Nuts&quot;, &quot;Salmon&quot;, &quot;Avocado&quot;], targets: [&quot;Scalp Protection&quot;, &quot;Insulation&quot;] },
        { name: &quot;Bones&quot;, emoji: &quot;🦴&quot;, type: &quot;Organs&quot;, subType: &quot;Skeletal System&quot;, dosage: &quot;206 Bones&quot;, role: &quot;Provides mechanical support, protects vital organs, houses bone marrow (blood cell production), and stores calcium/phosphorus.&quot;, deficiency: &quot;Deterioration causes osteopenia, osteoporosis, frequent fractures, and structural pain.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; The Trinity: Calcium (structure), Vitamin D3 (absorption), and Vitamin K2 (placement). Plus weight-lifting.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Sedentary lifestyle, zero-gravity environments, and chronic cola consumption (phosphoric acid drains calcium).&quot;, sources: [&quot;Resistance Training&quot;, &quot;Dairy&quot;, &quot;Sunlight&quot;, &quot;Sardines&quot;], targets: [&quot;Structure&quot;, &quot;Blood Production&quot;] },
        { name: &quot;Muscles&quot;, emoji: &quot;💪&quot;, type: &quot;Organs&quot;, subType: &quot;Skeletal System&quot;, dosage: &quot;600+ Muscles&quot;, role: &quot;Supports athletic movement, rapid tissue repair, posture maintenance, and overall physical strength and heat generation.&quot;, deficiency: &quot;Muscle weakness, spasms, nighttime cramps, atrophy, and extended recovery fatigue.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Protein (Amino Acids), Magnesium, Potassium, and Vitamin D.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Immobility (atrophy), severe dehydration, and extreme overtraining without rest.&quot;, sources: [&quot;Eggs&quot;, &quot;Chicken&quot;, &quot;Bananas&quot;, &quot;Pumpkin Seeds&quot;], targets: [&quot;Movement&quot;, &quot;Metabolism&quot;] },
        { name: &quot;Eyes&quot;, emoji: &quot;👁️&quot;, type: &quot;Organs&quot;, subType: &quot;Sensory System&quot;, dosage: &quot;Visual Cortex Input&quot;, role: &quot;Captures light and converts it into electro-chemical impulses in neurons. Supports sharp vision and protects against UV/blue light.&quot;, deficiency: &quot;Night blindness, chronic eye dryness, macular degeneration, and severe visual fatigue.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Vitamin A (Retinol), Lutein, Zeaxanthin, and Omega-3 fatty acids.&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Prolonged screen time without blinking, UV exposure, and diabetes (diabetic retinopathy).&quot;, sources: [&quot;Carrots&quot;, &quot;Spinach&quot;, &quot;Egg yolks&quot;, &quot;Salmon&quot;], targets: [&quot;Vision&quot;, &quot;Circadian Rhythm&quot;] },
        { name: &quot;Ears&quot;, emoji: &quot;👂&quot;, type: &quot;Organs&quot;, subType: &quot;Sensory System&quot;, dosage: &quot;Auditory Processing&quot;, role: &quot;Maintains the delicate nerve pathways and inner ear hair cells responsible for hearing and spatial balance (vestibular system).&quot;, deficiency: &quot;Gradual hearing loss, tinnitus (constant ringing in the ears), and dizzy spells/vertigo.&quot;, synergy: &quot;&lt;strong&gt;Optimizers:&lt;/strong&gt; Zinc, Magnesium, Vitamin B12, and Folate (preserves nerve health).&quot;, antagonism: &quot;&lt;strong&gt;Stressors:&lt;/strong&gt; Chronic exposure to loud noise (decibel damage), ear infections, and poor circulation.&quot;, sources: [&quot;Meat&quot;, &quot;Nuts&quot;, &quot;Leafy greens&quot;, &quot;Fish&quot;], targets: [&quot;Hearing&quot;, &quot;Balance&quot;] }
    ];

    // --- RENDER &amp; FILTER LOGIC ---
    let currentMainFilter = &#39;All&#39;;
    let currentSubFilter = &#39;All&#39;;
    let searchQuery = &#39;&#39;;
    let userFavorites = JSON.parse(localStorage.getItem(&#39;otechy_bio_favs_v7&#39;)) || [];

    const subFiltersMap = {
        &#39;Vitamins&#39;: [&#39;All&#39;, &#39;Water-Soluble&#39;, &#39;Fat-Soluble&#39;],
        &#39;Minerals&#39;: [&#39;All&#39;, &#39;Macro Mineral&#39;, &#39;Trace Mineral&#39;],
        &#39;Compounds&#39;: [&#39;All&#39;, &#39;Fatty Acids&#39;, &#39;Antioxidants&#39;],
        &#39;Organs&#39;: [&#39;All&#39;, &#39;Nervous System&#39;, &#39;Circulatory System&#39;, &#39;Respiratory System&#39;, &#39;Digestive System&#39;, &#39;Endocrine System&#39;, &#39;Skeletal System&#39;, &#39;Integumentary System&#39;, &#39;Reproductive System&#39;, &#39;Immune System&#39;, &#39;Sensory System&#39;, &#39;Excretory System&#39;]
    };

    function toggleFavorite(itemName) {
        if (userFavorites.includes(itemName)) {
            userFavorites = userFavorites.filter(n =&gt; n !== itemName);
        } else {
            userFavorites.push(itemName);
        }
        localStorage.setItem(&#39;otechy_bio_favs_v7&#39;, JSON.stringify(userFavorites));
        renderGrid(); 
    }

    function setMainFilter(filter) {
        currentMainFilter = filter;
        currentSubFilter = &#39;All&#39;;
        
        document.getElementById(&#39;mainFilters&#39;).querySelectorAll(&#39;.filter-btn&#39;).forEach(btn =&gt; btn.classList.remove(&#39;active&#39;));
        event.target.classList.add(&#39;active&#39;);

        const subContainer = document.getElementById(&#39;subFilters&#39;);
        subContainer.innerHTML = &#39;&#39;;
        if (subFiltersMap[filter]) {
            subFiltersMap[filter].forEach(sub =&gt; {
                const btn = document.createElement(&#39;button&#39;);
                btn.className = sub === &#39;All&#39; ? &#39;sub-btn active&#39; : &#39;sub-btn&#39;;
                btn.innerText = sub;
                btn.onclick = (e) =&gt; setSubFilter(sub, e.target);
                subContainer.appendChild(btn);
            });
        }
        renderGrid();
    }

    function setSubFilter(subFilter, btnElement) {
        currentSubFilter = subFilter;
        document.getElementById(&#39;subFilters&#39;).querySelectorAll(&#39;.sub-btn&#39;).forEach(btn =&gt; btn.classList.remove(&#39;active&#39;));
        btnElement.classList.add(&#39;active&#39;);
        renderGrid();
    }

    function handleSearch() {
        searchQuery = document.getElementById(&#39;searchInput&#39;).value.toLowerCase();
        renderGrid();
    }

    function renderGrid() {
        const grid = document.getElementById(&#39;dataGrid&#39;);
        grid.innerHTML = &#39;&#39;;

        let filtered = bioDB;
        
        if (currentMainFilter === &#39;Favorites&#39;) {
            filtered = filtered.filter(c =&gt; userFavorites.includes(c.name));
        } else if (currentMainFilter !== &#39;All&#39;) {
            filtered = filtered.filter(c =&gt; c.type === currentMainFilter);
        }

        if (currentSubFilter !== &#39;All&#39;) {
            filtered = filtered.filter(c =&gt; c.subType === currentSubFilter);
        }

        if (searchQuery) {
            filtered = filtered.filter(c =&gt; {
                const searchStr = searchQuery.toLowerCase();
                return c.name.toLowerCase().includes(searchStr) || 
                       c.role.toLowerCase().includes(searchStr) ||
                       c.deficiency.toLowerCase().includes(searchStr) ||
                       (c.targets &amp;&amp; c.targets.some(t =&gt; t.toLowerCase().includes(searchStr))) ||
                       (c.sources &amp;&amp; c.sources.some(s =&gt; s.toLowerCase().includes(searchStr)));
            });
        }

        // Update Result Counter
        document.getElementById(&#39;countNum&#39;).innerText = filtered.length;

        if (filtered.length === 0) {
            grid.innerHTML = `&lt;div style=&quot;text-align:center; grid-column: 1/-1; color: var(--accent); padding: 40px; font-weight: 600;&quot;&gt;No biological data found matching your exact criteria.&lt;/div&gt;`;
            return;
        }

        filtered.forEach(c =&gt; {
            const isFav = userFavorites.includes(c.name);
            const heartClass = isFav ? &quot;fav-icon is-fav&quot; : &quot;fav-icon&quot;;
            const heartIcon = isFav ? &quot;❤️&quot; : &quot;🤍&quot;;

            let badgesHtml = &#39;&#39;;
            let isOrgan = c.type === &#39;Organs&#39;;

            if(isOrgan) {
                badgesHtml += `&lt;span class=&quot;badge-base badge-organ&quot;&gt;🧬 ${c.subType}&lt;/span&gt;`;
            } else if (c.type === &#39;Compounds&#39;) {
                badgesHtml += `&lt;span class=&quot;badge-base badge-compound&quot;&gt;🧪 ${c.subType}&lt;/span&gt;`;
            } else {
                let impClass = c.importance === &#39;Crucial&#39; ? &#39;badge-crucial&#39; : &#39;badge-daily&#39;;
                let subClass = c.subType.includes(&#39;Macro&#39;) ? &#39;badge-macro&#39; : (c.subType.includes(&#39;Trace&#39;) ? &#39;badge-trace&#39; : &#39;badge-base&#39;);
                badgesHtml += `&lt;span class=&quot;badge-base ${subClass}&quot;&gt;🏷️ ${c.subType}&lt;/span&gt;`;
                if(c.importance) badgesHtml += `&lt;span class=&quot;badge-base ${impClass}&quot;&gt;⏱️ ${c.importance}&lt;/span&gt;`;
            }

            const headerIcon = c.emoji ? `&lt;span class=&quot;organ-emoji&quot;&gt;${c.emoji}&lt;/span&gt;` : `&lt;div class=&quot;bio-color-tag&quot; style=&quot;background: ${c.color}&quot;&gt;&lt;/div&gt;`;
            
            const dosageTitle = isOrgan ? &quot;Metabolic Load / Fact&quot; : &quot;Clinical RDA (Adults)&quot;;
            const dosageIcon = isOrgan ? &quot;⚡&quot; : &quot;💊&quot;;

            const targetTags = c.targets.map(t =&gt; `&lt;span class=&quot;o-tag&quot;&gt;🎯 ${t}&lt;/span&gt;`).join(&#39;&#39;);
            const sourceTags = c.sources.map(s =&gt; `&lt;span class=&quot;c-tag&quot;&gt;🌿 ${s}&lt;/span&gt;`).join(&#39;&#39;);

            const card = document.createElement(&#39;div&#39;);
            card.className = &#39;bio-card&#39;;
            card.innerHTML = `
                &lt;div class=&quot;card-header&quot;&gt;
                    &lt;h3 class=&quot;bio-name&quot;&gt;
                        ${headerIcon}
                        ${c.name}
                    &lt;/h3&gt;
                    &lt;div class=&quot;${heartClass}&quot; onclick=&quot;toggleFavorite(&#39;${c.name}&#39;)&quot; title=&quot;Track this item&quot;&gt;${heartIcon}&lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;expert-badges&quot;&gt;
                    ${badgesHtml}
                    ${targetTags}
                &lt;/div&gt;

                &lt;div class=&quot;dosage-box&quot;&gt;
                    &lt;strong&gt;${dosageIcon} ${dosageTitle}&lt;/strong&gt;
                    &lt;span&gt;${c.dosage}&lt;/span&gt;
                &lt;/div&gt;

                &lt;div class=&quot;info-group&quot;&gt;
                    &lt;span class=&quot;info-lbl&quot;&gt;🔬 Biological Role&lt;/span&gt;
                    &lt;span class=&quot;info-val&quot;&gt;${c.role}&lt;/span&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;info-group alert-group&quot;&gt;
                    &lt;span class=&quot;info-lbl&quot;&gt;⚠️ Deficiency / Stress Symptoms&lt;/span&gt;
                    &lt;span class=&quot;info-val&quot;&gt;${c.deficiency}&lt;/span&gt;
                &lt;/div&gt;

                &lt;div class=&quot;pairings-box&quot;&gt;
                    &lt;div&gt;&lt;span class=&quot;syn-mix&quot;&gt;🟢 Synergy (Mix / Optimize):&lt;/span&gt; &lt;br&gt;${c.synergy}&lt;/div&gt;
                    &lt;div style=&quot;margin-top: 10px;&quot;&gt;&lt;span class=&quot;syn-avoid&quot;&gt;🔴 Antagonism (Avoid / Stress):&lt;/span&gt; &lt;br&gt;${c.antagonism}&lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;cleanse-tags&quot;&gt;
                    &lt;div class=&quot;section-title&quot;&gt;Natural Sources / Actions&lt;/div&gt;
                    ${sourceTags}
                &lt;/div&gt;
            `;
            grid.appendChild(card);
        });
    }

    // Init
    renderGrid();
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1405387841879515067'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1405387841879515067'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/04/ultimate-health-database-vitamins.html' title='Ultimate Health Database | Vitamins, Minerals &amp; Organs'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-7209136864557440817</id><published>2026-03-30T08:44:00.000-07:00</published><updated>2026-03-30T08:44:39.073-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hardening"/><category scheme="http://www.blogger.com/atom/ns#" term="Powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL/TLS"/><title type='text'>SSL and TLS Hardening Script Generator</title><content type='html'>&lt;title&gt;SSL &amp; TLS Hardening Script Generator | PowerShell Script Builder&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Visually generate PowerShell scripts to harden SSL and TLS protocols on Windows Servers. Includes auto-backups, OS detection, and .NET Strong Crypto.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --danger: #ef4444; --warning: #f59e0b; --info: #3b82f6;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 850px; margin: 0 auto; padding: 25px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 20px; }
    .new-badge { display: inline-block; background: #1e293b; color: #e2e8f0; padding: 4px 12px; border-radius: 50px; font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px; }
    .hero-section h1 { font-size: clamp(20px, 5vw, 28px); font-weight: 800; margin: 0 0 5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 12px; font-weight: 500; max-width: 550px; margin: 0 auto; }

    /* Main Card */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 20px rgba(37, 99, 235, 0.03); margin-bottom: 20px; }
    
    /* Presets Row */
    .presets-row { display: flex; gap: 10px; margin-bottom: 20px; justify-content: center; flex-wrap: wrap; }
    .preset-btn { background: #f1f5f9; border: 1px solid var(--border); color: var(--text-dark); padding: 8px 16px; border-radius: 8px; font-size: 11px; font-weight: 700; cursor: pointer; transition: 0.2s; text-transform: uppercase; display: flex; align-items: center; gap: 6px; }
    .preset-btn:hover { background: #e2e8f0; }
    .preset-btn.strict { background: #ecfdf5; border-color: #a7f3d0; color: #065f46; }
    .preset-btn.strict:hover { background: #d1fae5; }

    /* Matrix Grid */
    .matrix-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 12px; margin-bottom: 20px; }
    .protocol-card { background: #f8fafc; border: 1px solid var(--border); border-radius: 12px; padding: 15px; text-align: center; transition: 0.2s; position: relative; overflow: hidden; }
    .protocol-card.active { border-color: var(--success); background: #f0fdf4; box-shadow: 0 4px 12px rgba(16, 185, 129, 0.1); }
    .protocol-card.disabled { border-color: var(--danger); background: #fef2f2; opacity: 0.9; }
    
    .prot-name { font-size: 13px; font-weight: 800; color: var(--text-dark); margin-bottom: 12px; }
    
    /* Switches */
    .switch { position: relative; display: inline-block; width: 42px; height: 22px; }
    .switch input { opacity: 0; width: 0; height: 0; }
    .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--danger); transition: .3s; border-radius: 24px; }
    .slider:before { position: absolute; content: &quot;&quot;; height: 16px; width: 16px; left: 3px; bottom: 3px; background-color: white; transition: .3s; border-radius: 50%; box-shadow: 0 2px 4px rgba(0,0,0,0.2); }
    input:checked + .slider { background-color: var(--success); }
    input:checked + .slider:before { transform: translateX(20px); }

    /* Extra Toggles */
    .extra-toggles { background: #f8fafc; border: 1px dashed var(--border); padding: 15px; border-radius: 12px; margin-bottom: 20px; display: flex; align-items: center; justify-content: space-between; gap: 15px; }
    .extra-toggles-text h4 { margin: 0 0 4px 0; font-size: 13px; font-weight: 800; color: var(--text-dark); }
    .extra-toggles-text p { margin: 0; font-size: 11px; color: var(--accent); font-weight: 500; }

    /* Dynamic Alerts */
    .alert-container { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; }
    .alert-box { padding: 12px 15px; border-radius: 8px; font-size: 11px; font-weight: 600; line-height: 1.5; display: flex; gap: 10px; align-items: flex-start; animation: fadeIn 0.3s ease; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } }
    .alert-warning { background: #fffbeb; border: 1px solid #fde68a; color: #b45309; }
    .alert-info { background: #eff6ff; border: 1px solid #bfdbfe; color: #1d4ed8; }
    .alert-success { background: #ecfdf5; border: 1px solid #a7f3d0; color: #065f46; }

    /* Terminal Box */
    .terminal-box { background: #0f172a; border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; box-shadow: 0 10px 15px rgba(0,0,0,0.1); }
    .term-header { background: #1e293b; padding: 10px 15px; display: flex; align-items: center; justify-content: space-between; }
    .term-dots { display: flex; gap: 6px; }
    .term-dot { width: 10px; height: 10px; border-radius: 50%; }
    .dot-red { background: #ef4444; } .dot-yel { background: #f59e0b; } .dot-grn { background: #10b981; }
    
    .copy-btn { background: var(--primary); color: #fff; border: none; padding: 6px 12px; border-radius: 6px; font-size: 10px; font-weight: 800; cursor: pointer; transition: 0.2s; text-transform: uppercase; }
    .copy-btn:hover { background: var(--primary-dark); }
    
    .term-body { padding: 15px; background: #020617; overflow-x: auto; max-height: 400px; }
    .cmd-text { font-family: &#39;Consolas&#39;, monospace; font-size: 12px; color: #e2e8f0; white-space: pre; line-height: 1.6; tab-size: 4; }
    .cmd-comment { color: #10b981; }
    .cmd-keyword { color: #38bdf8; }
    .cmd-string { color: #fef08a; }
    .cmd-var { color: #c084fc; }

    /* Compact FAQ Section */
    .faq-section { margin-top: 35px; }
    .faq-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 15px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
    .faq-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-top: 3px solid var(--primary); box-shadow: 0 2px 6px rgba(0,0,0,0.02); transition: 0.2s; }
    .faq-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(37, 99, 235, 0.05); }
    .faq-card strong { color: var(--primary-dark); display: block; margin-bottom: 6px; font-size: 13px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }

    @media (max-width: 600px) {
        .matrix-grid { grid-template-columns: 1fr 1fr; }
        .extra-toggles { flex-direction: column; align-items: flex-start; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;⚡ Advanced Server Utility (V2)&lt;/div&gt;
        &lt;h1&gt;SSL &amp; TLS &lt;span&gt;Hardening Script&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Visually configure SCHANNEL registry keys. Includes auto-backups, smart OS detection, and .NET Framework strong crypto enforcement.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        
        &lt;div class=&quot;presets-row&quot;&gt;
            &lt;button class=&quot;preset-btn strict&quot; onclick=&quot;applyPreset(&#39;strict&#39;)&quot;&gt;
                &lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot;&gt;&lt;path d=&quot;M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
                PCI-DSS Strict (Recommended)
            &lt;/button&gt;
            &lt;button class=&quot;preset-btn&quot; onclick=&quot;applyPreset(&#39;legacy&#39;)&quot;&gt;
                &lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;polyline points=&quot;12 6 12 12 16 14&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;
                Legacy Compatibility
            &lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;matrix-grid&quot;&gt;
            &lt;div class=&quot;protocol-card disabled&quot; id=&quot;card-SSL20&quot;&gt;
                &lt;div class=&quot;prot-name&quot;&gt;SSL 2.0&lt;/div&gt;
                &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;SSL20&quot; onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;protocol-card disabled&quot; id=&quot;card-SSL30&quot;&gt;
                &lt;div class=&quot;prot-name&quot;&gt;SSL 3.0&lt;/div&gt;
                &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;SSL30&quot; onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;protocol-card disabled&quot; id=&quot;card-TLS10&quot;&gt;
                &lt;div class=&quot;prot-name&quot;&gt;TLS 1.0&lt;/div&gt;
                &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;TLS10&quot; onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;protocol-card disabled&quot; id=&quot;card-TLS11&quot;&gt;
                &lt;div class=&quot;prot-name&quot;&gt;TLS 1.1&lt;/div&gt;
                &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;TLS11&quot; onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;protocol-card active&quot; id=&quot;card-TLS12&quot;&gt;
                &lt;div class=&quot;prot-name&quot;&gt;TLS 1.2&lt;/div&gt;
                &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;TLS12&quot; checked onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;protocol-card active&quot; id=&quot;card-TLS13&quot;&gt;
                &lt;div class=&quot;prot-name&quot;&gt;TLS 1.3&lt;/div&gt;
                &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;TLS13&quot; checked onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;extra-toggles&quot;&gt;
            &lt;div class=&quot;extra-toggles-text&quot;&gt;
                &lt;h4&gt;Enforce .NET Framework Strong Crypto&lt;/h4&gt;
                &lt;p&gt;Crucial for older apps. Forces .NET to use the OS Default TLS (TLS 1.2) instead of falling back to weak protocols.&lt;/p&gt;
            &lt;/div&gt;
            &lt;label class=&quot;switch&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;DotNet&quot; checked onchange=&quot;updateScript()&quot;&gt;&lt;span class=&quot;slider&quot;&gt;&lt;/span&gt;&lt;/label&gt;
        &lt;/div&gt;

        &lt;div class=&quot;alert-container&quot; id=&quot;dynamicAlerts&quot;&gt;&lt;/div&gt;

        &lt;div class=&quot;terminal-box&quot;&gt;
            &lt;div class=&quot;term-header&quot;&gt;
                &lt;div class=&quot;term-dots&quot;&gt;
                    &lt;div class=&quot;term-dot dot-red&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;term-dot dot-yel&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;term-dot dot-grn&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyScript()&quot;&gt;Copy Script&lt;/button&gt;
            &lt;/div&gt;
            &lt;div class=&quot;term-body&quot;&gt;
                &lt;div class=&quot;cmd-text&quot; id=&quot;scriptOutput&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;Windows Server Hardening FAQ&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;1. Why must I disable TLS 1.0 and 1.1?&lt;/strong&gt;
                &lt;p&gt;These legacy protocols contain known vulnerabilities (like POODLE). They are deprecated by the IETF and banned by PCI-DSS standards.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;2. What is the risk of disabling TLS 1.0/1.1?&lt;/strong&gt;
                &lt;p&gt;If you run older SQL Native Clients, legacy APIs, or unpatched .NET applications, they may instantly lose database/network connectivity. Test in staging first.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;3. Why do we need the .NET Strong Crypto keys?&lt;/strong&gt;
                &lt;p&gt;Even if Windows natively disables TLS 1.0, older .NET Framework apps (v4.x) are hardcoded to prefer legacy protocols. The `SchUseStrongCrypto` registry key forces them to respect the OS default.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;4. Does the script create a backup?&lt;/strong&gt;
                &lt;p&gt;Yes! The V2 script executes a `reg export` command immediately, saving your current SCHANNEL state to `C:\schannel-backup.reg` before applying changes.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;5. Is TLS 1.3 supported on my server?&lt;/strong&gt;
                &lt;p&gt;TLS 1.3 is only natively supported on Windows Server 2022 and Windows 11. Our generated script features OS detection and will safely skip TLS 1.3 on unsupported older OS versions.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;6. Does this script harden Cipher Suites?&lt;/strong&gt;
                &lt;p&gt;No. This script hardens &lt;strong&gt;Protocols&lt;/strong&gt;. To achieve perfect PCI-DSS compliance, you must also disable weak ciphers (RC4, 3DES) and reorder Cipher Suites via Group Policy or tools like IIS Crypto.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;7. Does this script require a reboot?&lt;/strong&gt;
                &lt;p&gt;Yes. Changes to the SCHANNEL registry keys in Windows only take effect after a full system restart. The script will prompt you to reboot at the end.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;8. What does &quot;DisabledByDefault&quot; mean?&lt;/strong&gt;
                &lt;p&gt;This DWORD value instructs the OS not to negotiate the protocol unless an application explicitly requests it. Our script correctly toggles this alongside the &quot;Enabled&quot; value.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    const protocols = [
        { id: &#39;SSL20&#39;, name: &#39;SSL 2.0&#39; },
        { id: &#39;SSL30&#39;, name: &#39;SSL 3.0&#39; },
        { id: &#39;TLS10&#39;, name: &#39;TLS 1.0&#39; },
        { id: &#39;TLS11&#39;, name: &#39;TLS 1.1&#39; },
        { id: &#39;TLS12&#39;, name: &#39;TLS 1.2&#39; },
        { id: &#39;TLS13&#39;, name: &#39;TLS 1.3&#39; }
    ];

    function applyPreset(type) {
        if (type === &#39;strict&#39;) {
            document.getElementById(&#39;SSL20&#39;).checked = false;
            document.getElementById(&#39;SSL30&#39;).checked = false;
            document.getElementById(&#39;TLS10&#39;).checked = false;
            document.getElementById(&#39;TLS11&#39;).checked = false;
            document.getElementById(&#39;TLS12&#39;).checked = true;
            document.getElementById(&#39;TLS13&#39;).checked = true;
            document.getElementById(&#39;DotNet&#39;).checked = true;
        } else if (type === &#39;legacy&#39;) {
            document.getElementById(&#39;SSL20&#39;).checked = false;
            document.getElementById(&#39;SSL30&#39;).checked = false;
            document.getElementById(&#39;TLS10&#39;).checked = true;
            document.getElementById(&#39;TLS11&#39;).checked = true;
            document.getElementById(&#39;TLS12&#39;).checked = true;
            document.getElementById(&#39;TLS13&#39;).checked = false;
            document.getElementById(&#39;DotNet&#39;).checked = false;
        }
        updateScript();
    }

    function updateScript() {
        let configLines = &#39;&#39;;
        let alertsHtml = &#39;&#39;;
        
        const tls10 = document.getElementById(&#39;TLS10&#39;).checked;
        const tls11 = document.getElementById(&#39;TLS11&#39;).checked;
        const tls13 = document.getElementById(&#39;TLS13&#39;).checked;
        const dotnet = document.getElementById(&#39;DotNet&#39;).checked;

        // Dynamic Alerts Logic
        if (!tls10 &amp;&amp; !tls11) {
            alertsHtml += `&lt;div class=&quot;alert-box alert-warning&quot;&gt;&lt;span&gt;⚠️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Legacy App Risk:&lt;/strong&gt; Disabling TLS 1.0 &amp; 1.1 secures your server, but it may break legacy SQL Server Native Clients, older APIs, and unpatched .NET applications. Test in staging!&lt;/div&gt;&lt;/div&gt;`;
        }
        if (tls13) {
            alertsHtml += `&lt;div class=&quot;alert-box alert-info&quot;&gt;&lt;span&gt;ℹ️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;TLS 1.3 Compatibility:&lt;/strong&gt; Native support requires Windows Server 2022+. The generated script will automatically detect your OS version before applying this key.&lt;/div&gt;&lt;/div&gt;`;
        }
        if (dotnet) {
            alertsHtml += `&lt;div class=&quot;alert-box alert-success&quot;&gt;&lt;span&gt;✅&lt;/span&gt; &lt;div&gt;&lt;strong&gt;.NET Protected:&lt;/strong&gt; SchUseStrongCrypto registry keys will be added to ensure legacy .NET Framework applications utilize modern TLS protocols.&lt;/div&gt;&lt;/div&gt;`;
        }

        document.getElementById(&#39;dynamicAlerts&#39;).innerHTML = alertsHtml;

        // Build PS Script
        protocols.forEach(p =&gt; {
            const isChecked = document.getElementById(p.id).checked;
            const card = document.getElementById(`card-${p.id}`);
            
            // UI
            if(isChecked) {
                card.classList.remove(&#39;disabled&#39;); card.classList.add(&#39;active&#39;);
            } else {
                card.classList.remove(&#39;active&#39;); card.classList.add(&#39;disabled&#39;);
            }
            
            // Exclude TLS 1.3 from base array (handled via OS detection)
            if(p.id !== &#39;TLS13&#39;) {
                const val = isChecked ? &#39;1&#39; : &#39;0&#39;;
                configLines += `    &lt;span class=&quot;cmd-string&quot;&gt;&quot;${p.name}&quot;&lt;/span&gt; = ${val}\n`;
            }
        });

        let scriptHTML = `&lt;span class=&quot;cmd-comment&quot;&gt;# OTechy Advanced SSL/TLS Hardening Script
# Run as Administrator. A system reboot is required.&lt;/span&gt;

&lt;span class=&quot;cmd-comment&quot;&gt;# 1. Create a Backup of current SCHANNEL settings&lt;/span&gt;
Write-Host &lt;span class=&quot;cmd-string&quot;&gt;&quot;Backing up Registry to C:\\schannel-backup.reg...&quot;&lt;/span&gt; -ForegroundColor Cyan
reg export HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL C:\\schannel-backup.reg /y | Out-Null

&lt;span class=&quot;cmd-comment&quot;&gt;# 2. Define Protocol Matrix&lt;/span&gt;
&lt;span class=&quot;cmd-var&quot;&gt;$config&lt;/span&gt; = @{
${configLines}}
`;

        if (tls13) {
            scriptHTML += `
&lt;span class=&quot;cmd-comment&quot;&gt;# 3. OS Detection for TLS 1.3 (Server 2022 / Build 20348+)&lt;/span&gt;
&lt;span class=&quot;cmd-keyword&quot;&gt;if&lt;/span&gt; ([Environment]::OSVersion.Version -ge [Version]&lt;span class=&quot;cmd-string&quot;&gt;&quot;10.0.20348&quot;&lt;/span&gt;) {
    &lt;span class=&quot;cmd-var&quot;&gt;$config&lt;/span&gt;[&lt;span class=&quot;cmd-string&quot;&gt;&quot;TLS 1.3&quot;&lt;/span&gt;] = 1
    Write-Host &lt;span class=&quot;cmd-string&quot;&gt;&quot;TLS 1.3 Supported OS Detected.&quot;&lt;/span&gt; -ForegroundColor Green
} &lt;span class=&quot;cmd-keyword&quot;&gt;else&lt;/span&gt; {
    Write-Host &lt;span class=&quot;cmd-string&quot;&gt;&quot;Skipping TLS 1.3 (OS Unsupported).&quot;&lt;/span&gt; -ForegroundColor Yellow
}
`;
        }

        scriptHTML += `
&lt;span class=&quot;cmd-comment&quot;&gt;# 4. Apply SCHANNEL Registry Keys&lt;/span&gt;
&lt;span class=&quot;cmd-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;cmd-var&quot;&gt;$prot&lt;/span&gt; &lt;span class=&quot;cmd-keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;cmd-var&quot;&gt;$config&lt;/span&gt;.Keys) {
    &lt;span class=&quot;cmd-var&quot;&gt;$state&lt;/span&gt; = &lt;span class=&quot;cmd-var&quot;&gt;$config&lt;/span&gt;[&lt;span class=&quot;cmd-var&quot;&gt;$prot&lt;/span&gt;]
    &lt;span class=&quot;cmd-var&quot;&gt;$disableByDefault&lt;/span&gt; = &lt;span class=&quot;cmd-keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cmd-var&quot;&gt;$state&lt;/span&gt; -eq 1) { 0 } &lt;span class=&quot;cmd-keyword&quot;&gt;else&lt;/span&gt; { 1 }
    
    &lt;span class=&quot;cmd-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;cmd-var&quot;&gt;$target&lt;/span&gt; &lt;span class=&quot;cmd-keyword&quot;&gt;in&lt;/span&gt; @(&lt;span class=&quot;cmd-string&quot;&gt;&quot;Client&quot;&lt;/span&gt;, &lt;span class=&quot;cmd-string&quot;&gt;&quot;Server&quot;&lt;/span&gt;)) {
        &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; = &lt;span class=&quot;cmd-string&quot;&gt;&quot;HKLM:\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\$prot\\$target&quot;&lt;/span&gt;
        &lt;span class=&quot;cmd-keyword&quot;&gt;if&lt;/span&gt; (!(Test-Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt;)) { New-Item -Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; -Force | Out-Null }
        New-ItemProperty -Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; -Name &lt;span class=&quot;cmd-string&quot;&gt;&quot;Enabled&quot;&lt;/span&gt; -Value &lt;span class=&quot;cmd-var&quot;&gt;$state&lt;/span&gt; -PropertyType DWord -Force | Out-Null
        New-ItemProperty -Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; -Name &lt;span class=&quot;cmd-string&quot;&gt;&quot;DisabledByDefault&quot;&lt;/span&gt; -Value &lt;span class=&quot;cmd-var&quot;&gt;$disableByDefault&lt;/span&gt; -PropertyType DWord -Force | Out-Null
    }
}
`;

        if (dotnet) {
            scriptHTML += `
&lt;span class=&quot;cmd-comment&quot;&gt;# 5. Enforce .NET Framework Strong Crypto&lt;/span&gt;
&lt;span class=&quot;cmd-var&quot;&gt;$netPaths&lt;/span&gt; = @(
    &lt;span class=&quot;cmd-string&quot;&gt;&quot;HKLM:\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319&quot;&lt;/span&gt;,
    &lt;span class=&quot;cmd-string&quot;&gt;&quot;HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\.NETFramework\\v4.0.30319&quot;&lt;/span&gt;
)
&lt;span class=&quot;cmd-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; &lt;span class=&quot;cmd-keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;cmd-var&quot;&gt;$netPaths&lt;/span&gt;) {
    &lt;span class=&quot;cmd-keyword&quot;&gt;if&lt;/span&gt; (!(Test-Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt;)) { New-Item -Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; -Force | Out-Null }
    New-ItemProperty -Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; -Name &lt;span class=&quot;cmd-string&quot;&gt;&quot;SchUseStrongCrypto&quot;&lt;/span&gt; -Value 1 -PropertyType DWord -Force | Out-Null
    New-ItemProperty -Path &lt;span class=&quot;cmd-var&quot;&gt;$path&lt;/span&gt; -Name &lt;span class=&quot;cmd-string&quot;&gt;&quot;SystemDefaultTlsVersions&quot;&lt;/span&gt; -Value 1 -PropertyType DWord -Force | Out-Null
}
Write-Host &lt;span class=&quot;cmd-string&quot;&gt;&quot;.NET Strong Crypto Enforced.&quot;&lt;/span&gt; -ForegroundColor Green
`;
        }

        scriptHTML += `
Write-Host &lt;span class=&quot;cmd-string&quot;&gt;&quot;OTechy Configuration Applied! Please restart the server.&quot;&lt;/span&gt; -ForegroundColor Cyan`;

        document.getElementById(&#39;scriptOutput&#39;).innerHTML = scriptHTML;
    }

    function copyScript() {
        const temp = document.createElement(&#39;div&#39;);
        temp.innerHTML = document.getElementById(&#39;scriptOutput&#39;).innerHTML;
        const pureText = temp.innerText || temp.textContent;
        
        navigator.clipboard.writeText(pureText).then(() =&gt; {
            alert(&quot;V2 PowerShell Script Copied!&quot;);
        });
    }

    // Initialize on load
    window.onload = updateScript;
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7209136864557440817'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/7209136864557440817'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/ssl-and-tls-hardening-script-generator.html' title='SSL and TLS Hardening Script Generator'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-6434534335969341649</id><published>2026-03-30T08:27:00.000-07:00</published><updated>2026-03-30T08:27:08.481-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux Permission"/><title type='text'>Chmod Calculator | Visual Linux File Permissions Tool</title><content type='html'>&lt;title&gt;Chmod Calculator Online | Linux File Permissions Tool&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Visual chmod calculator for Linux and Unix. Convert octal permissions like 777, 755, or 666 to symbolic formats instantly.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 800px; margin: 0 auto; padding: 25px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 20px; }
    .new-badge { display: inline-block; background: #1e293b; color: #e2e8f0; padding: 4px 12px; border-radius: 50px; font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px; }
    .hero-section h1 { font-size: clamp(20px, 5vw, 28px); font-weight: 800; margin: 0 0 5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 12px; font-weight: 500; max-width: 550px; margin: 0 auto; }

    /* Main Card */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 20px; box-shadow: 0 8px 20px rgba(37, 99, 235, 0.03); margin-bottom: 20px; }
    
    /* Inputs */
    .quick-input-row { display: flex; gap: 12px; margin-bottom: 20px; }
    .input-group { flex: 1; display: flex; flex-direction: column; }
    .input-group label { font-size: 10px; font-weight: 800; color: var(--accent); text-transform: uppercase; margin-bottom: 5px; }
    .form-control { width: 100%; padding: 10px 12px; border-radius: 8px; border: 1px solid #cbd5e1; font-family: monospace; font-size: 16px; font-weight: 700; color: var(--text-dark); outline: none; transition: 0.2s; background: #f8fafc; text-align: center; letter-spacing: 1px; }
    .form-control:focus { border-color: var(--primary); background: #fff; box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); }
    
    /* Matrix Grid - Sleek Toggle Buttons */
    .matrix-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 20px; }
    .matrix-col { background: var(--white); border: 1px solid var(--border); border-radius: 12px; padding: 12px; }
    .col-header { font-size: 12px; font-weight: 800; color: var(--primary-dark); text-align: center; margin-bottom: 12px; text-transform: uppercase; }
    
    .perm-toggle { margin-bottom: 8px; }
    .perm-toggle:last-child { margin-bottom: 0; }
    .perm-toggle input { display: none; }
    
    .perm-btn { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; background: #f1f5f9; border-radius: 8px; cursor: pointer; transition: all 0.2s ease; border: 1px solid transparent; font-size: 12px; font-weight: 700; color: var(--accent); }
    .perm-btn:hover { background: #e2e8f0; }
    .perm-num { font-size: 10px; font-weight: 800; background: #cbd5e1; padding: 2px 6px; border-radius: 4px; color: var(--text-dark); transition: 0.2s; }
    
    /* Active State for Toggles */
    .perm-toggle input:checked + .perm-btn { background: var(--primary); color: #fff; box-shadow: 0 4px 10px rgba(37, 99, 235, 0.25); border-color: var(--primary-dark); transform: translateY(-1px); }
    .perm-toggle input:checked + .perm-btn .perm-num { background: rgba(255, 255, 255, 0.25); color: #fff; }

    /* Results Layout */
    .results-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
    
    /* Sleek Mac-Style Terminal */
    .terminal-box { background: #0f172a; border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; box-shadow: 0 10px 15px rgba(0,0,0,0.1); }
    .term-header { background: #1e293b; padding: 8px 12px; display: flex; align-items: center; gap: 6px; }
    .term-dot { width: 10px; height: 10px; border-radius: 50%; }
    .dot-red { background: #ef4444; }
    .dot-yel { background: #f59e0b; }
    .dot-grn { background: #10b981; }
    .term-body { padding: 15px; display: flex; justify-content: space-between; align-items: center; }
    .cmd-text { font-family: monospace; font-size: 14px; font-weight: 700; color: #38bdf8; }
    .cmd-text span { color: #94a3b8; }
    .copy-btn { background: #1e293b; color: #e2e8f0; border: 1px solid #334155; padding: 6px 10px; border-radius: 6px; font-size: 10px; font-weight: 700; cursor: pointer; transition: 0.2s; text-transform: uppercase; }
    .copy-btn:hover { background: var(--primary); color: #fff; border-color: var(--primary); }

    /* Plain English Translation */
    .translation-box { background: #eff6ff; border: 1px solid #bfdbfe; border-left: 4px solid var(--primary); padding: 15px; border-radius: 12px; font-size: 12px; font-weight: 500; color: var(--text-dark); line-height: 1.5; display: flex; flex-direction: column; justify-content: center; }
    .translation-box strong { color: var(--primary-dark); font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; }

    /* Compact Info &amp; FAQ */
    .tool-info-block { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); padding: 15px; border-radius: 12px; margin-top: 15px; box-shadow: 0 2px 5px rgba(0,0,0,0.02); }
    .tool-info-block h3 { margin: 0 0 6px 0; font-size: 14px; font-weight: 800; color: var(--primary-dark); }
    .tool-info-block p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }
    
    .faq-section { margin-top: 30px; }
    .faq-section h3 { font-size: 16px; font-weight: 850; margin: 0 0 15px; text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; }
    .faq-card { background: #fff; padding: 12px; border-radius: 8px; border: 1px solid var(--border); border-top: 3px solid var(--primary); }
    .faq-card strong { color: var(--primary-dark); display: block; margin-bottom: 4px; font-size: 12px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; }

    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 15px 0; border: 1px dashed #cbd5e1; }

    @media (max-width: 600px) {
        .matrix-grid { grid-template-columns: 1fr; gap: 8px; }
        .results-layout { grid-template-columns: 1fr; gap: 12px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;🐧 Compact Linux Utility&lt;/div&gt;
        &lt;h1&gt;Chmod &lt;span&gt;Calculator&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Translate numerical Unix permissions (like 755 or 666) instantly.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 15px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        
        &lt;div class=&quot;quick-input-row&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Octal (Numeric)&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;octalInput&quot; class=&quot;form-control&quot; value=&quot;0666&quot; maxlength=&quot;4&quot; onkeyup=&quot;updateFromOctal()&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Symbolic (Letters)&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;symbolicInput&quot; class=&quot;form-control&quot; value=&quot;-rw-rw-rw-&quot; maxlength=&quot;10&quot; onkeyup=&quot;updateFromSymbolic()&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;matrix-grid&quot;&gt;
            &lt;div class=&quot;matrix-col&quot;&gt;
                &lt;div class=&quot;col-header&quot;&gt;Owner (User)&lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;o_r&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;o_r&quot; class=&quot;perm-btn&quot;&gt;Read &lt;span class=&quot;perm-num&quot;&gt;4&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;o_w&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;o_w&quot; class=&quot;perm-btn&quot;&gt;Write &lt;span class=&quot;perm-num&quot;&gt;2&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;o_x&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;o_x&quot; class=&quot;perm-btn&quot;&gt;Execute &lt;span class=&quot;perm-num&quot;&gt;1&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;matrix-col&quot;&gt;
                &lt;div class=&quot;col-header&quot;&gt;Group&lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;g_r&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;g_r&quot; class=&quot;perm-btn&quot;&gt;Read &lt;span class=&quot;perm-num&quot;&gt;4&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;g_w&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;g_w&quot; class=&quot;perm-btn&quot;&gt;Write &lt;span class=&quot;perm-num&quot;&gt;2&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;g_x&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;g_x&quot; class=&quot;perm-btn&quot;&gt;Execute &lt;span class=&quot;perm-num&quot;&gt;1&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;matrix-col&quot;&gt;
                &lt;div class=&quot;col-header&quot;&gt;Public (Other)&lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;p_r&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;p_r&quot; class=&quot;perm-btn&quot;&gt;Read &lt;span class=&quot;perm-num&quot;&gt;4&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;p_w&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;p_w&quot; class=&quot;perm-btn&quot;&gt;Write &lt;span class=&quot;perm-num&quot;&gt;2&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
                &lt;div class=&quot;perm-toggle&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;p_x&quot; onchange=&quot;updateFromMatrix()&quot;&gt;
                    &lt;label for=&quot;p_x&quot; class=&quot;perm-btn&quot;&gt;Execute &lt;span class=&quot;perm-num&quot;&gt;1&lt;/span&gt;&lt;/label&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;results-layout&quot;&gt;
            &lt;div class=&quot;terminal-box&quot;&gt;
                &lt;div class=&quot;term-header&quot;&gt;
                    &lt;div class=&quot;term-dot dot-red&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;term-dot dot-yel&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;term-dot dot-grn&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;term-body&quot;&gt;
                    &lt;div class=&quot;cmd-text&quot;&gt;&lt;span&gt;$&lt;/span&gt; chmod &lt;span id=&quot;cmdOutput&quot; style=&quot;color:#fff;&quot;&gt;0666&lt;/span&gt; file&lt;/div&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCmd()&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;translation-box&quot; id=&quot;translationOutput&quot;&gt;
                Loading translation...
            &lt;/div&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;tool-info-block&quot;&gt;
        &lt;h3&gt;💻 How Chmod Math Works&lt;/h3&gt;
        &lt;p&gt;In Unix/Linux, permissions are determined by adding numbers: &lt;strong&gt;Read=4&lt;/strong&gt;, &lt;strong&gt;Write=2&lt;/strong&gt;, &lt;strong&gt;Execute=1&lt;/strong&gt;. To allow Read + Write, add 4+2 to get &lt;strong&gt;6&lt;/strong&gt;. The three digits in `chmod 755` represent permissions for the Owner, Group, and Public respectively.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 20px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;Linux File Permissions FAQ&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
&lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;1. What does chmod 777 mean?&lt;/strong&gt;
                &lt;p&gt;It means absolute freedom. The Owner, Group, and Public can all Read, Write, and Execute the file. &lt;strong&gt;Warning:&lt;/strong&gt; This is highly insecure and generally should not be used on web servers.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;2. What does chmod 666 mean?&lt;/strong&gt;
                &lt;p&gt;It means everyone can Read and Write the file, but nobody can Execute it as a program. (4 Read + 2 Write = 6). It is common for text files that multiple users need to edit.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;3. What does chmod 755 mean?&lt;/strong&gt;
                &lt;p&gt;The Owner has full control (7). The Group and Public can only Read and Execute (5). This is the standard, secure permission for directories and executable scripts.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;4. What does chmod 644 mean?&lt;/strong&gt;
                &lt;p&gt;The Owner can Read and Write (6). Everyone else can only Read (4). This is the standard, secure permission for basic files like HTML, CSS, or images on a web server.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;5. Why is there a leading zero (e.g., 0755)?&lt;/strong&gt;
                &lt;p&gt;The leading zero specifies special permission modes (SetUID, SetGID, and Sticky Bit). In most basic daily usage, `0755` functions identically to `755`.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;6. What does &quot;Execute&quot; mean for a directory?&lt;/strong&gt;
                &lt;p&gt;Unlike a file where &quot;execute&quot; runs a script, &quot;execute&quot; on a directory allows a user to `cd` into it and access the files inside. Without execute, you cannot open the folder.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;7. What do the symbolic letters mean?&lt;/strong&gt;
                &lt;p&gt;The string `-rwxr-xr-x` is broken down into chunks. The first character is the type (`-` for file, `d` for directory). The next three are Owner permissions, then Group, then Public.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;8. How do I change permissions recursively?&lt;/strong&gt;
                &lt;p&gt;Use the `-R` flag. For example, `chmod -R 755 folder_name` will apply the 755 permissions to the folder and every single file inside it.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;9. Who is the &quot;Owner&quot;?&lt;/strong&gt;
                &lt;p&gt;The Owner is usually the user who created the file. You can change the owner of a file using the `chown` command.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;10. Who is &quot;Public&quot; or &quot;Other&quot;?&lt;/strong&gt;
                &lt;p&gt;This refers to any user on the system who is not the Owner and is not a member of the assigned Group. It is literally &quot;everyone else.&quot;&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    function updateFromMatrix() {
        let octal = &quot;0&quot;;
        let sym = &quot;-&quot;;
        
        [&#39;o&#39;, &#39;g&#39;, &#39;p&#39;].forEach(group =&gt; {
            let val = 0;
            if (document.getElementById(`${group}_r`).checked) { val += 4; sym += &quot;r&quot;; } else { sym += &quot;-&quot;; }
            if (document.getElementById(`${group}_w`).checked) { val += 2; sym += &quot;w&quot;; } else { sym += &quot;-&quot;; }
            if (document.getElementById(`${group}_x`).checked) { val += 1; sym += &quot;x&quot;; } else { sym += &quot;-&quot;; }
            octal += val;
        });

        document.getElementById(&#39;octalInput&#39;).value = octal;
        document.getElementById(&#39;symbolicInput&#39;).value = sym;
        updateUI(octal);
    }

    function updateFromOctal() {
        let val = document.getElementById(&#39;octalInput&#39;).value.replace(/[^0-7]/g, &#39;&#39;);
        if (val.length &gt; 4) val = val.substring(0, 4);
        
        let calcVal = val;
        if (calcVal.length === 3) calcVal = &quot;0&quot; + calcVal;
        if (calcVal.length &lt; 3) return;

        let sym = &quot;-&quot;;
        const groups = [&#39;o&#39;, &#39;g&#39;, &#39;p&#39;];
        const digits = calcVal.slice(-3).split(&#39;&#39;).map(Number);
        
        digits.forEach((digit, i) =&gt; {
            const group = groups[i];
            const r = (digit &amp; 4) === 4;
            const w = (digit &amp; 2) === 2;
            const x = (digit &amp; 1) === 1;

            document.getElementById(`${group}_r`).checked = r;
            document.getElementById(`${group}_w`).checked = w;
            document.getElementById(`${group}_x`).checked = x;

            sym += r ? &quot;r&quot; : &quot;-&quot;;
            sym += w ? &quot;w&quot; : &quot;-&quot;;
            sym += x ? &quot;x&quot; : &quot;-&quot;;
        });

        document.getElementById(&#39;symbolicInput&#39;).value = sym;
        updateUI(calcVal);
    }

    function updateFromSymbolic() {
        let sym = document.getElementById(&#39;symbolicInput&#39;).value.toLowerCase();
        if (sym.length !== 10) return;

        let octal = &quot;0&quot;;
        const groups = [&#39;o&#39;, &#39;g&#39;, &#39;p&#39;];
        
        for (let i = 0; i &lt; 3; i++) {
            const groupStr = sym.substring(1 + (i * 3), 4 + (i * 3));
            const group = groups[i];
            
            let val = 0;
            const r = groupStr[0] === &#39;r&#39;;
            const w = groupStr[1] === &#39;w&#39;;
            const x = groupStr[2] === &#39;x&#39;;

            document.getElementById(`${group}_r`).checked = r;
            document.getElementById(`${group}_w`).checked = w;
            document.getElementById(`${group}_x`).checked = x;

            if(r) val += 4;
            if(w) val += 2;
            if(x) val += 1;
            
            octal += val;
        }

        document.getElementById(&#39;octalInput&#39;).value = octal;
        updateUI(octal);
    }

    function generateEnglishStr(val) {
        if(val === 7) return &quot;Read, Write &amp; Execute&quot;;
        if(val === 6) return &quot;Read &amp; Write&quot;;
        if(val === 5) return &quot;Read &amp; Execute&quot;;
        if(val === 4) return &quot;Read-Only&quot;;
        if(val === 3) return &quot;Write &amp; Execute&quot;;
        if(val === 2) return &quot;Write-Only&quot;;
        if(val === 1) return &quot;Execute-Only&quot;;
        return &quot;No Access&quot;;
    }

    function updateUI(octalStr) {
        document.getElementById(&#39;cmdOutput&#39;).innerText = octalStr;

        const digits = octalStr.slice(-3).split(&#39;&#39;).map(Number);
        const transBox = document.getElementById(&#39;translationOutput&#39;);
        
        transBox.innerHTML = `
            &lt;div&gt;&lt;strong&gt;Owner:&lt;/strong&gt; ${generateEnglishStr(digits[0])}&lt;/div&gt;
            &lt;div style=&quot;margin:4px 0;&quot;&gt;&lt;strong&gt;Group:&lt;/strong&gt; ${generateEnglishStr(digits[1])}&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Public:&lt;/strong&gt; ${generateEnglishStr(digits[2])}&lt;/div&gt;
        `;
    }

    function copyCmd() {
        const octal = document.getElementById(&#39;cmdOutput&#39;).innerText;
        navigator.clipboard.writeText(`chmod ${octal} filename`).then(() =&gt; {
            alert(`Copied: chmod ${octal} filename`);
        });
    }

    window.onload = function() {
        updateFromOctal();
    };
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/6434534335969341649'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/6434534335969341649'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/chmod-calculator-visual-linux-file.html' title='Chmod Calculator | Visual Linux File Permissions Tool'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-9071562054089896094</id><published>2026-03-30T08:15:00.000-07:00</published><updated>2026-03-30T08:15:21.000-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Decrypt"/><category scheme="http://www.blogger.com/atom/ns#" term="Encrypt"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Encrypt Decrypt Text Online - Secret Message</title><content type='html'>&lt;title&gt;AES-256 Text Encryptor &amp; Decryptor Online | Secure Message Generator&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Encrypt and decrypt sensitive text, passwords, and messages using military-grade AES-256 encryption. 100% offline, secure, and runs locally in your browser.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Secure AES-256 Text Encryptor - OTechy&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --danger: #ef4444; --warning: #f59e0b;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 900px; margin: 0 auto; padding: 30px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; }
    .new-badge { display: inline-block; background: #eff6ff; color: #1d4ed8; padding: 4px 12px; border-radius: 50px; font-size: 10px; font-weight: 800; border: 1px solid #bfdbfe; margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }
    .hero-section h1 { font-size: clamp(22px, 5vw, 32px); font-weight: 800; margin: 0 0 8px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 13px; font-weight: 500; max-width: 600px; margin: 0 auto; }

    /* Main Tool Card */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.04); margin-bottom: 25px; }
    
    /* Mode Toggle */
    .mode-toggle { display: flex; background: #f1f5f9; border-radius: 10px; padding: 4px; margin-bottom: 20px; max-width: 350px; margin-left: auto; margin-right: auto; }
    .toggle-btn { flex: 1; text-align: center; padding: 10px; font-size: 12px; font-weight: 700; color: var(--accent); cursor: pointer; border-radius: 8px; transition: 0.2s; text-transform: uppercase; }
    .toggle-btn.active { background: var(--primary); color: var(--white); box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2); }
    .toggle-btn.decrypt.active { background: #0f172a; color: var(--white); box-shadow: 0 4px 10px rgba(15, 23, 42, 0.2); }

    /* Inputs */
    .input-group { margin-bottom: 20px; }
    .input-group label { display: flex; justify-content: space-between; font-size: 12px; font-weight: 800; color: var(--accent); text-transform: uppercase; margin-bottom: 8px; }
    .char-count { font-size: 10px; color: #94a3b8; font-weight: 600; }
    
    .large-textarea { width: 100%; height: 180px; padding: 15px; border-radius: 12px; border: 1px solid #cbd5e1; font-family: var(--font-main); font-size: 14px; font-weight: 500; color: var(--text-dark); outline: none; transition: 0.3s; background: #f8fafc; resize: vertical; }
    .large-textarea:focus { border-color: var(--primary); background: #fff; box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.1); }
    .large-textarea.crypto-font { font-family: monospace; letter-spacing: 0.5px; font-size: 13px; line-height: 1.8; word-break: break-all; }

    /* Password Input */
    .password-panel { background: #fffbeb; border: 1px solid #fde68a; border-radius: 12px; padding: 15px; margin-bottom: 20px; display: flex; gap: 15px; align-items: center; }
    .password-panel svg { color: #b45309; flex-shrink: 0; }
    .pass-input-wrapper { flex: 1; position: relative; }
    .pass-input { width: 100%; padding: 12px 15px; border-radius: 8px; border: 1px solid #fcd34d; font-family: var(--font-main); font-size: 14px; font-weight: 700; color: var(--text-dark); outline: none; transition: 0.2s; }
    .pass-input:focus { border-color: #f59e0b; box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.2); }
    .toggle-view { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); background: none; border: none; cursor: pointer; color: #b45309; font-weight: 700; font-size: 11px; text-transform: uppercase; }

    .btn-primary { background: var(--primary); color: #fff; border: none; padding: 16px; border-radius: 10px; font-weight: 800; font-size: 15px; cursor: pointer; transition: 0.2s; width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px; }
    .btn-primary.decrypt-mode { background: #0f172a; }
    .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(37, 99, 235, 0.3); }
    .btn-primary.decrypt-mode:hover { box-shadow: 0 6px 15px rgba(15, 23, 42, 0.3); }

    /* Result Dashboard */
    .result-dashboard { display: none; background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 16px; padding: 25px; margin-top: 25px; animation: fadeIn 0.4s ease; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
    .result-dashboard.decrypt-res { background: #f0fdf4; border-color: #bbf7d0; }

    .res-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
    .res-title { font-size: 14px; font-weight: 800; color: var(--primary-dark); display: flex; align-items: center; gap: 6px; margin: 0; }
    .decrypt-res .res-title { color: #065f46; }
    
    .copy-btn { background: var(--white); border: 1px solid #bfdbfe; color: var(--primary); padding: 6px 12px; border-radius: 6px; font-size: 11px; font-weight: 700; cursor: pointer; transition: 0.2s; text-transform: uppercase; display: flex; align-items: center; gap: 4px; }
    .copy-btn:hover { background: var(--primary); color: #fff; }
    .decrypt-res .copy-btn { border-color: #a7f3d0; color: #059669; }
    .decrypt-res .copy-btn:hover { background: #059669; color: #fff; }

    .output-box { width: 100%; min-height: 120px; max-height: 300px; padding: 15px; border-radius: 10px; border: 1px solid #bfdbfe; background: var(--white); font-family: monospace; font-size: 13px; color: var(--text-dark); word-break: break-all; overflow-y: auto; user-select: all; line-height: 1.6; }
    .decrypt-res .output-box { border-color: #a7f3d0; font-family: var(--font-main); font-weight: 500; font-size: 14px; }

    /* Compact Privacy Block */
    .tool-info-block { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); padding: 20px; border-radius: 12px; margin-top: 25px; box-shadow: 0 2px 10px rgba(0,0,0,0.02); }
    .tool-info-block h3 { margin: 0 0 8px 0; font-size: 15px; font-weight: 800; display: flex; align-items: center; gap: 6px; color: var(--primary-dark); }
    .tool-info-block p { font-size: 12px; color: var(--accent); margin: 0 0 15px 0; line-height: 1.6; font-weight: 500; }
    
    .privacy-block { background: #ecfdf5; color: #065f46; padding: 15px; border-radius: 10px; font-size: 12px; margin-bottom: 15px; display: flex; align-items: center; gap: 12px; border: 1px solid #a7f3d0; line-height: 1.5; }
    .privacy-block svg { color: #10b981; flex-shrink: 0; }
    .privacy-block strong { display: block; margin-bottom: 2px; font-size: 13px; font-weight: 800; color: #047857; }

    .tool-info-tags { display: flex; gap: 8px; flex-wrap: wrap; }
    .t-tag { background: var(--white); border: 1px solid var(--border); padding: 4px 10px; border-radius: 4px; font-size: 9px; font-weight: 700; color: var(--primary); text-transform: uppercase; letter-spacing: 0.5px; }

    /* Compact 10 FAQ Section */
    .faq-section { margin-top: 35px; }
    .faq-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 15px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
    .faq-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-top: 3px solid var(--primary); box-shadow: 0 2px 6px rgba(0,0,0,0.02); transition: 0.2s; }
    .faq-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(37, 99, 235, 0.05); }
    .faq-card strong { color: var(--primary-dark); display: block; margin-bottom: 6px; font-size: 13px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }

    @media (max-width: 600px) {
        .password-panel { flex-direction: column; align-items: stretch; gap: 10px; }
        .password-panel svg { display: none; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;🔐 Security Toolkit&lt;/div&gt;
        &lt;h1&gt;Secret Message &lt;span&gt;Encryptor&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Lock your sensitive data, passwords, or private messages behind a military-grade(AES-GCM 256-Bit Standard) password. Share the encrypted text safely anywhere.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 15px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        
        &lt;div class=&quot;mode-toggle&quot;&gt;
            &lt;div class=&quot;toggle-btn active&quot; id=&quot;btnEncrypt&quot; onclick=&quot;setMode(&#39;encrypt&#39;)&quot;&gt;🔒 Encrypt Text&lt;/div&gt;
            &lt;div class=&quot;toggle-btn decrypt&quot; id=&quot;btnDecrypt&quot; onclick=&quot;setMode(&#39;decrypt&#39;)&quot;&gt;🔓 Decrypt Text&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label&gt;
                &lt;span id=&quot;inputLabel&quot;&gt;Enter Plain Text to Encrypt&lt;/span&gt;
                &lt;span class=&quot;char-count&quot; id=&quot;charCount&quot;&gt;0 characters&lt;/span&gt;
            &lt;/label&gt;
            &lt;textarea id=&quot;mainInput&quot; class=&quot;large-textarea&quot; placeholder=&quot;Paste your sensitive data, passwords, or private message here... Allows huge blocks of text.&quot; oninput=&quot;updateCount()&quot;&gt;&lt;/textarea&gt;
        &lt;/div&gt;

        &lt;div class=&quot;password-panel&quot;&gt;
            &lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M7 11V7a5 5 0 0 1 10 0v4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
            &lt;div class=&quot;pass-input-wrapper&quot;&gt;
                &lt;input type=&quot;password&quot; id=&quot;cryptoPass&quot; class=&quot;pass-input&quot; placeholder=&quot;Set a strong decryption password...&quot;&gt;
                &lt;button class=&quot;toggle-view&quot; onclick=&quot;togglePass(&#39;cryptoPass&#39;)&quot; id=&quot;eyeBtn&quot;&gt;Show&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-primary&quot; id=&quot;actionBtn&quot; onclick=&quot;processCrypto()&quot;&gt;
            &lt;svg width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M7 11V7a5 5 0 0 1 10 0v4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
            Encrypt &amp; Lock Message
        &lt;/button&gt;

        &lt;div class=&quot;result-dashboard&quot; id=&quot;resDash&quot;&gt;
            &lt;div class=&quot;res-header&quot;&gt;
                &lt;h4 class=&quot;res-title&quot; id=&quot;resTitle&quot;&gt;
                    &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M22 11.08V12a10 10 0 1 1-5.93-9.14&quot;&gt;&lt;/path&gt;&lt;polyline points=&quot;22 4 12 14.01 9 11.01&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;
                    Encryption Successful
                &lt;/h4&gt;
                &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyOutput()&quot;&gt;
                    &lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Copy Result
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;div class=&quot;output-box&quot; id=&quot;resOutput&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;tool-info-block&quot;&gt;
        &lt;h3&gt;🔐 About AES-256 Encryptor&lt;/h3&gt;
        &lt;p&gt;Whether you need to send an API key to a colleague, store bank details, or send a highly confidential message over insecure channels like WhatsApp or email, this tool secures it. By using AES-256 (Advanced Encryption Standard), your text is scrambled into a cryptographic format that cannot be read without the exact password.&lt;/p&gt;
        
        &lt;div class=&quot;privacy-block&quot;&gt;
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
            &lt;div&gt;
                &lt;strong&gt;100% Privacy Guaranteed&lt;/strong&gt;
                All encryption and decryption happen dynamically inside your browser using the Web Crypto API. No text or passwords are ever uploaded to our servers.
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;tool-info-tags&quot;&gt;
            &lt;span class=&quot;t-tag&quot;&gt;AES-GCM Authenticated&lt;/span&gt;
            &lt;span class=&quot;t-tag&quot;&gt;PBKDF2 Key Derivation&lt;/span&gt;
            &lt;span class=&quot;t-tag&quot;&gt;Zero File Uploads&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 25px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;Text Encryption &amp; Security FAQ&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;1. How does this encryption work?&lt;/strong&gt;
                &lt;p&gt;We use the browser&#39;s native Web Crypto API. Your password undergoes 100,000 iterations of PBKDF2 hashing to create an AES-256 bit key. This key is then used to securely lock the text.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;2. Can you recover my password if I forget it?&lt;/strong&gt;
                &lt;p&gt;No. We do not store your data. If you forget the decryption password, the encrypted text is permanently locked and mathematically impossible to recover.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;3. Is the encrypted text safe to send via email?&lt;/strong&gt;
                &lt;p&gt;Yes. The output is a secure Base64 string. You can safely send it via SMS, Slack, or email. The recipient must come to this page and enter the secret password to read it.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;4. Is AES-256 actually secure?&lt;/strong&gt;
                &lt;p&gt;Absolutely. AES-256 is the gold standard for encryption. It is officially used by banks, the military, and governments worldwide to protect highly classified intelligence.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;5. Why is the output so long?&lt;/strong&gt;
                &lt;p&gt;To ensure security, the algorithm adds a unique &quot;Salt&quot; and &quot;Initialization Vector (IV)&quot; to your message. This prevents hackers from recognizing patterns, increasing the overall length.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;6. Can I encrypt large amounts of text?&lt;/strong&gt;
                &lt;p&gt;Yes! We engineered the Base64 encoder to process data in chunked buffers. You can encrypt massive paragraphs, code blocks, or full documents without crashing your browser.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;7. Will the encrypted text change if I use the same password?&lt;/strong&gt;
                &lt;p&gt;Yes! Even if you encrypt the exact same word with the exact same password, the output changes completely every time. This is due to the random &quot;Salt&quot; injection, making it extremely secure.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;8. Why is decryption failing?&lt;/strong&gt;
                &lt;p&gt;Decryption will fail if you enter the wrong password, or if you did not copy the *entire* block of encrypted gibberish perfectly. Ensure no letters were cut off when copying.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;9. Is my sensitive data logged on OTechy servers?&lt;/strong&gt;
                &lt;p&gt;No. This tool operates 100% client-side. You can even load this page, disconnect from the internet, and the encryption will still work perfectly.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;10. Can I decrypt this text on a different website?&lt;/strong&gt;
                &lt;p&gt;Since we package the IV and Salt uniquely into our Base64 string, you must use this specific OTechy tool to decode it cleanly with your password.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 25px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    let mode = &#39;encrypt&#39;;
    const textEncoder = new TextEncoder();
    const textDecoder = new TextDecoder();

    // UI Logic
    function setMode(newMode) {
        mode = newMode;
        document.getElementById(&#39;btnEncrypt&#39;).classList.remove(&#39;active&#39;);
        document.getElementById(&#39;btnDecrypt&#39;).classList.remove(&#39;active&#39;);
        document.getElementById(&#39;resDash&#39;).style.display = &#39;none&#39;;
        
        const mainInput = document.getElementById(&#39;mainInput&#39;);
        const passInput = document.getElementById(&#39;cryptoPass&#39;);
        const actionBtn = document.getElementById(&#39;actionBtn&#39;);
        const inputLabel = document.getElementById(&#39;inputLabel&#39;);

        mainInput.value = &#39;&#39;;
        passInput.value = &#39;&#39;;
        updateCount();

        if (mode === &#39;encrypt&#39;) {
            document.getElementById(&#39;btnEncrypt&#39;).classList.add(&#39;active&#39;);
            inputLabel.innerText = &quot;Enter Plain Text to Encrypt&quot;;
            mainInput.placeholder = &quot;Paste your sensitive data, passwords, or private message here... Allows huge blocks of text.&quot;;
            mainInput.classList.remove(&#39;crypto-font&#39;);
            actionBtn.innerHTML = `&lt;svg width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M7 11V7a5 5 0 0 1 10 0v4&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Encrypt &amp; Lock Message`;
            actionBtn.classList.remove(&#39;decrypt-mode&#39;);
            passInput.placeholder = &quot;Set a strong decryption password...&quot;;
        } else {
            document.getElementById(&#39;btnDecrypt&#39;).classList.add(&#39;active&#39;);
            inputLabel.innerText = &quot;Paste Encrypted Data to Unlock&quot;;
            mainInput.placeholder = &quot;Paste the Base64 encrypted gibberish here...&quot;;
            mainInput.classList.add(&#39;crypto-font&#39;);
            actionBtn.innerHTML = `&lt;svg width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M7 11V7a5 5 0 0 0 10 0v4&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Unlock &amp; Decrypt Message`;
            actionBtn.classList.add(&#39;decrypt-mode&#39;);
            passInput.placeholder = &quot;Enter the secret decryption password...&quot;;
        }
    }

    function togglePass(id) {
        const el = document.getElementById(id);
        const btn = document.getElementById(&#39;eyeBtn&#39;);
        if(el.type === &#39;password&#39;) {
            el.type = &#39;text&#39;;
            btn.innerText = &#39;Hide&#39;;
        } else {
            el.type = &#39;password&#39;;
            btn.innerText = &#39;Show&#39;;
        }
    }

    function updateCount() {
        const len = document.getElementById(&#39;mainInput&#39;).value.length;
        document.getElementById(&#39;charCount&#39;).innerText = `${len.toLocaleString()} characters`;
    }

    function copyOutput() {
        const text = document.getElementById(&#39;resOutput&#39;).innerText;
        navigator.clipboard.writeText(text).then(() =&gt; {
            alert(&quot;Message Copied to Clipboard!&quot;);
        });
    }

    // Cryptography Logic
    // Converts large Uint8Array to Base64 safely (prevents stack overflow on huge texts)
    function bufferToBase64(bytes) {
        let binary = &#39;&#39;;
        const len = bytes.byteLength;
        for (let i = 0; i &lt; len; i++) {
            binary += String.fromCharCode(bytes[i]);
        }
        return window.btoa(binary);
    }

    function base64ToBuffer(base64) {
        const binary_string = window.atob(base64);
        const len = binary_string.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i &lt; len; i++) {
            bytes[i] = binary_string.charCodeAt(i);
        }
        return bytes;
    }

    async function getPasswordKey(password) {
        return window.crypto.subtle.importKey(&quot;raw&quot;, textEncoder.encode(password), &quot;PBKDF2&quot;, false, [&quot;deriveKey&quot;]);
    }

    async function deriveKey(passwordKey, salt, keyUsage) {
        return window.crypto.subtle.deriveKey(
            { name: &quot;PBKDF2&quot;, salt: salt, iterations: 100000, hash: &quot;SHA-256&quot; },
            passwordKey,
            { name: &quot;AES-GCM&quot;, length: 256 },
            false,
            keyUsage
        );
    }

    async function processCrypto() {
        const input = document.getElementById(&#39;mainInput&#39;).value.trim();
        const pass = document.getElementById(&#39;cryptoPass&#39;).value;
        const dash = document.getElementById(&#39;resDash&#39;);
        const title = document.getElementById(&#39;resTitle&#39;);
        const output = document.getElementById(&#39;resOutput&#39;);

        if (!input) { alert(&quot;Please enter some text.&quot;); return; }
        if (!pass) { alert(&quot;A password is strictly required to secure the data.&quot;); return; }

        dash.style.display = &#39;none&#39;;
        
        try {
            if (mode === &#39;encrypt&#39;) {
                // Generate secure random salt and IV
                const salt = window.crypto.getRandomValues(new Uint8Array(16));
                const iv = window.crypto.getRandomValues(new Uint8Array(12));
                
                const passwordKey = await getPasswordKey(pass);
                const aesKey = await deriveKey(passwordKey, salt, [&quot;encrypt&quot;]);
                
                const encryptedContent = await window.crypto.subtle.encrypt(
                    { name: &quot;AES-GCM&quot;, iv: iv }, aesKey, textEncoder.encode(input)
                );
                
                const encryptedArr = new Uint8Array(encryptedContent);
                let payload = new Uint8Array(salt.byteLength + iv.byteLength + encryptedArr.byteLength);
                payload.set(salt, 0);
                payload.set(iv, salt.byteLength);
                payload.set(encryptedArr, salt.byteLength + iv.byteLength);
                
                output.innerText = bufferToBase64(payload);
                
                dash.className = &quot;result-dashboard&quot;;
                title.innerHTML = `&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M7 11V7a5 5 0 0 1 10 0v4&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Encryption Successful`;
                
            } else {
                const encryptedDataBuff = base64ToBuffer(input);
                const salt = encryptedDataBuff.slice(0, 16);
                const iv = encryptedDataBuff.slice(16, 28);
                const data = encryptedDataBuff.slice(28);
                
                const passwordKey = await getPasswordKey(pass);
                const aesKey = await deriveKey(passwordKey, salt, [&quot;decrypt&quot;]);
                
                const decryptedContent = await window.crypto.subtle.decrypt(
                    { name: &quot;AES-GCM&quot;, iv: iv }, aesKey, data
                );
                
                output.innerText = textDecoder.decode(decryptedContent);
                
                dash.className = &quot;result-dashboard decrypt-res&quot;;
                title.innerHTML = `&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M22 11.08V12a10 10 0 1 1-5.93-9.14&quot;&gt;&lt;/path&gt;&lt;polyline points=&quot;22 4 12 14.01 9 11.01&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt; Decryption Successful`;
            }
            
            // Trigger reflow for animation
            void dash.offsetWidth;
            dash.style.display = &#39;block&#39;;
            
            setTimeout(() =&gt; {
                dash.scrollIntoView({ behavior: &#39;smooth&#39;, block: &#39;center&#39; });
            }, 100);

        } catch (e) {
            console.error(e);
            if(mode === &#39;decrypt&#39;) {
                alert(&quot;Decryption Failed: Incorrect password or corrupted encrypted text.&quot;);
            } else {
                alert(&quot;Encryption Failed. Ensure your browser supports Web Crypto API.&quot;);
            }
        }
    }
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/9071562054089896094'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/9071562054089896094'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/encrypt-decrypt-text-online-secret.html' title='Encrypt Decrypt Text Online - Secret Message'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-5648844540874233500</id><published>2026-03-30T07:35:00.000-07:00</published><updated>2026-03-30T07:35:53.046-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Password Checker"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Password Strength Meter &amp; Time to Crack Calculator</title><content type='html'>&lt;title&gt;Password Strength Meter &amp; Time to Crack Calculator | OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Test your password strength instantly. Our offline tool calculates exactly how long it would take a hacker to crack your password using advanced algorithms.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Time to Crack Password Meter - OTechy&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --danger: #ef4444; --warning: #f59e0b; --success: #10b981; --excellent: #059669;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 850px; margin: 0 auto; padding: 30px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; }
    .new-badge { display: inline-block; background: #eff6ff; color: #1d4ed8; padding: 4px 12px; border-radius: 50px; font-size: 10px; font-weight: 800; border: 1px solid #bfdbfe; margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }
    .hero-section h1 { font-size: clamp(22px, 5vw, 32px); font-weight: 800; margin: 0 0 8px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 13px; font-weight: 500; max-width: 600px; margin: 0 auto; }

    /* Input Card */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.04); margin-bottom: 25px; }
    
    .password-wrapper { position: relative; margin-bottom: 25px; }
    .password-input { width: 100%; padding: 18px 50px 18px 20px; border-radius: 12px; border: 2px solid var(--border); font-family: var(--font-main); font-size: 20px; font-weight: 700; color: var(--text-dark); outline: none; transition: 0.3s; background: #f8fafc; letter-spacing: 2px; }
    .password-input:focus { border-color: var(--primary); background: #fff; box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.1); }
    .password-input::placeholder { color: #94a3b8; font-weight: 500; font-size: 15px; letter-spacing: normal; }
    
    .toggle-pass { position: absolute; right: 15px; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--accent); cursor: pointer; padding: 5px; display: flex; align-items: center; justify-content: center; transition: 0.2s; }
    .toggle-pass:hover { color: var(--primary); }

    /* Results Dashboard */
    .dashboard-grid { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 25px rgba(0,0,0,0.03); margin-bottom: 25px; text-align: center; }
    
    .crack-time-title { font-size: 12px; font-weight: 800; color: var(--accent); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 5px; }
    .crack-time-val { font-size: clamp(28px, 6vw, 42px); font-weight: 850; line-height: 1.1; margin-bottom: 20px; color: var(--text-dark); transition: color 0.3s; }
    
    /* Progress Bar */
    .strength-meter { width: 100%; height: 10px; background: #e2e8f0; border-radius: 10px; overflow: hidden; margin-bottom: 10px; display: flex; }
    .strength-fill { height: 100%; width: 0%; transition: all 0.4s ease-out; }
    .meter-labels { display: flex; justify-content: space-between; font-size: 10px; font-weight: 700; color: var(--accent); text-transform: uppercase; margin-bottom: 20px; }

    /* Insights Box */
    .insight-box { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: 12px; padding: 20px; text-align: left; display: none; animation: fadeIn 0.3s ease; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }
    .insight-box h4 { margin: 0 0 12px; font-size: 14px; font-weight: 800; color: var(--primary-dark); display: flex; align-items: center; gap: 8px; }
    
    .insight-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
    .insight-list li { padding: 10px 12px; border-radius: 8px; background: var(--white); display: flex; align-items: flex-start; gap: 10px; font-size: 12px; font-weight: 600; color: var(--text-dark); border: 1px solid var(--border); }
    .insight-list li.warn-row { background: #fef2f2; border-color: #fecaca; color: #991b1b; }
    .insight-list li.good-row { background: #f0fdf4; border-color: #bbf7d0; color: #065f46; }
    .insight-list li span.i-icon { font-size: 16px; margin-top: -2px; }

    /* Compact Tool Info &amp; Privacy Block */
    .tool-info-block { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); padding: 15px 20px; border-radius: 12px; margin-top: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.02); }
    .tool-info-block h3 { margin: 0 0 8px 0; font-size: 15px; font-weight: 800; display: flex; align-items: center; gap: 6px; color: var(--primary-dark); }
    .tool-info-block p { font-size: 12px; color: var(--accent); margin: 0 0 12px 0; line-height: 1.5; font-weight: 500; }
    
    .privacy-block { background: #ecfdf5; color: #065f46; padding: 15px; border-radius: 10px; font-size: 12px; margin-top: 15px; margin-bottom: 15px; display: flex; align-items: center; gap: 12px; border: 1px solid #a7f3d0; line-height: 1.5; }
    .privacy-block svg { color: #10b981; flex-shrink: 0; }
    .privacy-block strong { display: block; margin-bottom: 2px; font-size: 13px; font-weight: 800; color: #047857; }

    .tool-info-tags { display: flex; gap: 8px; flex-wrap: wrap; }
    .t-tag { background: var(--white); border: 1px solid var(--border); padding: 4px 10px; border-radius: 4px; font-size: 9px; font-weight: 700; color: var(--primary); text-transform: uppercase; letter-spacing: 0.5px; }

    /* Compact 10 FAQ Section */
    .faq-section { margin-top: 35px; }
    .faq-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 15px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
    .faq-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-top: 3px solid var(--primary); box-shadow: 0 2px 6px rgba(0,0,0,0.02); transition: 0.2s; }
    .faq-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(37, 99, 235, 0.05); }
    .faq-card strong { color: var(--primary-dark); display: block; margin-bottom: 6px; font-size: 13px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;🛡️ Password Tooklit&lt;/div&gt;
        &lt;h1&gt;Password &lt;span&gt;Strength Meter&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Find out exactly how long it takes a hacker to crack your password. Our algorithm detects dictionary words, predictable patterns, and names.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 15px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        &lt;div class=&quot;password-wrapper&quot;&gt;
            &lt;input type=&quot;password&quot; id=&quot;passInput&quot; class=&quot;password-input&quot; placeholder=&quot;Type a password to test...&quot; autofocus&gt;
            &lt;button class=&quot;toggle-pass&quot; onclick=&quot;toggleVisibility()&quot; id=&quot;eyeBtn&quot; title=&quot;Show/Hide Password&quot;&gt;
                &lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;3&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;
            &lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;dashboard-grid&quot;&gt;
            &lt;div class=&quot;crack-time-title&quot;&gt;Estimated Time to Crack&lt;/div&gt;
            &lt;div class=&quot;crack-time-val&quot; id=&quot;crackTime&quot;&gt;Enter Password&lt;/div&gt;
            
            &lt;div class=&quot;strength-meter&quot;&gt;
                &lt;div class=&quot;strength-fill&quot; id=&quot;meterFill&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;meter-labels&quot;&gt;
                &lt;span&gt;Weak&lt;/span&gt;
                &lt;span&gt;Fair&lt;/span&gt;
                &lt;span&gt;Good&lt;/span&gt;
                &lt;span&gt;Strong&lt;/span&gt;
            &lt;/div&gt;

            &lt;div class=&quot;insight-box&quot; id=&quot;insightBox&quot;&gt;
                &lt;h4&gt;&lt;svg width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;12&quot; y1=&quot;16&quot; x2=&quot;12&quot; y2=&quot;12&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;12&quot; y1=&quot;8&quot; x2=&quot;12.01&quot; y2=&quot;8&quot;&gt;&lt;/line&gt;&lt;/svg&gt; Security Analysis&lt;/h4&gt;
                &lt;ul class=&quot;insight-list&quot; id=&quot;feedbackList&quot;&gt;
                    &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;tool-info-block&quot;&gt;
        &lt;h3&gt;🔐 About Password Strength Meter&lt;/h3&gt;
        &lt;p&gt;Traditional password meters only check if you included a capital letter or symbol. Our tool uses Dropbox&#39;s open-source &lt;strong&gt;zxcvbn&lt;/strong&gt; algorithm. It analyzes thousands of common dictionary words, leaked passwords, and predictable keyboard patterns (like &quot;qwerty&quot;) to give you a realistic cracking time based on a hacker capable of 10 billion guesses per second.&lt;/p&gt;
        
        &lt;div class=&quot;privacy-block&quot;&gt;
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
            &lt;div&gt;
                &lt;strong&gt;100% Privacy Guaranteed&lt;/strong&gt;
                Checks happen within your browser. No data is uploaded to any server.
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;tool-info-tags&quot;&gt;
            &lt;span class=&quot;t-tag&quot;&gt;100% Local Processing&lt;/span&gt;
            &lt;span class=&quot;t-tag&quot;&gt;Dictionary Attack Simulation&lt;/span&gt;
            &lt;span class=&quot;t-tag&quot;&gt;Zero Server Uploads&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 25px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;Password Security FAQ&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;1. Is my password sent to your server?&lt;/strong&gt;
                &lt;p&gt;No. &lt;strong&gt;Zero data leaves your browser.&lt;/strong&gt; The entire algorithm runs locally via JavaScript. Your input is never logged, stored, or transmitted over the internet.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;2. What does &quot;Time to Crack&quot; mean?&lt;/strong&gt;
                &lt;p&gt;It estimates how long it would take a hacker using dedicated, high-speed hardware (capable of guessing billions of times per second) to force-guess your password.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;3. Why did my password fail immediately?&lt;/strong&gt;
                &lt;p&gt;If you used a dictionary word (like &quot;Monkey123&quot;), the algorithm detects it instantly. Hackers don&#39;t guess randomly; they use automated dictionaries of common words.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;4. What is the zxcvbn algorithm?&lt;/strong&gt;
                &lt;p&gt;Developed by Dropbox, zxcvbn is an open-source password strength estimator. It recognizes patterns like dates, names, common substitutions (e.g., &#39;@&#39; for &#39;a&#39;), and keyboard walks.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;5. Are symbols mandatory for a strong password?&lt;/strong&gt;
                &lt;p&gt;Not always! A very long passphrase consisting of four random words (e.g., &quot;horse-battery-staple-correct&quot;) is often vastly stronger than a short password packed with symbols.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;6. Why is my name a bad password?&lt;/strong&gt;
                &lt;p&gt;Hackers use open-source lists of the most common first and last names in the world. If your password relies on a name, it will be cracked in milliseconds.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;7. Is it enough to change &quot;o&quot; to &quot;0&quot;?&lt;/strong&gt;
                &lt;p&gt;No. These are called predictable substitutions (l33t speak). Cracking software is specifically programmed to automatically test these substitutions immediately.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;8. What is password entropy?&lt;/strong&gt;
                &lt;p&gt;Entropy is a measure of unpredictability. A higher entropy means there are more possible combinations, exponentially increasing the time it takes to crack it.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;9. How strong should my master password be?&lt;/strong&gt;
                &lt;p&gt;If you are creating a master password for a password manager or your primary email, aim for a cracking time of &quot;Centuries&quot; or higher for total peace of mind.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;10. Should I use a Password Manager?&lt;/strong&gt;
                &lt;p&gt;Absolutely. You should only have to remember one incredibly strong master passphrase. Use a password manager to generate and store random strings for every other website.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 25px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- 1. View Toggle Logic ---
    function toggleVisibility() {
        const input = document.getElementById(&#39;passInput&#39;);
        const btn = document.getElementById(&#39;eyeBtn&#39;);
        if (input.type === &#39;password&#39;) {
            input.type = &#39;text&#39;;
            btn.innerHTML = `&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24&quot;&gt;&lt;/path&gt;&lt;line x1=&quot;1&quot; y1=&quot;1&quot; x2=&quot;23&quot; y2=&quot;23&quot;&gt;&lt;/line&gt;&lt;/svg&gt;`;
            btn.style.color = &quot;var(--primary)&quot;;
        } else {
            input.type = &#39;password&#39;;
            btn.innerHTML = `&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;3&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;`;
            btn.style.color = &quot;var(--accent)&quot;;
        }
    }

    // --- 2. zxcvbn Analysis Engine ---
    const passInput = document.getElementById(&#39;passInput&#39;);
    const crackTimeDisplay = document.getElementById(&#39;crackTime&#39;);
    const meterFill = document.getElementById(&#39;meterFill&#39;);
    const insightBox = document.getElementById(&#39;insightBox&#39;);
    const feedbackList = document.getElementById(&#39;feedbackList&#39;);

    passInput.addEventListener(&#39;input&#39;, function() {
        const val = this.value;

        // Reset state if empty
        if (!val) {
            crackTimeDisplay.innerText = &quot;Enter Password&quot;;
            crackTimeDisplay.style.color = &quot;var(--text-dark)&quot;;
            meterFill.style.width = &quot;0%&quot;;
            insightBox.style.display = &quot;none&quot;;
            return;
        }

        // Run zxcvbn algorithm
        const result = zxcvbn(val);
        
        // 1. Time to Crack
        const timeToCrack = result.crack_times_display.offline_fast_hashing_1e10_per_second;
        crackTimeDisplay.innerText = timeToCrack.charAt(0).toUpperCase() + timeToCrack.slice(1);

        // 2. Update Progress Bar &amp; Colors based on Score (0-4)
        const score = result.score;
        let color = &quot;&quot;;
        let width = &quot;&quot;;

        if (score === 0) { color = &quot;var(--danger)&quot;; width = &quot;15%&quot;; }
        else if (score === 1) { color = &quot;var(--danger)&quot;; width = &quot;25%&quot;; }
        else if (score === 2) { color = &quot;var(--warning)&quot;; width = &quot;50%&quot;; }
        else if (score === 3) { color = &quot;var(--success)&quot;; width = &quot;75%&quot;; }
        else if (score === 4) { color = &quot;var(--excellent)&quot;; width = &quot;100%&quot;; }

        meterFill.style.width = width;
        meterFill.style.background = color;
        crackTimeDisplay.style.color = color;

        // 3. Generate Smart Feedback
        let feedbackHtml = &#39;&#39;;
        const warning = result.feedback.warning;
        const suggestions = result.feedback.suggestions;

        if (warning) {
            feedbackHtml += `&lt;li class=&quot;warn-row&quot;&gt;&lt;span class=&quot;i-icon&quot;&gt;⚠️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Warning:&lt;/strong&gt; ${warning}&lt;/div&gt;&lt;/li&gt;`;
        }

        if (suggestions &amp;&amp; suggestions.length &gt; 0) {
            suggestions.forEach(suggestion =&gt; {
                feedbackHtml += `&lt;li&gt;&lt;span class=&quot;i-icon&quot;&gt;💡&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Tip:&lt;/strong&gt; ${suggestion}&lt;/div&gt;&lt;/li&gt;`;
            });
        }

        if (score === 4 &amp;&amp; feedbackHtml === &#39;&#39;) {
            feedbackHtml += `&lt;li class=&quot;good-row&quot;&gt;&lt;span class=&quot;i-icon&quot;&gt;✅&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Excellent!&lt;/strong&gt; This is a highly resilient password capable of resisting advanced brute-force and dictionary attacks.&lt;/div&gt;&lt;/li&gt;`;
        }

        if (feedbackHtml !== &#39;&#39;) {
            insightBox.style.display = &quot;block&quot;;
            feedbackList.innerHTML = feedbackHtml;
        } else {
            insightBox.style.display = &quot;none&quot;;
        }
    });
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5648844540874233500'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5648844540874233500'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/password-strength-meter-time-to-crack.html' title='Password Strength Meter &amp; Time to Crack Calculator'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-8044336879647827023</id><published>2026-03-30T07:20:00.000-07:00</published><updated>2026-03-30T07:20:38.251-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="File Hash"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>File Hash Generator Online</title><content type='html'>&lt;title&gt;File Hash Generator Online | SHA-256 &amp; Checksum Verifier&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Generate secure SHA-256, SHA-1, and SHA-512 file hashes instantly in your browser. Verify checksums to ensure downloaded files are safe and uncorrupted.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Secure File Hash Generator - OTechy&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --danger: #ef4444; --warning: #f59e0b;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 900px; margin: 0 auto; padding: 30px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; }
    .new-badge { display: inline-block; background: #ecfdf5; color: #065f46; padding: 4px 10px; border-radius: 50px; font-size: 10px; font-weight: 800; border: 1px solid #a7f3d0; margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.5px; }
    .hero-section h1 { font-size: clamp(22px, 5vw, 32px); font-weight: 800; margin: 0 0 8px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 13px; font-weight: 500; max-width: 600px; margin: 0 auto; }

    /* Main Tool Card */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.04); margin-bottom: 25px; }
    
    /* Drag and Drop Zone */
    .drop-zone { border: 2px dashed #cbd5e1; border-radius: 12px; padding: 40px 20px; text-align: center; cursor: pointer; background: #f8fafc; transition: all 0.3s ease; margin-bottom: 20px; }
    .drop-zone:hover, .drop-zone.dragover { border-color: var(--primary); background: #eff6ff; }
    .zone-icon { color: var(--primary); margin-bottom: 15px; opacity: 0.8; }
    .zone-text { font-size: 15px; font-weight: 700; color: var(--text-dark); margin: 0 0 5px; }
    .zone-sub { font-size: 11px; color: var(--accent); font-weight: 500; margin: 0; }
    @keyframes spin { 100% { transform: rotate(360deg); } }
    .spin { animation: spin 1.5s linear infinite; }

    /* File Ledger */
    .ledger-container { display: none; border-top: 1px solid var(--border); padding-top: 20px; animation: fadeIn 0.4s ease; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }
    .ledger-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; }
    .ledger-title { font-size: 14px; font-weight: 800; color: var(--text-dark); margin: 0; }
    .status-badge { background: #eff6ff; color: var(--primary-dark); padding: 4px 10px; border-radius: 6px; font-size: 10px; font-weight: 800; border: 1px solid #bfdbfe; text-transform: uppercase; }
    
    /* Hash Results */
    .hash-grid { display: flex; flex-direction: column; gap: 15px; }
    .hash-row { background: #f8fafc; border: 1px solid var(--border); border-radius: 8px; padding: 12px 15px; display: flex; flex-direction: column; gap: 8px; }
    .hash-lbl { font-size: 11px; font-weight: 800; color: var(--primary-dark); text-transform: uppercase; letter-spacing: 0.5px; display: flex; justify-content: space-between; }
    .hash-val { font-family: monospace; font-size: 13px; color: var(--text-dark); word-break: break-all; background: var(--white); padding: 10px; border-radius: 6px; border: 1px solid #cbd5e1; user-select: all; }
    
    .copy-btn { background: none; border: none; color: var(--primary); font-size: 11px; font-weight: 700; cursor: pointer; text-transform: uppercase; display: flex; align-items: center; gap: 4px; transition: 0.2s; }
    .copy-btn:hover { color: var(--primary-dark); }

    /* Verify Tool */
    .verify-box { background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 12px; padding: 20px; margin-top: 25px; }
    .verify-box h4 { margin: 0 0 10px; font-size: 13px; font-weight: 800; color: var(--primary-dark); display: flex; align-items: center; gap: 6px; }
    .verify-input-group { display: flex; gap: 10px; }
    .form-control { flex: 1; padding: 10px 14px; border-radius: 8px; border: 1px solid #93c5fd; font-family: monospace; font-size: 12px; color: var(--text-dark); outline: none; transition: 0.2s; }
    .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); }
    .btn-verify { background: var(--primary); color: #fff; border: none; padding: 10px 20px; border-radius: 8px; font-weight: 700; font-size: 12px; cursor: pointer; transition: 0.2s; font-family: var(--font-main); white-space: nowrap; }
    .btn-verify:hover { background: var(--primary-dark); }
    .verify-result { margin-top: 10px; font-size: 12px; font-weight: 700; display: none; padding: 8px 12px; border-radius: 6px; }
    .match-yes { background: #ecfdf5; color: #065f46; border: 1px solid #a7f3d0; }
    .match-no { background: #fef2f2; color: #991b1b; border: 1px solid #fecaca; }

    /* Compact OTechy Tool Info Block */
    .tool-info-block { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); padding: 15px 20px; border-radius: 12px; margin-top: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.02); }
    .tool-info-block h3 { margin: 0 0 8px 0; font-size: 15px; font-weight: 800; display: flex; align-items: center; gap: 6px; color: var(--primary-dark); }
    .tool-info-block p { font-size: 12px; color: var(--accent); margin: 0 0 12px 0; line-height: 1.5; font-weight: 500; }
    .tool-info-tags { display: flex; gap: 8px; flex-wrap: wrap; }
    .t-tag { background: var(--white); border: 1px solid var(--border); padding: 4px 10px; border-radius: 4px; font-size: 9px; font-weight: 700; color: var(--primary); text-transform: uppercase; letter-spacing: 0.5px; }

    /* Compact 10 FAQ Section */
    .faq-section { margin-top: 35px; }
    .faq-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 15px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
    .faq-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-top: 3px solid var(--primary); box-shadow: 0 2px 6px rgba(0,0,0,0.02); transition: 0.2s; }
    .faq-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(37, 99, 235, 0.05); }
    .faq-card strong { color: var(--primary-dark); display: block; margin-bottom: 6px; font-size: 13px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }

    @media (max-width: 600px) {
        .verify-input-group { flex-direction: column; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;🔐 Crypto Toolkit&lt;/div&gt;
        &lt;h1&gt;Secure File &lt;span&gt;Hash Generator&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Generate SHA-256 and SHA-512 checksums instantly in your browser to verify file integrity. 100% private with no server uploads.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 15px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;

        &lt;div class=&quot;drop-zone&quot; id=&quot;dropZone&quot; onclick=&quot;document.getElementById(&#39;fileInput&#39;).click()&quot;&gt;
            &lt;div class=&quot;zone-icon&quot; id=&quot;zoneIcon&quot;&gt;
                &lt;svg width=&quot;42&quot; height=&quot;42&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4&quot;&gt;&lt;/path&gt;&lt;polyline points=&quot;17 8 12 3 7 8&quot;&gt;&lt;/polyline&gt;&lt;line x1=&quot;12&quot; y1=&quot;3&quot; x2=&quot;12&quot; y2=&quot;15&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            &lt;/div&gt;
            &lt;p class=&quot;zone-text&quot; id=&quot;zoneText&quot;&gt;Click or Drag a File Here&lt;/p&gt;
            &lt;p class=&quot;zone-sub&quot; id=&quot;zoneSub&quot;&gt;Supports ISO, ZIP, PDF, EXE and all other file types&lt;/p&gt;
            &lt;input type=&quot;file&quot; id=&quot;fileInput&quot; style=&quot;display:none&quot; onchange=&quot;handleFile(this.files)&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;ledger-container&quot; id=&quot;ledgerBox&quot;&gt;
            &lt;div class=&quot;ledger-header&quot;&gt;
                &lt;h4 class=&quot;ledger-title&quot; id=&quot;fileNameTitle&quot;&gt;File: loading...&lt;/h4&gt;
                &lt;div class=&quot;status-badge&quot; id=&quot;fileSizeBadge&quot;&gt;0 MB&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;hash-grid&quot;&gt;
                &lt;div class=&quot;hash-row&quot;&gt;
                    &lt;div class=&quot;hash-lbl&quot;&gt;
                        SHA-256 (Recommended)
                        &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyHash(&#39;sha256&#39;)&quot;&gt;&lt;svg width=&quot;12&quot; height=&quot;12&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Copy&lt;/button&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;hash-val&quot; id=&quot;val-sha256&quot;&gt;Calculating...&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;hash-row&quot;&gt;
                    &lt;div class=&quot;hash-lbl&quot;&gt;
                        SHA-512 (Maximum Security)
                        &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyHash(&#39;sha512&#39;)&quot;&gt;&lt;svg width=&quot;12&quot; height=&quot;12&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Copy&lt;/button&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;hash-val&quot; id=&quot;val-sha512&quot;&gt;Calculating...&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;hash-row&quot;&gt;
                    &lt;div class=&quot;hash-lbl&quot;&gt;
                        SHA-1 (Legacy)
                        &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyHash(&#39;sha1&#39;)&quot;&gt;&lt;svg width=&quot;12&quot; height=&quot;12&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Copy&lt;/button&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;hash-val&quot; id=&quot;val-sha1&quot;&gt;Calculating...&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;verify-box&quot;&gt;
                &lt;h4&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M22 11.08V12a10 10 0 1 1-5.93-9.14&quot;&gt;&lt;/path&gt;&lt;polyline points=&quot;22 4 12 14.01 9 11.01&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt; Checksum Verifier&lt;/h4&gt;
                &lt;p style=&quot;font-size:11px; color:var(--accent); margin-top:0; margin-bottom:12px;&quot;&gt;Paste the official hash provided by the software developer below to verify if your file matches exactly.&lt;/p&gt;
                &lt;div class=&quot;verify-input-group&quot;&gt;
                    &lt;input type=&quot;text&quot; id=&quot;verifyInput&quot; class=&quot;form-control&quot; placeholder=&quot;Paste official SHA-256, SHA-512, or SHA-1 hash here...&quot;&gt;
                    &lt;button class=&quot;btn-verify&quot; onclick=&quot;verifyHash()&quot;&gt;Verify Match&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;verify-result&quot; id=&quot;verifyResult&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;

        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;tool-info-block&quot;&gt;
        &lt;h3&gt;🔐 About Hash Generator&lt;/h3&gt;
        &lt;p&gt;A file hash (or checksum) is a digital fingerprint of a file. When you download a large file like an OS installer or software archive, developers provide an official hash. By dropping your file here, you can generate its hash and compare it. If the hashes match, your file is authentic and safe. If they differ, the file is corrupted or tampered with.&lt;/p&gt;
        &lt;div class=&quot;tool-info-tags&quot;&gt;
            &lt;span class=&quot;t-tag&quot;&gt;100% Local Browser Engine&lt;/span&gt;
            &lt;span class=&quot;t-tag&quot;&gt;Web Crypto API Supported&lt;/span&gt;
            &lt;span class=&quot;t-tag&quot;&gt;Zero File Uploads&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 25px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;File Hashing &amp; Integrity FAQ&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;1. What is a file hash?&lt;/strong&gt;
                &lt;p&gt;A hash is a unique string of letters and numbers generated by running a file through a mathematical algorithm. Even changing one pixel in an image changes the entire hash.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;2. Are my files uploaded to your servers?&lt;/strong&gt;
                &lt;p&gt;No. This tool uses the HTML5 Web Crypto API. The cryptographic math is performed locally inside your computer&#39;s RAM. No data ever leaves your device.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;3. Why do I need to check SHA-256?&lt;/strong&gt;
                &lt;p&gt;Checking the SHA-256 hash ensures that the file you downloaded is exactly the same as the original, meaning it hasn&#39;t been corrupted during download or infected by malware.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;4. What is the difference between SHA-1 and SHA-256?&lt;/strong&gt;
                &lt;p&gt;SHA-256 produces a longer, mathematically stronger signature. SHA-1 is an older legacy format that is faster but considered vulnerable to modern collision attacks.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;5. Does this tool support MD5?&lt;/strong&gt;
                &lt;p&gt;To prioritize security and pure zero-dependency performance, we utilize the browser&#39;s native Web Crypto API, which officially champions the highly secure SHA family over the deprecated MD5 standard.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;6. Can a file have the same hash as another?&lt;/strong&gt;
                &lt;p&gt;In secure formats like SHA-256, the probability of two different files producing the exact same hash (a collision) is practically zero.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;7. Why did the hash turn red when I verified?&lt;/strong&gt;
                &lt;p&gt;If the verifier turns red, it means the file you dropped does not match the official hash. Do not install or execute that file—it is corrupted or tampered with.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;8. Is there a file size limit?&lt;/strong&gt;
                &lt;p&gt;Since the processing happens in your browser&#39;s memory, you can safely hash files up to a few gigabytes depending on your computer&#39;s available RAM.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;9. How do I find the official hash?&lt;/strong&gt;
                &lt;p&gt;Reputable software developers (like Ubuntu, Microsoft, or open-source projects) usually publish the SHA-256 string right next to the download button on their website.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;10. Can I reverse a hash to get the file back?&lt;/strong&gt;
                &lt;p&gt;No. Hashing is a one-way cryptographic function. You cannot turn a SHA-256 string back into a .zip or .iso file.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 25px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    let currentHashes = {
        sha256: &#39;&#39;,
        sha512: &#39;&#39;,
        sha1: &#39;&#39;
    };

    function formatBytes(bytes) {
        if (bytes === 0) return &#39;0 Bytes&#39;;
        const k = 1024, sizes = [&#39;Bytes&#39;, &#39;KB&#39;, &#39;MB&#39;, &#39;GB&#39;];
        const i = Math.floor(Math.log(bytes) / Math.log(k));
        return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + &#39; &#39; + sizes[i];
    }

    // Drag and Drop Logic
    const dropZone = document.getElementById(&#39;dropZone&#39;);
    [&#39;dragenter&#39;, &#39;dragover&#39;, &#39;dragleave&#39;, &#39;drop&#39;].forEach(e =&gt; {
        dropZone.addEventListener(e, (ev) =&gt; { ev.preventDefault(); ev.stopPropagation(); });
    });
    dropZone.addEventListener(&#39;dragover&#39;, () =&gt; dropZone.classList.add(&#39;dragover&#39;));
    dropZone.addEventListener(&#39;dragleave&#39;, () =&gt; dropZone.classList.remove(&#39;dragover&#39;));
    dropZone.addEventListener(&#39;drop&#39;, (e) =&gt; {
        dropZone.classList.remove(&#39;dragover&#39;);
        if (e.dataTransfer.files.length &gt; 0) handleFile(e.dataTransfer.files);
    });

    async function handleFile(files) {
        if (files.length === 0) return;
        const file = files[0];

        // Reset UI
        document.getElementById(&#39;verifyResult&#39;).style.display = &#39;none&#39;;
        document.getElementById(&#39;verifyInput&#39;).value = &#39;&#39;;
        document.getElementById(&#39;val-sha256&#39;).innerText = &#39;Calculating...&#39;;
        document.getElementById(&#39;val-sha512&#39;).innerText = &#39;Calculating...&#39;;
        document.getElementById(&#39;val-sha1&#39;).innerText = &#39;Calculating...&#39;;
        
        document.getElementById(&#39;fileNameTitle&#39;).innerText = file.name;
        document.getElementById(&#39;fileSizeBadge&#39;).innerText = formatBytes(file.size);
        document.getElementById(&#39;ledgerBox&#39;).style.display = &#39;block&#39;;

        // UI Loading State
        const zText = document.getElementById(&#39;zoneText&#39;);
        const zIcon = document.getElementById(&#39;zoneIcon&#39;);
        zText.innerText = &quot;Hashing in progress...&quot;;
        zIcon.innerHTML = `&lt;svg width=&quot;42&quot; height=&quot;42&quot; viewBox=&quot;0 0 24 24&quot; class=&quot;spin&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot;&gt;&lt;path d=&quot;M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83&quot;/&gt;&lt;/svg&gt;`;

        try {
            // Read file as ArrayBuffer
            const arrayBuffer = await file.arrayBuffer();

            // Calculate hashes simultaneously using Native Web Crypto API
            const [hash256, hash512, hash1] = await Promise.all([
                crypto.subtle.digest(&#39;SHA-256&#39;, arrayBuffer),
                crypto.subtle.digest(&#39;SHA-512&#39;, arrayBuffer),
                crypto.subtle.digest(&#39;SHA-1&#39;, arrayBuffer)
            ]);

            // Convert to Hex strings
            currentHashes.sha256 = bufferToHex(hash256);
            currentHashes.sha512 = bufferToHex(hash512);
            currentHashes.sha1 = bufferToHex(hash1);

            // Update UI
            document.getElementById(&#39;val-sha256&#39;).innerText = currentHashes.sha256;
            document.getElementById(&#39;val-sha512&#39;).innerText = currentHashes.sha512;
            document.getElementById(&#39;val-sha1&#39;).innerText = currentHashes.sha1;

            zText.innerText = &quot;Hash Generation Complete&quot;;
            zIcon.innerHTML = `&lt;svg width=&quot;42&quot; height=&quot;42&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;var(--success)&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot;&gt;&lt;path d=&quot;M22 11.08V12a10 10 0 1 1-5.93-9.14&quot;&gt;&lt;/path&gt;&lt;polyline points=&quot;22 4 12 14.01 9 11.01&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;`;

        } catch (error) {
            console.error(error);
            zText.innerText = &quot;Hashing Failed&quot;;
            zIcon.innerHTML = `&lt;svg width=&quot;42&quot; height=&quot;42&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;var(--danger)&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;15&quot; y1=&quot;9&quot; x2=&quot;9&quot; y2=&quot;15&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;9&quot; y1=&quot;9&quot; x2=&quot;15&quot; y2=&quot;15&quot;&gt;&lt;/line&gt;&lt;/svg&gt;`;
            document.getElementById(&#39;val-sha256&#39;).innerText = &#39;Error reading file memory&#39;;
            document.getElementById(&#39;val-sha512&#39;).innerText = &#39;Error reading file memory&#39;;
            document.getElementById(&#39;val-sha1&#39;).innerText = &#39;Error reading file memory&#39;;
        }
    }

    function bufferToHex(buffer) {
        return Array.from(new Uint8Array(buffer))
            .map(b =&gt; b.toString(16).padStart(2, &#39;0&#39;))
            .join(&#39;&#39;);
    }

    function copyHash(type) {
        const hash = currentHashes[type];
        if(!hash) return;
        
        navigator.clipboard.writeText(hash).then(() =&gt; {
            alert(`Copied ${type.toUpperCase()} to clipboard!`);
        });
    }

    function verifyHash() {
        const input = document.getElementById(&#39;verifyInput&#39;).value.trim().toLowerCase();
        const resBox = document.getElementById(&#39;verifyResult&#39;);
        
        if(!input) {
            resBox.className = &#39;verify-result match-no&#39;;
            resBox.style.display = &#39;block&#39;;
            resBox.innerText = &quot;Please paste a hash to verify.&quot;;
            return;
        }

        // Check if input matches any of our calculated hashes
        if(input === currentHashes.sha256 || input === currentHashes.sha512 || input === currentHashes.sha1) {
            resBox.className = &#39;verify-result match-yes&#39;;
            resBox.style.display = &#39;block&#39;;
            resBox.innerHTML = `✅ &lt;strong&gt;Perfect Match!&lt;/strong&gt; The file is authentic and uncorrupted.`;
        } else {
            resBox.className = &#39;verify-result match-no&#39;;
            resBox.style.display = &#39;block&#39;;
            resBox.innerHTML = `❌ &lt;strong&gt;Hash Mismatch!&lt;/strong&gt; The file has been corrupted or tampered with. Do not use it.`;
        }
    }
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/8044336879647827023'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/8044336879647827023'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/file-hash-generator-online.html' title='File Hash Generator Online'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-4249232283106068310</id><published>2026-03-30T06:13:00.000-07:00</published><updated>2026-03-30T06:13:23.826-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IRCTC"/><title type='text'>Train Ticket Waitlist Checker Online</title><content type='html'>&lt;title&gt;Train Ticket Waitlist Predictor - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Will your waitlisted train ticket get confirmed? Our smart algorithm checks your route, travel date, weekends, and festival rush to estimate your chances.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Smart Waitlist Predictor - OTechy&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --warning: #f59e0b; --danger: #ef4444;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 850px; margin: 0 auto; padding: 30px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; }
    .new-badge { display: inline-block; background: #eff6ff; color: #1d4ed8; padding: 4px 12px; border-radius: 50px; font-size: 10px; font-weight: 800; border: 1px solid #bfdbfe; margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }
    .hero-section h1 { font-size: clamp(22px, 5vw, 32px); font-weight: 800; margin: 0 0 8px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 13px; font-weight: 500; max-width: 600px; margin: 0 auto; }

    /* Input Card */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.04); margin-bottom: 25px; }
    .calc-header { font-size: 16px; font-weight: 800; margin: 0 0 20px; color: var(--text-dark); display: flex; align-items: center; gap: 8px; border-bottom: 1px solid var(--border); padding-bottom: 12px; }
    
    .input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-bottom: 20px; }
    .input-group { display: flex; flex-direction: column; }
    .input-group label { font-size: 11px; font-weight: 700; color: var(--accent); text-transform: uppercase; margin-bottom: 6px; }
    
    .form-control { width: 100%; padding: 12px; border-radius: 8px; border: 1px solid #cbd5e1; font-family: var(--font-main); font-size: 13px; font-weight: 700; color: var(--text-dark); outline: none; transition: 0.2s; background: #f8fafc; }
    .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); background: #fff; }
    select.form-control { cursor: pointer; -webkit-appearance: none; background-image: url(&quot;data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23475569%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E&quot;); background-repeat: no-repeat; background-position: right 12px top 50%; background-size: 9px auto; }
    
    .btn-primary { background: var(--primary); color: #fff; border: none; padding: 14px 20px; border-radius: 8px; font-weight: 800; font-size: 14px; cursor: pointer; transition: 0.2s; font-family: var(--font-main); width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px; }
    .btn-primary:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.25); }

    /* Results Dashboard */
    .dashboard-grid { display: none; background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 30px; box-shadow: 0 8px 25px rgba(0,0,0,0.03); margin-bottom: 25px; text-align: center; }
    .dashboard-grid.active { display: block; animation: fadeIn 0.4s ease-out; }
    @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
    
    .score-circle { width: 140px; height: 140px; border-radius: 50%; margin: 0 auto 15px; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 8px solid #cbd5e1; transition: border-color 0.5s ease; }
    .score-circle.high { border-color: var(--success); background: #f0fdf4; color: #065f46; box-shadow: 0 0 30px rgba(16, 185, 129, 0.2); }
    .score-circle.med { border-color: var(--warning); background: #fffbeb; color: #92400e; box-shadow: 0 0 30px rgba(245, 158, 11, 0.2); }
    .score-circle.low { border-color: var(--danger); background: #fef2f2; color: #991b1b; box-shadow: 0 0 30px rgba(239, 68, 68, 0.2); }
    
    .score-val { font-size: 38px; font-weight: 850; line-height: 1; }
    .score-lbl { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; margin-top: 5px; opacity: 0.8; }
    
    .res-status { font-size: 20px; font-weight: 800; margin: 15px 0 25px; }

    /* Insights Box */
    .insight-box { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: 12px; padding: 20px; text-align: left; }
    .insight-box h4 { margin: 0 0 12px; font-size: 14px; font-weight: 800; color: var(--primary-dark); text-transform: uppercase; display: flex; align-items: center; gap: 8px; }
    .insight-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
    .insight-list li { padding: 10px 12px; border-radius: 8px; background: var(--white); display: flex; align-items: flex-start; gap: 10px; font-size: 12px; font-weight: 600; color: var(--text-dark); border: 1px solid var(--border); }
    .insight-list li span.i-icon { font-size: 16px; }
    .insight-list li.warn-row { background: #fffbeb; border-color: #fde68a; color: #b45309; }

    /* FAQ Section */
    .faq-section { margin-top: 35px; }
    .faq-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 15px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
    .faq-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-left: 4px solid var(--primary); box-shadow: 0 2px 6px rgba(0,0,0,0.02); transition: 0.2s; }
    .faq-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(37, 99, 235, 0.05); }
    .faq-card strong { color: var(--text-dark); display: block; margin-bottom: 6px; font-size: 13px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }

    @media (max-width: 600px) {
        .input-grid { grid-template-columns: 1fr; gap: 12px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;🧠 IRCTC Toolkit&lt;/div&gt;
        &lt;h1&gt;Train &lt;span&gt;Ticket Waitlist&lt;/span&gt; Checker&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Will your ticket clear? Simply enter your details and our engine automatically calculates festival rushes, weekend factors, and route popularity.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 15px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

&lt;datalist id=&quot;stationsList&quot;&gt;
    &lt;option value=&quot;New Delhi (NDLS/ANVT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Old Delhi (DLI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Hazrat Nizamuddin (NZM)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mumbai CSMT (CSMT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mumbai Central (BCT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Lokmanya Tilak Terminus (LTT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Dadar (DR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bengaluru City (SBC/KSR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Yesvantpur (YPR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Chennai Central (MAS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Chennai Egmore (MS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Howrah (HWH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Sealdah (SDAH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kolkata Terminal (KOAA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Patna (PNBE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Danapur (DNR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rajendra Nagar (RJPB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Gaya (GAYA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Lucknow NR (LKO)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Lucknow Jn (LJN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kanpur Central (CNB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Prayagraj Jn (PRYJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Varanasi (BSB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Pandit Deen Dayal Upadhyay Jn (DDU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Gorakhpur (GKP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jaipur (JP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ajmer (AII)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Udaipur City (UDZ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jodhpur (JU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bikaner (BKN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ahmedabad (ADI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Gandhinagar (GNC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Surat (ST)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Vadodara (BRC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rajkot (RJT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Pune (PUNE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Nagpur (NGP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Nashik Road (NK)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Aurangabad (AWB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Solapur (SUR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Hyderabad (HYB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Secunderabad (SC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kacheguda (KCG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Vijayawada (BZA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Visakhapatnam (VSKP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Tirupati (TPTY)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Coimbatore (CBE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Madurai (MDU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Trichy (TPJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Salem (SA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ernakulam (ERS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Thiruvananthapuram (TVC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kozhikode (CLT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kannur (CAN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mangaluru Central (MAQ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mangaluru Jn (MAJN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Hubballi (UBL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Belagavi (BGM)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Raipur (R)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bilaspur (BSP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Durg (DURG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bhopal (BPL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Habibganj/Rani Kamlapati (RKMP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jabalpur (JBP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Indore (INDB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Gwalior (GWL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jhansi (JHS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Agra Cantt (AGC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mathura (MTJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Dehradun (DDN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Haridwar (HW)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rishikesh (RKSH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Chandigarh (CDG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Amritsar (ASR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ludhiana (LDH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jammu Tawi (JAT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Katra (SVDK)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Shimla (SML)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Guwahati (GHY)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kamakhya (KYQ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Dibrugarh (DBRG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Silchar (SCL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;New Jalpaiguri (NJP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Darjeeling (DJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ranchi (RNC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Tatanagar (TATA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Dhanbad (DHN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Asansol (ASN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Barddhaman (BWN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Malda Town (MLDT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Cuttack (CTC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bhubaneswar (BBS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Puri (PURI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Sambalpur (SBP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Aligarh (ALJN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bareilly (BE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Moradabad (MB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Saharanpur (SRE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Meerut City (MTC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ghaziabad (GZB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Firozabad (FZD)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Etawah (ETW)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Unnao (ON)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Sitapur (STP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Faizabad/Ayodhya (AY)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Sultanpur (SLN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ballia (BUI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mau (MAU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Azamgarh (AMH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Basti (BST)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Deoria Sadar (DEOS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Siwan (SV)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Chapra (CPR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Hajipur (HJP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Samastipur (SPJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Darbhanga (DBG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Katihar (KIR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kishanganj (KNE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Arrah (ARA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Buxar (BXR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Sasaram (SSM)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Hazaribagh Road (HZD)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bokaro Steel City (BKSC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Giridih (GRD)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Deoghar (DGHR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Koderma (KQR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ramgarh Cantt (RMT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Chakradharpur (CKP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rourkela (ROU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jharsuguda (JSG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Balasore (BLS)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jajpur Keonjhar Road (JJKR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Angul (ANGL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Koraput (KRPU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rayagada (RGDA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Titlagarh (TIG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kharagpur (KGP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Haldia (HLZ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Krishnanagar (KNJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Berhampore Court (BPC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rampurhat (RPH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bolpur Shantiniketan (BHP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Durgapur (DGR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bankura (BQA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Purulia (PRR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Alipurduar (APDJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Cooch Behar (COB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kollam (QLN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Alappuzha (ALLP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kottayam (KTYM)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Palakkad (PGT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Thrissur (TCR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kasargod (KGQ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Karwar (KAWR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Udupi (UD)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Shimoga (SMET)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Davangere (DVG)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bellary (BAY)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Guntakal (GTL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Anantapur (ATP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kurnool (KRNT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Nellore (NLR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Rajahmundry (RJY)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kakinada (CCT)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Eluru (EE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Warangal (WL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Karimnagar (KRMR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Nizamabad (NZB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Adilabad (ADB)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Latur (LUR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Nanded (NED)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Akola (AK)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Amravati (AMI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Chandrapur (CD)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Wardha (WR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jalgaon (JL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Dhule (DHI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Ratnagiri (RN)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Satara (STR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Kolhapur (KOP)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Sangli (SLI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bhavnagar (BVC)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Jamnagar (JAM)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Porbandar (PBR)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Bhuj (BHUJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Palanpur (PNU)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Mehsana (MSH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Anand (ANND)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Godhra (GDA)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Valsad (BL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Vapi (VAPI)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Siliguri Junction (SGUJ)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Anand Vihar Terminal (ANVT)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Delhi Cantt (DEC)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Sarai Rohilla (DEE)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Thane (TNA)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Kalyan (KYN)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Panvel (PNVL)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Santragachi (SRC)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Dankuni (DKAE)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Bally (BLY)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Katpadi (KPD)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Erode (ED)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Tambaram (TBM)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Krishnarajapuram (KJM)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Udhna (UDN)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Bharuch (BH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Begusarai (BGS)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Khagaria (KGG)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Motihari (MKI)&quot;&gt;&lt;/option&gt;
	&lt;option value=&quot;Betiah (BTH)&quot;&gt;&lt;/option&gt;
    &lt;option value=&quot;Other / Intermediate Station&quot;&gt;&lt;/option&gt;
&lt;/datalist&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        &lt;h2 class=&quot;calc-header&quot;&gt;
            &lt;svg width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;22 12 18 12 15 21 9 3 6 12 2 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;
            Journey Details
        &lt;/h2&gt;
        
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;From Station&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;fromStn&quot; class=&quot;form-control&quot; list=&quot;stationsList&quot; placeholder=&quot;Select or type...&quot; required&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;To Station&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;toStn&quot; class=&quot;form-control&quot; list=&quot;stationsList&quot; placeholder=&quot;Select or type...&quot; required&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Date of Journey&lt;/label&gt;
                &lt;input type=&quot;date&quot; id=&quot;jDate&quot; class=&quot;form-control&quot; required&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Current WL Number&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;wlNum&quot; class=&quot;form-control&quot; placeholder=&quot;e.g. 25&quot; min=&quot;1&quot; required&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Waitlist Quota&lt;/label&gt;
                &lt;select class=&quot;form-control&quot; id=&quot;quotaType&quot;&gt;
                    &lt;option value=&quot;GNWL&quot;&gt;GNWL (General - Highest Chance)&lt;/option&gt;
                    &lt;option value=&quot;RLWL&quot;&gt;RLWL (Remote - Med Chance)&lt;/option&gt;
                    &lt;option value=&quot;PQWL&quot;&gt;PQWL (Pooled - Low Chance)&lt;/option&gt;
                    &lt;option value=&quot;TQWL&quot;&gt;TQWL (Tatkal WL - Very Low)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Travel Class&lt;/label&gt;
                &lt;select class=&quot;form-control&quot; id=&quot;trainClass&quot;&gt;
                    &lt;option value=&quot;SL&quot;&gt;Sleeper (SL) / 2S&lt;/option&gt;
                    &lt;option value=&quot;3A&quot;&gt;3-Tier AC (3A) / CC&lt;/option&gt;
                    &lt;option value=&quot;2A&quot;&gt;2-Tier AC (2A)&lt;/option&gt;
                    &lt;option value=&quot;1A&quot;&gt;1st Class AC (1A)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-primary&quot; onclick=&quot;predictWL()&quot;&gt;
            Calculate Probability
        &lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;dashboard-grid&quot; id=&quot;resultDash&quot;&gt;
        
        &lt;div class=&quot;score-circle&quot; id=&quot;scoreRing&quot;&gt;
            &lt;span class=&quot;score-val&quot; id=&quot;scoreText&quot;&gt;0%&lt;/span&gt;
            &lt;span class=&quot;score-lbl&quot;&gt;Chance&lt;/span&gt;
        &lt;/div&gt;

        &lt;div class=&quot;res-status&quot; id=&quot;statusText&quot;&gt;Evaluating...&lt;/div&gt;

        &lt;div class=&quot;insight-box&quot;&gt;
            &lt;h4&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M12 16v-4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12 8h.01&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Backend Logic Insights:&lt;/h4&gt;
            &lt;ul class=&quot;insight-list&quot; id=&quot;insightList&quot;&gt;
                &lt;/ul&gt;
        &lt;/div&gt;
        
        &lt;p style=&quot;font-size: 10px; color: var(--accent); margin-top: 15px; font-weight: 500;&quot;&gt;*Disclaimer: This tool utilizes heuristic modeling based on Indian Railway patterns. True confirmation depends on real-time cancellations.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 25px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;Waitlist Terminology Decoded&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;GNWL (General Waitlist)&lt;/strong&gt;
                &lt;p&gt;The most common waitlist. Issued when you travel from the originating station. It has the &lt;strong&gt;highest&lt;/strong&gt; priority and clears the fastest because maximum seats are allocated to this quota.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;RLWL (Remote Location Waitlist)&lt;/strong&gt;
                &lt;p&gt;Issued for intermediate stations connecting major cities. It has &lt;strong&gt;medium&lt;/strong&gt; chances of clearing because it relies heavily on cancellations from passengers boarding at your specific station.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;PQWL (Pooled Quota Waitlist)&lt;/strong&gt;
                &lt;p&gt;Issued for passengers traveling between intermediate stations. It has a &lt;strong&gt;low&lt;/strong&gt; chance of clearing as it draws from a very small pool of shared seats for the entire journey.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;TQWL (Tatkal Waitlist)&lt;/strong&gt;
                &lt;p&gt;Issued against cancelled Tatkal tickets. It has the &lt;strong&gt;lowest&lt;/strong&gt; chance of clearing because Tatkal tickets are strictly non-refundable, meaning almost nobody cancels them.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 25px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // Set default date to today
    document.getElementById(&#39;jDate&#39;).valueAsDate = new Date();

    function predictWL() {
        const wlInput = document.getElementById(&#39;wlNum&#39;).value;
        const fromStn = document.getElementById(&#39;fromStn&#39;).value.toLowerCase();
        const toStn = document.getElementById(&#39;toStn&#39;).value.toLowerCase();
        const dateInput = document.getElementById(&#39;jDate&#39;).value;
        const wlPos = parseInt(wlInput);
        
        if (!wlPos || wlPos &lt; 1) { alert(&quot;Please enter a valid waitlist number.&quot;); return; }
        if (!dateInput) { alert(&quot;Please select a Journey Date.&quot;); return; }

        const quota = document.getElementById(&#39;quotaType&#39;).value;
        const cls = document.getElementById(&#39;trainClass&#39;).value;
        
        const journeyDate = new Date(dateInput);
        const today = new Date();
        const timeDiffHours = (journeyDate - today) / (1000 * 60 * 60);

        // --- 1. SMART ROUTE DETECTOR ---
        let routeMult = 1.0;
        let routeInsight = &quot;Normal route demand assumed.&quot;;
        let isWarnRoute = false;

        // High Rush Corridors (e.g. Metros to UP/Bihar/Bengal)
        const isMetro = fromStn.includes(&#39;delhi&#39;) || fromStn.includes(&#39;mumbai&#39;) || fromStn.includes(&#39;bengaluru&#39;) || fromStn.includes(&#39;chennai&#39;);
        const isEastNorth = toStn.includes(&#39;patna&#39;) || toStn.includes(&#39;gorakhpur&#39;) || toStn.includes(&#39;lucknow&#39;) || toStn.includes(&#39;howrah&#39;) || toStn.includes(&#39;kolkata&#39;) || toStn.includes(&#39;varanasi&#39;);
        
        // Reverse
        const isReverseMetro = toStn.includes(&#39;delhi&#39;) || toStn.includes(&#39;mumbai&#39;) || toStn.includes(&#39;bengaluru&#39;);
        const isReverseEast = fromStn.includes(&#39;patna&#39;) || fromStn.includes(&#39;gorakhpur&#39;) || fromStn.includes(&#39;lucknow&#39;);

        if ((isMetro &amp;&amp; isEastNorth) || (isReverseMetro &amp;&amp; isReverseEast)) {
            routeMult = 0.6; // High demand, less clearance
            routeInsight = &quot;&lt;strong&gt;High Demand Corridor Detected.&lt;/strong&gt; Trains on this specific route operate at near maximum occupancy.&quot;;
            isWarnRoute = true;
        }

        // --- 2. SMART DATE DETECTOR (Weekends &amp; Festivals) ---
        let dateMult = 1.0;
        let dateInsight = &quot;Standard weekday travel. Normal cancellation patterns expected.&quot;;
        let isWarnDate = false;

        const day = journeyDate.getDay(); // 0=Sun, 5=Fri, 6=Sat, 1=Mon
        const month = journeyDate.getMonth() + 1; // 1-12
        const dateNum = journeyDate.getDate();

        // Weekend Check (Outbound Fri/Sat, Return Sun/Mon)
        if (day === 5 || day === 6 || day === 0 || day === 1) {
            dateMult = 0.8;
            dateInsight = &quot;&lt;strong&gt;Weekend Travel Detected.&lt;/strong&gt; Passengers are significantly less likely to cancel Friday-Monday trips.&quot;;
            isWarnDate = true;
        }

        // 2026/2027 Festival Check
        // Holi (Mar 1-10), Summer (May-June), Durga Puja (Oct 15-25), Diwali/Chhath (Nov 1-20)
        if ( (month === 3 &amp;&amp; dateNum &lt;= 10) || 
             (month === 5 || month === 6) || 
             (month === 10 &amp;&amp; dateNum &gt;= 15 &amp;&amp; dateNum &lt;= 25) || 
             (month === 11 &amp;&amp; dateNum &lt;= 20) ) {
            
            dateMult = 0.4; // Massive drop in probability
            dateInsight = &quot;&lt;strong&gt;🚨 Extreme Festival/Holiday Rush Detected!&lt;/strong&gt; Very few passengers will cancel tickets during this specific date window.&quot;;
            isWarnDate = true;
        }

        // --- 3. TIME &amp; QUOTA MULTIPLIERS ---
        let timeMult = 1.0;
        let timeInsight = &quot;With 3+ days left, there is plenty of time for bulk cancellations.&quot;;
        
        if (timeDiffHours &lt;= 0) { timeMult = 0; timeInsight = &quot;Chart Prepared. No further movement expected.&quot;; }
        else if (timeDiffHours &lt;= 24) { timeMult = 0.4; timeInsight = &quot;Less than 24h left. Relying entirely on last-minute emergency cancellations.&quot;; }
        else if (timeDiffHours &lt;= 72) { timeMult = 0.7; timeInsight = &quot;Approaching charting window. Cancellation momentum will slow down soon.&quot;; }

        let quotaMult = 1.0;
        let quotaInsight = &quot;GNWL gets top priority during chart preparation.&quot;;
        if (quota === &#39;RLWL&#39;) { quotaMult = 0.6; quotaInsight = &quot;RLWL only clears if a passenger boarding at your specific station cancels.&quot;; }
        if (quota === &#39;PQWL&#39;) { quotaMult = 0.4; quotaInsight = &quot;PQWL shares a very tiny pool of seats. Hard to clear.&quot;; }
        if (quota === &#39;TQWL&#39;) { quotaMult = 0.1; quotaInsight = &quot;Tatkal tickets are non-refundable, meaning almost nobody cancels them.&quot;; }

        // --- 4. CLASS BASE CAPACITY ---
        let baseCapacity = 0;
        let classInsight = &quot;&quot;;
        if (cls === &#39;SL&#39;) { baseCapacity = 60; classInsight = &quot;Sleeper class has the highest volume of total seats and turnover.&quot;; }
        if (cls === &#39;3A&#39;) { baseCapacity = 40; classInsight = &quot;3AC has moderate turnover. Reasonable chances for lower numbers.&quot;; }
        if (cls === &#39;2A&#39;) { baseCapacity = 15; classInsight = &quot;2AC has very limited seats. Waitlist clears slowly.&quot;; }
        if (cls === &#39;1A&#39;) { baseCapacity = 4; classInsight = &quot;1st AC has tiny capacity. Even WL 5 is difficult to clear.&quot;; }

        // --- 5. CALCULATE PROBABILITY ---
        let effectiveCapacity = baseCapacity * quotaMult * timeMult * dateMult * routeMult;
        let prob = 0;

        if (timeDiffHours &lt;= 0 &amp;&amp; wlPos &gt; 0) {
            prob = 0;
        } else {
            const ratio = effectiveCapacity / wlPos;
            if (ratio &gt;= 2.0) prob = Math.floor(Math.random() * (95 - 88 + 1)) + 88;
            else if (ratio &gt;= 1.0) prob = Math.floor(Math.random() * (85 - 65 + 1)) + 65;
            else if (ratio &gt;= 0.5) prob = Math.floor(Math.random() * (60 - 35 + 1)) + 35;
            else prob = Math.floor(Math.random() * (30 - 5 + 1)) + 5;
        }

        if (prob &gt; 95) prob = 95;
        if (prob &lt; 0) prob = 0;

        // --- 6. RENDER UI ---
        const dash = document.getElementById(&#39;resultDash&#39;);
        const ring = document.getElementById(&#39;scoreRing&#39;);
        const text = document.getElementById(&#39;scoreText&#39;);
        const status = document.getElementById(&#39;statusText&#39;);
        const list = document.getElementById(&#39;insightList&#39;);

        dash.classList.remove(&#39;active&#39;);
        void dash.offsetWidth; 
        dash.classList.add(&#39;active&#39;);

        text.innerText = prob + &#39;%&#39;;
        
        ring.className = &#39;score-circle&#39;;
        if (prob &gt;= 65) {
            ring.classList.add(&#39;high&#39;);
            status.innerHTML = `&lt;span style=&quot;color:var(--success);&quot;&gt;High Chances of Confirmation&lt;/span&gt;`;
        } else if (prob &gt;= 35) {
            ring.classList.add(&#39;med&#39;);
            status.innerHTML = `&lt;span style=&quot;color:var(--warning);&quot;&gt;Medium / RAC Chances&lt;/span&gt;`;
        } else {
            ring.classList.add(&#39;low&#39;);
            status.innerHTML = `&lt;span style=&quot;color:var(--danger);&quot;&gt;Low Chances (Plan Alternatives)&lt;/span&gt;`;
        }

        // Generate Insights HTML
        const routeRowClass = isWarnRoute ? &#39;warn-row&#39; : &#39;&#39;;
        const dateRowClass = isWarnDate ? &#39;warn-row&#39; : &#39;&#39;;

        list.innerHTML = `
            &lt;li class=&quot;${dateRowClass}&quot;&gt;&lt;span class=&quot;i-icon&quot;&gt;📅&lt;/span&gt; &lt;div&gt;${dateInsight}&lt;/div&gt;&lt;/li&gt;
            &lt;li class=&quot;${routeRowClass}&quot;&gt;&lt;span class=&quot;i-icon&quot;&gt;🗺️&lt;/span&gt; &lt;div&gt;${routeInsight}&lt;/div&gt;&lt;/li&gt;
            &lt;li&gt;&lt;span class=&quot;i-icon&quot;&gt;🎟️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;${quota} Impact:&lt;/strong&gt; ${quotaInsight}&lt;/div&gt;&lt;/li&gt;
            &lt;li&gt;&lt;span class=&quot;i-icon&quot;&gt;🚆&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Class Capacity:&lt;/strong&gt; ${classInsight}&lt;/div&gt;&lt;/li&gt;
            &lt;li&gt;&lt;span class=&quot;i-icon&quot;&gt;⏳&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Timing Factor:&lt;/strong&gt; ${timeInsight}&lt;/div&gt;&lt;/li&gt;
        `;
        
        setTimeout(() =&gt; {
            dash.scrollIntoView({ behavior: &#39;smooth&#39;, block: &#39;start&#39; });
        }, 100);
    }
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/4249232283106068310'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/4249232283106068310'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/train-ticket-waitlist-checker-online.html' title='Train Ticket Waitlist Checker Online'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-6614685440951962535</id><published>2026-03-30T01:47:00.000-07:00</published><updated>2026-03-30T01:52:10.915-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Indian Railway"/><title type='text'>Find Train Berth and Seating Arrangement Online</title><content type='html'>&lt;title&gt;Indian Railways 3D Berth &amp; Seat Locator - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Find your exact train seat layout. Map multiple seats at once, for seating arrangement, check group seating, and toggle between modern LHB and old ICF coaches. Includes 10 FAQs.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;3D Smart Berth Locator - OTechy&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #2563eb; --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 900px; margin: 0 auto; padding: 30px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; }
    .new-badge { display: inline-block; background: #eff6ff; color: #1d4ed8; padding: 4px 10px; border-radius: 50px; font-size: 10px; font-weight: 800; border: 1px solid #bfdbfe; margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.5px; }
    .hero-section h1 { font-size: clamp(22px, 5vw, 32px); font-weight: 800; margin: 0 0 8px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 13px; font-weight: 500; max-width: 600px; margin: 0 auto; }

    /* Input Card &amp; Toggle */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 20px; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.04); margin-bottom: 25px; }
    .train-toggle { display: flex; background: #f1f5f9; border-radius: 10px; padding: 4px; margin-bottom: 15px; max-width: 350px; margin-left: auto; margin-right: auto; }
    .toggle-btn { flex: 1; text-align: center; padding: 8px; font-size: 11px; font-weight: 700; color: var(--accent); cursor: pointer; border-radius: 6px; transition: 0.2s; text-transform: uppercase; }
    .toggle-btn.active { background: var(--white); color: var(--primary-dark); box-shadow: 0 2px 8px rgba(0,0,0,0.05); }

    .input-grid { display: grid; grid-template-columns: 1fr 1.5fr auto; gap: 12px; align-items: end; }
    .input-group { display: flex; flex-direction: column; }
    .input-group label { font-size: 11px; font-weight: 700; color: var(--accent); text-transform: uppercase; margin-bottom: 6px; }
    
    .form-control { width: 100%; padding: 12px; border-radius: 8px; border: 1px solid #cbd5e1; font-family: var(--font-main); font-size: 13px; font-weight: 700; color: var(--text-dark); outline: none; transition: 0.2s; background: #f8fafc; }
    .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); background: #fff; }
    
    .btn-primary { background: var(--primary); color: #fff; border: none; padding: 12px 20px; border-radius: 8px; font-weight: 800; font-size: 13px; cursor: pointer; transition: 0.2s; font-family: var(--font-main); display: flex; align-items: center; justify-content: center; gap: 6px; }
    .btn-primary:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.25); }

    /* Results Dashboard */
    .dashboard-grid { display: grid; grid-template-columns: 1fr; gap: 20px; display: none; }
    .dashboard-grid.active { display: block; }
    
    .info-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 20px; box-shadow: 0 8px 25px rgba(0,0,0,0.02); margin-bottom: 20px; }
    .berth-title { font-size: 18px; font-weight: 850; color: var(--primary-dark); margin: 0 0 12px; line-height: 1.3; }
    
    .insight-list { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; }
    .insight-list li { padding: 10px 12px; border-radius: 8px; background: #f8fafc; display: flex; align-items: flex-start; gap: 8px; font-size: 12px; font-weight: 600; color: var(--text-dark); border: 1px solid var(--border); }
    .insight-list li.warn { background: #fffbeb; border-color: #fde68a; color: #b45309; }
    .insight-list li.good { background: #f0fdf4; border-color: #bbf7d0; color: #15803d; }

    /* Crisp 3D Map Container */
    .maps-container { display: flex; flex-direction: column; gap: 15px; }
    .map-card { background: #f1f5f9; border-radius: 12px; border: 2px solid #cbd5e1; padding: 35px 15px; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; overflow: hidden; perspective: 1000px; }
    .window-line { position: absolute; left: 10px; top: 0; bottom: 0; width: 5px; background: #cbd5e1; border-radius: 8px; }
    .window-line.right { left: auto; right: 10px; }
    .window-glass { position: absolute; width: 3px; height: 100px; background: #60a5fa; left: 1px; top: 50%; transform: translateY(-50%); border-radius: 8px; }
    
    .map-title { position: absolute; top: 10px; left: 20px; font-size: 10px; font-weight: 800; text-transform: uppercase; color: #475569; letter-spacing: 1px; }

    /* Dynamic CSS Grid for Cabins */
    .cabin-grid { display: grid; gap: 10px; transform: rotateX(15deg); transform-style: preserve-3d; }
    .grid-3a { grid-template-columns: 55px 55px 35px 55px; } 
    .grid-2a { grid-template-columns: 65px 65px 45px 65px; } 
    .grid-cc { grid-template-columns: 45px 45px 45px 25px 45px 45px; } 
    
    .col-bay { display: flex; flex-direction: column; gap: 6px; justify-content: center; }
    .aisle-space { display: flex; align-items: center; justify-content: center; color: #94a3b8; font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 2px; writing-mode: vertical-rl; text-orientation: mixed; border-left: 2px dashed #94a3b8; border-right: 2px dashed #94a3b8; padding: 0 4px; }

    /* Edged, Crisp 3D Seat Styles */
    .seat { 
        width: 100%; height: 45px; background: #ffffff; border-radius: 5px; 
        border: 2px solid #94a3b8; 
        display: flex; flex-direction: column; align-items: center; justify-content: center; 
        font-weight: 800; color: #475569; font-size: 13px; position: relative;
        box-shadow: 0 3px 0 #94a3b8; transition: 0.15s ease-in-out;
    }
    .seat.active { 
        background: var(--primary); color: #fff; border-color: var(--primary-dark);
        transform: translateY(3px); 
        box-shadow: 0 0 0 var(--primary-dark); 
        z-index: 10;
    }
    .seat small { font-size: 8px; font-weight: 700; text-transform: uppercase; opacity: 0.8; margin-top: -2px; }

    /* OTechy Tool Info Block - Compact Light Theme */
    .tool-info-block { background: #f8fafc; border: 1px solid var(--border); border-left: 4px solid var(--primary); padding: 15px 20px; border-radius: 12px; margin-top: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.02); }
    .tool-info-block h3 { margin: 0 0 8px 0; font-size: 15px; font-weight: 800; display: flex; align-items: center; gap: 6px; color: var(--primary-dark); }
    .tool-info-block p { font-size: 12px; color: var(--accent); margin: 0 0 12px 0; line-height: 1.5; font-weight: 500; }
    .tool-info-tags { display: flex; gap: 8px; flex-wrap: wrap; }
    .t-tag { background: var(--white); border: 1px solid var(--border); padding: 4px 10px; border-radius: 4px; font-size: 9px; font-weight: 700; color: var(--primary); text-transform: uppercase; letter-spacing: 0.5px; }

    /* Compact 10 FAQ Section */
    .faq-section { margin-top: 35px; }
    .faq-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 15px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
    .faq-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-top: 3px solid var(--primary); box-shadow: 0 2px 6px rgba(0,0,0,0.02); transition: 0.2s; }
    .faq-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(37, 99, 235, 0.05); }
    .faq-card strong { color: var(--primary-dark); display: block; margin-bottom: 6px; font-size: 13px; font-weight: 800; line-height: 1.3; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; border: 1px dashed #cbd5e1; }

    @media (max-width: 600px) {
        .input-grid { grid-template-columns: 1fr; }
        .grid-3a { grid-template-columns: 45px 45px 25px 45px; }
        .grid-cc { grid-template-columns: 35px 35px 35px 15px 35px 35px; }
        .seat { font-size: 11px; height: 40px; }
        .seat small { font-size: 7px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;🔥 IRCTC Toolkit&lt;/div&gt;
        &lt;h1&gt;3D Berth &amp; &lt;span&gt;Seat Locator&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Enter one or multiple seats (e.g. 42, 43, 47) to instantly map your family&#39;s layout and see exactly how close you are sitting.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 15px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        
        &lt;div class=&quot;train-toggle&quot;&gt;
            &lt;div class=&quot;toggle-btn active&quot; id=&quot;btnLhb&quot; onclick=&quot;setTrainType(&#39;LHB&#39;)&quot;&gt;Modern LHB Coach&lt;/div&gt;
            &lt;div class=&quot;toggle-btn&quot; id=&quot;btnIcf&quot; onclick=&quot;setTrainType(&#39;ICF&#39;)&quot;&gt;Old ICF Coach&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Select Coach Type&lt;/label&gt;
                &lt;select class=&quot;form-control&quot; id=&quot;coachType&quot;&gt;
                    &lt;option value=&quot;3A&quot;&gt;3-Tier AC (3A) / Sleeper (SL)&lt;/option&gt;
                    &lt;option value=&quot;2A&quot;&gt;2-Tier AC (2A)&lt;/option&gt;
                    &lt;option value=&quot;CC&quot;&gt;AC Chair Car (CC)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Enter Seat(s) (Comma separated)&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;seatNumber&quot; class=&quot;form-control&quot; placeholder=&quot;e.g. 42, 43, 47&quot;&gt;
            &lt;/div&gt;

            &lt;button class=&quot;btn-primary&quot; onclick=&quot;locateSeat()&quot;&gt;
                &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;21&quot; y1=&quot;21&quot; x2=&quot;16.65&quot; y2=&quot;16.65&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
                Locate
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;dashboard-grid&quot; id=&quot;resultDash&quot;&gt;
        
        &lt;div class=&quot;info-card&quot;&gt;
            &lt;h2 class=&quot;berth-title&quot; id=&quot;resTitle&quot;&gt;Berth Loading...&lt;/h2&gt;
            &lt;ul class=&quot;insight-list&quot; id=&quot;insightList&quot;&gt;
                &lt;/ul&gt;
        &lt;/div&gt;

        &lt;div class=&quot;maps-container&quot; id=&quot;mapsContainer&quot;&gt;&lt;/div&gt;
        
        &lt;div class=&quot;tool-info-block&quot;&gt;
            &lt;h3&gt;🚄 About 3D Seat Locator&lt;/h3&gt;
            &lt;p&gt;This algorithm maps your exact seat layout on Indian Railways. It dynamically accounts for the structural differences between modern LHB (Linke Hofmann Busch) coaches with higher capacities and traditional ICF (Integral Coach Factory) coaches. It visually displays proximity to windows, aisles, and washrooms, perfect for checking if family members are seated together.&lt;/p&gt;
            &lt;div class=&quot;tool-info-tags&quot;&gt;
                &lt;span class=&quot;t-tag&quot;&gt;Calculates Group Distance&lt;/span&gt;
                &lt;span class=&quot;t-tag&quot;&gt;LHB &amp; ICF Math Supported&lt;/span&gt;
                &lt;span class=&quot;t-tag&quot;&gt;Visualizes Aisles &amp; Windows&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 25px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h3&gt;Indian Railways Seating FAQ&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;1. What is the difference between LHB and ICF coaches?&lt;/strong&gt;
                &lt;p&gt;LHB coaches (red/silver) are modern, safer, and longer. They hold 80 seats in Sleeper and 72 in 3AC. Older ICF coaches (blue) hold 72 in Sleeper and 64 in 3AC.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;2. Which berth is best for senior citizens?&lt;/strong&gt;
                &lt;p&gt;The Lower Berth (LB) is heavily preferred as it requires no climbing. IRCTC typically prioritizes lower berths for older passengers during booking.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;3. What is a Side Lower (SL) berth?&lt;/strong&gt;
                &lt;p&gt;A Side Lower berth runs longitudinally along the window on the aisle side. It offers great views but the bed length is slightly shorter than inside cabin berths.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;4. Does AC Chair Car (CC) have sleeper berths?&lt;/strong&gt;
                &lt;p&gt;No, CC consists purely of sitting chairs arranged in a 3x2 format. It is used exclusively for daytime intercity travel.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;5. How do I know if my group is sitting together?&lt;/strong&gt;
                &lt;p&gt;Enter your seat numbers separated by commas in the tool above. It instantly calculates if your party is in the same cabin or scattered across the coach.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;6. Can I change my berth after booking?&lt;/strong&gt;
                &lt;p&gt;Officially, no. However, you can mutually agree to swap seats with a co-passenger, or ask the TTE to reassign you if vacant seats exist after charting.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;7. Why are seats 1, 2, 3 usually noisier?&lt;/strong&gt;
                &lt;p&gt;Seats at the extreme ends of any coach are located immediately next to the doors and washrooms, leading to high foot traffic and occasional odors.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;8. What does Middle Berth (MB) mean?&lt;/strong&gt;
                &lt;p&gt;Found in 3AC and Sleeper classes, the MB is a foldable berth suspended between the lower and upper berths. It must be folded down during daytime hours.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;9. Do 2AC coaches have middle berths?&lt;/strong&gt;
                &lt;p&gt;No. 2-Tier AC (2A) only features Lower and Upper berths inside the main cabin, providing significantly more headroom to sit comfortably.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;
                &lt;strong&gt;10. Are Side Upper (SU) berths good?&lt;/strong&gt;
                &lt;p&gt;Yes! They offer excellent privacy and their own high window. They are unaffected by daytime seating rules, though they share the slightly shorter length of the SL.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 25px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    let trainType = &#39;LHB&#39;; // Default

    function setTrainType(type) {
        trainType = type;
        document.getElementById(&#39;btnLhb&#39;).classList.remove(&#39;active&#39;);
        document.getElementById(&#39;btnIcf&#39;).classList.remove(&#39;active&#39;);
        if(type === &#39;LHB&#39;) document.getElementById(&#39;btnLhb&#39;).classList.add(&#39;active&#39;);
        if(type === &#39;ICF&#39;) document.getElementById(&#39;btnIcf&#39;).classList.add(&#39;active&#39;);
    }

    function locateSeat() {
        const coach = document.getElementById(&#39;coachType&#39;).value;
        const rawInput = document.getElementById(&#39;seatNumber&#39;).value;
        
        let seats = rawInput.split(&#39;,&#39;).map(s =&gt; parseInt(s.trim())).filter(s =&gt; !isNaN(s) &amp;&amp; s &gt; 0);
        
        if (seats.length === 0) {
            alert(&quot;Please enter at least one valid seat number.&quot;);
            return;
        }

        seats = [...new Set(seats)].sort((a,b) =&gt; a-b);

        // Max Seats Logic
        let maxSeats = 72; 
        if(coach === &#39;3A&#39;) maxSeats = trainType === &#39;LHB&#39; ? 72 : 64; 
        if(coach === &#39;3A&#39; &amp;&amp; seats.some(s =&gt; s &gt; 72)) maxSeats = trainType === &#39;LHB&#39; ? 80 : 72; // Adjust for Sleeper
        if(coach === &#39;2A&#39;) maxSeats = trainType === &#39;LHB&#39; ? 52 : 46;
        if(coach === &#39;CC&#39;) maxSeats = 73;

        const validSeats = seats.filter(s =&gt; s &lt;= maxSeats);
        if(validSeats.length === 0) {
            alert(`Seats exceed maximum capacity (${maxSeats}) for this ${trainType} coach.`);
            return;
        }

        const dash = document.getElementById(&#39;resultDash&#39;);
        dash.classList.add(&#39;active&#39;);

        const resTitle = document.getElementById(&#39;resTitle&#39;);
        const insightList = document.getElementById(&#39;insightList&#39;);
        const mapsContainer = document.getElementById(&#39;mapsContainer&#39;);

        mapsContainer.innerHTML = &#39;&#39;; 
        let insights = &#39;&#39;;

        // --- GROUP INSIGHT LOGIC ---
        let activeCabins = [];
        let divisor = coach === &#39;CC&#39; ? 5 : (coach === &#39;2A&#39; ? 6 : 8);
        
        validSeats.forEach(s =&gt; {
            activeCabins.push(Math.ceil(s / divisor));
        });
        activeCabins = [...new Set(activeCabins)].sort((a,b) =&gt; a-b);

        if (validSeats.length &gt; 1) {
            resTitle.innerHTML = `Group Seating: &lt;span style=&quot;color:var(--primary);&quot;&gt;${validSeats.join(&#39;, &#39;)}&lt;/span&gt;`;
            if (activeCabins.length === 1) {
                insights += `&lt;li class=&quot;good&quot;&gt;&lt;span class=&quot;icon&quot;&gt;🎉&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Perfect Grouping!&lt;/strong&gt;&lt;br&gt;Your entire party is seated together in Cabin ${activeCabins[0]}.&lt;/div&gt;&lt;/li&gt;`;
            } else if (activeCabins.length === 2 &amp;&amp; Math.abs(activeCabins[0] - activeCabins[1]) === 1) {
                insights += `&lt;li class=&quot;warn&quot;&gt;&lt;span class=&quot;icon&quot;&gt;🤝&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Split but close.&lt;/strong&gt;&lt;br&gt;Your group is split across neighboring cabins (${activeCabins.join(&#39; &amp; &#39;)}).&lt;/div&gt;&lt;/li&gt;`;
            } else {
                insights += `&lt;li class=&quot;warn&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚠️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Scattered Group.&lt;/strong&gt;&lt;br&gt;Your group is spread across multiple distant cabins.&lt;/div&gt;&lt;/li&gt;`;
            }
        } else {
            resTitle.innerHTML = `Seat &lt;span style=&quot;color:var(--primary);&quot;&gt;${validSeats[0]}&lt;/span&gt; Details`;
        }

        // --- RENDER EACH ACTIVE CABIN ---
        activeCabins.forEach(cabinNum =&gt; {
            
            let mapHtml = &#39;&#39;;
            let mapClass = &#39;&#39;;
            const startSeat = (cabinNum - 1) * divisor + 1;

            if (coach === &#39;3A&#39;) {
                mapClass = &#39;grid-3a&#39;;
                if(validSeats.length === 1) {
                    const mod = validSeats[0] % 8;
                    if (mod === 1 || mod === 4) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🛏️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Lower Berth (Window)&lt;/strong&gt;&lt;br&gt;Great accessibility.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 2 || mod === 5) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🛌&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Middle Berth&lt;/strong&gt;&lt;br&gt;Foldable during daytime.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 3 || mod === 6) insights += `&lt;li class=&quot;good&quot;&gt;&lt;span class=&quot;icon&quot;&gt;🌙&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Upper Berth&lt;/strong&gt;&lt;br&gt;Ultimate privacy for sleeping anytime.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 7) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🪟&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Side Lower Berth&lt;/strong&gt;&lt;br&gt;Great views, slightly shorter bed.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 0) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🪜&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Side Upper Berth&lt;/strong&gt;&lt;br&gt;Private side window.&lt;/div&gt;&lt;/li&gt;`;
                }
                
                mapHtml += `
                    &lt;div class=&quot;col-bay&quot;&gt;
                        ${genSeat(startSeat, validSeats, &#39;LB&#39;)}
                        ${genSeat(startSeat+1, validSeats, &#39;MB&#39;)}
                        ${genSeat(startSeat+2, validSeats, &#39;UB&#39;)}
                    &lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;
                        ${genSeat(startSeat+3, validSeats, &#39;LB&#39;)}
                        ${genSeat(startSeat+4, validSeats, &#39;MB&#39;)}
                        ${genSeat(startSeat+5, validSeats, &#39;UB&#39;)}
                    &lt;/div&gt;
                    &lt;div class=&quot;aisle-space&quot;&gt;AISLE&lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot; style=&quot;justify-content: flex-start;&quot;&gt;
                        ${genSeat(startSeat+6, validSeats, &#39;SL&#39;)}
                        ${genSeat(startSeat+7, validSeats, &#39;SU&#39;)}
                    &lt;/div&gt;`;
            } 
            else if (coach === &#39;2A&#39;) {
                mapClass = &#39;grid-2a&#39;;
                if(validSeats.length === 1) {
                    const mod = validSeats[0] % 6;
                    if (mod === 1 || mod === 3) insights += `&lt;li class=&quot;good&quot;&gt;&lt;span class=&quot;icon&quot;&gt;🛏️&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Lower Berth&lt;/strong&gt;&lt;br&gt;Spacious, comfortable, great window view.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 2 || mod === 4) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🌙&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Upper Berth&lt;/strong&gt;&lt;br&gt;Excellent privacy with curtains.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 5) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🪟&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Side Lower Berth&lt;/strong&gt;&lt;br&gt;Private window with curtains.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 0) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🪜&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Side Upper Berth&lt;/strong&gt;&lt;br&gt;Cozy and private.&lt;/div&gt;&lt;/li&gt;`;
                }

                mapHtml += `
                    &lt;div class=&quot;col-bay&quot;&gt;
                        ${genSeat(startSeat, validSeats, &#39;LB&#39;)}
                        ${genSeat(startSeat+1, validSeats, &#39;UB&#39;)}
                    &lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;
                        ${genSeat(startSeat+2, validSeats, &#39;LB&#39;)}
                        ${genSeat(startSeat+3, validSeats, &#39;UB&#39;)}
                    &lt;/div&gt;
                    &lt;div class=&quot;aisle-space&quot;&gt;AISLE&lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;
                        ${genSeat(startSeat+4, validSeats, &#39;SL&#39;)}
                        ${genSeat(startSeat+5, validSeats, &#39;SU&#39;)}
                    &lt;/div&gt;`;
            }
            else if (coach === &#39;CC&#39;) {
                mapClass = &#39;grid-cc&#39;;
                if(validSeats.length === 1) {
                    const mod = validSeats[0] % 5;
                    if (mod === 1) insights += `&lt;li class=&quot;good&quot;&gt;&lt;span class=&quot;icon&quot;&gt;🪟&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Window Seat&lt;/strong&gt;&lt;br&gt;3-Seater side.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 2) insights += `&lt;li class=&quot;warn&quot;&gt;&lt;span class=&quot;icon&quot;&gt;😑&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Middle Seat&lt;/strong&gt;&lt;br&gt;Limited armrest space.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 3) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🚶&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Aisle Seat&lt;/strong&gt;&lt;br&gt;3-Seater side.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 4) insights += `&lt;li&gt;&lt;span class=&quot;icon&quot;&gt;🚶&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Aisle Seat&lt;/strong&gt;&lt;br&gt;2-Seater side.&lt;/div&gt;&lt;/li&gt;`;
                    if (mod === 0) insights += `&lt;li class=&quot;good&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⭐&lt;/span&gt; &lt;div&gt;&lt;strong&gt;Window Seat&lt;/strong&gt;&lt;br&gt;2-Seater side. Highly requested.&lt;/div&gt;&lt;/li&gt;`;
                }

                mapHtml += `
                    &lt;div class=&quot;col-bay&quot;&gt;${genSeat(startSeat, validSeats, &#39;W&#39;)}&lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;${genSeat(startSeat+1, validSeats, &#39;M&#39;)}&lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;${genSeat(startSeat+2, validSeats, &#39;A&#39;)}&lt;/div&gt;
                    &lt;div class=&quot;aisle-space&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;${genSeat(startSeat+3, validSeats, &#39;A&#39;)}&lt;/div&gt;
                    &lt;div class=&quot;col-bay&quot;&gt;${genSeat(startSeat+4, validSeats, &#39;W&#39;)}&lt;/div&gt;`;
            }

            const cabinDiv = document.createElement(&#39;div&#39;);
            cabinDiv.className = &#39;map-card&#39;;
            cabinDiv.innerHTML = `
                &lt;div class=&quot;map-title&quot;&gt;${coach === &#39;CC&#39; ? &#39;Row&#39; : &#39;Cabin&#39;} ${cabinNum} &lt;span style=&quot;text-transform:none; color:#94a3b8; font-weight:600;&quot;&gt;(${trainType})&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;window-line&quot;&gt;&lt;div class=&quot;window-glass&quot;&gt;&lt;/div&gt;&lt;/div&gt;
                &lt;div class=&quot;window-line right&quot;&gt;&lt;div class=&quot;window-glass&quot;&gt;&lt;/div&gt;&lt;/div&gt;
                &lt;div class=&quot;cabin-grid ${mapClass}&quot;&gt;${mapHtml}&lt;/div&gt;
            `;
            mapsContainer.appendChild(cabinDiv);
        });

        insightList.innerHTML = insights;
        
        // Scroll into view gently
        setTimeout(() =&gt; {
            dash.scrollIntoView({ behavior: &#39;smooth&#39;, block: &#39;start&#39; });
        }, 100);
    }

    function genSeat(currentSeat, targetSeatsArray, label) {
        if(currentSeat &lt;= 0) return &#39;&#39;;
        const isActive = targetSeatsArray.includes(currentSeat) ? &#39;active&#39; : &#39;&#39;;
        return `&lt;div class=&quot;seat ${isActive}&quot;&gt;
            ${currentSeat}
            &lt;small&gt;${label}&lt;/small&gt;
        &lt;/div&gt;`;
    }
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/6614685440951962535'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/6614685440951962535'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/find-train-berth-and-seating.html' title='Find Train Berth and Seating Arrangement Online'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-5070736821847213965</id><published>2026-03-30T01:07:00.000-07:00</published><updated>2026-03-30T01:07:49.171-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Indian Railway"/><category scheme="http://www.blogger.com/atom/ns#" term="IRCTC"/><title type='text'>IRCTC Ticket Refund Calculator</title><content type='html'>&lt;title&gt;IRCTC Refund Calculator &amp; Tatkal Timers (2026 Rules) - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Calculate your exact IRCTC cancellation refund with the new April 2026 rules. Track live IST countdowns, target journey dates, and check TDR eligibility.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;IRCTC Refund Calculator Online - OTechy&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System (Railway Theme) --- */
    :root { 
        --primary: #2563eb; /* IRCTC Blue */
        --primary-dark: #1e3a8a; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --warning: #f59e0b; --danger: #ef4444;
        --soft-blue: #eff6ff; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 30px 15px 50px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 25px; }
    .new-badge { display: inline-block; background: #fef2f2; color: #b91c1c; padding: 4px 10px; border-radius: 50px; font-size: 10px; font-weight: 800; border: 1px solid #fecaca; margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.5px; }
    .hero-section h1 { font-size: clamp(22px, 5vw, 32px); font-weight: 800; margin: 0 0 8px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    .hero-subtitle { color: var(--accent); font-size: 13px; font-weight: 500; max-width: 600px; margin: 0 auto 20px; }

    /* Timers Grid */
    .timers-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin-bottom: 25px; }
    .timer-card { background: var(--white); border: 1px solid var(--border); border-radius: 12px; padding: 15px; text-align: center; box-shadow: 0 4px 10px rgba(0,0,0,0.02); position: relative; overflow: hidden; display: flex; flex-direction: column; }
    .timer-card::before { content: &#39;&#39;; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background: var(--primary); }
    .timer-card.tatkal-ac::before { background: var(--warning); }
    .timer-card.tatkal-nonac::before { background: var(--danger); }
    
    .t-title { font-size: 14px; font-weight: 800; color: var(--text-dark); text-transform: uppercase; margin-bottom: 2px; }
    .t-sub { font-size: 11px; color: var(--accent); font-weight: 600; margin-bottom: 12px; }
    .t-clock { font-size: 28px; font-weight: 800; font-variant-numeric: tabular-nums; line-height: 1; display: flex; justify-content: center; gap: 6px; margin-bottom: 15px; }
    .t-clock span { color: var(--primary-dark); }
    .t-clock small { font-size: 9px; color: var(--accent); text-transform: uppercase; display: block; margin-top: 3px; font-weight: 700; }
    
    .target-date { margin-top: auto; padding: 8px 10px; background: var(--soft-blue); color: var(--primary-dark); border-radius: 8px; font-size: 12px; font-weight: 700; border: 1px dashed #bfdbfe; }

    /* Calculator Grid */
    .calc-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; box-shadow: 0 8px 20px rgba(37, 99, 235, 0.04); margin-bottom: 25px; }
    .calc-header { font-size: 16px; font-weight: 800; margin: 0 0 15px; color: var(--text-dark); display: flex; align-items: center; gap: 8px; border-bottom: 1px solid var(--border); padding-bottom: 12px; }
    
    .input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-bottom: 20px; }
    .input-group { display: flex; flex-direction: column; }
    .input-group label { font-size: 11px; font-weight: 700; color: var(--accent); text-transform: uppercase; margin-bottom: 6px; }
    
    .form-control { width: 100%; padding: 10px 14px; border-radius: 8px; border: 1px solid #cbd5e1; font-family: var(--font-main); font-size: 13px; font-weight: 600; color: var(--text-dark); outline: none; transition: 0.2s; background: #f8fafc; -webkit-appearance: none; }
    .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); background: #fff; }
    select.form-control { cursor: pointer; background-image: url(&quot;data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23475569%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E&quot;); background-repeat: no-repeat; background-position: right 12px top 50%; background-size: 9px auto; }
    
    .input-wrapper { position: relative; }
    .input-prefix { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--accent); font-weight: 700; font-size: 13px; }
    .input-wrapper .form-control { padding-left: 28px; }

    /* Results Area */
    .result-box { background: var(--text-dark); border-radius: 12px; padding: 20px; color: #fff; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 15px; }
    .res-col { flex: 1; min-width: 140px; }
    .res-lbl { font-size: 10px; font-weight: 600; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }
    .res-val { font-size: 26px; font-weight: 800; line-height: 1; }
    .val-deduct { color: #fca5a5; }
    .val-refund { color: #86efac; }
    .res-note { font-size: 9px; color: #64748b; margin-top: 6px; display: block; line-height: 1.3; }

    /* Sub-Utilities Grid (TDR) */
    .utilities-grid { display: block; max-width: 700px; margin: 0 auto 25px; }
    .utility-card { background: var(--white); padding: 20px; border-radius: 12px; border: 1px solid var(--border); box-shadow: 0 4px 10px rgba(0,0,0,0.02); text-align: center; }
    .util-header { font-size: 14px; font-weight: 800; color: var(--text-dark); margin-bottom: 10px; display: flex; align-items: center; justify-content: center; gap: 6px; }
    .tdr-result { margin-top: 15px; padding: 12px; background: var(--soft-blue); border-radius: 8px; border-left: 4px solid var(--primary); font-size: 11px; font-weight: 600; color: var(--primary-dark); display: none; text-align: left; }

    /* 12 FAQ Section */
    .rules-section { margin-top: 30px; }
    .rules-section h3 { font-size: 18px; font-weight: 850; margin: 0 0 20px; color: var(--text-dark); text-align: center; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 15px; }
    .rule-card { background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); border-top: 3px solid var(--primary); box-shadow: 0 2px 8px rgba(0,0,0,0.02); transition: 0.2s; }
    .rule-card:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(37, 99, 235, 0.05); }
    .rule-card strong { color: var(--primary-dark); display: block; margin-bottom: 6px; font-size: 12px; font-weight: 800; line-height: 1.4; }
    .rule-card p { font-size: 12px; color: var(--accent); margin: 0; line-height: 1.5; font-weight: 500; }

    /* Ads */
    .otechy-ad { background: #e2e8f0; color: #94a3b8; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 10px; margin: 20px 0; width: 100%; }

    @media (max-width: 600px) {
        .otechy-tool-wrapper { padding: 15px 10px; }
        .input-grid { grid-template-columns: 1fr; gap: 12px; }
        .result-box { flex-direction: column; text-align: center; gap: 12px; }
        .res-col { width: 100%; }
        .res-note { text-align: center; }
        .t-clock { font-size: 26px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;new-badge&quot;&gt;IRCTC Toolkit 🇮🇳&lt;/div&gt;
        &lt;h1&gt;IRCTC &lt;span&gt;Refund Calculator&lt;/span&gt;&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Calculate precise refunds using the new 2026 cancellation slabs. Track live IST booking windows and check TDR eligibility.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;timers-grid&quot;&gt;
        &lt;div class=&quot;timer-card&quot;&gt;
            &lt;div class=&quot;t-title&quot;&gt;Advance Booking (60 Days)&lt;/div&gt;
            &lt;div class=&quot;t-sub&quot; id=&quot;win-arp&quot;&gt;🔓 Next Window: Loading...&lt;/div&gt;
            &lt;div class=&quot;t-clock&quot; id=&quot;timer-arp&quot;&gt;
                &lt;div&gt;&lt;span id=&quot;h-arp&quot;&gt;00&lt;/span&gt;&lt;small&gt;Hrs&lt;/small&gt;&lt;/div&gt;:
                &lt;div&gt;&lt;span id=&quot;m-arp&quot;&gt;00&lt;/span&gt;&lt;small&gt;Min&lt;/small&gt;&lt;/div&gt;:
                &lt;div&gt;&lt;span id=&quot;s-arp&quot;&gt;00&lt;/span&gt;&lt;small&gt;Sec&lt;/small&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;target-date&quot; id=&quot;date-arp&quot;&gt;🧳 Journey Date: Loading...&lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;timer-card tatkal-ac&quot;&gt;
            &lt;div class=&quot;t-title&quot;&gt;AC Tatkal Window&lt;/div&gt;
            &lt;div class=&quot;t-sub&quot; id=&quot;win-ac&quot;&gt;🔓 Next Window: Loading...&lt;/div&gt;
            &lt;div class=&quot;t-clock&quot; id=&quot;timer-ac&quot;&gt;
                &lt;div&gt;&lt;span id=&quot;h-ac&quot;&gt;00&lt;/span&gt;&lt;small&gt;Hrs&lt;/small&gt;&lt;/div&gt;:
                &lt;div&gt;&lt;span id=&quot;m-ac&quot;&gt;00&lt;/span&gt;&lt;small&gt;Min&lt;/small&gt;&lt;/div&gt;:
                &lt;div&gt;&lt;span id=&quot;s-ac&quot;&gt;00&lt;/span&gt;&lt;small&gt;Sec&lt;/small&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;target-date&quot; id=&quot;date-ac&quot; style=&quot;background:#fffbeb; color:#b45309; border-color:#fde68a;&quot;&gt;🧳 Journey Date: Loading...&lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;timer-card tatkal-nonac&quot;&gt;
            &lt;div class=&quot;t-title&quot;&gt;Non-AC Tatkal Window&lt;/div&gt;
            &lt;div class=&quot;t-sub&quot; id=&quot;win-nac&quot;&gt;🔓 Next Window: Loading...&lt;/div&gt;
            &lt;div class=&quot;t-clock&quot; id=&quot;timer-nonac&quot;&gt;
                &lt;div&gt;&lt;span id=&quot;h-nac&quot;&gt;00&lt;/span&gt;&lt;small&gt;Hrs&lt;/small&gt;&lt;/div&gt;:
                &lt;div&gt;&lt;span id=&quot;m-nac&quot;&gt;00&lt;/span&gt;&lt;small&gt;Min&lt;/small&gt;&lt;/div&gt;:
                &lt;div&gt;&lt;span id=&quot;s-nac&quot;&gt;00&lt;/span&gt;&lt;small&gt;Sec&lt;/small&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;target-date&quot; id=&quot;date-nac&quot; style=&quot;background:#fef2f2; color:#b91c1c; border-color:#fecaca;&quot;&gt;🧳 Journey Date: Loading...&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;calc-card&quot;&gt;
        &lt;h2 class=&quot;calc-header&quot;&gt;
            &lt;svg width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;2&quot; y=&quot;4&quot; width=&quot;20&quot; height=&quot;16&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;line x1=&quot;2&quot; y1=&quot;10&quot; x2=&quot;22&quot; y2=&quot;10&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            E-Ticket Refund Calculator (2026 Rules)
        &lt;/h2&gt;
        
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Ticket Status&lt;/label&gt;
                &lt;select class=&quot;form-control&quot; id=&quot;inStatus&quot; onchange=&quot;calcRefund()&quot;&gt;
                    &lt;option value=&quot;confirmed&quot;&gt;General - Confirmed&lt;/option&gt;
                    &lt;option value=&quot;rac_wl&quot;&gt;General - RAC / Waitlisted&lt;/option&gt;
                    &lt;option value=&quot;tatkal_conf&quot;&gt;Tatkal - Confirmed&lt;/option&gt;
                    &lt;option value=&quot;tatkal_wl&quot;&gt;Tatkal - RAC / Waitlisted&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Travel Class&lt;/label&gt;
                &lt;select class=&quot;form-control&quot; id=&quot;inClass&quot; onchange=&quot;calcRefund()&quot;&gt;
                    &lt;option value=&quot;1A&quot;&gt;1A / Executive Class&lt;/option&gt;
                    &lt;option value=&quot;2A&quot;&gt;2A / First Class&lt;/option&gt;
                    &lt;option value=&quot;3A&quot;&gt;3A / AC Chair Car / 3E&lt;/option&gt;
                    &lt;option value=&quot;SL&quot;&gt;Sleeper Class (SL)&lt;/option&gt;
                    &lt;option value=&quot;2S&quot;&gt;Second Class (2S)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Time Left Before Departure&lt;/label&gt;
                &lt;select class=&quot;form-control&quot; id=&quot;inTime&quot; onchange=&quot;calcRefund()&quot;&gt;
                    &lt;option value=&quot;72h&quot;&gt;More than 72 Hours&lt;/option&gt;
                    &lt;option value=&quot;24h&quot;&gt;Between 24 to 72 Hours&lt;/option&gt;
                    &lt;option value=&quot;8h&quot;&gt;Between 8 to 24 Hours&lt;/option&gt;
                    &lt;option value=&quot;0h&quot;&gt;Less than 8 Hours (Chart Prepared)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Base Fare (Per Passenger)&lt;/label&gt;
                &lt;div class=&quot;input-wrapper&quot;&gt;
                    &lt;span class=&quot;input-prefix&quot;&gt;&amp;#8377;&lt;/span&gt;
                    &lt;input type=&quot;number&quot; id=&quot;inFare&quot; class=&quot;form-control&quot; value=&quot;1500&quot; min=&quot;0&quot; oninput=&quot;calcRefund()&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;result-box&quot;&gt;
            &lt;div class=&quot;res-col&quot;&gt;
                &lt;div class=&quot;res-lbl&quot;&gt;IRCTC Cancellation Fee&lt;/div&gt;
                &lt;div class=&quot;res-val val-deduct&quot; id=&quot;outFee&quot;&gt;&amp;#8377;0&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;res-col&quot;&gt;
                &lt;div class=&quot;res-lbl&quot;&gt;Estimated Refund&lt;/div&gt;
                &lt;div class=&quot;res-val val-refund&quot; id=&quot;outRefund&quot;&gt;&amp;#8377;0&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;res-col&quot; style=&quot;flex: 0.5; text-align: right;&quot;&gt;
                &lt;span class=&quot;res-note&quot;&gt;*Per passenger.&lt;br&gt;*Excludes GST and convenience fees.&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;utilities-grid&quot;&gt;
        &lt;div class=&quot;utility-card&quot; style=&quot;text-align: center;&quot;&gt;
            &lt;div class=&quot;util-header&quot;&gt;🧾 TDR Eligibility Checker&lt;/div&gt;
            &lt;p style=&quot;font-size: 11px; color: var(--accent); margin-bottom: 12px;&quot;&gt;Select your issue to see if you qualify for a refund after chart preparation.&lt;/p&gt;
            &lt;select class=&quot;form-control&quot; id=&quot;tdrSelect&quot; onchange=&quot;checkTDR()&quot;&gt;
                &lt;option value=&quot;none&quot;&gt;-- Select Reason for TDR --&lt;/option&gt;
                &lt;option value=&quot;delay&quot;&gt;Train delayed by more than 3 hours&lt;/option&gt;
                &lt;option value=&quot;ac_fail&quot;&gt;AC failure in coach&lt;/option&gt;
                &lt;option value=&quot;divert&quot;&gt;Train diverted and passenger not travelling&lt;/option&gt;
                &lt;option value=&quot;partial&quot;&gt;Party partially confirmed, passengers not travelling&lt;/option&gt;
                &lt;option value=&quot;missed&quot;&gt;Missed train due to personal reasons&lt;/option&gt;
            &lt;/select&gt;
            &lt;div class=&quot;tdr-result&quot; id=&quot;tdrOutput&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 20px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;rules-section&quot;&gt;
        &lt;h3&gt;Official IRCTC Cancellation FAQ (Updated April 2026)&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;1. What is the fee to cancel a Confirmed ticket &gt;72 hours before departure?&lt;/strong&gt;
                &lt;p&gt;Under the new rules, a flat fee is deducted: 1st AC/Exec (&amp;#8377;240), 2AC/1st Class (&amp;#8377;200), 3AC/CC (&amp;#8377;180), Sleeper (&amp;#8377;120), and Second Class (&amp;#8377;60).&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;2. What if I cancel between 72 hours and 24 hours before departure?&lt;/strong&gt;
                &lt;p&gt;IRCTC will deduct 25% of the base fare, subject to the minimum flat cancellation charges. (This window was previously 48-12 hrs).&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;3. What is the rule for cancelling between 24 hours and 8 hours?&lt;/strong&gt;
                &lt;p&gt;If you cancel within this tighter window, exactly 50% of the base fare is deducted, again subject to the minimum flat fee limits.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;4. Can I get a refund if I cancel less than 8 hours before the train leaves?&lt;/strong&gt;
                &lt;p&gt;No. Under the stringent April 2026 rules, if a confirmed ticket is cancelled less than 8 hours before scheduled departure, zero refund is granted.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;5. What are the cancellation rules for RAC and Waitlisted (WL) tickets?&lt;/strong&gt;
                &lt;p&gt;You can cancel RAC/WL tickets up to 30 minutes before departure. A flat clerical fee of &amp;#8377;60 (+ GST for AC classes) is deducted per passenger.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;6. Do I get a refund if I cancel a Confirmed Tatkal ticket?&lt;/strong&gt;
                &lt;p&gt;No. IRCTC strictly grants zero refund on the cancellation of confirmed Tatkal tickets under normal circumstances.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;7. What happens if my Tatkal ticket remains Waitlisted (WL)?&lt;/strong&gt;
                &lt;p&gt;If your Tatkal ticket remains waitlisted or RAC, you can cancel it up to 30 minutes before departure. The normal RAC/WL deduction of &amp;#8377;60 applies.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;8. Are Convenience Fees and Payment Gateway charges refunded?&lt;/strong&gt;
                &lt;p&gt;No. IRCTC convenience fees, travel agent charges, and payment gateway transaction charges are strictly non-refundable.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;9. What if my train is fully cancelled by IRCTC?&lt;/strong&gt;
                &lt;p&gt;If the train is cancelled by the Railways (due to weather, technical issues, etc.), an automatic full refund is issued to your bank. No TDR filing is required.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;10. What if my train is delayed by more than 3 hours?&lt;/strong&gt;
                &lt;p&gt;If the train is running late by 3+ hours from your boarding station, you can claim a full refund, but you MUST file a TDR online before actual departure.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;11. What is an Auto-Cancellation for WL E-Tickets?&lt;/strong&gt;
                &lt;p&gt;If your e-ticket remains fully waitlisted even after chart preparation, IRCTC automatically cancels it and processes the refund to your original payment method.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;rule-card&quot;&gt;
                &lt;strong&gt;12. How long does it take for the IRCTC refund to reach my bank?&lt;/strong&gt;
                &lt;p&gt;Once successfully cancelled, IRCTC processes the refund immediately, but it generally takes 3 to 7 working days to reflect in your original account.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px; border-radius: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- 1. NEW 2026 REFUND ENGINE ---
    function calcRefund() {
        const status = document.getElementById(&#39;inStatus&#39;).value;
        const cls = document.getElementById(&#39;inClass&#39;).value;
        const time = document.getElementById(&#39;inTime&#39;).value;
        const fare = parseFloat(document.getElementById(&#39;inFare&#39;).value) || 0;

        let fee = 0;
        let refund = 0;

        // Flat Fees Mapping
        const flatFees = { &#39;1A&#39;: 240, &#39;2A&#39;: 200, &#39;3A&#39;: 180, &#39;SL&#39;: 120, &#39;2S&#39;: 60 };
        const flatFee = flatFees[cls] || 60;

        if (status === &#39;tatkal_conf&#39;) {
            fee = fare;
        } else if (status === &#39;rac_wl&#39; || status === &#39;tatkal_wl&#39;) {
            if (time === &#39;0h&#39;) {
                fee = fare; 
            } else {
                fee = 60;
            }
        } else if (status === &#39;confirmed&#39;) {
            if (time === &#39;72h&#39;) {
                fee = flatFee;
            } else if (time === &#39;24h&#39;) {
                fee = Math.max(flatFee, fare * 0.25);
            } else if (time === &#39;8h&#39;) {
                fee = Math.max(flatFee, fare * 0.50);
            } else if (time === &#39;0h&#39;) {
                fee = fare; 
            }
        }

        if (fee &gt; fare) fee = fare; 
        refund = fare - fee;
        if (refund &lt; 0) refund = 0;

        document.getElementById(&#39;outFee&#39;).innerHTML = `&amp;#8377;${Math.round(fee).toLocaleString(&#39;en-IN&#39;)}`;
        document.getElementById(&#39;outRefund&#39;).innerHTML = `&amp;#8377;${Math.round(refund).toLocaleString(&#39;en-IN&#39;)}`;
    }
    calcRefund(); 

    // --- 2. TDR ELIGIBILITY CHECKER ---
    function checkTDR() {
        const val = document.getElementById(&#39;tdrSelect&#39;).value;
        const output = document.getElementById(&#39;tdrOutput&#39;);
        
        output.style.display = &quot;block&quot;;
        
        if(val === &#39;delay&#39;) {
            output.innerHTML = &quot;✅ &lt;strong&gt;Full Refund Eligible.&lt;/strong&gt; You must file the TDR online before the actual departure of the train from your boarding station.&quot;;
        } else if(val === &#39;ac_fail&#39;) {
            output.innerHTML = &quot;⚠️ &lt;strong&gt;Partial Refund Eligible.&lt;/strong&gt; You will get the difference of fare between AC and Sleeper class. Requires a certificate from the TTE.&quot;;
        } else if(val === &#39;divert&#39;) {
            output.innerHTML = &quot;✅ &lt;strong&gt;Full Refund Eligible.&lt;/strong&gt; File the TDR online up to 72 hours of the scheduled departure.&quot;;
        } else if(val === &#39;partial&#39;) {
            output.innerHTML = &quot;⚠️ &lt;strong&gt;Refund Eligible (Less Clerkage).&lt;/strong&gt; If some passengers are confirmed and others WL/RAC in a family ticket, file TDR up to 30 mins before departure.&quot;;
        } else if(val === &#39;missed&#39;) {
            output.innerHTML = &quot;❌ &lt;strong&gt;No Refund.&lt;/strong&gt; TDR cannot be filed and no refund is granted if you miss a train on a confirmed ticket and chart is prepared.&quot;;
        } else {
            output.style.display = &quot;none&quot;;
        }
    }

    // --- 3. IST LIVE TIMERS &amp; JOURNEY DATES ---
    function getNextTargetIST(targetHour) {
        const now = new Date();
        const utc = now.getTime() + (now.getTimezoneOffset() * 60000);
        const istTime = new Date(utc + (3600000 * 5.5));
        
        let target = new Date(istTime);
        target.setHours(targetHour, 0, 0, 0);

        if (istTime.getTime() &gt; target.getTime()) {
            target.setDate(target.getDate() + 1);
        }
        return { istTime, target };
    }

    function updateTimers() {
        const targets = [
            { id: &#39;arp&#39;, hour: 8, advanceDays: 60, isTatkal: false },
            { id: &#39;ac&#39;, hour: 10, advanceDays: 1, isTatkal: true },
            { id: &#39;nac&#39;, hour: 11, advanceDays: 1, isTatkal: true }
        ];

        const dateOptions = { weekday: &#39;short&#39;, day: &#39;2-digit&#39;, month: &#39;short&#39;, year: &#39;numeric&#39; };

        targets.forEach(t =&gt; {
            const times = getNextTargetIST(t.hour);
            let diff = times.target.getTime() - times.istTime.getTime();

            // Update Countdown
            const h = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            const m = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
            const s = Math.floor((diff % (1000 * 60)) / 1000);

            document.getElementById(`h-${t.id}`).innerText = h.toString().padStart(2, &#39;0&#39;);
            document.getElementById(`m-${t.id}`).innerText = m.toString().padStart(2, &#39;0&#39;);
            document.getElementById(`s-${t.id}`).innerText = s.toString().padStart(2, &#39;0&#39;);

            // Update &quot;Next Window&quot; text
            const ampmStr = t.hour &gt;= 12 ? &#39;PM&#39; : &#39;AM&#39;;
            const displayHour = t.hour &gt; 12 ? t.hour - 12 : t.hour;
            document.getElementById(`win-${t.id}`).innerText = `🔓 Booking Window: ${times.target.toLocaleDateString(&#39;en-IN&#39;, {day:&#39;numeric&#39;, month:&#39;short&#39;})} at ${displayHour}:00 ${ampmStr}`;

            // Update &quot;Journey Date&quot; text
            const journeyDate = new Date(times.target);
            journeyDate.setDate(journeyDate.getDate() + t.advanceDays);
            document.getElementById(`date-${t.id}`).innerText = `🧳 Journey Date: ${journeyDate.toLocaleDateString(&#39;en-IN&#39;, dateOptions)}`;
        });
    }

    // Run immediately and then every second
    updateTimers();
    setInterval(updateTimers, 1000);
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5070736821847213965'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/5070736821847213965'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/irctc-ticket-refund-calculator.html' title='IRCTC Ticket Refund Calculator'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-3877178182119082501</id><published>2026-03-28T10:38:00.000-07:00</published><updated>2026-03-28T11:11:18.439-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Crystal Healing"/><title type='text'>Crystal Studio | Moon Tracker &amp; Chanting Mantras</title><content type='html'>&lt;title&gt;Lunar Crystal Studio | Full Moon Tracker, Expert Database &amp; Vastu - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;The ultimate expert crystal database. Track moon phases, explore 80+ stones with rarity, intensity, pairings, Vastu, and Chakras.&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,850;1,500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #8b5cf6; --primary-dark: #6d28d9; 
        --text-dark: #0f172a; --accent: #475569; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-purple: #f3e8ff; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1200px; margin: 0 auto; padding: 40px 20px 60px; }
    
    /* Hero Section */
    .hero-section { text-align: center; margin-bottom: 20px; position: relative; padding: 50px 20px; background: linear-gradient(135deg, var(--soft-purple) 0%, #ffffff 100%); border-radius: 24px; border: 1px solid var(--border); box-shadow: 0 10px 30px rgba(139, 92, 246, 0.05); }
    .moon-orb { width: 80px; height: 80px; border-radius: 50%; margin: 0 auto 15px; position: relative; background: radial-gradient(circle at 30% 30%, #ffffff, #fef08a, #eab308); box-shadow: 0 0 30px rgba(250, 204, 21, 0.4), inset -8px -8px 15px rgba(0,0,0,0.1); }
    .crater { position: absolute; background: rgba(0,0,0,0.05); border-radius: 50%; }
    .hero-section h1 { font-size: clamp(24px, 5vw, 36px); font-weight: 850; margin: 0 0 10px 0; letter-spacing: -0.5px; }
    .hero-section h1 span { color: var(--primary); }
    
    /* Countdown &amp; Phase */
    .countdown-box { display: inline-flex; gap: 15px; background: var(--white); padding: 10px 20px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 4px 15px rgba(0,0,0,0.03); margin-bottom: 20px; }
    .time-block { display: flex; flex-direction: column; align-items: center; min-width: 50px; }
    .time-val { font-size: 24px; font-weight: 850; color: var(--primary); line-height: 1; }
    .time-lbl { font-size: 10px; font-weight: 700; text-transform: uppercase; color: var(--accent); letter-spacing: 1px; margin-top: 5px; }
    .time-sep { font-size: 24px; font-weight: 850; color: var(--border); line-height: 1; }
    
    .recommendation-banner { background: #fffbeb; border: 1px solid #fde68a; color: #b45309; padding: 12px 20px; border-radius: 12px; font-size: 13px; font-weight: 600; display: inline-block; max-width: 800px; margin: 0 auto; box-shadow: 0 4px 10px rgba(245, 158, 11, 0.05); }
    .recommendation-banner strong { color: #92400e; }

    /* Controls */
    .controls-area { margin: 30px 0; display: flex; flex-direction: column; gap: 20px; align-items: center; }
    .search-bar { width: 100%; max-width: 500px; position: relative; }
    .search-bar input { width: 100%; padding: 14px 20px 14px 45px; border-radius: 50px; border: 2px solid var(--border); font-family: var(--font-main); font-size: 14px; font-weight: 500; outline: none; transition: 0.2s; box-shadow: 0 4px 15px rgba(0,0,0,0.02); }
    .search-bar input:focus { border-color: var(--primary); box-shadow: 0 0 0 4px rgba(139, 92, 246, 0.1); }
    .search-icon { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: var(--accent); }

    .filter-bar { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; max-width: 1000px; }
    .filter-btn { background: var(--white); border: 1px solid var(--border); color: var(--accent); padding: 6px 14px; border-radius: 50px; font-family: var(--font-main); font-weight: 600; font-size: 11px; cursor: pointer; transition: 0.2s; text-transform: uppercase; letter-spacing: 0.5px; }
    .filter-btn:hover { border-color: var(--primary); color: var(--primary); background: var(--soft-purple); }
    .filter-btn.active { background: var(--text-dark); color: #fff; border-color: var(--text-dark); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
    .btn-fav { color: #ef4444; border-color: #fecaca; background: #fef2f2; }
    .btn-fav.active { background: #ef4444; color: #fff; border-color: #ef4444; }

    /* Crystal Grid */
    .crystal-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 25px; }
    .crystal-card { background: var(--white); border-radius: 16px; border: 1px solid var(--border); padding: 25px; transition: 0.3s; position: relative; overflow: hidden; box-shadow: 0 4px 12px rgba(0,0,0,0.02); display: flex; flex-direction: column; }
    .crystal-card:hover { transform: translateY(-4px); border-color: var(--primary); box-shadow: 0 12px 25px rgba(139, 92, 246, 0.08); }
    
    .card-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 10px; }
    .crystal-name { font-size: 20px; font-weight: 850; margin: 0; color: var(--text-dark); letter-spacing: -0.5px; display: flex; align-items: center; gap: 10px; }
    .crystal-color-tag { width: 16px; height: 16px; border-radius: 50%; border: 1px solid rgba(0,0,0,0.1); box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
    
    .fav-icon { cursor: pointer; font-size: 22px; color: var(--border); transition: 0.2s; user-select: none; }
    .fav-icon.is-fav { color: #ef4444; }
    .fav-icon:hover { transform: scale(1.1); }
    
    .expert-badges { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
    .badge-intensity { font-size: 9px; font-weight: 800; text-transform: uppercase; padding: 4px 8px; border-radius: 4px; background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
    .badge-intensity.gentle { background: #f0fdf4; color: #15803d; border-color: #bbf7d0; }
    .badge-intensity.medium { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
    .badge-intensity.extreme { background: #1e293b; color: #fff; border-color: #000; }
    
    .badge-rarity { font-size: 9px; font-weight: 800; text-transform: uppercase; padding: 4px 8px; border-radius: 4px; background: #fffbeb; color: #b45309; border: 1px solid #fde68a; }
    .badge-rarity.premium { background: #fdf4ff; color: #a21caf; border-color: #fae8ff; }
    
    .intent-wrap { margin-bottom: 15px; }
    .intent-tag { display: inline-block; font-size: 10px; font-weight: 800; text-transform: uppercase; padding: 5px 12px; border-radius: 6px; background: var(--text-dark); color: #fff; margin: 0 4px 4px 0; }
    
    .meta-tags { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 20px; }
    .m-tag { font-size: 9px; font-weight: 700; text-transform: uppercase; background: #f1f5f9; color: var(--accent); padding: 4px 10px; border-radius: 4px; border: 1px solid var(--border); display: inline-flex; align-items: center; gap: 4px; }

    /* Expanded Info Boxes */
    .info-group { margin-bottom: 15px; font-size: 13px; line-height: 1.6; background: #f8fafc; padding: 15px; border-radius: 10px; border: 1px solid var(--border); flex-grow: 1; }
    .vastu-group { background: #eff6ff; border-color: #bfdbfe; }
    .info-lbl { color: var(--primary-dark); font-weight: 800; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
    .vastu-group .info-lbl { color: #1e3a8a; }
    .info-val { color: var(--text-dark); font-weight: 500; }

    .mantra-box { background: var(--soft-purple); border-left: 4px solid var(--primary); padding: 10px 15px; border-radius: 0 8px 8px 0; margin-bottom: 15px; }
    .mantra-lbl { font-size: 9px; font-weight: 800; color: var(--primary-dark); text-transform: uppercase; margin-bottom: 2px; display: block; }
    .mantra-txt { font-size: 13px; font-style: italic; color: var(--text-dark); font-weight: 700; }

    .pairings-box { font-size: 11px; font-weight: 600; color: var(--accent); padding: 10px; background: #f1f5f9; border-radius: 8px; margin-bottom: 15px; border: 1px dashed var(--border); }
    .pairings-box strong { color: var(--text-dark); }

    .cleanse-tags { display: flex; gap: 8px; margin-top: auto; border-top: 1px dashed var(--border); padding-top: 15px; flex-wrap: wrap; }
    .c-tag { font-size: 10px; padding: 6px 10px; border-radius: 6px; display: flex; align-items: center; gap: 6px; font-weight: 700; border: 1px solid transparent; }
    .c-water-no { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }
    .c-water-yes { background: #f0fdf4; color: #15803d; border-color: #bbf7d0; }
    .c-sun-no { background: #fffbeb; color: #b45309; border-color: #fde68a; }

    .otechy-ad { background: #e2e8f0; color: #94a3b8; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 12px; margin: 25px 0; width: 100%; }

    @media (max-width: 768px) {
        .otechy-tool-wrapper { padding: 20px 15px; }
        .crystal-grid { grid-template-columns: 1fr; }
        .countdown-box { padding: 10px 12px; gap: 8px; width: 100%; max-width: 320px; justify-content: center; }
        .time-block { min-width: 40px; }
        .time-val { font-size: 20px; }
        .time-sep { font-size: 20px; }
        .time-lbl { font-size: 9px; letter-spacing: 0.5px; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;hero-section&quot;&gt;
        &lt;div class=&quot;moon-orb&quot;&gt;
            &lt;div class=&quot;crater&quot; style=&quot;width: 14px; height: 14px; top: 25%; left: 20%;&quot;&gt;&lt;/div&gt;
            &lt;div class=&quot;crater&quot; style=&quot;width: 20px; height: 20px; top: 50%; left: 55%;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;h1&gt;Expert &lt;span&gt;Crystal&lt;/span&gt; Studio&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Harness the peak energy of the lunar cycle (IST Synchronized). Track moon phases, explore an 80+ expert-level database with rarity, pairings, and Vastu placements.&lt;/p&gt;
        
        &lt;div class=&quot;countdown-box&quot;&gt;
            &lt;div class=&quot;time-block&quot;&gt;&lt;span class=&quot;time-val&quot; id=&quot;cd-days&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;time-lbl&quot;&gt;Days&lt;/span&gt;&lt;/div&gt;
            &lt;div class=&quot;time-sep&quot;&gt;:&lt;/div&gt;
            &lt;div class=&quot;time-block&quot;&gt;&lt;span class=&quot;time-val&quot; id=&quot;cd-hours&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;time-lbl&quot;&gt;Hours&lt;/span&gt;&lt;/div&gt;
            &lt;div class=&quot;time-sep&quot;&gt;:&lt;/div&gt;
            &lt;div class=&quot;time-block&quot;&gt;&lt;span class=&quot;time-val&quot; id=&quot;cd-mins&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;time-lbl&quot;&gt;Mins&lt;/span&gt;&lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div id=&quot;moonBanner&quot; class=&quot;recommendation-banner&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;controls-area&quot;&gt;
        &lt;div class=&quot;search-bar&quot;&gt;
            &lt;svg class=&quot;search-icon&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;21&quot; y1=&quot;21&quot; x2=&quot;16.65&quot; y2=&quot;16.65&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
            &lt;input type=&quot;text&quot; id=&quot;searchInput&quot; placeholder=&quot;Search 80+ crystals by name, chakra, pairings or property...&quot; oninput=&quot;handleSearch()&quot;&gt;
        &lt;/div&gt;

        &lt;div class=&quot;filter-bar&quot; id=&quot;filterBar&quot;&gt;
            &lt;button class=&quot;filter-btn active&quot; onclick=&quot;setFilter(&#39;All&#39;)&quot;&gt;All Stones&lt;/button&gt;
            &lt;button class=&quot;filter-btn btn-fav&quot; onclick=&quot;setFilter(&#39;Favorites&#39;)&quot;&gt;❤️ Collection&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Spiritual&#39;)&quot;&gt;🧿 Spiritual&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Manifestation&#39;)&quot;&gt;🌟 Manifestation&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Energy&#39;)&quot;&gt;⚡ Energy &amp; Vitality&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Workspace&#39;)&quot;&gt;💼 Workspace&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Love&#39;)&quot;&gt;💖 Love&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Harmony&#39;)&quot;&gt;🕊️ Harmony&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Wealth&#39;)&quot;&gt;💰 Wealth&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Protection&#39;)&quot;&gt;🛡️ Protection&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Shadow Work&#39;)&quot;&gt;🌑 Shadow Work&lt;/button&gt;
            &lt;button class=&quot;filter-btn&quot; onclick=&quot;setFilter(&#39;Healing&#39;)&quot;&gt;🌿 Healing&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;crystal-grid&quot; id=&quot;crystalGrid&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    let currentFilter = &#39;All&#39;;
    let searchQuery = &#39;&#39;;
    let userFavorites = JSON.parse(localStorage.getItem(&#39;otechy_crystal_favs&#39;)) || [];

    function calculateNextFullMoon() {
        const LUNAR_MONTH_MS = 29.53058770576 * 24 * 60 * 60 * 1000;
        const knownFullMoon = new Date(&#39;2026-03-03T11:38:00Z&#39;).getTime();
        const now = new Date().getTime();
        let nextMoonMs = knownFullMoon;
        while(nextMoonMs &lt; now) { nextMoonMs += LUNAR_MONTH_MS; }
        return new Date(nextMoonMs);
    }

    function updateLunarLogic() {
        const nextMoon = calculateNextFullMoon();
        const diff = nextMoon - new Date();
        const days = Math.floor(diff / (1000 * 60 * 60 * 24));
        const hours = Math.floor((diff / (1000 * 60 * 60)) % 24);
        const mins = Math.floor((diff / 1000 / 60) % 60);

        document.getElementById(&#39;cd-days&#39;).innerText = days.toString().padStart(2, &#39;0&#39;);
        document.getElementById(&#39;cd-hours&#39;).innerText = hours.toString().padStart(2, &#39;0&#39;);
        document.getElementById(&#39;cd-mins&#39;).innerText = mins.toString().padStart(2, &#39;0&#39;);

        const banner = document.getElementById(&#39;moonBanner&#39;);
        if (days &lt;= 3) {
            banner.innerHTML = `🌕 &lt;strong&gt;Approaching Full Moon:&lt;/strong&gt; Energy is at its absolute peak. Wash, cleanse, and charge your crystals on the windowsill. &lt;br&gt;&lt;em&gt;Recommended: Selenite, Clear Quartz, Moonstone, Moldavite.&lt;/em&gt;`;
        } else if (days &gt;= 13 &amp;&amp; days &lt;= 17) {
            banner.innerHTML = `🌑 &lt;strong&gt;New Moon Phase:&lt;/strong&gt; A quiet time for planting seeds and setting fresh intentions. &lt;br&gt;&lt;em&gt;Recommended: Citrine, Pyrite, Green Aventurine, Herkimer Diamond.&lt;/em&gt;`;
        } else if (days &gt; 3 &amp;&amp; days &lt; 13) {
            banner.innerHTML = `🌖 &lt;strong&gt;Waxing Phase:&lt;/strong&gt; Lunar energy is building. Focus on manifestation, career growth, and taking action. &lt;br&gt;&lt;em&gt;Recommended: Carnelian, Tiger&#39;s Eye, Ruby.&lt;/em&gt;`;
        } else {
            banner.innerHTML = `🌘 &lt;strong&gt;Waning Phase:&lt;/strong&gt; Lunar energy is releasing. Focus on banishing bad habits, spiritual protection, and letting go. &lt;br&gt;&lt;em&gt;Recommended: Black Obsidian, Amethyst, Nuummite.&lt;/em&gt;`;
        }
    }
    setInterval(updateLunarLogic, 60000);
    updateLunarLogic();

    // ULTIMATE 82 CRYSTAL DATABASE
    const crystalDB = [
        // PREMIUM &amp; EXPERT LEVEL (Added Recent)
        { name: &quot;Rhodochrosite&quot;, color: &quot;#f43f5e&quot;, intent: [&quot;Love&quot;, &quot;Shadow Work&quot;, &quot;Healing&quot;], mantra: &quot;I release old wounds and embrace self-love.&quot;, properties: &quot;The ultimate stone for deep emotional healing and inner-child work. It brings repressed emotions to the surface to be acknowledged and released.&quot;, vastu: &quot;Keep in personal safe spaces or meditation areas.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;, &quot;Solar Plexus&quot;], zodiac: [&quot;Scorpio&quot;, &quot;Leo&quot;], element: [&quot;Fire&quot;, &quot;Water&quot;], rarity: &quot;Premium&quot;, intensity: &quot;High&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Malachite&quot;] },
        { name: &quot;Emerald&quot;, color: &quot;#059669&quot;, intent: [&quot;Wealth&quot;, &quot;Love&quot;, &quot;Healing&quot;], mantra: &quot;I am aligned with luxurious abundance.&quot;, properties: &quot;A premium stone associated with long-term wealth, luxury, and heart-centered abundance. It ensures domestic bliss and loyalty.&quot;, vastu: &quot;Place in the North for wealth, or South-West for loyal love.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;], zodiac: [&quot;Taurus&quot;, &quot;Cancer&quot;, &quot;Gemini&quot;], element: [&quot;Earth&quot;], rarity: &quot;Premium&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Citrine&quot;, &quot;Diamond&quot;] },
        { name: &quot;Ruby&quot;, color: &quot;#e11d48&quot;, intent: [&quot;Energy&quot;, &quot;Wealth&quot;, &quot;Protection&quot;], mantra: &quot;I lead with passion and unshakeable power.&quot;, properties: &quot;Injects raw life force, courage, and leadership into the aura. An intense stone that protects wealth and vitality.&quot;, vastu: &quot;South direction to ignite fame, power, and physical stamina.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Heart&quot;], zodiac: [&quot;Cancer&quot;, &quot;Leo&quot;, &quot;Sagittarius&quot;], element: [&quot;Fire&quot;], rarity: &quot;Premium&quot;, intensity: &quot;Extreme&quot;, pairings: [&quot;Garnet&quot;, &quot;Carnelian&quot;] },
        { name: &quot;Morganite&quot;, color: &quot;#fbcfe8&quot;, intent: [&quot;Love&quot;, &quot;Healing&quot;], mantra: &quot;I am worthy of divine, enduring love.&quot;, properties: &quot;A premium form of Beryl. Provides divine love, heart healing, and attracts an abundance of romantic and self-love.&quot;, vastu: &quot;Master bedroom or personal altar.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;], zodiac: [&quot;Libra&quot;], element: [&quot;Water&quot;], rarity: &quot;Premium&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Emerald&quot;, &quot;Rose Quartz&quot;] },
        { name: &quot;Moldavite&quot;, color: &quot;#166534&quot;, intent: [&quot;Manifestation&quot;, &quot;Spiritual&quot;, &quot;Shadow Work&quot;], mantra: &quot;I accelerate my ultimate transformation.&quot;, properties: &quot;Extremely high-frequency tektite known for rapid life changes, synchronicity, and the intense &#39;Moldavite flush&#39;.&quot;, vastu: &quot;Personal altar only. Use with caution.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Crown&quot;], zodiac: [&quot;Scorpio&quot;, &quot;All&quot;], element: [&quot;Storm&quot;], rarity: &quot;Premium&quot;, intensity: &quot;Extreme&quot;, pairings: [&quot;Herkimer Diamond&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Nuummite&quot;, color: &quot;#1f2937&quot;, intent: [&quot;Shadow Work&quot;, &quot;Protection&quot;], mantra: &quot;I master my shadows and reclaim my power.&quot;, properties: &quot;The &#39;Sorcerer&#39;s Stone&#39;. An ancient stone that aids in deep shadow work, cutting ties, and intense personal power reclamation.&quot;, vastu: &quot;Meditation space during intense self-reflection.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Earth Star&quot;], zodiac: [&quot;Scorpio&quot;], element: [&quot;Earth&quot;, &quot;Storm&quot;], rarity: &quot;Rare&quot;, intensity: &quot;Extreme&quot;, pairings: [&quot;Moldavite&quot;, &quot;Labradorite&quot;] },
        { name: &quot;Aegirine&quot;, color: &quot;#0f172a&quot;, intent: [&quot;Protection&quot;, &quot;Shadow Work&quot;], mantra: &quot;I sever all toxic psychic attachments.&quot;, properties: &quot;One of the strongest psychic protection stones in existence. Excellent for removing negative entities and repairing the aura.&quot;, vastu: &quot;Near entrance or carried on the person.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Taurus&quot;], element: [&quot;Earth&quot;, &quot;Fire&quot;], rarity: &quot;Rare&quot;, intensity: &quot;Extreme&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Smoky Quartz&quot;] },
        { name: &quot;Aragonite&quot;, color: &quot;#d97706&quot;, intent: [&quot;Workspace&quot;, &quot;Healing&quot;, &quot;Protection&quot;], mantra: &quot;I release stress and anchor into the present.&quot;, properties: &quot;Extreme grounding and discipline. Excellent for curing burnout, overthinking, and &#39;developer brain&#39; exhaustion.&quot;, vastu: &quot;Directly on the workspace or under the desk.&quot;, water: false, sun: true, chakra: [&quot;Root&quot;, &quot;Earth Star&quot;], zodiac: [&quot;Capricorn&quot;, &quot;Earth Signs&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Hematite&quot;, &quot;Black Tourmaline&quot;] },
        { name: &quot;Lepidocrocite&quot;, color: &quot;#b91c1c&quot;, intent: [&quot;Spiritual&quot;, &quot;Manifestation&quot;], mantra: &quot;I am a clear channel for spiritual growth.&quot;, properties: &quot;Often found in Super Seven. A spiritual and manifestation hybrid that bridges the physical and etheric bodies.&quot;, vastu: &quot;Meditation areas or worn as jewelry.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Crown&quot;], zodiac: [&quot;Sagittarius&quot;], element: [&quot;Air&quot;, &quot;Fire&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Shattuckite&quot;, color: &quot;#0284c7&quot;, intent: [&quot;Spiritual&quot;, &quot;Workspace&quot;], mantra: &quot;I speak profound truth with total clarity.&quot;, properties: &quot;A rare stone of truth, communication, and intuition. Connects to inner wisdom and clears throat blockages.&quot;, vastu: &quot;Communication zones or podcasting/recording desks.&quot;, water: false, sun: false, chakra: [&quot;Throat&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Aquarius&quot;, &quot;Sagittarius&quot;], element: [&quot;Water&quot;, &quot;Air&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Chrysocolla&quot;, &quot;Turquoise&quot;] },
        { name: &quot;Thulite&quot;, color: &quot;#be123c&quot;, intent: [&quot;Love&quot;, &quot;Harmony&quot;, &quot;Energy&quot;], mantra: &quot;I am confident, joyful, and expressive.&quot;, properties: &quot;Fosters confidence and eloquent love expression. Excellent for overcoming social anxiety and performing in public.&quot;, vastu: &quot;Living room or social gathering spaces.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Sacral&quot;], zodiac: [&quot;Taurus&quot;, &quot;Gemini&quot;], element: [&quot;Water&quot;, &quot;Fire&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Rhodonite&quot;] },
        { name: &quot;Spinel&quot;, color: &quot;#111827&quot;, intent: [&quot;Energy&quot;, &quot;Healing&quot;, &quot;Protection&quot;], mantra: &quot;I am restored, renewed, and revitalized.&quot;, properties: &quot;An incredibly underrated stone for rapid energy restoration after severe burnout. Revitalizes all chakras.&quot;, vastu: &quot;Bedroom or personal recovery space.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Crown&quot;], zodiac: [&quot;Aries&quot;, &quot;Sagittarius&quot;], element: [&quot;Fire&quot;], rarity: &quot;Premium&quot;, intensity: &quot;High&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Black Tourmaline&quot;] },
        { name: &quot;Seraphinite&quot;, color: &quot;#065f46&quot;, intent: [&quot;Spiritual&quot;, &quot;Wealth&quot;], mantra: &quot;I align with angelic healing and grace.&quot;, properties: &quot;High-frequency wealth and spiritual alignment. Promotes living from the heart and connects to higher angelic frequencies.&quot;, vastu: &quot;Meditation areas.&quot;, water: false, sun: false, chakra: [&quot;Heart&quot;, &quot;Crown&quot;], zodiac: [&quot;Sagittarius&quot;], element: [&quot;Air&quot;, &quot;Light&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Angelite&quot;, &quot;Celestite&quot;] },
        { name: &quot;Herkimer Diamond&quot;, color: &quot;#f8fafc&quot;, intent: [&quot;Manifestation&quot;, &quot;Spiritual&quot;], mantra: &quot;I amplify divine clarity.&quot;, properties: &quot;Ultra-high vibration double-terminated quartz. Boosts manifestation, spiritual clarity, and acts as a powerful attunement stone.&quot;, vastu: &quot;Meditation or manifestation space.&quot;, water: true, sun: true, chakra: [&quot;Crown&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Sagittarius&quot;], element: [&quot;Light&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Moldavite&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Libyan Desert Glass&quot;, color: &quot;#facc15&quot;, intent: [&quot;Manifestation&quot;, &quot;Spiritual&quot;, &quot;Protection&quot;], mantra: &quot;I channel cosmic power.&quot;, properties: &quot;Ancient impact glass linked to solar energy, fierce manifestation, and guarding against energy vampires.&quot;, vastu: &quot;Sacred or manifestation space.&quot;, water: true, sun: true, chakra: [&quot;Solar Plexus&quot;, &quot;Sacral&quot;], zodiac: [&quot;Leo&quot;, &quot;Aries&quot;], element: [&quot;Fire&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Moldavite&quot;, &quot;Sunstone&quot;] },

        // THE CORE 18 STONES
        { name: &quot;Clear Quartz&quot;, color: &quot;#f8fafc&quot;, intent: [&quot;Workspace&quot;, &quot;Manifestation&quot;, &quot;Healing&quot;], mantra: &quot;Om. I am clear, focused, and aligned.&quot;, properties: &quot;The &#39;Master Healer&#39;, acting as a powerful amplifier for other crystals and intentions. Clears mental fog.&quot;, vastu: &quot;North-East corner of your desk.&quot;, water: true, sun: true, chakra: [&quot;Crown&quot;, &quot;All&quot;], zodiac: [&quot;All&quot;], element: [&quot;Light&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;All Stones&quot;] },
        { name: &quot;Amethyst&quot;, color: &quot;#a855f7&quot;, intent: [&quot;Spiritual&quot;, &quot;Healing&quot;, &quot;Shadow Work&quot;], mantra: &quot;Sham. I am peaceful and intuitively guided.&quot;, properties: &quot;A natural tranquilizer. Relieves daily stress, balances extreme mood swings, and awakens the Third Eye.&quot;, vastu: &quot;West or North-West zones.&quot;, water: true, sun: false, chakra: [&quot;Crown&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Aquarius&quot;, &quot;Pisces&quot;], element: [&quot;Air&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Rose Quartz&quot;] },
        { name: &quot;Rose Quartz&quot;, color: &quot;#fbcfe8&quot;, intent: [&quot;Love&quot;, &quot;Harmony&quot;, &quot;Healing&quot;], mantra: &quot;Yam. I open my heart to unconditional love.&quot;, properties: &quot;The ultimate stone of universal love. Restores trust, encourages compassion, and emits a soothing frequency.&quot;, vastu: &quot;South-West of the master bedroom.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;], zodiac: [&quot;Taurus&quot;, &quot;Libra&quot;], element: [&quot;Water&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Amethyst&quot;, &quot;Rhodochrosite&quot;] },
        { name: &quot;Citrine&quot;, color: &quot;#facc15&quot;, intent: [&quot;Wealth&quot;, &quot;Manifestation&quot;, &quot;Energy&quot;], mantra: &quot;Ram. I attract abundance and manifest joy.&quot;, properties: &quot;The &#39;Merchant&#39;s Stone&#39;. Actively attracts wealth, prosperity, and success while encouraging generosity.&quot;, vastu: &quot;Cash box, safe, or North corner.&quot;, water: true, sun: false, chakra: [&quot;Solar Plexus&quot;], zodiac: [&quot;Aries&quot;, &quot;Leo&quot;, &quot;Libra&quot;], element: [&quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Green Aventurine&quot;, &quot;Pyrite&quot;] },
        { name: &quot;Pyrite&quot;, color: &quot;#d4af37&quot;, intent: [&quot;Workspace&quot;, &quot;Wealth&quot;, &quot;Energy&quot;], mantra: &quot;Ram. I am confident, active, and successful.&quot;, properties: &quot;A fierce stone of action and willpower. Taps into potential, fueling unyielding ambition and rapid success.&quot;, vastu: &quot;South-East corner of desk.&quot;, water: false, sun: true, chakra: [&quot;Solar Plexus&quot;], zodiac: [&quot;Leo&quot;], element: [&quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Citrine&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Carnelian&quot;, color: &quot;#ea580c&quot;, intent: [&quot;Energy&quot;, &quot;Healing&quot;, &quot;Workspace&quot;], mantra: &quot;Vam. I am full of creative energy.&quot;, properties: &quot;Restores lost vitality, supercharges motivation, and actively stimulates raw creativity and physical stamina.&quot;, vastu: &quot;South sector to ignite passion.&quot;, water: true, sun: true, chakra: [&quot;Sacral&quot;, &quot;Root&quot;], zodiac: [&quot;Cancer&quot;, &quot;Leo&quot;], element: [&quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Ruby&quot;, &quot;Tiger&#39;s Eye&quot;] },
        { name: &quot;Tiger&#39;s Eye&quot;, color: &quot;#78350f&quot;, intent: [&quot;Wealth&quot;, &quot;Protection&quot;, &quot;Energy&quot;], mantra: &quot;I am strong, decisive, and protected.&quot;, properties: &quot;Enhances integrity, iron willpower, and strategic financial decision-making while grounding solar energy.&quot;, vastu: &quot;South zone of living space or office.&quot;, water: true, sun: true, chakra: [&quot;Solar Plexus&quot;, &quot;Root&quot;], zodiac: [&quot;Capricorn&quot;, &quot;Leo&quot;], element: [&quot;Earth&quot;, &quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Pyrite&quot;, &quot;Carnelian&quot;] },
        { name: &quot;Black Tourmaline&quot;, color: &quot;#0f172a&quot;, intent: [&quot;Protection&quot;, &quot;Shadow Work&quot;], mantra: &quot;Lam. I am heavily protected and secure.&quot;, properties: &quot;A premier grounding stone that absorbs and completely repels negative energy, psychic attacks, and EMF.&quot;, vastu: &quot;Near main entrance or Wi-Fi routers.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Libra&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Smoky Quartz&quot;, &quot;Selenite&quot;] },
        { name: &quot;Obsidian (Black)&quot;, color: &quot;#020617&quot;, intent: [&quot;Shadow Work&quot;, &quot;Protection&quot;], mantra: &quot;I am shielded from negativity.&quot;, properties: &quot;A fiercely truth-enhancing stone. Acts as a spiritual vacuum, absorbing negative energies and severing toxic ties.&quot;, vastu: &quot;Near front door or South-West corner.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Scorpio&quot;, &quot;Sagittarius&quot;], element: [&quot;Earth&quot;, &quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Nuummite&quot;] },
        { name: &quot;Selenite&quot;, color: &quot;#ffffff&quot;, intent: [&quot;Healing&quot;, &quot;Spiritual&quot;], mantra: &quot;I am surrounded by pure white light.&quot;, properties: &quot;Liquid Light. Instantly cleanses the aura and clears blocked energy. Never needs to be charged.&quot;, vastu: &quot;Use as a charging plate anywhere.&quot;, water: false, sun: true, chakra: [&quot;Crown&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Taurus&quot;], element: [&quot;Air&quot;, &quot;Light&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Labradorite&quot;, color: &quot;#4f46e5&quot;, intent: [&quot;Spiritual&quot;, &quot;Protection&quot;], mantra: &quot;I embrace my inner wisdom.&quot;, properties: &quot;Mystical stone of transformation. Creates a protective shield for auras and banishes deep-rooted fears.&quot;, vastu: &quot;Bedside table for dream recall.&quot;, water: true, sun: false, chakra: [&quot;Third Eye&quot;, &quot;Crown&quot;], zodiac: [&quot;Leo&quot;, &quot;Scorpio&quot;], element: [&quot;Water&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Moonstone&quot;, &quot;Nuummite&quot;] },
        { name: &quot;Fluorite&quot;, color: &quot;#a7f3d0&quot;, intent: [&quot;Workspace&quot;, &quot;Healing&quot;], mantra: &quot;I am organized and open to magic.&quot;, properties: &quot;The &#39;Genius Stone&#39;. Unmatched in clearing mental confusion and uncluttering a messy mind.&quot;, vastu: &quot;Next to computer monitors.&quot;, water: false, sun: false, chakra: [&quot;Heart&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Capricorn&quot;, &quot;Pisces&quot;], element: [&quot;Air&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Amethyst&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Malachite&quot;, color: &quot;#047857&quot;, intent: [&quot;Wealth&quot;, &quot;Healing&quot;, &quot;Shadow Work&quot;], mantra: &quot;I welcome positive transformation.&quot;, properties: &quot;Aggressively absorbs toxic energies and transforms wealth paths. Demands respect and frequent cleansing.&quot;, vastu: &quot;East or South-East.&quot;, water: false, sun: false, chakra: [&quot;Heart&quot;, &quot;Throat&quot;], zodiac: [&quot;Scorpio&quot;, &quot;Capricorn&quot;], element: [&quot;Earth&quot;, &quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Rhodochrosite&quot;, &quot;Tiger&#39;s Eye&quot;] },
        { name: &quot;Garnet&quot;, color: &quot;#7f1d1d&quot;, intent: [&quot;Energy&quot;, &quot;Wealth&quot;, &quot;Love&quot;], mantra: &quot;I am passionate and successful.&quot;, properties: &quot;Intensely revitalizing. Brings serenity or passion as appropriate, boosting career drive and business success.&quot;, vastu: &quot;South sector of home or office.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Heart&quot;], zodiac: [&quot;Aries&quot;, &quot;Leo&quot;, &quot;Virgo&quot;], element: [&quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Ruby&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Sunstone&quot;, color: &quot;#fb923c&quot;, intent: [&quot;Energy&quot;, &quot;Wealth&quot;, &quot;Manifestation&quot;], mantra: &quot;I radiate success and joy.&quot;, properties: &quot;A joyful, light-inspiring stone. Heightens intuition, and is strongly linked to luck, leadership, and abundance.&quot;, vastu: &quot;South direction.&quot;, water: true, sun: true, chakra: [&quot;Sacral&quot;, &quot;Solar Plexus&quot;], zodiac: [&quot;Leo&quot;, &quot;Libra&quot;], element: [&quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Moonstone&quot;, &quot;Citrine&quot;] },
        { name: &quot;Moonstone&quot;, color: &quot;#e2e8f0&quot;, intent: [&quot;Harmony&quot;, &quot;Love&quot;, &quot;Spiritual&quot;], mantra: &quot;Vam. I flow effortlessly.&quot;, properties: &quot;Stone of new beginnings. Soothes emotional instability, enhances intuition, and promotes maternal energy.&quot;, vastu: &quot;North-West sector.&quot;, water: true, sun: true, chakra: [&quot;Sacral&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Cancer&quot;, &quot;Libra&quot;], element: [&quot;Water&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Sunstone&quot;, &quot;Labradorite&quot;] },
        { name: &quot;Lapis Lazuli&quot;, color: &quot;#1d4ed8&quot;, intent: [&quot;Protection&quot;, &quot;Spiritual&quot;, &quot;Workspace&quot;], mantra: &quot;Ham. I speak my truth.&quot;, properties: &quot;A regal stone of protection. Guards against psychic attacks and quickly releases stress.&quot;, vastu: &quot;North to enhance career protection.&quot;, water: false, sun: true, chakra: [&quot;Throat&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Sagittarius&quot;, &quot;Libra&quot;], element: [&quot;Water&quot;, &quot;Air&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Turquoise&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Green Aventurine&quot;, color: &quot;#34d399&quot;, intent: [&quot;Wealth&quot;, &quot;Healing&quot;, &quot;Manifestation&quot;], mantra: &quot;I welcome new opportunities.&quot;, properties: &quot;The &#39;Stone of Opportunity&#39;. The absolute luckiest of all crystals for manifesting wealth and winning.&quot;, vastu: &quot;North or East corners.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;], zodiac: [&quot;Virgo&quot;, &quot;Taurus&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Citrine&quot;, &quot;Jade&quot;] },

        // THE EARTHY &amp; NEW ADDITIONS
        { name: &quot;Black Kyanite&quot;, color: &quot;#111827&quot;, intent: [&quot;Protection&quot;, &quot;Healing&quot;], mantra: &quot;I cut away all negative cords.&quot;, properties: &quot;Powerful energy cutter that removes attachments and negative cords instantly. Sweeps the aura.&quot;, vastu: &quot;Near entrance or personal aura space.&quot;, water: false, sun: true, chakra: [&quot;Root&quot;, &quot;All&quot;], zodiac: [&quot;Libra&quot;, &quot;Aries&quot;], element: [&quot;Air&quot;, &quot;Earth&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Selenite&quot;] },
        { name: &quot;Blue Lace Agate&quot;, color: &quot;#93c5fd&quot;, intent: [&quot;Healing&quot;, &quot;Harmony&quot;], mantra: &quot;I speak with calm and clarity.&quot;, properties: &quot;Extremely soothing stone for communication and anxiety relief. Cools fiery emotions.&quot;, vastu: &quot;Bedroom or communication spaces.&quot;, water: true, sun: false, chakra: [&quot;Throat&quot;], zodiac: [&quot;Pisces&quot;, &quot;Gemini&quot;], element: [&quot;Water&quot;, &quot;Air&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Amethyst&quot;, &quot;Rose Quartz&quot;] },
        { name: &quot;Crazy Lace Agate&quot;, color: &quot;#fbbf24&quot;, intent: [&quot;Harmony&quot;, &quot;Healing&quot;], mantra: &quot;I embrace joy and laughter.&quot;, properties: &quot;Stone of happiness, laughter, and emotional upliftment. Absorbs emotional pain.&quot;, vastu: &quot;Living room or play areas.&quot;, water: true, sun: true, chakra: [&quot;Solar Plexus&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Gemini&quot;, &quot;Aries&quot;], element: [&quot;Fire&quot;, &quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Citrine&quot;, &quot;Sunstone&quot;] },
        { name: &quot;Moss Agate&quot;, color: &quot;#4ade80&quot;, intent: [&quot;Healing&quot;, &quot;Wealth&quot;], mantra: &quot;I connect deeply with nature.&quot;, properties: &quot;Promotes growth, grounding, and emotional balance. Speeds up physical recovery.&quot;, vastu: &quot;East direction or near plants.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Root&quot;], zodiac: [&quot;Virgo&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Green Aventurine&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Tree Agate&quot;, color: &quot;#bbf7d0&quot;, intent: [&quot;Healing&quot;, &quot;Harmony&quot;], mantra: &quot;I grow steadily and peacefully.&quot;, properties: &quot;Deep connection to nature and inner peace. Brings unshakeable steady growth.&quot;, vastu: &quot;Garden or plants area.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Root&quot;], zodiac: [&quot;Taurus&quot;, &quot;Virgo&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Moss Agate&quot;, &quot;Jade&quot;] },
        { name: &quot;Tourmalinated Quartz&quot;, color: &quot;#e5e7eb&quot;, intent: [&quot;Protection&quot;, &quot;Healing&quot;], mantra: &quot;I am balanced and protected.&quot;, properties: &quot;Combines protection of tourmaline with amplification of quartz. Deflects extreme hostility.&quot;, vastu: &quot;Workspace or entrance.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Crown&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Libra&quot;, &quot;Scorpio&quot;], element: [&quot;Earth&quot;, &quot;Light&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Petrified Wood&quot;, color: &quot;#78350f&quot;, intent: [&quot;Protection&quot;, &quot;Healing&quot;], mantra: &quot;I remain stable through time.&quot;, properties: &quot;Deep grounding and ancestral connection stone. Provides immense patience during long projects.&quot;, vastu: &quot;South-West sector.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Leo&quot;, &quot;Virgo&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Agate&quot;, &quot;Jasper&quot;] },
        { name: &quot;Soapstone&quot;, color: &quot;#9ca3af&quot;, intent: [&quot;Healing&quot;, &quot;Harmony&quot;], mantra: &quot;I remain calm and steady.&quot;, properties: &quot;Gentle calming stone used for stress relief. Absorbs friction in the household.&quot;, vastu: &quot;Bedroom or living areas.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Root&quot;], zodiac: [&quot;Cancer&quot;, &quot;Sagittarius&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Howlite&quot;, &quot;Rose Quartz&quot;] },
        { name: &quot;White Quartz&quot;, color: &quot;#f1f5f9&quot;, intent: [&quot;Healing&quot;, &quot;Spiritual&quot;], mantra: &quot;I am purified and balanced.&quot;, properties: &quot;Enhances healing, brings structural clarity to the body, and clears stagnant energy.&quot;, vastu: &quot;North-East.&quot;, water: true, sun: true, chakra: [&quot;Crown&quot;, &quot;All&quot;], zodiac: [&quot;All&quot;], element: [&quot;Air&quot;, &quot;Light&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Amethyst&quot;, &quot;Selenite&quot;] },
        { name: &quot;Onyx&quot;, color: &quot;#111827&quot;, intent: [&quot;Protection&quot;, &quot;Energy&quot;], mantra: &quot;I am strong and protected.&quot;, properties: &quot;Absorbs negative energy and builds immense physical strength and endurance.&quot;, vastu: &quot;Entrance.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Leo&quot;, &quot;Capricorn&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Garnet&quot;] },
        { name: &quot;Calcite&quot;, color: &quot;#fde68a&quot;, intent: [&quot;Healing&quot;, &quot;Energy&quot;], mantra: &quot;I cleanse and renew my energy.&quot;, properties: &quot;Energy amplifier and emotional cleanser. Cleans negative energies from the environment.&quot;, vastu: &quot;Living space.&quot;, water: false, sun: false, chakra: [&quot;Solar Plexus&quot;, &quot;Sacral&quot;, &quot;Crown&quot;], zodiac: [&quot;Cancer&quot;], element: [&quot;Water&quot;, &quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Citrine&quot;] },
        { name: &quot;Bronzite&quot;, color: &quot;#92400e&quot;, intent: [&quot;Protection&quot;, &quot;Workspace&quot;], mantra: &quot;I am grounded and confident.&quot;, properties: &quot;Boosts courage, instills polite confidence, and powerfully repels ill-wishing.&quot;, vastu: &quot;Workspace.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Sacral&quot;], zodiac: [&quot;Leo&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Tiger&#39;s Eye&quot;, &quot;Black Tourmaline&quot;] },
        { name: &quot;Rutilated Quartz&quot;, color: &quot;#fbbf24&quot;, intent: [&quot;Wealth&quot;, &quot;Manifestation&quot;], mantra: &quot;I attract divine abundance.&quot;, properties: &quot;Amplifies manifestation power rapidly. Acts as a cosmic antenna for spiritual wealth.&quot;, vastu: &quot;Wealth corner (North).&quot;, water: true, sun: true, chakra: [&quot;Solar Plexus&quot;, &quot;All&quot;], zodiac: [&quot;Gemini&quot;, &quot;Taurus&quot;], element: [&quot;Light&quot;, &quot;Fire&quot;, &quot;Air&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Citrine&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Fire Agate&quot;, color: &quot;#b45309&quot;, intent: [&quot;Protection&quot;, &quot;Energy&quot;], mantra: &quot;I am safe and energized.&quot;, properties: &quot;Strong grounding and protection. Fires up the root chakra and builds a protective shield.&quot;, vastu: &quot;South.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Sacral&quot;], zodiac: [&quot;Aries&quot;], element: [&quot;Fire&quot;, &quot;Earth&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Carnelian&quot;, &quot;Ruby&quot;] },
        { name: &quot;Shungite&quot;, color: &quot;#111827&quot;, intent: [&quot;Protection&quot;, &quot;Healing&quot;], mantra: &quot;I am shielded from all harm.&quot;, properties: &quot;Extremely powerful stone that purifies water and acts as a massive sponge for EMFs, radiation, and stress.&quot;, vastu: &quot;Near heavy electronics and Wi-Fi.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Cancer&quot;, &quot;Scorpio&quot;], element: [&quot;Earth&quot;, &quot;Fire&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Charoite&quot;, color: &quot;#7c3aed&quot;, intent: [&quot;Shadow Work&quot;, &quot;Spiritual&quot;], mantra: &quot;I embrace transformation fearlessly.&quot;, properties: &quot;Profound spiritual growth. Helps you overcome deep-seated fears, reduces stress, and stimulates inner vision.&quot;, vastu: &quot;Quiet, contemplative spaces.&quot;, water: true, sun: false, chakra: [&quot;Crown&quot;, &quot;Heart&quot;], zodiac: [&quot;Scorpio&quot;, &quot;Sagittarius&quot;], element: [&quot;Air&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Amethyst&quot;, &quot;Moldavite&quot;] },
        { name: &quot;Lepidolite&quot;, color: &quot;#c4b5fd&quot;, intent: [&quot;Shadow Work&quot;, &quot;Healing&quot;], mantra: &quot;I release stress and anxiety.&quot;, properties: &quot;Contains natural lithium. An energetic antidepressant, clearing severe stress, blockages, and crippling anxiety.&quot;, vastu: &quot;Bedside table for restful sleep.&quot;, water: false, sun: false, chakra: [&quot;Third Eye&quot;, &quot;Heart&quot;], zodiac: [&quot;Libra&quot;], element: [&quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Amethyst&quot;, &quot;Rose Quartz&quot;] },
        
        // THE REST OF THE 35 EXPANSION PACK (Deduplicated)
        { name: &quot;Blue Apatite&quot;, color: &quot;#3b82f6&quot;, intent: [&quot;Workspace&quot;, &quot;Healing&quot;], mantra: &quot;I express ideas with clarity.&quot;, properties: &quot;Enhances intellect, communication, and creative problem solving.&quot;, vastu: &quot;Near workstation.&quot;, water: true, sun: true, chakra: [&quot;Throat&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Gemini&quot;], element: [&quot;Air&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Sodalite&quot;] },
        { name: &quot;Sodalite&quot;, color: &quot;#1e3a8a&quot;, intent: [&quot;Workspace&quot;, &quot;Spiritual&quot;], mantra: &quot;I trust logic and intuition equally.&quot;, properties: &quot;Promotes rational thinking, objectivity, and truth. Encourages deep thinking.&quot;, vastu: &quot;Near books or study area.&quot;, water: true, sun: true, chakra: [&quot;Throat&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Sagittarius&quot;], element: [&quot;Air&quot;, &quot;Water&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Lapis Lazuli&quot;, &quot;Blue Apatite&quot;] },
        { name: &quot;Amazonite&quot;, color: &quot;#22c55e&quot;, intent: [&quot;Workspace&quot;, &quot;Healing&quot;], mantra: &quot;I communicate truth with calm confidence.&quot;, properties: &quot;Balances emotions, filters out stress, and alleviates worry during pressure.&quot;, vastu: &quot;Near workspace.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;, &quot;Throat&quot;], zodiac: [&quot;Virgo&quot;], element: [&quot;Water&quot;, &quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Smoky Quartz&quot;, &quot;Rose Quartz&quot;] },
        { name: &quot;Howlite&quot;, color: &quot;#e5e7eb&quot;, intent: [&quot;Workspace&quot;, &quot;Healing&quot;], mantra: &quot;I am calm and focused.&quot;, properties: &quot;Reduces anxiety, tension, and intense anger. Enhances patience and eliminates rage.&quot;, vastu: &quot;On desk to reduce overthinking.&quot;, water: true, sun: true, chakra: [&quot;Crown&quot;], zodiac: [&quot;Gemini&quot;], element: [&quot;Air&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Amethyst&quot;, &quot;Rose Quartz&quot;] },
        { name: &quot;Rhodonite&quot;, color: &quot;#f43f5e&quot;, intent: [&quot;Harmony&quot;, &quot;Love&quot;], mantra: &quot;I forgive and open my heart.&quot;, properties: &quot;Emotional healing and compassion. Acts as an energetic anchor for emotional balance.&quot;, vastu: &quot;Bedroom or center of home.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Root&quot;], zodiac: [&quot;Taurus&quot;], element: [&quot;Earth&quot;, &quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Rhodochrosite&quot;] },
        { name: &quot;Pink Opal&quot;, color: &quot;#fda4af&quot;, intent: [&quot;Harmony&quot;, &quot;Love&quot;, &quot;Healing&quot;], mantra: &quot;My heart is at peace.&quot;, properties: &quot;Soothes emotional wounds and promotes love. Brings tranquility to an empty space.&quot;, vastu: &quot;Near bed or meditation space.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;], zodiac: [&quot;Cancer&quot;, &quot;Pisces&quot;], element: [&quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Morganite&quot;] },
        { name: &quot;Kunzite&quot;, color: &quot;#c084fc&quot;, intent: [&quot;Harmony&quot;, &quot;Love&quot;], mantra: &quot;I radiate unconditional love.&quot;, properties: &quot;Activates heart chakra and emotional openness. Shields against emotional baggage.&quot;, vastu: &quot;South-West for love energy.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;, &quot;Crown&quot;], zodiac: [&quot;Scorpio&quot;, &quot;Taurus&quot;], element: [&quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Unakite&quot;, color: &quot;#84cc16&quot;, intent: [&quot;Harmony&quot;, &quot;Healing&quot;], mantra: &quot;I balance emotions and spirit.&quot;, properties: &quot;Balances emotional and spiritual growth. Provides grounding when needed.&quot;, vastu: &quot;Living room.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Scorpio&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Red Jasper&quot;, &quot;Green Aventurine&quot;] },
        { name: &quot;Peridot&quot;, color: &quot;#a3e635&quot;, intent: [&quot;Wealth&quot;, &quot;Healing&quot;], mantra: &quot;I attract prosperity and joy.&quot;, properties: &quot;Attracts wealth and positive energy. Clears blockages to receiving abundance.&quot;, vastu: &quot;Wallet or safe.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Solar Plexus&quot;], zodiac: [&quot;Leo&quot;, &quot;Scorpio&quot;], element: [&quot;Earth&quot;], rarity: &quot;Premium&quot;, intensity: &quot;High&quot;, pairings: [&quot;Citrine&quot;, &quot;Green Aventurine&quot;] },
        { name: &quot;Chrysoprase&quot;, color: &quot;#4ade80&quot;, intent: [&quot;Wealth&quot;, &quot;Healing&quot;], mantra: &quot;Abundance flows easily to me.&quot;, properties: &quot;Promotes prosperity, hope, and new ventures. Breathes fresh energy into business.&quot;, vastu: &quot;East or North.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;, &quot;Sacral&quot;], zodiac: [&quot;Libra&quot;], element: [&quot;Earth&quot;, &quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Citrine&quot;, &quot;Jade&quot;] },
        { name: &quot;Goldstone&quot;, color: &quot;#f59e0b&quot;, intent: [&quot;Wealth&quot;, &quot;Energy&quot;], mantra: &quot;I shine with success.&quot;, properties: &quot;Boosts confidence and ambition. Excellent for career advancement.&quot;, vastu: &quot;Work desk or business area.&quot;, water: true, sun: true, chakra: [&quot;Sacral&quot;, &quot;Throat&quot;], zodiac: [&quot;Sagittarius&quot;], element: [&quot;Fire&quot;, &quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Tiger&#39;s Eye&quot;, &quot;Pyrite&quot;] },
        { name: &quot;Smoky Quartz&quot;, color: &quot;#6b7280&quot;, intent: [&quot;Protection&quot;, &quot;Shadow Work&quot;], mantra: &quot;I release negativity and stay grounded.&quot;, properties: &quot;Neutralizes negative vibrations and absorbs electromagnetic smog.&quot;, vastu: &quot;Near entrance.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Solar Plexus&quot;], zodiac: [&quot;Scorpio&quot;, &quot;Capricorn&quot;], element: [&quot;Earth&quot;, &quot;Air&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Jet&quot;, color: &quot;#000000&quot;, intent: [&quot;Protection&quot;, &quot;Shadow Work&quot;], mantra: &quot;I am protected and grounded.&quot;, properties: &quot;Strong protective organic stone. Draws out negative energy and alleviates fears.&quot;, vastu: &quot;Carry with you.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Capricorn&quot;], element: [&quot;Earth&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;High&quot;, pairings: [&quot;Black Tourmaline&quot;, &quot;Smoky Quartz&quot;] },
        { name: &quot;Bloodstone&quot;, color: &quot;#166534&quot;, intent: [&quot;Protection&quot;, &quot;Energy&quot;, &quot;Healing&quot;], mantra: &quot;I am strong and protected.&quot;, properties: &quot;Courage and vitality. Excellent blood cleanser and heightens intuition.&quot;, vastu: &quot;South sector.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Heart&quot;], zodiac: [&quot;Aries&quot;, &quot;Pisces&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Carnelian&quot;] },
        { name: &quot;Aquamarine&quot;, color: &quot;#7dd3fc&quot;, intent: [&quot;Healing&quot;, &quot;Spiritual&quot;], mantra: &quot;I flow with calm energy.&quot;, properties: &quot;Calming and stress relief. Cools anger and creates clear communication.&quot;, vastu: &quot;North direction.&quot;, water: true, sun: true, chakra: [&quot;Throat&quot;, &quot;Heart&quot;], zodiac: [&quot;Pisces&quot;, &quot;Gemini&quot;], element: [&quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Amethyst&quot;, &quot;Blue Lace Agate&quot;] },
        { name: &quot;Chalcedony&quot;, color: &quot;#60a5fa&quot;, intent: [&quot;Healing&quot;, &quot;Harmony&quot;], mantra: &quot;I am peaceful and balanced.&quot;, properties: &quot;Promotes brotherhood, goodwill, and group stability.&quot;, vastu: &quot;Living spaces.&quot;, water: true, sun: true, chakra: [&quot;Throat&quot;, &quot;Sacral&quot;], zodiac: [&quot;Cancer&quot;, &quot;Sagittarius&quot;], element: [&quot;Water&quot;], rarity: &quot;Common&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Blue Lace Agate&quot;] },
        { name: &quot;Prehnite&quot;, color: &quot;#bbf7d0&quot;, intent: [&quot;Healing&quot;, &quot;Spiritual&quot;], mantra: &quot;I trust the universe.&quot;, properties: &quot;Healing and intuition. Stone of prophesy and inner knowing.&quot;, vastu: &quot;Meditation areas.&quot;, water: true, sun: false, chakra: [&quot;Heart&quot;, &quot;Solar Plexus&quot;], zodiac: [&quot;Libra&quot;], element: [&quot;Earth&quot;, &quot;Water&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Amethyst&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Serpentine&quot;, color: &quot;#15803d&quot;, intent: [&quot;Healing&quot;, &quot;Spiritual&quot;], mantra: &quot;I awaken inner healing.&quot;, properties: &quot;Detox and healing. Exceptional for awakening dormant kundalini energy.&quot;, vastu: &quot;East sector.&quot;, water: true, sun: true, chakra: [&quot;Heart&quot;, &quot;Crown&quot;], zodiac: [&quot;Gemini&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Jade&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Azurite&quot;, color: &quot;#1e40af&quot;, intent: [&quot;Workspace&quot;, &quot;Spiritual&quot;], mantra: &quot;I expand my awareness.&quot;, properties: &quot;Enhances intuition and intellect. Guides intuitive development.&quot;, vastu: &quot;Study desk.&quot;, water: false, sun: false, chakra: [&quot;Third Eye&quot;, &quot;Crown&quot;], zodiac: [&quot;Sagittarius&quot;], element: [&quot;Air&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Malachite&quot;, &quot;Lapis Lazuli&quot;] },
        { name: &quot;Iolite&quot;, color: &quot;#6366f1&quot;, intent: [&quot;Workspace&quot;, &quot;Spiritual&quot;], mantra: &quot;I see clearly and decide wisely.&quot;, properties: &quot;Decision making and clarity. Aids in understanding root causes of distraction.&quot;, vastu: &quot;Work desk.&quot;, water: true, sun: true, chakra: [&quot;Third Eye&quot;], zodiac: [&quot;Libra&quot;, &quot;Taurus&quot;], element: [&quot;Water&quot;, &quot;Air&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Dalmatian Jasper&quot;, color: &quot;#f3f4f6&quot;, intent: [&quot;Harmony&quot;, &quot;Healing&quot;], mantra: &quot;I embrace joy and playfulness.&quot;, properties: &quot;Grounding and happiness. Breaks down barriers and encourages moving forward.&quot;, vastu: &quot;Living room.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Sacral&quot;], zodiac: [&quot;Virgo&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Black Tourmaline&quot;] },
        { name: &quot;Snowflake Obsidian&quot;, color: &quot;#1f2937&quot;, intent: [&quot;Protection&quot;, &quot;Shadow Work&quot;], mantra: &quot;I find light in darkness.&quot;, properties: &quot;Balance and purification. Helps recognize and release stressful mental patterns.&quot;, vastu: &quot;Entrance.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Sacral&quot;], zodiac: [&quot;Virgo&quot;, &quot;Capricorn&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Clear Quartz&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Red Jasper&quot;, color: &quot;#b91c1c&quot;, intent: [&quot;Healing&quot;, &quot;Energy&quot;], mantra: &quot;I am energized and stable.&quot;, properties: &quot;Strength and vitality. Supreme nurturer that sustains through immense stress.&quot;, vastu: &quot;South zone.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Sacral&quot;], zodiac: [&quot;Leo&quot;, &quot;Scorpio&quot;], element: [&quot;Fire&quot;, &quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;High&quot;, pairings: [&quot;Carnelian&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Yellow Jasper&quot;, color: &quot;#facc15&quot;, intent: [&quot;Wealth&quot;, &quot;Protection&quot;], mantra: &quot;I attract positivity and wealth.&quot;, properties: &quot;Confidence and protection. Shields during spiritual work and attracts positive financial outcomes.&quot;, vastu: &quot;Office desk.&quot;, water: true, sun: true, chakra: [&quot;Solar Plexus&quot;, &quot;Sacral&quot;], zodiac: [&quot;Leo&quot;], element: [&quot;Earth&quot;, &quot;Fire&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Citrine&quot;, &quot;Tiger&#39;s Eye&quot;] },
        { name: &quot;Picture Jasper&quot;, color: &quot;#92400e&quot;, intent: [&quot;Harmony&quot;, &quot;Healing&quot;], mantra: &quot;I connect with earth energy.&quot;, properties: &quot;Grounding and balance. Contains hidden messages from the past.&quot;, vastu: &quot;Living space.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Capricorn&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Petrified Wood&quot;, &quot;Clear Quartz&quot;] },
        { name: &quot;Zebra Jasper&quot;, color: &quot;#d1d5db&quot;, intent: [&quot;Harmony&quot;, &quot;Energy&quot;], mantra: &quot;I balance opposites within me.&quot;, properties: &quot;Motivation and balance. Motivates turning ideas into action while remaining grounded.&quot;, vastu: &quot;Bedroom.&quot;, water: true, sun: true, chakra: [&quot;Root&quot;], zodiac: [&quot;Libra&quot;, &quot;Virgo&quot;], element: [&quot;Earth&quot;], rarity: &quot;Common&quot;, intensity: &quot;Medium&quot;, pairings: [&quot;Rose Quartz&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Angelite&quot;, color: &quot;#93c5fd&quot;, intent: [&quot;Healing&quot;, &quot;Spiritual&quot;], mantra: &quot;I connect with higher guidance.&quot;, properties: &quot;Peace and spiritual awareness. Facilitates contact with the angelic realm.&quot;, vastu: &quot;Meditation space.&quot;, water: false, sun: false, chakra: [&quot;Throat&quot;, &quot;Crown&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Aquarius&quot;], element: [&quot;Air&quot;], rarity: &quot;Uncommon&quot;, intensity: &quot;Gentle&quot;, pairings: [&quot;Celestite&quot;, &quot;Amethyst&quot;] },
        { name: &quot;Sugilite&quot;, color: &quot;#a21caf&quot;, intent: [&quot;Protection&quot;, &quot;Love&quot;, &quot;Healing&quot;], mantra: &quot;I am surrounded by divine protection.&quot;, properties: &quot;Spiritual protection. Brings spiritual love to earth and protects from trauma.&quot;, vastu: &quot;Personal altar.&quot;, water: true, sun: false, chakra: [&quot;Crown&quot;, &quot;Third Eye&quot;], zodiac: [&quot;Virgo&quot;, &quot;Sagittarius&quot;], element: [&quot;Air&quot;, &quot;Water&quot;], rarity: &quot;Rare&quot;, intensity: &quot;High&quot;, pairings: [&quot;Amethyst&quot;, &quot;Charoite&quot;] }
    ];

    // --- 6. RENDER LOGIC ---
    function toggleFavorite(crystalName) {
        if (userFavorites.includes(crystalName)) {
            userFavorites = userFavorites.filter(n =&gt; n !== crystalName);
        } else {
            userFavorites.push(crystalName);
        }
        localStorage.setItem(&#39;otechy_crystal_favs&#39;, JSON.stringify(userFavorites));
        renderCrystals(); 
    }

    function setFilter(filter) {
        currentFilter = filter;
        document.querySelectorAll(&#39;.filter-btn&#39;).forEach(btn =&gt; btn.classList.remove(&#39;active&#39;));
        event.target.classList.add(&#39;active&#39;);
        renderCrystals();
    }

    function handleSearch() {
        searchQuery = document.getElementById(&#39;searchInput&#39;).value.toLowerCase();
        renderCrystals();
    }

    function renderCrystals() {
        const grid = document.getElementById(&#39;crystalGrid&#39;);
        grid.innerHTML = &#39;&#39;;

        let filtered = crystalDB;
        
        if (currentFilter === &#39;Favorites&#39;) {
            filtered = filtered.filter(c =&gt; userFavorites.includes(c.name));
        } else if (currentFilter !== &#39;All&#39;) {
            filtered = filtered.filter(c =&gt; c.intent.includes(currentFilter));
        }

        if (searchQuery) {
            filtered = filtered.filter(c =&gt; {
                const searchStr = searchQuery.toLowerCase();
                return c.name.toLowerCase().includes(searchStr) || 
                       c.properties.toLowerCase().includes(searchStr) ||
                       c.vastu.toLowerCase().includes(searchStr) ||
                       c.chakra.some(ch =&gt; ch.toLowerCase().includes(searchStr)) ||
                       c.zodiac.some(z =&gt; z.toLowerCase().includes(searchStr)) ||
                       c.element.some(e =&gt; e.toLowerCase().includes(searchStr));
            });
        }

        if (filtered.length === 0) {
            grid.innerHTML = `&lt;div style=&quot;text-align:center; grid-column: 1/-1; color: var(--accent); padding: 40px; font-weight: 600;&quot;&gt;No crystals found matching your criteria. Try adjusting your search or filters.&lt;/div&gt;`;
            return;
        }

        filtered.forEach(c =&gt; {
            const isFav = userFavorites.includes(c.name);
            const heartClass = isFav ? &quot;fav-icon is-fav&quot; : &quot;fav-icon&quot;;
            const heartIcon = isFav ? &quot;❤️&quot; : &quot;🤍&quot;;

            const waterTag = c.water ? `&lt;span class=&quot;c-tag c-water-yes&quot;&gt;💧 Safe in Water&lt;/span&gt;` : `&lt;span class=&quot;c-tag c-water-no&quot;&gt;⚠️ Keep Dry (Dissolves/Rusts)&lt;/span&gt;`;
            const sunTag = c.sun ? `&lt;span class=&quot;c-tag&quot; style=&quot;background:#fef3c7; color:#b45309; border-color:#fde68a;&quot;&gt;☀️ Safe in Sun&lt;/span&gt;` : `&lt;span class=&quot;c-tag c-sun-no&quot;&gt;⚠️ Fades in Sunlight&lt;/span&gt;`;

            // UI Map for Intents
            const intentTags = c.intent.map(i =&gt; `&lt;span class=&quot;intent-tag&quot;&gt;${i}&lt;/span&gt;`).join(&#39; &#39;);

            // Determine Intensity Color Logic
            let intensityClass = &#39;badge-intensity&#39;;
            if(c.intensity === &#39;Gentle&#39;) intensityClass += &#39; gentle&#39;;
            if(c.intensity === &#39;Medium&#39;) intensityClass += &#39; medium&#39;;
            if(c.intensity === &#39;Extreme&#39;) intensityClass += &#39; extreme&#39;;

            let rarityClass = &#39;badge-rarity&#39;;
            if(c.rarity === &#39;Premium&#39;) rarityClass += &#39; premium&#39;;

            const chakraTags = c.chakra.map(ch =&gt; `&lt;span class=&quot;m-tag&quot;&gt;🌀 ${ch} Chakra&lt;/span&gt;`).join(&#39;&#39;);
            const zodiacTags = c.zodiac.map(z =&gt; `&lt;span class=&quot;m-tag&quot;&gt;✨ ${z}&lt;/span&gt;`).join(&#39;&#39;);
            const elementTags = c.element.map(e =&gt; `&lt;span class=&quot;m-tag&quot;&gt;🌍 ${e}&lt;/span&gt;`).join(&#39;&#39;);
            const pairString = c.pairings.join(&#39;, &#39;);

            const card = document.createElement(&#39;div&#39;);
            card.className = &#39;crystal-card&#39;;
            card.innerHTML = `
                &lt;div class=&quot;card-header&quot;&gt;
                    &lt;h3 class=&quot;crystal-name&quot;&gt;
                        &lt;div class=&quot;crystal-color-tag&quot; style=&quot;background: ${c.color}&quot;&gt;&lt;/div&gt;
                        ${c.name}
                    &lt;/h3&gt;
                    &lt;div class=&quot;${heartClass}&quot; onclick=&quot;toggleFavorite(&#39;${c.name}&#39;)&quot; title=&quot;Add to My Collection&quot;&gt;${heartIcon}&lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;expert-badges&quot;&gt;
                    &lt;span class=&quot;${rarityClass}&quot;&gt;💎 ${c.rarity}&lt;/span&gt;
                    &lt;span class=&quot;${intensityClass}&quot;&gt;⚡ ${c.intensity} Energy&lt;/span&gt;
                &lt;/div&gt;

                &lt;div class=&quot;intent-wrap&quot;&gt;${intentTags}&lt;/div&gt;
                
                &lt;div class=&quot;meta-tags&quot;&gt;
                    ${chakraTags}
                    ${zodiacTags}
                    ${elementTags}
                &lt;/div&gt;
                
                &lt;div class=&quot;mantra-box&quot;&gt;
                    &lt;span class=&quot;mantra-lbl&quot;&gt;Chanting Mantra&lt;/span&gt;
                    &lt;span class=&quot;mantra-txt&quot;&gt;&quot;${c.mantra}&quot;&lt;/span&gt;
                &lt;/div&gt;

                &lt;div class=&quot;info-group&quot;&gt;
                    &lt;span class=&quot;info-lbl&quot;&gt;✨ Healing Properties&lt;/span&gt;
                    &lt;span class=&quot;info-val&quot;&gt;${c.properties}&lt;/span&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;info-group vastu-group&quot;&gt;
                    &lt;span class=&quot;info-lbl&quot;&gt;🧭 Vastu Placement Guide&lt;/span&gt;
                    &lt;span class=&quot;info-val&quot;&gt;${c.vastu}&lt;/span&gt;
                &lt;/div&gt;

                &lt;div class=&quot;pairings-box&quot;&gt;
                    &lt;strong&gt;Synergizes well with:&lt;/strong&gt; ${pairString}
                &lt;/div&gt;

                &lt;div class=&quot;cleanse-tags&quot;&gt;
                    ${waterTag}
                    ${sunTag}
                &lt;/div&gt;
            `;
            grid.appendChild(card);
        });
    }

    renderCrystals();
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/3877178182119082501'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/3877178182119082501'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/crystal-studio-moon-tracker-chanting.html' title='Crystal Studio | Moon Tracker &amp; Chanting Mantras'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-4993206537824378205</id><published>2026-03-27T02:31:00.000-07:00</published><updated>2026-03-27T02:31:35.255-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Crypto"/><title type='text'>Portfolio</title><content type='html'>&lt;title&gt;My Crypto Portfolio Tracker | OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    :root { 
        --primary: #3b82f6; --text-dark: #0f172a; --text-muted: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --danger: #ef4444;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 40px 15px; }
    
    /* Header Section */
    .wallet-header { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 25px; flex-wrap: wrap; gap: 15px; }
    .header-left h1 { font-size: 28px; font-weight: 850; margin: 0 0 5px 0; color: var(--text-dark); letter-spacing: -0.5px; }
    .header-left p { margin: 0; color: var(--text-muted); font-size: 13px; font-weight: 500; }
    
    .header-right { text-align: right; }
    .total-assets-badge { display: inline-block; background: #eff6ff; color: var(--primary); padding: 4px 12px; border-radius: 6px; font-size: 12px; font-weight: 700; margin-bottom: 10px; border: 1px solid #bfdbfe; }
    
    .btn-pdf { border: none; background: var(--text-dark); color: #fff; padding: 10px 20px; border-radius: 8px; font-family: var(--font-main); font-weight: 600; font-size: 13px; cursor: pointer; transition: 0.2s; display: flex; align-items: center; gap: 8px; }
    .btn-pdf:hover { background: var(--primary); box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2); transform: translateY(-2px); }

    /* Category Blocks */
    .category-section { margin-bottom: 30px; background: var(--white); border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 4px 15px rgba(0,0,0,0.02); overflow: hidden; }
    .category-header { background: #f1f5f9; padding: 15px 20px; font-size: 14px; font-weight: 800; color: var(--text-dark); border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; }
    
    /* Table Styles */
    .table-wrapper { overflow-x: auto; }
    table { width: 100%; border-collapse: collapse; text-align: right; min-width: 700px; }
    th { padding: 12px 20px; font-size: 11px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; border-bottom: 1px solid var(--border); background: #f8fafc; }
    th:first-child { text-align: left; }
    td { padding: 15px 20px; border-bottom: 1px solid #f1f5f9; font-size: 14px; font-weight: 600; color: var(--text-dark); }
    tr:last-child td { border-bottom: none; }
    tr:hover { background: #f8fafc; }

    /* Asset Cell */
    .asset-cell { display: flex; align-items: center; gap: 12px; text-align: left; }
    .coin-icon { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 800; font-size: 10px; text-transform: uppercase; box-shadow: inset 0 -2px 0 rgba(0,0,0,0.15); }
    .coin-name { font-weight: 700; line-height: 1.2; }
    .coin-ticker { font-size: 11px; color: var(--text-muted); font-weight: 600; }

    /* Metrics */
    .metric-value { font-variant-numeric: tabular-nums; }
    .metric-sub { font-size: 11px; color: var(--text-muted); font-weight: 500; }
    
    .pnl-positive { color: var(--success); background: #ecfdf5; padding: 4px 8px; border-radius: 6px; font-size: 12px; }
    .pnl-negative { color: var(--danger); background: #fef2f2; padding: 4px 8px; border-radius: 6px; font-size: 12px; }

    /* Footer Totals */
    .portfolio-footer { background: var(--text-dark); color: #fff; padding: 25px; border-radius: 16px; display: flex; justify-content: space-between; align-items: center; margin-top: 30px; flex-wrap: wrap; gap: 15px; }
    .footer-label { font-size: 14px; color: #94a3b8; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; }
    .footer-value { font-size: 32px; font-weight: 850; margin: 0; line-height: 1; }

    @media (max-width: 600px) {
        .wallet-header { flex-direction: column; align-items: flex-start; }
        .header-right { text-align: left; width: 100%; }
        .btn-pdf { width: 100%; justify-content: center; }
        .portfolio-footer { flex-direction: column; text-align: center; justify-content: center; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;wallet-header&quot;&gt;
        &lt;div class=&quot;header-left&quot;&gt;
            &lt;h1&gt;Master Portfolio&lt;/h1&gt;
            &lt;p id=&quot;portfolioDate&quot;&gt;Locked Allocation Ledger &amp;bull; 27-March-2026&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class=&quot;header-right&quot;&gt;
            &lt;div class=&quot;total-assets-badge&quot; id=&quot;totalAssetsCount&quot;&gt;Tracking 0 Assets&lt;/div&gt;
            &lt;button class=&quot;btn-pdf&quot; onclick=&quot;exportPortfolioPDF()&quot;&gt;
                &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3&quot;/&gt;&lt;/svg&gt;
                Export Ledger (PDF)
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;portfolioContainer&quot;&gt;
        &lt;/div&gt;

    &lt;div class=&quot;portfolio-footer&quot;&gt;
        &lt;div&gt;
            &lt;div class=&quot;footer-label&quot;&gt;Grand Total Value (USD)&lt;/div&gt;
            &lt;div class=&quot;footer-value&quot; id=&quot;grandTotalValue&quot;&gt;$0.00&lt;/div&gt;
        &lt;/div&gt;
        &lt;div style=&quot;text-align: right;&quot;&gt;
            &lt;div class=&quot;footer-label&quot; style=&quot;font-size: 11px;&quot;&gt;OTechy Secure Ledger&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // =========================================================================
    // 🟢 YOUR PORTFOLIO DATA (EDIT THIS LIST TO UPDATE YOUR TRACKER)
    // =========================================================================
    
    // Helper function to calculate PnL mathematically if you only had average price.
    // Since you provided exact PnL % strings, we will use those directly for display.

    const portfolioData = [
        // ✅ Major &amp; well-known coins
        { cat: &quot;Major&quot;, name: &quot;Bitcoin&quot;, ticker: &quot;BTC&quot;, price: 67812.56, holdings: 836.58, amount: &quot;0.01233&quot;, avgBuy: 75122.76, pnl: &quot;-9.73%&quot;, color: &quot;#f59e0b&quot; },
        { cat: &quot;Major&quot;, name: &quot;Pi&quot;, ticker: &quot;PI&quot;, price: 0.1772, holdings: 523.38, amount: &quot;2,952.00&quot;, avgBuy: 0.2136, pnl: &quot;-17.01%&quot;, color: &quot;#8b5cf6&quot; },
        { cat: &quot;Major&quot;, name: &quot;Ethereum&quot;, ticker: &quot;ETH&quot;, price: 2044.08, holdings: 496.69, amount: &quot;0.2429&quot;, avgBuy: 3381.17, pnl: &quot;-39.55%&quot;, color: &quot;#627eea&quot; },
        { cat: &quot;Major&quot;, name: &quot;Solana&quot;, ticker: &quot;SOL&quot;, price: 84.72, holdings: 191.91, amount: &quot;2.2653&quot;, avgBuy: 186.6, pnl: &quot;-54.60%&quot;, color: &quot;#14b8a6&quot; },
        { cat: &quot;Major&quot;, name: &quot;TRON&quot;, ticker: &quot;TRX&quot;, price: 0.316, holdings: 161.69, amount: &quot;511.58&quot;, avgBuy: 0.3177, pnl: &quot;-0.52%&quot;, color: &quot;#ef4444&quot; },
        { cat: &quot;Major&quot;, name: &quot;Stellar&quot;, ticker: &quot;XLM&quot;, price: 0.1723, holdings: 87.66, amount: &quot;508.51&quot;, avgBuy: 0.336, pnl: &quot;-48.71%&quot;, color: &quot;#334155&quot; },
        { cat: &quot;Major&quot;, name: &quot;Quant&quot;, ticker: &quot;QNT&quot;, price: 72.91, holdings: 73.56, amount: &quot;1.0089&quot;, avgBuy: 92.68, pnl: &quot;-21.33%&quot;, color: &quot;#0f172a&quot; },
        { cat: &quot;Major&quot;, name: &quot;VeChain&quot;, ticker: &quot;VET&quot;, price: 0.006819, holdings: 72.45, amount: &quot;10,624.00&quot;, avgBuy: 0.0188, pnl: &quot;-63.74%&quot;, color: &quot;#3b82f6&quot; },
        { cat: &quot;Major&quot;, name: &quot;Chainlink&quot;, ticker: &quot;LINK&quot;, price: 8.7999, holdings: 59.99, amount: &quot;6.8166&quot;, avgBuy: 16.38, pnl: &quot;-46.29%&quot;, color: &quot;#2563eb&quot; },
        { cat: &quot;Major&quot;, name: &quot;XRP&quot;, ticker: &quot;XRP&quot;, price: 1.346, holdings: 58.9, amount: &quot;43.76&quot;, avgBuy: 2.3883, pnl: &quot;-43.64%&quot;, color: &quot;#000000&quot; },
        { cat: &quot;Major&quot;, name: &quot;Avalanche&quot;, ticker: &quot;AVAX&quot;, price: 8.94, holdings: 58.65, amount: &quot;6.56&quot;, avgBuy: 18.74, pnl: &quot;-52.30%&quot;, color: &quot;#dc2626&quot; },
        { cat: &quot;Major&quot;, name: &quot;Sui&quot;, ticker: &quot;SUI&quot;, price: 0.914, holdings: 50.28, amount: &quot;55&quot;, avgBuy: 1.3812, pnl: &quot;-33.82%&quot;, color: &quot;#3b82f6&quot; },
        { cat: &quot;Major&quot;, name: &quot;Cardano&quot;, ticker: &quot;ADA&quot;, price: 0.251, holdings: 40.17, amount: &quot;160&quot;, avgBuy: 0.6377, pnl: &quot;-60.63%&quot;, color: &quot;#2563eb&quot; },
        { cat: &quot;Major&quot;, name: &quot;Polygon&quot;, ticker: &quot;POL&quot;, price: 0.09584, holdings: 28.94, amount: &quot;302&quot;, avgBuy: 0.143, pnl: &quot;-32.99%&quot;, color: &quot;#8b5cf6&quot; },
        { cat: &quot;Major&quot;, name: &quot;Shiba Inu&quot;, ticker: &quot;SHIB&quot;, price: 0.000005855, holdings: 24.79, amount: &quot;4,233,306.65&quot;, avgBuy: 0.000009295, pnl: &quot;-37.01%&quot;, color: &quot;#f97316&quot; },
        { cat: &quot;Major&quot;, name: &quot;Hedera&quot;, ticker: &quot;HBAR&quot;, price: 0.09063, holdings: 17.29, amount: &quot;190.74&quot;, avgBuy: 0.1867, pnl: &quot;-51.46%&quot;, color: &quot;#0f172a&quot; },
        { cat: &quot;Major&quot;, name: &quot;Dogecoin&quot;, ticker: &quot;DOGE&quot;, price: 0.09147, holdings: 14.71, amount: &quot;160.8&quot;, avgBuy: 0.2029, pnl: &quot;-54.92%&quot;, color: &quot;#eab308&quot; },
        { cat: &quot;Major&quot;, name: &quot;BNB&quot;, ticker: &quot;BNB&quot;, price: 619.62, holdings: 4.5852, amount: &quot;0.0074&quot;, avgBuy: 1182.90, pnl: &quot;-47.62%&quot;, color: &quot;#facc15&quot; },
        { cat: &quot;Major&quot;, name: &quot;Polkadot&quot;, ticker: &quot;DOT&quot;, price: 1.3109, holdings: 3.7884, amount: &quot;2.89&quot;, avgBuy: 3.2086, pnl: &quot;-59.15%&quot;, color: &quot;#ec4899&quot; },

        // 🧠 Emerging / ecosystem / DeFi coins
        { cat: &quot;Emerging&quot;, name: &quot;IAGON&quot;, ticker: &quot;IAG&quot;, price: 0.04602, holdings: 401.05, amount: &quot;8,713.00&quot;, avgBuy: 0.1159, pnl: &quot;-60.32%&quot;, color: &quot;#1e3a8a&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Hyperliquid&quot;, ticker: &quot;HYPE&quot;, price: 38.78, holdings: 39.56, amount: &quot;1.02&quot;, avgBuy: 38.33, pnl: &quot;1.18%&quot;, color: &quot;#10b981&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Nervos Network&quot;, ticker: &quot;CKB&quot;, price: 0.001407, holdings: 8.2587, amount: &quot;5,867.00&quot;, avgBuy: 0.00356, pnl: &quot;-60.47%&quot;, color: &quot;#10b981&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;BitTorrent&quot;, ticker: &quot;BTT&quot;, price: 0.0000003224, holdings: 7.0084, amount: &quot;21,733,529.00&quot;, avgBuy: 0.0000005221, pnl: &quot;-38.25%&quot;, color: &quot;#64748b&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Pundi X&quot;, ticker: &quot;PUNDIX&quot;, price: 0.1457, holdings: 5.2755, amount: &quot;36.2&quot;, avgBuy: 0.3072, pnl: &quot;-52.57%&quot;, color: &quot;#eab308&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;VeThor Token&quot;, ticker: &quot;VTHO&quot;, price: 0.0005473, holdings: 4.8525, amount: &quot;8,866.00&quot;, avgBuy: 0.001237, pnl: &quot;-55.76%&quot;, color: &quot;#3b82f6&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;ASI Alliance&quot;, ticker: &quot;FET&quot;, price: 0.2341, holdings: 3.699, amount: &quot;15.8&quot;, avgBuy: 0.3123, pnl: &quot;-25.05%&quot;, color: &quot;#3b82f6&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Bonk&quot;, ticker: &quot;BONK&quot;, price: 0.000005862, holdings: 3.5928, amount: &quot;612,874.00&quot;, avgBuy: 0.0000157, pnl: &quot;-62.67%&quot;, color: &quot;#f97316&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Safe Haven&quot;, ticker: &quot;SHA&quot;, price: 0.0000784, holdings: 3.2603, amount: &quot;41,584.00&quot;, avgBuy: 0.0001025, pnl: &quot;-23.53%&quot;, color: &quot;#3b82f6&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Theta Network&quot;, ticker: &quot;THETA&quot;, price: 0.1588, holdings: 3.1775, amount: &quot;20&quot;, avgBuy: 0.5692, pnl: &quot;-72.09%&quot;, color: &quot;#06b6d4&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Decentraland&quot;, ticker: &quot;MANA&quot;, price: 0.08368, holdings: 3.0603, amount: &quot;36.57&quot;, avgBuy: 0.2648, pnl: &quot;-68.40%&quot;, color: &quot;#ef4444&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;EOS&quot;, ticker: &quot;EOS&quot;, price: 0.07633, holdings: 2.9388, amount: &quot;38.5&quot;, avgBuy: 0.3085, pnl: &quot;-75.26%&quot;, color: &quot;#0f172a&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;IOST&quot;, ticker: &quot;IOST&quot;, price: 0.001082, holdings: 2.5094, amount: &quot;2,318.00&quot;, avgBuy: 0.002513, pnl: &quot;-56.94%&quot;, color: &quot;#64748b&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Holo&quot;, ticker: &quot;HOT&quot;, price: 0.0004253, holdings: 2.3506, amount: &quot;5,527.00&quot;, avgBuy: 0.0006983, pnl: &quot;-39.10%&quot;, color: &quot;#14b8a6&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Harmony&quot;, ticker: &quot;ONE&quot;, price: 0.002274, holdings: 2.2741, amount: &quot;1,000.00&quot;, avgBuy: 0.007276, pnl: &quot;-68.75%&quot;, color: &quot;#0ea5e9&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Gala&quot;, ticker: &quot;GALA&quot;, price: 0.003023, holdings: 1.5301, amount: &quot;506&quot;, avgBuy: 0.01188, pnl: &quot;-74.55%&quot;, color: &quot;#2563eb&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;BENQI&quot;, ticker: &quot;QI&quot;, price: 0.001424, holdings: 1.0423, amount: &quot;731.78&quot;, avgBuy: 0.006074, pnl: &quot;-76.55%&quot;, color: &quot;#3b82f6&quot; },
        { cat: &quot;Emerging&quot;, name: &quot;Tezos&quot;, ticker: &quot;XTZ&quot;, price: 0.3702, holdings: 0.07035, amount: &quot;0.19&quot;, avgBuy: 0.6195, pnl: &quot;-40.23%&quot;, color: &quot;#2563eb&quot; },

        // 🪙 Meme / niche / smaller-cap tokens
        { cat: &quot;Niche&quot;, name: &quot;Diamond&quot;, ticker: &quot;DMD&quot;, price: 1.3855, holdings: 69.28, amount: &quot;50&quot;, avgBuy: 2.8462, pnl: &quot;-51.32%&quot;, color: &quot;#06b6d4&quot; },
        { cat: &quot;Niche&quot;, name: &quot;Verge&quot;, ticker: &quot;XVG&quot;, price: 0.004765, holdings: 12.25, amount: &quot;2,571.00&quot;, avgBuy: 0.006356, pnl: &quot;-25.03%&quot;, color: &quot;#0ea5e9&quot; },
        { cat: &quot;Niche&quot;, name: &quot;FLOKI&quot;, ticker: &quot;FLOKI&quot;, price: 0.00002873, holdings: 11.76, amount: &quot;409,146.00&quot;, avgBuy: 0.00007291, pnl: &quot;-60.59%&quot;, color: &quot;#f59e0b&quot; },
        { cat: &quot;Niche&quot;, name: &quot;Pepe&quot;, ticker: &quot;PEPE&quot;, price: 0.000003354, holdings: 10.95, amount: &quot;3,263,964.00&quot;, avgBuy: 0.000007399, pnl: &quot;-54.66%&quot;, color: &quot;#22c55e&quot; },
        { cat: &quot;Niche&quot;, name: &quot;BitBall&quot;, ticker: &quot;BTB&quot;, price: 0.00002198, holdings: 0.2198, amount: &quot;10,000.00&quot;, avgBuy: 0.00018, pnl: &quot;-87.79%&quot;, color: &quot;#f59e0b&quot; },
        { cat: &quot;Niche&quot;, name: &quot;Wise Monkey&quot;, ticker: &quot;MONKY&quot;, price: 0.0000002108, holdings: 0.01996, amount: &quot;94,664.00&quot;, avgBuy: 0.0000007312, pnl: &quot;-71.16%&quot;, color: &quot;#d97706&quot; },
        { cat: &quot;Niche&quot;, name: &quot;Rapids&quot;, ticker: &quot;RPD&quot;, price: 0.0000725, holdings: 0.0137, amount: &quot;189&quot;, avgBuy: 0.000128, pnl: &quot;-43.40%&quot;, color: &quot;#3b82f6&quot; }
    ];
    // =========================================================================

    const categories = [
        { id: &quot;Major&quot;, title: &quot;✅ Major &amp; Well-Known Assets&quot;, color: &quot;#3b82f6&quot; },
        { id: &quot;Emerging&quot;, title: &quot;🧠 Emerging / DeFi Ecosystem&quot;, color: &quot;#8b5cf6&quot; },
        { id: &quot;Niche&quot;, title: &quot;🪙 Niche / Meme / Small-Cap&quot;, color: &quot;#f59e0b&quot; }
    ];

    function formatMoney(val) {
        // Handle tiny numbers vs standard numbers
        if (val &lt; 0.001) return &quot;$&quot; + val.toExponential(4).replace(&quot;e-&quot;, &quot;E-&quot;);
        return &quot;$&quot; + val.toLocaleString(&#39;en-US&#39;, { minimumFractionDigits: 2, maximumFractionDigits: 4 });
    }

    function formatHoldings(val) {
        return &quot;$&quot; + val.toLocaleString(&#39;en-US&#39;, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
    }

    function renderPortfolio() {
        const container = document.getElementById(&#39;portfolioContainer&#39;);
        container.innerHTML = &#39;&#39;;
        
        let grandTotal = 0;
        document.getElementById(&#39;totalAssetsCount&#39;).innerText = `Tracking ${portfolioData.length} Assets`;

        categories.forEach(category =&gt; {
            // Filter assets by category
            const assets = portfolioData.filter(a =&gt; a.cat === category.id);
            if(assets.length === 0) return;

            // Build Section
            const section = document.createElement(&#39;div&#39;);
            section.className = &#39;category-section&#39;;
            
            let tableRows = &#39;&#39;;
            assets.forEach(asset =&gt; {
                grandTotal += asset.holdings;
                
                const isPositive = !asset.pnl.includes(&#39;-&#39;);
                const pnlClass = isPositive ? &#39;pnl-positive&#39; : &#39;pnl-negative&#39;;

                tableRows += `
                    &lt;tr&gt;
                        &lt;td&gt;
                            &lt;div class=&quot;asset-cell&quot;&gt;
                                &lt;div class=&quot;coin-icon&quot; style=&quot;background-color: ${asset.color};&quot;&gt;${asset.ticker.substring(0, 3)}&lt;/div&gt;
                                &lt;div&gt;
                                    &lt;div class=&quot;coin-name&quot;&gt;${asset.name}&lt;/div&gt;
                                    &lt;div class=&quot;coin-ticker&quot;&gt;${asset.ticker}&lt;/div&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/td&gt;
                        &lt;td&gt;
                            &lt;div class=&quot;metric-value&quot;&gt;${formatMoney(asset.price)}&lt;/div&gt;
                        &lt;/td&gt;
                        &lt;td&gt;
                            &lt;div class=&quot;metric-value&quot; style=&quot;font-weight:800;&quot;&gt;${formatHoldings(asset.holdings)}&lt;/div&gt;
                            &lt;div class=&quot;metric-sub&quot;&gt;${asset.amount} ${asset.ticker}&lt;/div&gt;
                        &lt;/td&gt;
                        &lt;td&gt;
                            &lt;div class=&quot;metric-value&quot;&gt;${formatMoney(asset.avgBuy)}&lt;/div&gt;
                        &lt;/td&gt;
                        &lt;td&gt;
                            &lt;span class=&quot;${pnlClass}&quot;&gt;${asset.pnl}&lt;/span&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                `;
            });

            section.innerHTML = `
                &lt;div class=&quot;category-header&quot;&gt;
                    ${category.title}
                &lt;/div&gt;
                &lt;div class=&quot;table-wrapper&quot;&gt;
                    &lt;table&gt;
                        &lt;thead&gt;
                            &lt;tr&gt;
                                &lt;th&gt;Asset&lt;/th&gt;
                                &lt;th&gt;Current Price&lt;/th&gt;
                                &lt;th&gt;Total Holdings&lt;/th&gt;
                                &lt;th&gt;Avg Buy Price&lt;/th&gt;
                                &lt;th&gt;Profit/Loss&lt;/th&gt;
                            &lt;/tr&gt;
                        &lt;/thead&gt;
                        &lt;tbody&gt;
                            ${tableRows}
                        &lt;/tbody&gt;
                    &lt;/table&gt;
                &lt;/div&gt;
            `;
            container.appendChild(section);
        });

        // Update Grand Total
        document.getElementById(&#39;grandTotalValue&#39;).innerText = formatHoldings(grandTotal);
    }

    // Export to PDF
    function exportPortfolioPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);

        doc.setFillColor(15, 23, 42); 
        doc.rect(0, 0, 210, 25, &#39;F&#39;);
        doc.setTextColor(255); 
        doc.setFontSize(18); 
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;OTechy Pro Asset Ledger&quot;, 15, 17);
        
        doc.setFontSize(10); 
        doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(&quot;Generated: &quot; + new Date().toLocaleDateString(), 150, 17);

        let currentY = 35;
        let totalValue = 0;

        categories.forEach(category =&gt; {
            const assets = portfolioData.filter(a =&gt; a.cat === category.id);
            if(assets.length === 0) return;

            doc.setFontSize(12);
            doc.setTextColor(59, 130, 246);
            doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            doc.text(category.title.replace(/[^\x00-\x7F]/g, &quot;&quot;), 15, currentY); // Remove emojis for PDF
            currentY += 5;

            const tableData = assets.map(item =&gt; {
                totalValue += item.holdings;
                return [
                    item.name,
                    item.ticker,
                    formatMoney(item.price),
                    item.amount,
                    formatHoldings(item.holdings),
                    item.pnl
                ];
            });

            doc.autoTable({ 
                startY: currentY, 
                head: [[&#39;Asset Name&#39;, &#39;Ticker&#39;, &#39;Price&#39;, &#39;Amount&#39;, &#39;Holdings (USD)&#39;, &#39;P/L&#39;]], 
                body: tableData, 
                theme: &#39;grid&#39;, 
                headStyles: { fillColor: [59, 130, 246] }, 
                styles: { font: &#39;helvetica&#39;, fontSize: 8 },
                alternateRowStyles: { fillColor: [248, 250, 252] }
            });

            currentY = doc.lastAutoTable.finalY + 15;
        });

        // Print Grand Total at the bottom
        doc.setFontSize(14);
        doc.setTextColor(15, 23, 42);
        doc.text(`Grand Total Value: ${formatHoldings(totalValue)}`, 15, currentY);

        doc.save(`Crypto_Ledger_${new Date().getTime()}.pdf`);
    }

    // Initialize
    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
        renderPortfolio();
    });
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/4993206537824378205'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/4993206537824378205'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/portfolio.html' title='Portfolio'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-8331968154744339683</id><published>2026-03-27T01:40:00.000-07:00</published><updated>2026-03-28T08:58:28.187-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ethereum Calculator"/><title type='text'>Ethereum Retirement Calculator</title><content type='html'>&lt;title&gt;Ethereum Retirement and Compounding Calculator | Real Retirement &amp; LTV Planner - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Simulate your Ethereum wealth over time. Calculate compounding DCA, 50% LTV collateral loans, fiat inflation, and real asset purchasing power. Download your Pro PDF plan.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;ethereum compounding calculator, eth retirement planner, ethereum DCA calculator, 50% LTV eth loan, eth purchasing power, crypto wealth tracker&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Ethereum Compounding Calculator - OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Calculate your Ethereum retirement, LTV borrowing power, and asset purchasing power.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System (Ethereum Theme) --- */
    :root { 
        --primary: #627eea; /* Ethereum Blue */
        --primary-dark: #4b66b5; 
        --text-dark: #1e293b; --accent: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --safe-green: #dcfce7;
        --soft-eth: #f0f4ff; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 60px 20px 20px; }
    
    .otechy-badge { display: table; margin: 0 auto 10px; background: var(--soft-eth); color: var(--primary-dark); padding: 6px 16px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #c7d2fe; }
    
    .tool-header { text-align: center; margin-bottom: 30px; }
    .tool-header h1 { font-size: clamp(24px, 5vw, 38px); font-weight: 850; color: var(--text-dark); margin: 0; display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; text-align: center; }
    .tool-header h1 span { color: var(--primary); }
    .quick-value { color: var(--accent); font-weight: 600; font-size: 14px; margin-top: 5px; text-align: center; }
    
    /* Main Grid */
    .otechy-card { background: var(--white); padding: 30px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 4px 15px rgba(0,0,0,0.03); margin-bottom: 30px; }
    
    .input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-bottom: 30px; }
    .input-section { background: #f8fafc; padding: 20px; border-radius: 12px; border: 1px solid var(--border); }
    .section-title { font-size: 13px; font-weight: 800; color: var(--text-dark); margin-bottom: 15px; text-transform: uppercase; display: flex; align-items: center; gap: 8px; }
    
    .input-group { margin-bottom: 15px; }
    .input-group label { font-size: 11px; font-weight: 700; color: var(--accent); display: block; margin-bottom: 6px; text-transform: uppercase; }
    .input-wrapper { position: relative; }
    .input-prefix { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--accent); font-weight: 600; font-size: 14px; }
    .input-suffix { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: var(--accent); font-weight: 600; font-size: 12px; }
    .form-control { width: 100%; padding: 12px 12px 12px 30px; border-radius: 8px; border: 1px solid #cbd5e1; font-family: var(--font-main); font-size: 14px; font-weight: 600; outline: none; transition: 0.2s; }
    .form-control.no-prefix { padding-left: 12px; }
    .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(98, 126, 234, 0.1); }

    /* Dashboard Outputs */
    .dashboard-grid { display: grid; grid-template-columns: 1fr 1.5fr 1fr; gap: 15px; margin-bottom: 20px; }
    .stat-card { padding: 20px; border-radius: 12px; border: 1px solid var(--border); text-align: center; background: #fff; position: relative; overflow: hidden; }
    .stat-card.hero { background: var(--text-dark); border-color: #334155; transform: scale(1.02); z-index: 2; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); }
    .stat-label { font-size: 11px; font-weight: 800; color: var(--accent); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 5px; }
    .hero .stat-label { color: #94a3b8; }
    .stat-value { font-size: 28px; font-weight: 850; color: var(--text-dark); line-height: 1.2; word-break: break-word; }
    .hero .stat-value { color: var(--primary); font-size: 32px; }
    .stat-sub { font-size: 11px; color: var(--accent); margin-top: 5px; font-weight: 500; }
    .hero .stat-sub { color: #cbd5e1; }

    /* VS Comparison Container */
    .vs-container { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 25px; }
    .vs-card { padding: 20px; border-radius: 12px; border: 1px solid var(--border); background: #f8fafc; }
    .vs-header { font-size: 13px; font-weight: 800; color: var(--text-dark); margin-bottom: 15px; display: flex; align-items: center; gap: 8px; border-bottom: 1px solid var(--border); padding-bottom: 10px; }
    .vs-row { display: flex; justify-content: space-between; padding: 8px 0; font-size: 13px; font-weight: 500; color: var(--accent); border-bottom: 1px dashed #e2e8f0; }
    .vs-row b { color: var(--text-dark); font-weight: 700; text-align: right; }
    .vs-row:last-child { border-bottom: none; }

    /* LTV Box */
    .ltv-box { margin-top: 25px; border: 2px dashed var(--primary); border-radius: 12px; padding: 20px; background: #fff; text-align: center; }
    .ltv-box h3 { margin: 0 0 10px; font-size: 16px; color: var(--primary); }
    .ltv-result { font-size: 24px; font-weight: 850; color: var(--text-dark); word-break: break-word; }
    .ltv-sub { font-size: 12px; color: var(--accent); margin-top: 5px; font-weight: 500; }

    /* Buttons */
    .btn-calc { width: 100%; padding: 15px; background: var(--primary); color: #fff; font-size: 16px; font-weight: 800; border: none; border-radius: 10px; cursor: pointer; transition: 0.2s; font-family: var(--font-main); margin-top: 10px; }
    .btn-calc:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 5px 15px rgba(98, 126, 234, 0.2); }
    .btn-pdf { background: var(--text-dark); color: #fff; margin-top: 20px; }
    .btn-pdf:hover { background: #000; box-shadow: 0 5px 15px rgba(0,0,0,0.1); }

    /* Content Typography */
    .geo-citation { background: var(--white); padding: 25px; border-radius: 12px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0 20px; color: var(--text-dark); box-shadow: 0 4px 12px rgba(0,0,0,0.02); }
    .section-h2 { font-size: 22px; font-weight: 850; color: var(--text-dark); margin-bottom: 20px; }
    
    /* FAQ */
    .faq-section { margin-top: 60px; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 15px; }
    .faq-card { background: var(--white); padding: 20px; border-radius: 12px; border: 1px solid var(--border); }
    .faq-card h3 { font-size: 14px; color: var(--text-dark); margin: 0 0 8px; font-weight: 700; }
    .faq-card p { font-size: 12px; color: var(--accent); margin: 0; line-height: 1.5; }

    /* --- MOBILE RESPONSIVE FIXES --- */
    @media (max-width: 800px) {
        .otechy-tool-wrapper { padding: 30px 15px; }
        .otechy-card { padding: 20px; }
        .input-grid { grid-template-columns: 1fr; gap: 15px; }
        .dashboard-grid { grid-template-columns: 1fr; gap: 15px; }
        .stat-card.hero { transform: none; }
        .vs-container { grid-template-columns: 1fr; gap: 15px; }
        .vs-row { flex-direction: column; align-items: flex-start; gap: 4px; }
        .vs-row b { text-align: left; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;otechy-badge&quot;&gt;Crypto Wealth Toolkit &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;

    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;
            &lt;span&gt;Ethereum&lt;/span&gt; Retirement Planner
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Simulate compounding ETH DCA, LTV borrowing power, and asset purchasing power based on conservative growth models.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-section&quot;&gt;
                &lt;div class=&quot;section-title&quot;&gt;
                    &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 320 512&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z&quot;/&gt;&lt;/svg&gt; 
                    1. Your Stack
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Current Ethereum Stack&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inStack&quot; class=&quot;form-control no-prefix&quot; value=&quot;0.25&quot; step=&quot;0.1&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                        &lt;span class=&quot;input-suffix&quot;&gt;ETH&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Monthly Buying (DCA)&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;span class=&quot;input-prefix&quot;&gt;$&lt;/span&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inDCA&quot; class=&quot;form-control&quot; value=&quot;25&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-section&quot;&gt;
                &lt;div class=&quot;section-title&quot;&gt;⏳ 2. Timeline&lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Start Year&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inStartYear&quot; class=&quot;form-control no-prefix&quot; value=&quot;2026&quot; min=&quot;2026&quot; max=&quot;2150&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Target Retirement Year&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inRetireYear&quot; class=&quot;form-control no-prefix&quot; value=&quot;2046&quot; min=&quot;2027&quot; max=&quot;2150&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-section&quot;&gt;
                &lt;div class=&quot;section-title&quot;&gt;📉 3. Fiat Expenses&lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Current Annual Expenses&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;span class=&quot;input-prefix&quot;&gt;$&lt;/span&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inExp&quot; class=&quot;form-control&quot; value=&quot;6000&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Fiat Inflation Rate&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inInf&quot; class=&quot;form-control no-prefix&quot; value=&quot;2&quot; step=&quot;0.5&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                        &lt;span class=&quot;input-suffix&quot;&gt;%&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-calc&quot; onclick=&quot;calculateRetirement()&quot;&gt;Calculate ETH Retirement&lt;/button&gt;

        &lt;div class=&quot;dashboard-grid&quot; style=&quot;margin-top: 30px;&quot;&gt;
            &lt;div class=&quot;stat-card&quot;&gt;
                &lt;div class=&quot;stat-label&quot;&gt;Total Stack at Retirement&lt;/div&gt;
                &lt;div class=&quot;stat-value&quot; id=&quot;outEth&quot;&gt;0.00 ETH&lt;/div&gt;
                &lt;div class=&quot;stat-sub&quot;&gt;Based on 5% ETH CAGR model&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-card hero&quot;&gt;
                &lt;div class=&quot;stat-label&quot;&gt;Projected Fiat Net Worth&lt;/div&gt;
                &lt;div class=&quot;stat-value&quot; id=&quot;outFiat&quot;&gt;$0&lt;/div&gt;
                &lt;div class=&quot;stat-sub&quot;&gt;Value of your stack in target year&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-card&quot;&gt;
                &lt;div class=&quot;stat-label&quot;&gt;Years of Savings&lt;/div&gt;
                &lt;div class=&quot;stat-value&quot; id=&quot;outYears&quot; style=&quot;color: var(--success);&quot;&gt;0 YRS&lt;/div&gt;
                &lt;div class=&quot;stat-sub&quot;&gt;Based on inflated annual expenses&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;vs-container&quot;&gt;
            &lt;div class=&quot;vs-card&quot;&gt;
                &lt;div class=&quot;vs-header&quot;&gt;💵 Traditional Fiat Strategy&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Total Fiat Invested: &lt;b id=&quot;vsTotalInvested&quot;&gt;$0&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Annual Expenses (Inflated): &lt;b id=&quot;vsExpInflated&quot; style=&quot;color: #ef4444;&quot;&gt;$0&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Purchasing Power Loss: &lt;b&gt;Continuous&lt;/b&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;vs-card&quot;&gt;
                &lt;div class=&quot;vs-header&quot;&gt;🏠 Asset Purchasing Power&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Avg House Price in Target Yr: &lt;b id=&quot;vsHousePrice&quot;&gt;$0&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;ETH Required per House: &lt;b id=&quot;vsEthPerHouse&quot;&gt;0 ETH&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Total Houses You Can Afford: &lt;b id=&quot;vsTotalHouses&quot; style=&quot;color: var(--success);&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;ltv-box&quot;&gt;
            &lt;h3&gt;🏦 Never Sell: 50% LTV Collateral Loan&lt;/h3&gt;
            &lt;p style=&quot;font-size: 13px; color: var(--accent); margin-bottom: 15px;&quot;&gt;Instead of selling your Ethereum and paying capital gains tax (or losing potential staking yield), you can borrow against it. If you take a conservative 50% LTV loan against your stack at retirement, here is your tax-free cash capacity:&lt;/p&gt;
            &lt;div class=&quot;ltv-result&quot; id=&quot;outLtvLoan&quot;&gt;$0&lt;/div&gt;
            &lt;div class=&quot;ltv-sub&quot;&gt;This loan covers &lt;strong id=&quot;outLtvYears&quot; style=&quot;color: var(--text-dark);&quot;&gt;0&lt;/strong&gt; years of your inflated living expenses.&lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-calc btn-pdf&quot; onclick=&quot;exportProPDF()&quot;&gt;
            Download Year-by-Year Ledger (PDF)
        &lt;/button&gt;

    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        The fundamental shift in wealth planning is realizing that fiat currency depreciates while decentralized assets appreciate. This &lt;strong&gt;Ethereum Retirement Planner&lt;/strong&gt; models the mathematical reality of continuous Dollar Cost Averaging (DCA) into ETH. It features the popular &lt;strong&gt;50% LTV Collateral Loan strategy&lt;/strong&gt;, allowing you to borrow against your assets tax-free to fund your lifestyle without ever triggering a taxable sale.
    &lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is the 5% CAGR model?&lt;/h3&gt;&lt;p&gt;The tool uses a conservative Compound Annual Growth Rate (CAGR) of 5% for Ethereum&#39;s price trajectory starting at an estimated baseline of $2,100 in 2026 to project long-term compounding safely without hype.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Why are my &quot;Years of Savings&quot; going down initially?&lt;/h3&gt;&lt;p&gt;Because the tool calculates your annual living expenses adjusting for fiat inflation every year. If inflation outpaces your early accumulation, your purchasing power dips before the compounding takes over.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is a 50% LTV Loan?&lt;/h3&gt;&lt;p&gt;Loan-To-Value. Instead of selling Ethereum, you pledge it as collateral. A 50% LTV means if you have $1,000,000 in ETH, you can safely borrow $500,000 in cash without triggering capital gains taxes.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;How is the &quot;House Price&quot; calculated?&lt;/h3&gt;&lt;p&gt;We use a baseline house price of $105,540 in 2026, growing at a modest 0.1% hard-asset inflation rate. This helps measure your wealth in real tangible assets rather than just fiat numbers.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is Fiat Net Worth?&lt;/h3&gt;&lt;p&gt;It is the projected USD (or local fiat) value of your accumulated Ethereum stack at your target retirement year.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is my data saved anywhere?&lt;/h3&gt;&lt;p&gt;No. OTechy tools run strictly in your browser via Client-Side JavaScript. Your financial data and projections are completely private.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- 1. DYNAMIC ETHEREUM PRICE MODEL ---
    // Generates a 5% CAGR model starting at $2,100 in 2026.
    const ethPrices = {};
    let currentEthPrice = 2100.00;
    for(let y = 2026; y &lt;= 2150; y++) {
        ethPrices[y] = currentEthPrice;
        currentEthPrice *= 1.05; // 5% CAGR
    }

    let ledgerData = [];

    function formatCur(val) {
        return &quot;$&quot; + Math.round(val).toLocaleString();
    }

    function calculateRetirement() {
        const startYear = parseInt(document.getElementById(&#39;inStartYear&#39;).value) || 2026;
        const retireYear = parseInt(document.getElementById(&#39;inRetireYear&#39;).value) || 2046;
        const initialStack = parseFloat(document.getElementById(&#39;inStack&#39;).value) || 0;
        const monthlyBuy = parseFloat(document.getElementById(&#39;inDCA&#39;).value) || 0;
        const currentExp = parseFloat(document.getElementById(&#39;inExp&#39;).value) || 0;
        const infRate = parseFloat(document.getElementById(&#39;inInf&#39;).value) || 2;

        if (retireYear &lt; startYear) {
            alert(&quot;Retirement year must be after start year.&quot;);
            return;
        }

        let stack = initialStack;
        let totalFiatInvested = initialStack * (ethPrices[startYear] || 2100);
        ledgerData = [];
        
        let baseHousePrice = 105540.30; 

        for (let year = startYear; year &lt;= retireYear; year++) {
            let price = ethPrices[year] || ethPrices[&quot;2150&quot;]; 
            let yearlyBuy = monthlyBuy * 12;
            
            let ethAdded = yearlyBuy / price;
            if (year &gt; startYear) { 
                stack += ethAdded;
                totalFiatInvested += yearlyBuy;
            }
            
            let fiatValue = stack * price;
            
            let yearsElapsed = year - startYear;
            let inflatedExp = currentExp * Math.pow(1 + (infRate/100), yearsElapsed);
            let housePrice = baseHousePrice * Math.pow(1.001, yearsElapsed); 

            let yearsSavings = fiatValue / inflatedExp;
            
            ledgerData.push([
                year, 
                stack.toFixed(4) + &quot; ETH&quot;, 
                formatCur(price), 
                formatCur(totalFiatInvested), 
                formatCur(fiatValue), 
                yearsSavings.toFixed(1)
            ]);
        }

        let finalPrice = ethPrices[retireYear] || ethPrices[&quot;2150&quot;];
        let finalFiatValue = stack * finalPrice;
        let finalYearsElapsed = retireYear - startYear;
        let finalInflatedExp = currentExp * Math.pow(1 + (infRate/100), finalYearsElapsed);
        
        let yearsOfSavings = finalFiatValue / finalInflatedExp;
        let ltvAmount = finalFiatValue * 0.50; // 50% LTV
        let ltvYears = ltvAmount / finalInflatedExp;

        let finalHousePrice = baseHousePrice * Math.pow(1.001, finalYearsElapsed);
        let ethPerHouse = finalHousePrice / finalPrice;
        let totalHouses = stack / ethPerHouse;

        document.getElementById(&#39;outEth&#39;).innerText = stack.toFixed(4) + &quot; ETH&quot;;
        document.getElementById(&#39;outFiat&#39;).innerText = formatCur(finalFiatValue);
        document.getElementById(&#39;outYears&#39;).innerText = yearsOfSavings.toFixed(1) + &quot; YRS&quot;;

        document.getElementById(&#39;vsTotalInvested&#39;).innerText = formatCur(totalFiatInvested);
        document.getElementById(&#39;vsExpInflated&#39;).innerText = formatCur(finalInflatedExp);
        
        document.getElementById(&#39;vsHousePrice&#39;).innerText = formatCur(finalHousePrice);
        document.getElementById(&#39;vsEthPerHouse&#39;).innerText = ethPerHouse.toFixed(4) + &quot; ETH&quot;;
        document.getElementById(&#39;vsTotalHouses&#39;).innerText = totalHouses.toFixed(1);

        document.getElementById(&#39;outLtvLoan&#39;).innerText = formatCur(ltvAmount);
        document.getElementById(&#39;outLtvYears&#39;).innerText = ltvYears.toFixed(1);
    }

    function exportProPDF() {
        if(ledgerData.length === 0) return;
        
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);

        doc.setFillColor(98, 126, 234); // Ethereum Blue
        doc.rect(0, 0, 210, 25, &#39;F&#39;);
        doc.setTextColor(255); doc.setFontSize(18); doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;OTechy Ethereum Retirement Ledger&quot;, 15, 17);
        doc.setFontSize(9); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`GENERATED: ${new Date().toLocaleDateString()}`, 155, 17);

        doc.autoTable({ 
            startY: 35, 
            head: [[&#39;Year&#39;, &#39;Total Stack (ETH)&#39;, &#39;ETH Price&#39;, &#39;Total USD Invested&#39;, &#39;Fiat Net Worth&#39;, &#39;Years of Savings&#39;]], 
            body: ledgerData, 
            theme: &#39;grid&#39;, 
            headStyles: { fillColor: [30, 41, 59] }, 
            styles: { font: &#39;helvetica&#39;, fontSize: 9 },
            alternateRowStyles: { fillColor: [248, 250, 252] }
        });

        const finalY = doc.lastAutoTable.finalY + 15;
        doc.setFontSize(8); doc.setTextColor(100);
        doc.text(&quot;Disclaimer: Projections are based on mathematical models and do not constitute financial advice.&quot;, 15, finalY);

        doc.save(`Ethereum_Retirement_Plan_${new Date().getTime()}.pdf`);
    }

    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
        calculateRetirement();
    });
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/8331968154744339683'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/8331968154744339683'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/ethereum-retirement-calculator.html' title='Ethereum Retirement Calculator'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-394767150839135668</id><published>2026-03-27T01:26:00.000-07:00</published><updated>2026-03-28T08:56:26.557-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bitcoin Calculator"/><title type='text'>Bitcoin Retirement Calculator</title><content type='html'>&lt;title&gt;Bitcoin Retirement and Compounding Calculator | Real Retirement &amp; LTV Planner - OTechy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Simulate your Bitcoin wealth over time. Calculate compounding DCA, 50% LTV collateral loans, fiat inflation, and real asset purchasing power. Download your Pro PDF plan.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;bitcoin compounding calculator, bitcoin retirement planner, bitcoin DCA calculator, 50% LTV bitcoin loan, bitcoin purchasing power, crypto wealth tracker&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Bitcoin Compounding Calculator - OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Stop measuring wealth in depreciating fiat. Calculate your Bitcoin retirement, LTV borrowing power, and asset purchasing power.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #f59e0b; /* Bitcoin Orange */
        --primary-dark: #d97706; 
        --text-dark: #1e293b; --accent: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --success: #10b981; --safe-green: #dcfce7;
        --soft-orange: #fef3c7; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 60px 20px 20px; }
    
    .otechy-badge { display: table; margin: 0 auto 10px; background: var(--soft-orange); color: var(--primary-dark); padding: 6px 16px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #fde68a; }
    
    .tool-header { text-align: center; margin-bottom: 30px; }
    .tool-header h1 { font-size: clamp(24px, 5vw, 38px); font-weight: 850; color: var(--text-dark); margin: 0; display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; text-align: center; }
    .tool-header h1 span { color: var(--primary); }
    .quick-value { color: var(--accent); font-weight: 600; font-size: 14px; margin-top: 5px; text-align: center; }
    
    /* Ads */
    .otechy-ad { background: #e2e8f0; color: #94a3b8; font-size: 10px; font-weight: 700; text-transform: uppercase; height: 90px; display: flex; align-items: center; justify-content: center; border-radius: 12px; margin: 25px 0; }

    /* Main Grid */
    .otechy-card { background: var(--white); padding: 30px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 4px 15px rgba(0,0,0,0.03); margin-bottom: 30px; }
    
    .input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-bottom: 30px; }
    .input-section { background: #f8fafc; padding: 20px; border-radius: 12px; border: 1px solid var(--border); }
    .section-title { font-size: 13px; font-weight: 800; color: var(--text-dark); margin-bottom: 15px; text-transform: uppercase; display: flex; align-items: center; gap: 8px; }
    
    .input-group { margin-bottom: 15px; }
    .input-group label { font-size: 11px; font-weight: 700; color: var(--accent); display: block; margin-bottom: 6px; text-transform: uppercase; }
    .input-wrapper { position: relative; }
    .input-prefix { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--accent); font-weight: 600; font-size: 14px; }
    .input-suffix { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: var(--accent); font-weight: 600; font-size: 12px; }
    .form-control { width: 100%; padding: 12px 12px 12px 30px; border-radius: 8px; border: 1px solid #cbd5e1; font-family: var(--font-main); font-size: 14px; font-weight: 600; outline: none; transition: 0.2s; }
    .form-control.no-prefix { padding-left: 12px; }
    .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1); }

    /* Dashboard Outputs */
    .dashboard-grid { display: grid; grid-template-columns: 1fr 1.5fr 1fr; gap: 15px; margin-bottom: 20px; }
    .stat-card { padding: 20px; border-radius: 12px; border: 1px solid var(--border); text-align: center; background: #fff; position: relative; overflow: hidden; }
    .stat-card.hero { background: var(--text-dark); border-color: #334155; transform: scale(1.02); z-index: 2; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); }
    .stat-label { font-size: 11px; font-weight: 800; color: var(--accent); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 5px; }
    .hero .stat-label { color: #94a3b8; }
    .stat-value { font-size: 28px; font-weight: 850; color: var(--text-dark); line-height: 1.2; word-break: break-word; }
    .hero .stat-value { color: var(--primary); font-size: 32px; }
    .stat-sub { font-size: 11px; color: var(--accent); margin-top: 5px; font-weight: 500; }
    .hero .stat-sub { color: #cbd5e1; }

    /* VS Comparison Container */
    .vs-container { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 25px; }
    .vs-card { padding: 20px; border-radius: 12px; border: 1px solid var(--border); background: #f8fafc; }
    .vs-header { font-size: 13px; font-weight: 800; color: var(--text-dark); margin-bottom: 15px; display: flex; align-items: center; gap: 8px; border-bottom: 1px solid var(--border); padding-bottom: 10px; }
    .vs-row { display: flex; justify-content: space-between; padding: 8px 0; font-size: 13px; font-weight: 500; color: var(--accent); border-bottom: 1px dashed #e2e8f0; }
    .vs-row b { color: var(--text-dark); font-weight: 700; text-align: right; }
    .vs-row:last-child { border-bottom: none; }

    /* LTV Box */
    .ltv-box { margin-top: 25px; border: 2px dashed var(--primary); border-radius: 12px; padding: 20px; background: #fff; text-align: center; }
    .ltv-box h3 { margin: 0 0 10px; font-size: 16px; color: var(--primary); }
    .ltv-result { font-size: 24px; font-weight: 850; color: var(--text-dark); word-break: break-word; }
    .ltv-sub { font-size: 12px; color: var(--accent); margin-top: 5px; font-weight: 500; }

    /* Buttons */
    .btn-calc { width: 100%; padding: 15px; background: var(--primary); color: #fff; font-size: 16px; font-weight: 800; border: none; border-radius: 10px; cursor: pointer; transition: 0.2s; font-family: var(--font-main); margin-top: 10px; }
    .btn-calc:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 5px 15px rgba(245, 158, 11, 0.2); }
    .btn-pdf { background: var(--text-dark); color: #fff; margin-top: 20px; }
    .btn-pdf:hover { background: #000; box-shadow: 0 5px 15px rgba(0,0,0,0.1); }

    /* Content Typography */
    .geo-citation { background: var(--white); padding: 25px; border-radius: 12px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0 20px; color: var(--text-dark); box-shadow: 0 4px 12px rgba(0,0,0,0.02); }
    .section-h2 { font-size: 22px; font-weight: 850; color: var(--text-dark); margin-bottom: 20px; }
    
    /* FAQ */
    .faq-section { margin-top: 60px; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 15px; }
    .faq-card { background: var(--white); padding: 20px; border-radius: 12px; border: 1px solid var(--border); }
    .faq-card h3 { font-size: 14px; color: var(--text-dark); margin: 0 0 8px; font-weight: 700; }
    .faq-card p { font-size: 12px; color: var(--accent); margin: 0; line-height: 1.5; }

    /* --- MOBILE RESPONSIVE FIXES --- */
    @media (max-width: 800px) {
        .otechy-tool-wrapper { padding: 30px 15px; }
        .otechy-card { padding: 20px; }
        .input-grid { grid-template-columns: 1fr; gap: 15px; }
        .dashboard-grid { grid-template-columns: 1fr; gap: 15px; }
        .stat-card.hero { transform: none; }
        .vs-container { grid-template-columns: 1fr; gap: 15px; }
        .vs-row { flex-direction: column; align-items: flex-start; gap: 4px; }
        .vs-row b { text-align: left; }
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;otechy-badge&quot;&gt;Crypto Wealth Toolkit &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;

    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;
            &lt;span&gt;Bitcoin&lt;/span&gt; Retirement Planner
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Simulate compounding DCA, LTV borrowing power, and asset purchasing power based on data models.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        
        &lt;div class=&quot;input-grid&quot;&gt;
            &lt;div class=&quot;input-section&quot;&gt;
                &lt;div class=&quot;section-title&quot;&gt;₿ 1. Your Stack&lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Current Bitcoin Stack&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inStack&quot; class=&quot;form-control no-prefix&quot; value=&quot;0.01&quot; step=&quot;0.01&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                        &lt;span class=&quot;input-suffix&quot;&gt;BTC&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Monthly Buying (DCA)&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;span class=&quot;input-prefix&quot;&gt;$&lt;/span&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inDCA&quot; class=&quot;form-control&quot; value=&quot;100&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-section&quot;&gt;
                &lt;div class=&quot;section-title&quot;&gt;⏳ 2. Timeline&lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Start Year&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inStartYear&quot; class=&quot;form-control no-prefix&quot; value=&quot;2026&quot; min=&quot;2026&quot; max=&quot;2150&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Target Retirement Year&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inRetireYear&quot; class=&quot;form-control no-prefix&quot; value=&quot;2046&quot; min=&quot;2027&quot; max=&quot;2150&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-section&quot;&gt;
                &lt;div class=&quot;section-title&quot;&gt;📉 3. Fiat Expenses&lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Current Annual Expenses&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;span class=&quot;input-prefix&quot;&gt;$&lt;/span&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inExp&quot; class=&quot;form-control&quot; value=&quot;60000&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;label&gt;Fiat Inflation Rate&lt;/label&gt;
                    &lt;div class=&quot;input-wrapper&quot;&gt;
                        &lt;input type=&quot;number&quot; id=&quot;inInf&quot; class=&quot;form-control no-prefix&quot; value=&quot;2&quot; step=&quot;0.5&quot; oninput=&quot;calculateRetirement()&quot;&gt;
                        &lt;span class=&quot;input-suffix&quot;&gt;%&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-calc&quot; onclick=&quot;calculateRetirement()&quot;&gt;Calculate Retirement Projection&lt;/button&gt;

        &lt;div class=&quot;dashboard-grid&quot; style=&quot;margin-top: 30px;&quot;&gt;
            &lt;div class=&quot;stat-card&quot;&gt;
                &lt;div class=&quot;stat-label&quot;&gt;Total Stack at Retirement&lt;/div&gt;
                &lt;div class=&quot;stat-value&quot; id=&quot;outBtc&quot;&gt;0.00 BTC&lt;/div&gt;
                &lt;div class=&quot;stat-sub&quot;&gt;Based on 5% BTC CAGR model&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-card hero&quot;&gt;
                &lt;div class=&quot;stat-label&quot;&gt;Projected Fiat Net Worth&lt;/div&gt;
                &lt;div class=&quot;stat-value&quot; id=&quot;outFiat&quot;&gt;$0&lt;/div&gt;
                &lt;div class=&quot;stat-sub&quot;&gt;Value of your stack in target year&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;stat-card&quot;&gt;
                &lt;div class=&quot;stat-label&quot;&gt;Years of Savings&lt;/div&gt;
                &lt;div class=&quot;stat-value&quot; id=&quot;outYears&quot; style=&quot;color: var(--success);&quot;&gt;0 YRS&lt;/div&gt;
                &lt;div class=&quot;stat-sub&quot;&gt;Based on inflated annual expenses&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;vs-container&quot;&gt;
            &lt;div class=&quot;vs-card&quot;&gt;
                &lt;div class=&quot;vs-header&quot;&gt;💵 Traditional Fiat Strategy&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Total Fiat Invested: &lt;b id=&quot;vsTotalInvested&quot;&gt;$0&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Annual Expenses (Inflated): &lt;b id=&quot;vsExpInflated&quot; style=&quot;color: #ef4444;&quot;&gt;$0&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Purchasing Power Loss: &lt;b&gt;Continuous&lt;/b&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;vs-card&quot;&gt;
                &lt;div class=&quot;vs-header&quot;&gt;🏠 Asset Purchasing Power&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Avg House Price in Target Yr: &lt;b id=&quot;vsHousePrice&quot;&gt;$0&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;BTC Required per House: &lt;b id=&quot;vsBtcPerHouse&quot;&gt;0 BTC&lt;/b&gt;&lt;/div&gt;
                &lt;div class=&quot;vs-row&quot;&gt;Total Houses You Can Afford: &lt;b id=&quot;vsTotalHouses&quot; style=&quot;color: var(--success);&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;ltv-box&quot;&gt;
            &lt;h3&gt;🏦 Never Sell: 50% LTV Collateral Loan&lt;/h3&gt;
            &lt;p style=&quot;font-size: 13px; color: var(--accent); margin-bottom: 15px;&quot;&gt;Instead of selling your Bitcoin and paying capital gains tax, you can borrow against it. If you take a conservative 50% LTV loan against your stack at retirement, here is your tax-free cash capacity:&lt;/p&gt;
            &lt;div class=&quot;ltv-result&quot; id=&quot;outLtvLoan&quot;&gt;$0&lt;/div&gt;
            &lt;div class=&quot;ltv-sub&quot;&gt;This loan covers &lt;strong id=&quot;outLtvYears&quot; style=&quot;color: var(--text-dark);&quot;&gt;0&lt;/strong&gt; years of your inflated living expenses.&lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;btn-calc btn-pdf&quot; onclick=&quot;exportProPDF()&quot;&gt;
            Download Year-by-Year Ledger (PDF)
        &lt;/button&gt;

    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        The fundamental shift in wealth planning is realizing that fiat currency depreciates while scarce assets appreciate. This &lt;strong&gt;Bitcoin Retirement Planner&lt;/strong&gt; models the mathematical reality of continuous Dollar Cost Averaging (DCA) into a hard asset. It features the popular &lt;strong&gt;50% LTV Collateral Loan strategy&lt;/strong&gt;, commonly used by the wealthy, allowing you to borrow against your assets tax-free to fund your lifestyle without ever triggering a taxable sale.
    &lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is the 5% CAGR model?&lt;/h3&gt;&lt;p&gt;The tool uses a conservative Compound Annual Growth Rate (CAGR) of 5% for Bitcoin&#39;s price trajectory starting from 2026, extracted directly from standard financial projections.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Why are my &quot;Years of Savings&quot; going down initially?&lt;/h3&gt;&lt;p&gt;Because the tool calculates your annual living expenses adjusting for fiat inflation every year. If inflation outpaces your early stacking, your purchasing power dips before compounding takes over.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is a 50% LTV Loan?&lt;/h3&gt;&lt;p&gt;Loan-To-Value. Instead of selling Bitcoin, you pledge it as collateral. A 50% LTV means if you have $1,000,000 in BTC, you can safely borrow $500,000 in cash without triggering capital gains taxes.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;How is the &quot;House Price&quot; calculated?&lt;/h3&gt;&lt;p&gt;We use a baseline house price of $105,540 in 2026, growing at a modest 0.1% hard-asset inflation rate. This helps measure your wealth in real tangible assets rather than just fiat numbers.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is Fiat Net Worth?&lt;/h3&gt;&lt;p&gt;It is the projected USD (or local fiat) value of your accumulated Bitcoin stack at your target retirement year.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is my data saved anywhere?&lt;/h3&gt;&lt;p&gt;No. OTechy tools run strictly in your browser via Client-Side JavaScript. Your financial data and projections are completely private.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

      &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- 1. THE BITCOIN PRICE MODEL (5% CAGR from 2026 -&gt; 2150) ---
    const btcPrices = {&quot;2026&quot;: 68886.58, &quot;2027&quot;: 72330.91, &quot;2028&quot;: 75947.45, &quot;2029&quot;: 79744.83, &quot;2030&quot;: 83732.07, &quot;2031&quot;: 87918.67, &quot;2032&quot;: 92314.61, &quot;2033&quot;: 96930.34, &quot;2034&quot;: 101776.85, &quot;2035&quot;: 106865.7, &quot;2036&quot;: 112208.98, &quot;2037&quot;: 117819.43, &quot;2038&quot;: 123710.4, &quot;2039&quot;: 129895.92, &quot;2040&quot;: 136390.72, &quot;2041&quot;: 143210.25, &quot;2042&quot;: 150370.76, &quot;2043&quot;: 157889.3, &quot;2044&quot;: 165783.77, &quot;2045&quot;: 174072.96, &quot;2046&quot;: 182776.6, &quot;2047&quot;: 191915.43, &quot;2048&quot;: 201511.21, &quot;2049&quot;: 211586.77, &quot;2050&quot;: 222166.11, &quot;2051&quot;: 233274.41, &quot;2052&quot;: 244938.13, &quot;2053&quot;: 257185.04, &quot;2054&quot;: 270044.29, &quot;2055&quot;: 283546.5, &quot;2056&quot;: 297723.83, &quot;2057&quot;: 312610.02, &quot;2058&quot;: 328240.52, &quot;2059&quot;: 344652.55, &quot;2060&quot;: 361885.18, &quot;2061&quot;: 379979.43, &quot;2062&quot;: 398978.41, &quot;2063&quot;: 418927.33, &quot;2064&quot;: 439873.69, &quot;2065&quot;: 461867.38, &quot;2066&quot;: 484960.75, &quot;2067&quot;: 509208.78, &quot;2068&quot;: 534669.22, &quot;2069&quot;: 561402.68, &quot;2070&quot;: 589472.82, &quot;2071&quot;: 618946.46, &quot;2072&quot;: 649893.78, &quot;2073&quot;: 682388.47, &quot;2074&quot;: 716507.89, &quot;2075&quot;: 752333.29, &quot;2076&quot;: 789949.95, &quot;2077&quot;: 829447.45, &quot;2078&quot;: 870919.82, &quot;2079&quot;: 914465.81, &quot;2080&quot;: 960189.1, &quot;2081&quot;: 1008198.56, &quot;2082&quot;: 1058608.49, &quot;2083&quot;: 1111538.91, &quot;2084&quot;: 1167115.86, &quot;2085&quot;: 1225471.65, &quot;2086&quot;: 1286745.23, &quot;2087&quot;: 1351082.5, &quot;2088&quot;: 1418636.62, &quot;2089&quot;: 1489568.45, &quot;2090&quot;: 1564046.87, &quot;2091&quot;: 1642249.22, &quot;2092&quot;: 1724361.68, &quot;2093&quot;: 1810579.76, &quot;2094&quot;: 1901108.75, &quot;2095&quot;: 1996164.19, &quot;2096&quot;: 2095972.4, &quot;2097&quot;: 2200771.02, &quot;2098&quot;: 2310809.57, &quot;2099&quot;: 2426350.05, &quot;2100&quot;: 2547667.55, &quot;2101&quot;: 2675050.93, &quot;2102&quot;: 2808803.47, &quot;2103&quot;: 2949243.65, &quot;2104&quot;: 3096705.83, &quot;2105&quot;: 3251541.12, &quot;2106&quot;: 3414118.17, &quot;2107&quot;: 3584824.08, &quot;2108&quot;: 3764065.29, &quot;2109&quot;: 3952268.55, &quot;2110&quot;: 4149881.98, &quot;2111&quot;: 4357376.08, &quot;2112&quot;: 4575244.88, &quot;2113&quot;: 4804007.13, &quot;2114&quot;: 5044207.48, &quot;2115&quot;: 5296417.86, &quot;2116&quot;: 5561238.75, &quot;2117&quot;: 5839300.69, &quot;2118&quot;: 6131265.72, &quot;2119&quot;: 6437829.01, &quot;2120&quot;: 6759720.46, &quot;2121&quot;: 7097706.48, &quot;2122&quot;: 7452591.81, &quot;2123&quot;: 7825221.4, &quot;2124&quot;: 8216482.47, &quot;2125&quot;: 8627306.59, &quot;2126&quot;: 9058671.92, &quot;2127&quot;: 9511605.51, &quot;2128&quot;: 9987185.79, &quot;2129&quot;: 10486545.08, &quot;2130&quot;: 11010872.33, &quot;2131&quot;: 11561415.95, &quot;2132&quot;: 12139486.75, &quot;2133&quot;: 12746461.09, &quot;2134&quot;: 13383784.14, &quot;2135&quot;: 14052973.35, &quot;2136&quot;: 14755622.01, &quot;2137&quot;: 15493403.11, &quot;2138&quot;: 16268073.27, &quot;2139&quot;: 17081476.93, &quot;2140&quot;: 17935550.78, &quot;2141&quot;: 18832328.32, &quot;2142&quot;: 19773944.74, &quot;2143&quot;: 20762641.97, &quot;2144&quot;: 21800774.07, &quot;2145&quot;: 22890812.77, &quot;2146&quot;: 24035353.41, &quot;2147&quot;: 25237121.08, &quot;2148&quot;: 26498977.14, &quot;2149&quot;: 27823926.0, &quot;2150&quot;: 29215122.3};

    let ledgerData = [];

    function formatCur(val) {
        return &quot;$&quot; + Math.round(val).toLocaleString();
    }

    function calculateRetirement() {
        const startYear = parseInt(document.getElementById(&#39;inStartYear&#39;).value) || 2026;
        const retireYear = parseInt(document.getElementById(&#39;inRetireYear&#39;).value) || 2046;
        const initialStack = parseFloat(document.getElementById(&#39;inStack&#39;).value) || 0;
        const monthlyBuy = parseFloat(document.getElementById(&#39;inDCA&#39;).value) || 0;
        const currentExp = parseFloat(document.getElementById(&#39;inExp&#39;).value) || 0;
        const infRate = parseFloat(document.getElementById(&#39;inInf&#39;).value) || 2;

        if (retireYear &lt; startYear) {
            alert(&quot;Retirement year must be after start year.&quot;);
            return;
        }

        let stack = initialStack;
        let totalFiatInvested = initialStack * (btcPrices[startYear] || 68886.58);
        ledgerData = [];
        let baseHousePrice = 105540.30; 

        for (let year = startYear; year &lt;= retireYear; year++) {
            let price = btcPrices[year] || btcPrices[&quot;2150&quot;];
            let yearlyBuy = monthlyBuy * 12;
            
            let btcAdded = yearlyBuy / price;
            if (year &gt; startYear) { 
                stack += btcAdded;
                totalFiatInvested += yearlyBuy;
            }
            
            let fiatValue = stack * price;
            let yearsElapsed = year - startYear;
            let inflatedExp = currentExp * Math.pow(1 + (infRate/100), yearsElapsed);
            let housePrice = baseHousePrice * Math.pow(1.001, yearsElapsed); 
            let yearsSavings = fiatValue / inflatedExp;
            
            ledgerData.push([
                year, 
                stack.toFixed(4) + &quot; BTC&quot;, 
                formatCur(price), 
                formatCur(totalFiatInvested), 
                formatCur(fiatValue), 
                yearsSavings.toFixed(1)
            ]);
        }

        let finalPrice = btcPrices[retireYear] || btcPrices[&quot;2150&quot;];
        let finalFiatValue = stack * finalPrice;
        let finalYearsElapsed = retireYear - startYear;
        let finalInflatedExp = currentExp * Math.pow(1 + (infRate/100), finalYearsElapsed);
        
        let yearsOfSavings = finalFiatValue / finalInflatedExp;
        let ltvAmount = finalFiatValue * 0.50; 
        let ltvYears = ltvAmount / finalInflatedExp;

        let finalHousePrice = baseHousePrice * Math.pow(1.001, finalYearsElapsed);
        let btcPerHouse = finalHousePrice / finalPrice;
        let totalHouses = stack / btcPerHouse;

        document.getElementById(&#39;outBtc&#39;).innerText = stack.toFixed(4) + &quot; BTC&quot;;
        document.getElementById(&#39;outFiat&#39;).innerText = formatCur(finalFiatValue);
        document.getElementById(&#39;outYears&#39;).innerText = yearsOfSavings.toFixed(1) + &quot; YRS&quot;;

        document.getElementById(&#39;vsTotalInvested&#39;).innerText = formatCur(totalFiatInvested);
        document.getElementById(&#39;vsExpInflated&#39;).innerText = formatCur(finalInflatedExp);
        
        document.getElementById(&#39;vsHousePrice&#39;).innerText = formatCur(finalHousePrice);
        document.getElementById(&#39;vsBtcPerHouse&#39;).innerText = btcPerHouse.toFixed(4) + &quot; BTC&quot;;
        document.getElementById(&#39;vsTotalHouses&#39;).innerText = totalHouses.toFixed(1);

        document.getElementById(&#39;outLtvLoan&#39;).innerText = formatCur(ltvAmount);
        document.getElementById(&#39;outLtvYears&#39;).innerText = ltvYears.toFixed(1);
    }

    function exportProPDF() {
        if(ledgerData.length === 0) return;
        
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);

        doc.setFillColor(245, 158, 11); 
        doc.rect(0, 0, 210, 25, &#39;F&#39;);
        doc.setTextColor(255); doc.setFontSize(18); doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;OTechy Bitcoin Retirement Ledger&quot;, 15, 17);
        doc.setFontSize(9); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`GENERATED: ${new Date().toLocaleDateString()}`, 155, 17);

        doc.autoTable({ 
            startY: 35, 
            head: [[&#39;Year&#39;, &#39;Total Stack (BTC)&#39;, &#39;BTC Price&#39;, &#39;Total USD Invested&#39;, &#39;Fiat Net Worth&#39;, &#39;Years of Savings&#39;]], 
            body: ledgerData, 
            theme: &#39;grid&#39;, 
            headStyles: { fillColor: [30, 41, 59] }, 
            styles: { font: &#39;helvetica&#39;, fontSize: 9 },
            alternateRowStyles: { fillColor: [248, 250, 252] }
        });

        const finalY = doc.lastAutoTable.finalY + 15;
        doc.setFontSize(8); doc.setTextColor(100);
        doc.text(&quot;Disclaimer: Projections are based on mathematical models and do not constitute financial advice.&quot;, 15, finalY);

        doc.save(`Bitcoin_Retirement_Plan_${new Date().getTime()}.pdf`);
    }

    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
        calculateRetirement();
    });
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/394767150839135668'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/394767150839135668'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/bitcoin-retirement-calculator.html' title='Bitcoin Retirement Calculator'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-1825645095496577127</id><published>2026-03-22T07:05:33.516-07:00</published><updated>2026-03-22T07:05:33.517-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Date Calculator"/><title type='text'>Date Calculator to Add or Subtract Online</title><content type='html'>&lt;title&gt;Premium Date Calculator Online | Add/Subtract Business Days - OTechy&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Calculate future or past dates instantly. Add or subtract calendar days or business days (excluding weekends). Generate SLA deadlines and download Pro PDF reports.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;date calculator online, add days to date, 90 days from today, business day calculator, working days calculator, SLA deadline calculator India, date math tool&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Premium Date Calculator Online - OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;The most advanced free date calculator. Calculate business days, add/subtract time, and track project milestones.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/luxon/3.4.4/luxon.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.25/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { --primary: #3b82f6; --text-dark: #1e293b; --accent: #64748b; --border: #e2e8f0; --white: #ffffff; }
    .otechy-tool-wrapper { font-family: &#39;Poppins&#39;, sans-serif; max-width: 900px; margin: 0 auto; padding: 80px 20px 20px; color: var(--text-dark); line-height: 1.6; }
    @media (max-width: 768px) { .otechy-tool-wrapper { padding: 40px 15px 15px !important; } }
    
    .tool-header { text-align: center; margin-bottom: 30px; }
    .otechy-badge { display: table; margin: 0 auto 10px; background: #eff6ff; color: var(--primary); padding: 5px 15px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #dbeafe; }
    .tool-header h1 { font-size: clamp(24px, 5vw, 36px); font-weight: 850; color: var(--primary); letter-spacing: -0.5px; display: flex; align-items: center; justify-content: center; gap: 10px; }
    .quick-value { color: var(--accent); font-size: 14px; margin-top: 5px; }
    
    .tool-navigation { display: flex; justify-content: center; gap: 10px; margin-bottom: 25px; }
    .nav-link { font-size: 11px; font-weight: 700; color: var(--accent); text-decoration: none; padding: 6px 15px; border: 1px solid var(--border); border-radius: 8px; transition: 0.3s; }
    .nav-link:hover { color: var(--primary); border-color: var(--primary); }
    
    .otechy-card { background: var(--white); padding: 30px; border-radius: 12px; border: 1px solid var(--border); box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
    
    .settings-bar { display: grid; grid-template-columns: 1fr 1fr 1.5fr; gap: 15px; background: #f8fafc; padding: 20px; border-radius: 10px; margin-bottom: 20px; border: 1px solid var(--border); align-items: end; }
    .input-group label { font-size: 11px; font-weight: 800; color: var(--accent); text-transform: uppercase; display: block; margin-bottom: 5px; }
    .input-group select, .input-group input { width: 100%; padding: 12px; border-radius: 8px; border: 1px solid var(--border); font-family: &#39;Poppins&#39;; font-size: 14px; outline: none; }
    .input-group input:focus, .input-group select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); }
    
    .vs-container { display: grid; grid-template-columns: 1fr 1.5fr; gap: 15px; margin-top: 20px; }
    .vs-card { padding: 20px; border-radius: 12px; border: 1px solid var(--border); position: relative; }
    .vs-card.original { border-bottom: 4px solid var(--primary); }
    .vs-card.converted { border-bottom: 4px solid var(--text-dark); background: #f8fafc; text-align: center; display: flex; flex-direction: column; justify-content: center; }
    .file-tag { position: absolute; top: 10px; left: 10px; font-size: 8px; font-weight: 900; background: #eff6ff; color: var(--primary); padding: 4px 10px; border-radius: 4px; text-transform: uppercase; }
    
    .audit-details { margin-top: 25px; }
    .audit-row { display: flex; justify-content: space-between; font-size: 13px; padding: 8px 0; border-bottom: 1px dashed #e2e8f0; }
    .audit-row b { color: var(--primary); }
    
    .total-display { text-align: center; margin-top: 15px; }
    .target-day-name { font-size: 14px; font-weight: 700; color: var(--accent); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 5px; }
    .total-display h2 { font-size: clamp(24px, 4vw, 32px); font-weight: 850; color: var(--primary); margin: 0 0 15px 0; line-height: 1.2; }
    
    .otechy-btn { border: none; font-weight: 700; cursor: pointer; transition: 0.3s; display: flex; align-items: center; justify-content: center; gap: 8px; font-family: &#39;Poppins&#39;; }
    .btn-pdf { background: var(--text-dark); color: #fff; padding: 14px; border-radius: 8px; width: 100%; font-size: 13px; }
    .btn-pdf:hover { background: #000; transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
    .btn-outline { background: transparent; border: 1px solid var(--border); color: var(--accent); padding: 12px; border-radius: 10px; }
    .btn-outline:hover { border-color: var(--primary); color: var(--primary); background: #eff6ff; }
    
    .ledger-container { display: none; margin-top: 20px; overflow-x: auto; border: 1px solid var(--border); border-radius: 10px; }
    table { width: 100%; border-collapse: collapse; min-width: 450px; font-size: 13px; text-align: left; }
    th { background: #f8fafc; padding: 15px; color: var(--text-dark); font-size: 11px; text-transform: uppercase; border-bottom: 2px solid var(--border); }
    td { padding: 12px 15px; border-bottom: 1px solid var(--border); }
    tr:last-child td { border-bottom: none; }
    .milestone-row { background: #f0fdf4; font-weight: 700; color: #166534; }
    
    .geo-citation { background: #f1f5f9; padding: 20px; border-radius: 10px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0; color: var(--text-dark); }
    .how-to h3 { text-align: center; font-weight: 850; margin-bottom: 25px; }
    .step { display: flex; gap: 15px; background: #fff; padding: 15px; border-radius: 10px; border: 1px solid var(--border); margin-bottom: 10px; }
    .step-icon { background: var(--soft-blue); color: var(--primary); width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 800; flex-shrink: 0; }
    
    .faq-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
    .faq-card { background: #fff; padding: 20px; border-radius: 10px; border: 1px solid var(--border); }
    .faq-card h3 { font-size: 14px; color: var(--primary); margin-bottom: 8px; font-weight: 700; }
    .faq-card p { font-size: 12px; color: var(--accent); margin: 0; }
    
    @media (max-width: 768px) { 
        .settings-bar { grid-template-columns: 1fr; gap: 10px; } 
        .vs-container, .faq-grid { grid-template-columns: 1fr; } 
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;div class=&quot;otechy-badge&quot;&gt;Time &amp; Date Suite &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;
        &lt;h1&gt;
            Premium Date Calculator
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; style=&quot;vertical-align: middle;&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;4&quot; width=&quot;18&quot; height=&quot;18&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;line x1=&quot;16&quot; y1=&quot;2&quot; x2=&quot;16&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;8&quot; y1=&quot;2&quot; x2=&quot;8&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;3&quot; y1=&quot;10&quot; x2=&quot;21&quot; y2=&quot;10&quot;&gt;&lt;/line&gt;&lt;/svg&gt;
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Calculate future deadlines, SLAs, and project milestones instantly.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;tool-navigation&quot;&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?q=age&quot; class=&quot;nav-link&quot;&gt;Age Calculator&lt;/a&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?q=timezone&quot; class=&quot;nav-link&quot;&gt;Timezone Converter&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT TOP&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        &lt;div class=&quot;settings-bar&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Base Date&lt;/label&gt;
                &lt;input type=&quot;date&quot; id=&quot;baseDate&quot; onchange=&quot;calculateDate()&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Operation&lt;/label&gt;
                &lt;select id=&quot;operation&quot; onchange=&quot;calculateDate()&quot;&gt;
                    &lt;option value=&quot;ADD&quot;&gt;Add (+)&lt;/option&gt;
                    &lt;option value=&quot;SUB&quot;&gt;Subtract (-)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Number of Days&lt;/label&gt;
                &lt;div style=&quot;display: flex; gap: 10px;&quot;&gt;
                    &lt;input type=&quot;number&quot; id=&quot;numDays&quot; value=&quot;30&quot; min=&quot;0&quot; oninput=&quot;calculateDate()&quot; style=&quot;flex: 1;&quot;&gt;
                    &lt;select id=&quot;dayType&quot; onchange=&quot;calculateDate()&quot; style=&quot;flex: 1.5;&quot;&gt;
                        &lt;option value=&quot;CALENDAR&quot;&gt;Calendar Days&lt;/option&gt;
                        &lt;option value=&quot;BUSINESS&quot;&gt;Business Days (Skip Weekends)&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;vs-container&quot;&gt;
            &lt;div class=&quot;vs-card original&quot;&gt;
                &lt;div class=&quot;file-tag&quot;&gt;Input Summary&lt;/div&gt;
                &lt;div class=&quot;audit-details&quot;&gt;
                    &lt;div class=&quot;audit-row&quot;&gt;&lt;span&gt;Start Date:&lt;/span&gt; &lt;b id=&quot;sum-start&quot;&gt;--&lt;/b&gt;&lt;/div&gt;
                    &lt;div class=&quot;audit-row&quot;&gt;&lt;span&gt;Action:&lt;/span&gt; &lt;b id=&quot;sum-action&quot;&gt;--&lt;/b&gt;&lt;/div&gt;
                    &lt;div class=&quot;audit-row&quot;&gt;&lt;span&gt;Days Count:&lt;/span&gt; &lt;b id=&quot;sum-days&quot;&gt;--&lt;/b&gt;&lt;/div&gt;
                    &lt;div class=&quot;audit-row&quot;&gt;&lt;span&gt;Logic Mode:&lt;/span&gt; &lt;b id=&quot;sum-mode&quot;&gt;--&lt;/b&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;vs-card converted&quot;&gt;
                &lt;div class=&quot;file-tag&quot;&gt;Target Date Result&lt;/div&gt;
                &lt;div class=&quot;total-display&quot;&gt;
                    &lt;div class=&quot;target-day-name&quot; id=&quot;res-dayname&quot;&gt;--&lt;/div&gt;
                    &lt;h2 id=&quot;res-targetdate&quot;&gt;--&lt;/h2&gt;
                &lt;/div&gt;
                &lt;button class=&quot;otechy-btn btn-pdf&quot; onclick=&quot;exportProPDF()&quot;&gt;
                    &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot;&gt;&lt;path d=&quot;M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3&quot;/&gt;&lt;/svg&gt;
                    Download Project Timeline PDF
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;otechy-btn btn-outline&quot; style=&quot;width: 100%; margin-top: 20px;&quot; onclick=&quot;toggleLedger()&quot;&gt;View Milestone Timeline&lt;/button&gt;
        &lt;div class=&quot;ledger-container&quot; id=&quot;ledger-box&quot;&gt;
            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;&lt;th&gt;Milestone&lt;/th&gt;&lt;th&gt;Percentage&lt;/th&gt;&lt;th&gt;Date Reached&lt;/th&gt;&lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;ledger-body&quot;&gt;&lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT MIDDLE&lt;/div&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        For businesses operating in &lt;strong&gt;Bharat&lt;/strong&gt;, strict adherence to Service Level Agreements (SLAs) and contract timelines is critical. OTechy&#39;s &lt;strong&gt;Premium Date Calculator&lt;/strong&gt; automatically factors in leap years and provides an exclusive &lt;strong&gt;Business Day&lt;/strong&gt; mode, allowing you to seamlessly skip Saturdays and Sundays when calculating delivery dates, notice periods, or legal deadlines.
    &lt;/div&gt;

    &lt;div class=&quot;how-to&quot;&gt;
        &lt;h3&gt;How to use the Date Calculator Online&lt;/h3&gt;
        &lt;div class=&quot;step&quot;&gt;
            &lt;div class=&quot;step-icon&quot;&gt;1&lt;/div&gt;
            &lt;p&gt;&lt;strong&gt;Set Base Date:&lt;/strong&gt; The tool defaults to today&#39;s date, but you can select any date in the past or future as your starting point.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class=&quot;step&quot;&gt;
            &lt;div class=&quot;step-icon&quot;&gt;2&lt;/div&gt;
            &lt;p&gt;&lt;strong&gt;Enter Days &amp; Mode:&lt;/strong&gt; Enter the number of days (e.g., 30, 90, 180). Choose &quot;Calendar Days&quot; for exact date math, or &quot;Business Days&quot; to skip weekends.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class=&quot;step&quot;&gt;
            &lt;div class=&quot;step-icon&quot;&gt;3&lt;/div&gt;
            &lt;p&gt;&lt;strong&gt;Export Timeline:&lt;/strong&gt; Open the &quot;Milestone Timeline&quot; to see 25%, 50%, and 75% progress markers, and download the full report as a PDF.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-top: 60px;&quot;&gt;
        &lt;h3 style=&quot;font-size: 20px; color: #1e293b; margin-bottom: 20px; font-weight: 850;&quot;&gt;Frequently Asked Questions&lt;/h3&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What are &quot;Business Days&quot;?&lt;/h3&gt;&lt;p&gt;Business days are standard working days (Monday through Friday). If you select this mode, the calculator automatically skips weekends when counting the target date.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Does it account for Leap Years?&lt;/h3&gt;&lt;p&gt;Yes. Our advanced engine automatically accounts for leap years (29 days in February) when adding or subtracting dates across multiple years.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I subtract days?&lt;/h3&gt;&lt;p&gt;Absolutely. Change the operation dropdown from &quot;Add&quot; to &quot;Subtract&quot; to calculate past dates (e.g., finding out what date was 60 days ago).&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is the Milestone Timeline?&lt;/h3&gt;&lt;p&gt;The timeline breaks your total timeframe into quarters (25%, 50%, 75%, 100%). This is highly useful for tracking project progress and deadlines.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is the PDF Export free?&lt;/h3&gt;&lt;p&gt;Yes, all OTechy tools, including the Pro PDF generator, are 100% free and run entirely in your browser for maximum privacy.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Does it include public holidays?&lt;/h3&gt;&lt;p&gt;Currently, the &quot;Business Days&quot; logic only excludes weekends (Saturdays and Sundays). Official regional public holidays are not excluded as they vary by state.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px; background: #f1f5f9; display: flex; align-items: center; justify-content: center; color: #cbd5e1; font-weight: 700; font-size: 10px;&quot;&gt;AD SLOT BOTTOM&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    // --- Initialize ---
    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; { 
        document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.innerText = new Date().getFullYear());
        
        // Set default date to today using Luxon
        const today = luxon.DateTime.now().toISODate();
        document.getElementById(&#39;baseDate&#39;).value = today;
        
        calculateDate(); 
    });

    let timelineData = [];
    let reportData = {};

    function calculateDate() {
        const DateTime = luxon.DateTime;
        
        const baseDateStr = document.getElementById(&#39;baseDate&#39;).value;
        const op = document.getElementById(&#39;operation&#39;).value;
        const numDaysRaw = parseInt(document.getElementById(&#39;numDays&#39;).value);
        const numDays = isNaN(numDaysRaw) ? 0 : numDaysRaw;
        const dayType = document.getElementById(&#39;dayType&#39;).value;
        
        if(!baseDateStr) return;

        let baseDate = DateTime.fromISO(baseDateStr);
        let targetDate = baseDate;

        // Math Logic
        if (dayType === &#39;CALENDAR&#39;) {
            if (op === &#39;ADD&#39;) {
                targetDate = baseDate.plus({ days: numDays });
            } else {
                targetDate = baseDate.minus({ days: numDays });
            }
        } else {
            // Business Days Logic
            let daysAdded = 0;
            let direction = (op === &#39;ADD&#39;) ? 1 : -1;
            
            while (daysAdded &lt; numDays) {
                targetDate = targetDate.plus({ days: direction });
                // 1 = Monday, 7 = Sunday. Keep if &lt;= 5
                if (targetDate.weekday &lt;= 5) {
                    daysAdded++;
                }
            }
        }

        // Update Summary Card
        document.getElementById(&#39;sum-start&#39;).innerText = baseDate.toFormat(&#39;dd MMM yyyy&#39;);
        document.getElementById(&#39;sum-action&#39;).innerText = (op === &#39;ADD&#39;) ? &#39;Added&#39; : &#39;Subtracted&#39;;
        document.getElementById(&#39;sum-days&#39;).innerText = numDays;
        document.getElementById(&#39;sum-mode&#39;).innerText = (dayType === &#39;CALENDAR&#39;) ? &#39;Calendar Days&#39; : &#39;Business Days Only&#39;;

        // Update Target Card
        document.getElementById(&#39;res-dayname&#39;).innerText = targetDate.toFormat(&#39;EEEE&#39;); // Full day name
        document.getElementById(&#39;res-targetdate&#39;).innerText = targetDate.toFormat(&#39;dd MMM yyyy&#39;);

        // Store for PDF
        reportData = {
            start: baseDate.toFormat(&#39;dd MMM yyyy&#39;),
            action: (op === &#39;ADD&#39;) ? &#39;+&#39; : &#39;-&#39;,
            days: numDays,
            mode: (dayType === &#39;CALENDAR&#39;) ? &#39;Calendar Days&#39; : &#39;Business Days&#39;,
            targetDay: targetDate.toFormat(&#39;EEEE&#39;),
            targetDate: targetDate.toFormat(&#39;dd MMM yyyy&#39;)
        };

        generateTimeline(baseDate, numDays, op, dayType);
    }

    function generateTimeline(baseDate, totalDays, op, dayType) {
        const ledgerBody = document.getElementById(&#39;ledger-body&#39;);
        ledgerBody.innerHTML = &#39;&#39;;
        timelineData = [];

        if (totalDays === 0) return;

        const milestones = [
            { label: &#39;Project Kickoff&#39;, pct: 0 },
            { label: &#39;First Quarter Review&#39;, pct: 25 },
            { label: &#39;Mid-Point&#39;, pct: 50 },
            { label: &#39;Final Polish&#39;, pct: 75 },
            { label: &#39;Final Deadline&#39;, pct: 100 }
        ];

        milestones.forEach((m, index) =&gt; {
            let daysToApply = Math.round(totalDays * (m.pct / 100));
            let mDate = baseDate;

            if (dayType === &#39;CALENDAR&#39;) {
                if (op === &#39;ADD&#39;) mDate = baseDate.plus({ days: daysToApply });
                else mDate = baseDate.minus({ days: daysToApply });
            } else {
                let daysAdded = 0;
                let direction = (op === &#39;ADD&#39;) ? 1 : -1;
                while (daysAdded &lt; daysToApply) {
                    mDate = mDate.plus({ days: direction });
                    if (mDate.weekday &lt;= 5) daysAdded++;
                }
            }

            const isFinal = (m.pct === 100);
            const rowClass = isFinal ? &#39;class=&quot;milestone-row&quot;&#39; : &#39;&#39;;
            const dateStr = mDate.toFormat(&#39;EEEE, dd MMM yyyy&#39;);

            ledgerBody.innerHTML += `&lt;tr ${rowClass}&gt;&lt;td&gt;${m.label}&lt;/td&gt;&lt;td&gt;${m.pct}%&lt;/td&gt;&lt;td&gt;${dateStr}&lt;/td&gt;&lt;/tr&gt;`;
            timelineData.push([m.label, `${m.pct}%`, dateStr]);
        });
    }

    function toggleLedger() { 
        const lb = document.getElementById(&#39;ledger-box&#39;); 
        lb.style.display = (lb.style.display === &#39;block&#39;) ? &#39;none&#39; : &#39;block&#39;; 
    }

    function exportProPDF() {
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF(&#39;p&#39;, &#39;mm&#39;, &#39;a4&#39;);

        // Header
        doc.setFillColor(59, 130, 246); doc.rect(0, 0, 210, 25, &#39;F&#39;);
        doc.setTextColor(255); doc.setFontSize(18); doc.text(&quot;OTechy Project Timeline Report&quot;, 15, 17);
        doc.setFontSize(9); doc.text(`GENERATED: ${new Date().toLocaleDateString()}`, 155, 17);

        // Summary Box
        doc.setTextColor(30); doc.setFontSize(12); doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.text(&quot;Calculation Summary&quot;, 15, 40);
        
        doc.setFontSize(10); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(`Base Date: ${reportData.start}`, 15, 50);
        doc.text(`Adjustment: ${reportData.action} ${reportData.days} Days (${reportData.mode})`, 15, 57);
        
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
        doc.setTextColor(59, 130, 246);
        doc.text(`Target Deadline: ${reportData.targetDay}, ${reportData.targetDate}`, 15, 66);

        // Timeline Table
        if (timelineData.length &gt; 0) {
            doc.autoTable({ 
                startY: 75, 
                head: [[&#39;Milestone Stage&#39;, &#39;Progress&#39;, &#39;Scheduled Date&#39;]], 
                body: timelineData, 
                theme: &#39;grid&#39;, 
                headStyles: { fillColor: [30, 41, 59] }, 
                styles: { font: &#39;helvetica&#39;, fontSize: 9 },
                didParseCell: function (data) {
                    if (data.row.index === timelineData.length - 1) {
                        data.cell.styles.fontStyle = &#39;bold&#39;;
                        data.cell.styles.textColor = [22, 101, 52]; // Dark green for final row
                    }
                }
            });
        }

        // Footer
        doc.setFillColor(248, 250, 252); doc.rect(0, 280, 210, 17, &#39;F&#39;);
        doc.setFontSize(8); doc.setTextColor(100); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(&quot;Generated by OTechy.com - Premium Productivity Tools.&quot;, 15, 287);
        
        doc.save(`Timeline_Report_${new Date().getTime()}.pdf`);
    }
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1825645095496577127'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1825645095496577127'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/03/date-calculator-to-add-or-subtract.html' title='Date Calculator to Add or Subtract Online'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-973256772968157174</id><published>2026-02-11T10:39:00.000-08:00</published><updated>2026-02-11T10:39:35.124-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Base64 Decoder"/><category scheme="http://www.blogger.com/atom/ns#" term="Base64 Encoder"/><title type='text'>Base64 Encoder &amp; Decoder Online</title><content type='html'>&lt;title&gt;Base64 Encoder &amp; Decoder Online | Image to Data URI Converter - OTechy&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Convert text or files to Base64 instantly. Decode Base64 strings, generate Data URIs for images (HTML/CSS), and download results. Secure client-side tool.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;base64 encoder, base64 decoder, image to base64, data uri generator, decode base64 to text, base64 converter online, file to base64&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Base64 Crypto Studio - OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Securely encode text and files to Base64 string formats directly in your browser.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/npm/toastify-js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System (Inherited) --- */
    :root { 
        --primary: #3b82f6; --text-dark: #1e293b; --accent: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-blue: #f0f7ff; --success: #10b981; --safe-green: #dcfce7; 
        --safe-text: #166534; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 80px 20px 20px; }
    
    .otechy-badge { display: table; margin: 0 auto 10px; background: #eff6ff; color: var(--primary); padding: 6px 16px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #dbeafe; }
    
    /* Header */
    .tool-header { text-align: center; margin-bottom: 30px; }
    .tool-header h1 { 
        font-size: clamp(24px, 5vw, 42px); font-weight: 850; color: var(--primary); margin: 0; 
        display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; text-align: center; 
    }
    .quick-value { color: var(--primary); font-weight: 600; font-size: 14px; margin-top: 5px; text-align: center; }
    
    /* Nav */
    .tool-navigation { display: flex; justify-content: center; gap: 10px; margin-bottom: 25px; flex-wrap: wrap; margin-top: 20px; }
    .nav-link { text-decoration: none; font-size: 11px; font-weight: 700; color: var(--accent); background: var(--white); padding: 8px 18px; border-radius: 50px; border: 1px solid var(--border); transition: 0.3s; display: flex; align-items: center; gap: 6px; }
    .nav-link:hover { border-color: var(--primary); color: var(--primary); }

    /* Card */
    .otechy-card { background: var(--white); padding: 30px; border-radius: 12px; border: 1px solid var(--border); box-shadow: 0 4px 12px rgba(0,0,0,0.05); margin-bottom: 30px; }

    /* Custom Base64 Styles */
    .mode-switch { display: flex; background: #f1f5f9; padding: 5px; border-radius: 10px; margin-bottom: 20px; }
    .mode-btn { flex: 1; border: none; padding: 10px; background: transparent; cursor: pointer; font-weight: 700; color: var(--accent); border-radius: 8px; font-family: var(--font-main); transition: 0.2s; }
    .mode-btn.active { background: var(--white); color: var(--primary); shadow: 0 2px 5px rgba(0,0,0,0.05); }

    textarea.code-input {
        width: 100%; height: 150px; padding: 15px; border: 2px solid var(--border); border-radius: 12px;
        font-family: &#39;Monaco&#39;, &#39;Courier New&#39;, monospace; font-size: 13px; resize: vertical; outline: none;
        background: #f8fafc; color: var(--text-dark); margin-bottom: 15px;
    }
    textarea.code-input:focus { border-color: var(--primary); background: #fff; }

    /* Upload Zone */
    .upload-zone { border: 2px dashed #cbd5e1; border-radius: 12px; padding: 40px 20px; text-align: center; background: #f8fafc; transition: 0.3s; cursor: pointer; position: relative; margin-bottom: 20px; }
    .upload-zone:hover { border-color: var(--primary); background: #eff6ff; }
    .upload-icon { width: 48px; height: 48px; margin-bottom: 10px; fill: var(--primary); }
    .upload-text { font-size: 14px; font-weight: 600; color: var(--accent); }
    .upload-input { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 10; }

    /* Result Actions */
    .controls-grid { display: flex; gap: 15px; margin-top: 15px; flex-wrap: wrap; }
    .otechy-btn { border: none; padding: 14px 24px; border-radius: 10px; font-family: var(--font-main); font-weight: 700; cursor: pointer; transition: 0.3s; display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 14px; flex: 1; }
    .btn-primary { background: var(--primary); color: var(--white); }
    .btn-primary:hover { background: #1d4ed8; }
    .btn-outline { background: var(--white); color: var(--accent); border: 1px solid var(--border); }
    .btn-outline:hover { border-color: var(--primary); color: var(--primary); }
    .btn-copy { background: #e0f2fe; color: var(--primary); }
    .btn-copy:hover { background: #dbeafe; }

    /* Output Section */
    .output-container { margin-top: 20px; display: none; }
    .output-container.visible { display: block; animation: fadeIn 0.3s ease; }
    .result-stats { font-size: 11px; font-weight: 700; color: var(--accent); margin-bottom: 8px; display: flex; justify-content: space-between; }
    .badge-info { background: #e0f2fe; color: #0369a1; padding: 2px 8px; border-radius: 4px; }

    /* Content Styling */
    .geo-citation { background: var(--white); padding: 25px; border-radius: 12px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0 20px; color: var(--text-dark); box-shadow: 0 4px 12px rgba(0,0,0,0.02); }
    .security-shield { background: var(--safe-green); border: 1px solid #bbf7d0; border-radius: 12px; padding: 20px; display: flex; align-items: center; gap: 15px; color: var(--safe-text); margin-bottom: 40px; }
    .how-to-section { margin: 40px 0; }
    .section-h2 { font-size: 20px; font-weight: 850; color: var(--text-dark); margin-bottom: 20px; }
    .step-card { display: flex; align-items: center; gap: 15px; margin-bottom: 12px; }
    .step-icon { width: 32px; height: 32px; background: var(--soft-blue); color: var(--primary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 850; font-size: 14px; flex-shrink: 0; }
    
    .faq-section { margin-top: 60px; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; }
    .faq-card { background: var(--white); padding: 20px; border-radius: 12px; border: 1px solid var(--border); }
    .faq-card h3 { font-size: 14px; color: var(--primary); margin: 0 0 8px; font-weight: 700; }
    .faq-card p { font-size: 12px; color: var(--accent); margin: 0; line-height: 1.5; }
    
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { text-align: center; background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; display: flex; align-items: center; justify-content: center; }

    @media (max-width: 768px) { 
        .otechy-tool-wrapper { padding: 40px 15px 15px !important; } 
        .controls-grid { flex-direction: column; }
    }
    @keyframes fadeIn { from { opacity:0; transform:translateY(5px); } to { opacity:1; transform:translateY(0); } }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;otechy-badge&quot;&gt;Developer Tools &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;

    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;
            Base64 Crypto Studio
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; style=&quot;vertical-align: middle; margin-left: 8px;&quot;&gt;
                &lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;
                &lt;path d=&quot;M7 11V7a5 5 0 0 1 10 0v4&quot;&gt;&lt;/path&gt;
            &lt;/svg&gt;
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Encode Text, Convert Images to Data URI, and Decode securely.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;tool-navigation&quot;&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?find=json&quot; class=&quot;nav-link&quot;&gt;
            &lt;svg width=&quot;14&quot; height=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;polyline points=&quot;16 18 22 12 16 6&quot;&gt;&lt;/polyline&gt;&lt;polyline points=&quot;8 6 2 12 8 18&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt; JSON Formatter
        &lt;/a&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?find=md5&quot; class=&quot;nav-link&quot;&gt;
            &lt;svg width=&quot;14&quot; height=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;rect x=&quot;2&quot; y=&quot;2&quot; width=&quot;20&quot; height=&quot;8&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;2&quot; y=&quot;14&quot; width=&quot;20&quot; height=&quot;8&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;line x1=&quot;6&quot; y1=&quot;6&quot; x2=&quot;6.01&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; y1=&quot;18&quot; x2=&quot;6.01&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt; MD5 Generator
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px;&quot;&gt;AD SLOT 1&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        
        &lt;div class=&quot;mode-switch&quot;&gt;
            &lt;button class=&quot;mode-btn active&quot; onclick=&quot;switchMode(&#39;text&#39;)&quot;&gt;📝 Text Encoder/Decoder&lt;/button&gt;
            &lt;button class=&quot;mode-btn&quot; onclick=&quot;switchMode(&#39;file&#39;)&quot;&gt;📂 File / Image to Base64&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;textMode&quot;&gt;
            &lt;textarea id=&quot;textInput&quot; class=&quot;code-input&quot; placeholder=&quot;Type or paste content here to Encode/Decode...&quot;&gt;&lt;/textarea&gt;
            
            &lt;div style=&quot;display: flex; gap: 15px; margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;font-size: 13px; font-weight: 600; color: var(--accent); display: flex; align-items: center; gap: 5px;&quot;&gt;
                    &lt;input type=&quot;checkbox&quot; id=&quot;decodeToggle&quot;&gt; Decode Mode (Base64 &amp;rarr; Text)
                &lt;/label&gt;
            &lt;/div&gt;

            &lt;div class=&quot;controls-grid&quot;&gt;
                &lt;button class=&quot;otechy-btn btn-primary&quot; onclick=&quot;processText()&quot;&gt;Process Text&lt;/button&gt;
                &lt;button class=&quot;otechy-btn btn-outline&quot; onclick=&quot;clearText()&quot;&gt;Clear&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;fileMode&quot; style=&quot;display: none;&quot;&gt;
            &lt;div class=&quot;upload-zone&quot; id=&quot;dropZone&quot;&gt;
                &lt;svg class=&quot;upload-icon&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-8.5 7.5c0 .83-.67 1.5-1.5 1.5H9v2H7.5V7H10c.83 0 1.5.67 1.5 1.5v1zm5 2c0 .83-.67 1.5-1.5 1.5h-2.5V7H15c.83 0 1.5.67 1.5 1.5v3zm4-3H19v1h1.5v1.5H19v2.5h-1.5V7h3v1.5zM9 9.5h1v-1H9v1zM4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm10 5.5h1v-3h-1v3z&quot;/&gt;&lt;/svg&gt;
                &lt;div class=&quot;upload-text&quot;&gt;Drop Image or File Here&lt;/div&gt;
                &lt;div style=&quot;font-size: 11px; color: var(--accent); margin-top: 5px;&quot;&gt;Supports JPG, PNG, PDF, TXT&lt;/div&gt;
                &lt;input type=&quot;file&quot; id=&quot;fileInput&quot; class=&quot;upload-input&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;resultArea&quot; class=&quot;output-container&quot;&gt;
            &lt;div class=&quot;result-stats&quot;&gt;
                &lt;span&gt;RESULT&lt;/span&gt;
                &lt;span id=&quot;fileStats&quot; style=&quot;display:none;&quot; class=&quot;badge-info&quot;&gt;0KB &amp;rarr; 0KB&lt;/span&gt;
            &lt;/div&gt;
            
            &lt;textarea id=&quot;outputData&quot; class=&quot;code-input&quot; readonly placeholder=&quot;Result will appear here...&quot;&gt;&lt;/textarea&gt;
            
            &lt;div class=&quot;controls-grid&quot;&gt;
                &lt;button class=&quot;otechy-btn btn-copy&quot; onclick=&quot;copyResult(&#39;raw&#39;)&quot;&gt;Copy Raw String&lt;/button&gt;
                &lt;button id=&quot;btnHtml&quot; class=&quot;otechy-btn btn-outline&quot; style=&quot;display:none;&quot; onclick=&quot;copyResult(&#39;html&#39;)&quot;&gt;Copy HTML &amp;lt;img&amp;gt;&lt;/button&gt;
                &lt;button id=&quot;btnCss&quot; class=&quot;otechy-btn btn-outline&quot; style=&quot;display:none;&quot; onclick=&quot;copyResult(&#39;css&#39;)&quot;&gt;Copy CSS&lt;/button&gt;
                &lt;button class=&quot;otechy-btn btn-primary&quot; onclick=&quot;downloadResult()&quot;&gt;Download .txt&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px;&quot;&gt;AD SLOT 2&lt;/div&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        Developers and data analysts frequently use Base64 to embed images directly into HTML/CSS to reduce HTTP requests, or to encode binary data for API transmission (JSON/XML). OTechy&#39;s &lt;strong&gt;Base64 Studio&lt;/strong&gt; provides a robust environment to converting binaries to Data URIs with zero server latency.
    &lt;/div&gt;

    &lt;div class=&quot;security-shield&quot;&gt;
        &lt;svg width=&quot;32&quot; height=&quot;32&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot;&gt;&lt;path d=&quot;M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z&quot;/&gt;&lt;/svg&gt;
        &lt;div class=&quot;security-content&quot;&gt;
            &lt;h4 style=&quot;margin:0 0 4px; font-size:14px; font-weight:800;&quot;&gt;Client-Side Encryption&lt;/h4&gt;
            &lt;p style=&quot;margin:0; font-size:12px; opacity:0.9;&quot;&gt;All encoding and decoding happens locally in your browser. No data is sent to the cloud.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;how-to-section&quot;&gt;
        
        &lt;h2 class=&quot;section-h2&quot;&gt;How to Use Base64 Studio&lt;/h2&gt;
        &lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;step-icon&quot;&gt;1&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Select Mode:&lt;/strong&gt; Choose &quot;Text&quot; for strings or &quot;File&quot; for images/PDFs.&lt;/div&gt;&lt;/div&gt;
        &lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;step-icon&quot;&gt;2&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Input Data:&lt;/strong&gt; Type your text or drag &amp; drop a file. The tool processes it instantly.&lt;/div&gt;&lt;/div&gt;
        &lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;step-icon&quot;&gt;3&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Export:&lt;/strong&gt; Copy the raw string, or use the &quot;HTML/CSS&quot; buttons for web development snippets.&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is Base64?&lt;/h3&gt;&lt;p&gt;It&#39;s a method to encode binary data (like images) into ASCII text characters, making it safe to transmit over protocols that only support text (like Email or HTML).&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Why does the file size increase?&lt;/h3&gt;&lt;p&gt;Base64 encoding increases file size by approximately 33% because it uses 4 characters to represent every 3 bytes of data.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is this tool secure?&lt;/h3&gt;&lt;p&gt;Yes. Everything runs in your browser via JavaScript. We do not store or see your files.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I convert images for CSS?&lt;/h3&gt;&lt;p&gt;Yes. Upload an image, and use the &quot;Copy CSS&quot; button to get the &lt;code&gt;background-image: url(&#39;data:...&#39;)&lt;/code&gt; code ready for your stylesheet.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;How do I decode?&lt;/h3&gt;&lt;p&gt;Switch to &quot;Text Mode&quot;, check the &quot;Decode Mode&quot; box, paste your Base64 string, and click Process.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is there a file limit?&lt;/h3&gt;&lt;p&gt;The limit depends on your browser&#39;s memory. We generally recommend files under 5MB for optimal performance.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px;&quot;&gt;AD SLOT 3&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- APP LOGIC ---
    let currentData = &quot;&quot;;
    let isFileMode = false;

    // 1. UI Switcher
    function switchMode(mode) {
        isFileMode = (mode === &#39;file&#39;);
        document.querySelectorAll(&#39;.mode-btn&#39;).forEach(b =&gt; b.classList.remove(&#39;active&#39;));
        event.target.classList.add(&#39;active&#39;);

        document.getElementById(&#39;textMode&#39;).style.display = isFileMode ? &#39;none&#39; : &#39;block&#39;;
        document.getElementById(&#39;fileMode&#39;).style.display = isFileMode ? &#39;block&#39; : &#39;none&#39;;
        
        // Reset Outputs
        document.getElementById(&#39;resultArea&#39;).classList.remove(&#39;visible&#39;);
        document.getElementById(&#39;fileStats&#39;).style.display = &#39;none&#39;;
        document.getElementById(&#39;btnHtml&#39;).style.display = &#39;none&#39;;
        document.getElementById(&#39;btnCss&#39;).style.display = &#39;none&#39;;
    }

    // 2. Text Processing
    function processText() {
        const input = document.getElementById(&#39;textInput&#39;).value;
        const isDecode = document.getElementById(&#39;decodeToggle&#39;).checked;
        const output = document.getElementById(&#39;outputData&#39;);

        if (!input) return;

        try {
            if (isDecode) {
                // Decode (Base64 -&gt; Text)
                output.value = atob(input);
            } else {
                // Encode (Text -&gt; Base64) with UTF-8 support
                output.value = btoa(unescape(encodeURIComponent(input)));
            }
            currentData = output.value;
            document.getElementById(&#39;resultArea&#39;).classList.add(&#39;visible&#39;);
        } catch (e) {
            alert(&quot;Error: Invalid Base64 string or unsupported characters.&quot;);
        }
    }

    function clearText() {
        document.getElementById(&#39;textInput&#39;).value = &#39;&#39;;
        document.getElementById(&#39;resultArea&#39;).classList.remove(&#39;visible&#39;);
    }

    // 3. File Processing
    const fileInput = document.getElementById(&#39;fileInput&#39;);
    fileInput.addEventListener(&#39;change&#39;, function(e) {
        const file = e.target.files[0];
        if(!file) return;

        const reader = new FileReader();
        reader.onload = function(evt) {
            currentData = evt.target.result; // This is the Data URI (Base64)
            
            // Show Output
            document.getElementById(&#39;outputData&#39;).value = currentData;
            document.getElementById(&#39;resultArea&#39;).classList.add(&#39;visible&#39;);
            
            // Show Stats
            const originalSize = (file.size / 1024).toFixed(2);
            const base64Size = (currentData.length / 1024).toFixed(2);
            const stats = document.getElementById(&#39;fileStats&#39;);
            stats.innerHTML = `${originalSize}KB &amp;rarr; ${base64Size}KB`; // Using HTML entity for arrow
            stats.style.display = &#39;block&#39;;

            // Show Helper Buttons if image
            if (file.type.startsWith(&#39;image/&#39;)) {
                document.getElementById(&#39;btnHtml&#39;).style.display = &#39;flex&#39;;
                document.getElementById(&#39;btnCss&#39;).style.display = &#39;flex&#39;;
            } else {
                document.getElementById(&#39;btnHtml&#39;).style.display = &#39;none&#39;;
                document.getElementById(&#39;btnCss&#39;).style.display = &#39;none&#39;;
            }
        };
        reader.readAsDataURL(file);
    });

    // 4. Copy/Download Utilities
    function copyResult(type) {
        if(!currentData) return;
        let textToCopy = currentData;

        if(type === &#39;raw&#39;) {
            // If file mode, sometimes users want just the base64 part without &quot;data:image/png;base64,&quot;
            // But usually &quot;Raw&quot; implies the full string. Let&#39;s keep full string for safety.
            textToCopy = currentData; 
        }
        if(type === &#39;html&#39;) textToCopy = `&lt;img src=&quot;${currentData}&quot; alt=&quot;Base64 Image&quot; /&gt;`;
        if(type === &#39;css&#39;) textToCopy = `background-image: url(&#39;${currentData}&#39;);`;

        navigator.clipboard.writeText(textToCopy);
        
        Toastify({
            text: type.toUpperCase() + &quot; Copied!&quot;,
            duration: 2000,
            gravity: &quot;bottom&quot;,
            position: &quot;center&quot;,
            style: { background: &quot;#3b82f6&quot;, borderRadius: &quot;8px&quot; }
        }).showToast();
    }

    function downloadResult() {
        if(!currentData) return;
        const blob = new Blob([currentData], {type: &quot;text/plain;charset=utf-8&quot;});
        const url = URL.createObjectURL(blob);
        const a = document.createElement(&#39;a&#39;);
        a.href = url;
        a.download = &quot;otechy-base64-result.txt&quot;;
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    }

    // Set dynamic year
    document.querySelectorAll(&#39;.dynamic-year&#39;).forEach(el =&gt; el.textContent = new Date().getFullYear());
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/973256772968157174'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/973256772968157174'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/02/base64-encoder-decoder-online.html' title='Base64 Encoder &amp; Decoder Online'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-1349756561215473232</id><published>2026-02-11T08:44:00.000-08:00</published><updated>2026-02-11T09:28:36.363-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Weather"/><category scheme="http://www.blogger.com/atom/ns#" term="World Clock"/><title type='text'>World Weather Studio Online</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;World Weather &amp; Time Studio | Global Clock &amp; Live Forecast - OTechy&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;A beautiful, real-time dashboard of world weather and local times. Features live day/night tracking, smart search, and automatic DST adjustments.&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;

&lt;meta property=&quot;og:title&quot; content=&quot;World Weather &amp; Time Studio - OTechy&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/luxon/3.4.4/luxon.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    :root { 
        --primary: #3b82f6; --text-dark: #1e293b; --accent: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.2; }
    
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 40px 20px; }
    
    .tool-header { text-align: center; margin-bottom: 25px; }
    .tool-header h1 { font-size: 28px; font-weight: 850; color: var(--primary); margin: 0; display: flex; align-items: center; justify-content: center; gap: 10px; }
    .bharat-flag { width: 24px; border-radius: 3px; }

    .controls-grid { 
        display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; 
        background: var(--white); padding: 15px; border-radius: 12px; 
        border: 1px solid var(--border); margin-bottom: 20px;
    }
    .search-input, .sort-select { padding: 10px; border-radius: 8px; border: 1px solid var(--border); font-family: var(--font-main); font-size: 13px; outline: none; }

    /* Fix: Slim Rows with Balanced Text Centering */
    .city-list { display: flex; flex-direction: column; gap: 6px; }
    .city-row {
        display: grid; 
        grid-template-columns: 2fr 45px 0.8fr 1.2fr 100px; 
        align-items: center; 
        padding: 0 15px; 
        border-radius: 8px;
        background: var(--white); 
        border: 1px solid var(--border);
        height: 48px; /* High Density Height */
        transition: 0.2s ease;
        overflow: hidden;
    }
    
    .theme-day { border-left: 4px solid #fbbf24; }
    .theme-night { border-left: 4px solid #6366f1; background: #1e293b; color: #f8fafc; border-color: #4f46e5; }
    
    /* Flex alignment to prevent text &quot;bunching&quot; */
    .col-name { display: flex; flex-direction: column; justify-content: center; height: 100%; }
    .city-name { font-weight: 700; font-size: 14px; line-height: 1.1; }
    .country-name { font-size: 10px; opacity: 0.6; line-height: 1; }

    .col-temp { font-size: 18px; font-weight: 850; display: flex; align-items: center; }
    .col-meta { font-size: 10px; opacity: 0.7; display: flex; align-items: center; gap: 6px; white-space: nowrap; }
    
    .col-time { text-align: right; display: flex; flex-direction: column; justify-content: center; height: 100%; }
    .local-time { font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1; }
    .time-tz { font-size: 9px; opacity: 0.5; font-weight: 600; line-height: 1; margin-top: 2px; }

    .weather-icon-img { width: 32px; height: 32px; object-fit: contain; }

    @media (max-width: 768px) {
        .controls-grid { grid-template-columns: 1fr; }
        .city-row { grid-template-columns: 1.5fr 40px 60px 100px; padding: 0 10px; }
        .col-meta { display: none; }
    }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;
    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;Global Weather Studio 
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; style=&quot;vertical-align: middle; margin-left: 8px;&quot;&gt;&lt;defs&gt;&lt;clipPath id=&quot;circleView&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;12&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;g clip-path=&quot;url(#circleView)&quot;&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;0&quot; fill=&quot;#FF9933&quot;/&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;8&quot; fill=&quot;#FFFFFF&quot;/&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;16&quot; fill=&quot;#138808&quot;/&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;3&quot; fill=&quot;none&quot; stroke=&quot;#000080&quot; stroke-width=&quot;0.5&quot;/&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;0.8&quot; fill=&quot;#000080&quot;/&gt;&lt;g stroke=&quot;#000080&quot; stroke-width=&quot;0.2&quot;&gt;&lt;line x1=&quot;12&quot; y1=&quot;9&quot; x2=&quot;12&quot; y2=&quot;15&quot;/&gt;&lt;line x1=&quot;9&quot; y1=&quot;12&quot; x2=&quot;15&quot; y2=&quot;12&quot;/&gt;&lt;line x1=&quot;9.8&quot; y1=&quot;9.8&quot; x2=&quot;14.2&quot; y2=&quot;14.2&quot;/&gt;&lt;line x1=&quot;9.8&quot; y1=&quot;14.2&quot; x2=&quot;14.2&quot; y2=&quot;9.8&quot;/&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot; style=&quot;font-size: 12px; margin-top: 4px;&quot;&gt;Live Weather &amp; Clocks • Lazy Loading by Region&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;controls-grid&quot;&gt;
        &lt;input class=&quot;search-input&quot; id=&quot;search&quot; placeholder=&quot;Search city or state...&quot; oninput=&quot;filterCities()&quot;&gt;
        &lt;select class=&quot;sort-select&quot; id=&quot;regionFilter&quot; onchange=&quot;handleRegionChange()&quot;&gt;
            &lt;option value=&quot;Asia&quot; selected&gt;Asia (Default)&lt;/option&gt;
            &lt;option value=&quot;Europe&quot;&gt;Europe&lt;/option&gt;
            &lt;option value=&quot;North America&quot;&gt;North America&lt;/option&gt;
            &lt;option value=&quot;South America&quot;&gt;South America&lt;/option&gt;
            &lt;option value=&quot;Africa&quot;&gt;Africa&lt;/option&gt;
            &lt;option value=&quot;Oceania&quot;&gt;Oceania&lt;/option&gt;
        &lt;/select&gt;
        &lt;select class=&quot;sort-select&quot; id=&quot;sort&quot; onchange=&quot;sortCities()&quot;&gt;
            &lt;option value=&quot;pop&quot;&gt;Popularity&lt;/option&gt;
            &lt;option value=&quot;name&quot;&gt;Name A-Z&lt;/option&gt;
            &lt;option value=&quot;temp_high&quot;&gt;Hot First&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;

    &lt;div id=&quot;grid&quot; class=&quot;city-list&quot;&gt;
        &lt;div style=&quot;text-align: center; padding: 40px; opacity: 0.5;&quot;&gt;Loading Regional Data...&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
const citiesDB = [
/* ===================== ASIA ===================== */
{ name:&quot;New Delhi&quot;, country:&quot;India (Capital)&quot;, region:&quot;Asia&quot;, lat:28.61, lon:77.20, tz:&quot;Asia/Kolkata&quot;, pop:1 },
{ name:&quot;Mumbai&quot;, country:&quot;India (Maharashtra)&quot;, region:&quot;Asia&quot;, lat:19.07, lon:72.87, tz:&quot;Asia/Kolkata&quot;, pop:2 },
{ name:&quot;Kolkata&quot;, country:&quot;India (West Bengal)&quot;, region:&quot;Asia&quot;, lat:22.57, lon:88.36, tz:&quot;Asia/Kolkata&quot;, pop:3 },
{ name:&quot;Pune&quot;, country:&quot;India (Maharashtra)&quot;, region:&quot;Asia&quot;, lat:18.52, lon:73.85, tz:&quot;Asia/Kolkata&quot;, pop:4 },
{ name:&quot;Gangtok&quot;, country:&quot;India (Sikkim)&quot;, region:&quot;Asia&quot;, lat:27.33, lon:88.61, tz:&quot;Asia/Kolkata&quot;, pop:5 },
{ name:&quot;Darjeeling&quot;, country:&quot;India (GTA)&quot;, region:&quot;Asia&quot;, lat:27.04, lon:88.26, tz:&quot;Asia/Kolkata&quot;, pop:6 },
{ name:&quot;Imphal&quot;, country:&quot;India (Manipur)&quot;, region:&quot;Asia&quot;, lat:24.81, lon:93.93, tz:&quot;Asia/Kolkata&quot;, pop:7 },
{ name:&quot;Guwahati&quot;, country:&quot;India (Assam)&quot;, region:&quot;Asia&quot;, lat:26.14, lon:91.73, tz:&quot;Asia/Kolkata&quot;, pop:8 },
{ name:&quot;Kabul&quot;, country:&quot;Afghanistan&quot;, region:&quot;Asia&quot;, lat:34.55, lon:69.21, tz:&quot;Asia/Kabul&quot;, pop:9 },
{ name:&quot;Manama&quot;, country:&quot;Bahrain&quot;, region:&quot;Asia&quot;, lat:26.22, lon:50.58, tz:&quot;Asia/Bahrain&quot;, pop:10 },
{ name:&quot;Dhaka&quot;, country:&quot;Bangladesh&quot;, region:&quot;Asia&quot;, lat:23.81, lon:90.41, tz:&quot;Asia/Dhaka&quot;, pop:11 },
{ name:&quot;Thimphu&quot;, country:&quot;Bhutan&quot;, region:&quot;Asia&quot;, lat:27.47, lon:89.64, tz:&quot;Asia/Thimphu&quot;, pop:12 },
{ name:&quot;Bandar Seri Begawan&quot;, country:&quot;Brunei&quot;, region:&quot;Asia&quot;, lat:4.89, lon:114.94, tz:&quot;Asia/Brunei&quot;, pop:13 },
{ name:&quot;Phnom Penh&quot;, country:&quot;Cambodia&quot;, region:&quot;Asia&quot;, lat:11.56, lon:104.93, tz:&quot;Asia/Phnom_Penh&quot;, pop:14 },
{ name:&quot;Beijing&quot;, country:&quot;China&quot;, region:&quot;Asia&quot;, lat:39.90, lon:116.40, tz:&quot;Asia/Shanghai&quot;, pop:15 },
{ name:&quot;Shanghai&quot;, country:&quot;China&quot;, region:&quot;Asia&quot;, lat:31.23, lon:121.47, tz:&quot;Asia/Shanghai&quot;, pop:16 },
{ name:&quot;Jakarta&quot;, country:&quot;Indonesia&quot;, region:&quot;Asia&quot;, lat:-6.21, lon:106.85, tz:&quot;Asia/Jakarta&quot;, pop:17 },
{ name:&quot;Tehran&quot;, country:&quot;Iran&quot;, region:&quot;Asia&quot;, lat:35.69, lon:51.39, tz:&quot;Asia/Tehran&quot;, pop:18 },
{ name:&quot;Baghdad&quot;, country:&quot;Iraq&quot;, region:&quot;Asia&quot;, lat:33.31, lon:44.36, tz:&quot;Asia/Baghdad&quot;, pop:19 },
{ name:&quot;Jerusalem&quot;, country:&quot;Israel&quot;, region:&quot;Asia&quot;, lat:31.78, lon:35.22, tz:&quot;Asia/Jerusalem&quot;, pop:20 },
{ name:&quot;Tokyo&quot;, country:&quot;Japan&quot;, region:&quot;Asia&quot;, lat:35.67, lon:139.65, tz:&quot;Asia/Tokyo&quot;, pop:21 },
{ name:&quot;Osaka&quot;, country:&quot;Japan&quot;, region:&quot;Asia&quot;, lat:34.69, lon:135.50, tz:&quot;Asia/Tokyo&quot;, pop:22 },
{ name:&quot;Amman&quot;, country:&quot;Jordan&quot;, region:&quot;Asia&quot;, lat:31.95, lon:35.93, tz:&quot;Asia/Amman&quot;, pop:23 },
{ name:&quot;Astana&quot;, country:&quot;Kazakhstan&quot;, region:&quot;Asia&quot;, lat:51.16, lon:71.47, tz:&quot;Asia/Almaty&quot;, pop:24 },
{ name:&quot;Kuwait City&quot;, country:&quot;Kuwait&quot;, region:&quot;Asia&quot;, lat:29.38, lon:47.98, tz:&quot;Asia/Kuwait&quot;, pop:25 },
{ name:&quot;Bishkek&quot;, country:&quot;Kyrgyzstan&quot;, region:&quot;Asia&quot;, lat:42.87, lon:74.59, tz:&quot;Asia/Bishkek&quot;, pop:26 },
{ name:&quot;Vientiane&quot;, country:&quot;Laos&quot;, region:&quot;Asia&quot;, lat:17.98, lon:102.63, tz:&quot;Asia/Vientiane&quot;, pop:27 },
{ name:&quot;Beirut&quot;, country:&quot;Lebanon&quot;, region:&quot;Asia&quot;, lat:33.89, lon:35.50, tz:&quot;Asia/Beirut&quot;, pop:28 },
{ name:&quot;Kuala Lumpur&quot;, country:&quot;Malaysia&quot;, region:&quot;Asia&quot;, lat:3.14, lon:101.69, tz:&quot;Asia/Kuala_Lumpur&quot;, pop:29 },
{ name:&quot;Male&quot;, country:&quot;Maldives&quot;, region:&quot;Asia&quot;, lat:4.17, lon:73.51, tz:&quot;Indian/Maldives&quot;, pop:30 },
{ name:&quot;Ulaanbaatar&quot;, country:&quot;Mongolia&quot;, region:&quot;Asia&quot;, lat:47.92, lon:106.92, tz:&quot;Asia/Ulaanbaatar&quot;, pop:31 },
{ name:&quot;Naypyidaw&quot;, country:&quot;Myanmar&quot;, region:&quot;Asia&quot;, lat:19.75, lon:96.10, tz:&quot;Asia/Yangon&quot;, pop:32 },
{ name:&quot;Kathmandu&quot;, country:&quot;Nepal&quot;, region:&quot;Asia&quot;, lat:27.72, lon:85.32, tz:&quot;Asia/Kathmandu&quot;, pop:33 },
{ name:&quot;Pokhara&quot;, country:&quot;Nepal&quot;, region:&quot;Asia&quot;, lat:28.20, lon:83.98, tz:&quot;Asia/Kathmandu&quot;, pop:34 },
{ name:&quot;Pyongyang&quot;, country:&quot;North Korea&quot;, region:&quot;Asia&quot;, lat:39.03, lon:125.75, tz:&quot;Asia/Pyongyang&quot;, pop:35 },
{ name:&quot;Muscat&quot;, country:&quot;Oman&quot;, region:&quot;Asia&quot;, lat:23.59, lon:58.41, tz:&quot;Asia/Muscat&quot;, pop:36 },
{ name:&quot;Islamabad&quot;, country:&quot;Pakistan&quot;, region:&quot;Asia&quot;, lat:33.69, lon:73.06, tz:&quot;Asia/Karachi&quot;, pop:37 },
{ name:&quot;Karachi&quot;, country:&quot;Pakistan&quot;, region:&quot;Asia&quot;, lat:24.86, lon:67.00, tz:&quot;Asia/Karachi&quot;, pop:38 },
{ name:&quot;Manila&quot;, country:&quot;Philippines&quot;, region:&quot;Asia&quot;, lat:14.60, lon:120.98, tz:&quot;Asia/Manila&quot;, pop:39 },
{ name:&quot;Doha&quot;, country:&quot;Qatar&quot;, region:&quot;Asia&quot;, lat:25.29, lon:51.53, tz:&quot;Asia/Qatar&quot;, pop:40 },
{ name:&quot;Riyadh&quot;, country:&quot;Saudi Arabia&quot;, region:&quot;Asia&quot;, lat:24.71, lon:46.67, tz:&quot;Asia/Riyadh&quot;, pop:41 },
{ name:&quot;Jeddah&quot;, country:&quot;Saudi Arabia&quot;, region:&quot;Asia&quot;, lat:21.48, lon:39.19, tz:&quot;Asia/Riyadh&quot;, pop:42 },
{ name:&quot;Singapore&quot;, country:&quot;Singapore&quot;, region:&quot;Asia&quot;, lat:1.35, lon:103.82, tz:&quot;Asia/Singapore&quot;, pop:43 },
{ name:&quot;Seoul&quot;, country:&quot;South Korea&quot;, region:&quot;Asia&quot;, lat:37.56, lon:126.97, tz:&quot;Asia/Seoul&quot;, pop:44 },
{ name:&quot;Colombo&quot;, country:&quot;Sri Lanka&quot;, region:&quot;Asia&quot;, lat:6.93, lon:79.85, tz:&quot;Asia/Colombo&quot;, pop:45 },
{ name:&quot;Damascus&quot;, country:&quot;Syria&quot;, region:&quot;Asia&quot;, lat:33.51, lon:36.28, tz:&quot;Asia/Damascus&quot;, pop:46 },
{ name:&quot;Taipei&quot;, country:&quot;Taiwan&quot;, region:&quot;Asia&quot;, lat:25.03, lon:121.56, tz:&quot;Asia/Taipei&quot;, pop:47 },
{ name:&quot;Dushanbe&quot;, country:&quot;Tajikistan&quot;, region:&quot;Asia&quot;, lat:38.56, lon:68.78, tz:&quot;Asia/Dushanbe&quot;, pop:48 },
{ name:&quot;Bangkok&quot;, country:&quot;Thailand&quot;, region:&quot;Asia&quot;, lat:13.75, lon:100.50, tz:&quot;Asia/Bangkok&quot;, pop:49 },
{ name:&quot;Ankara&quot;, country:&quot;Turkey&quot;, region:&quot;Asia&quot;, lat:39.93, lon:32.86, tz:&quot;Europe/Istanbul&quot;, pop:50 },
{ name:&quot;Istanbul&quot;, country:&quot;Turkey&quot;, region:&quot;Asia&quot;, lat:41.00, lon:28.97, tz:&quot;Europe/Istanbul&quot;, pop:51 },
{ name:&quot;Ashgabat&quot;, country:&quot;Turkmenistan&quot;, region:&quot;Asia&quot;, lat:37.96, lon:58.33, tz:&quot;Asia/Ashgabat&quot;, pop:52 },
{ name:&quot;Abu Dhabi&quot;, country:&quot;UAE&quot;, region:&quot;Asia&quot;, lat:24.45, lon:54.38, tz:&quot;Asia/Dubai&quot;, pop:53 },
{ name:&quot;Dubai&quot;, country:&quot;UAE&quot;, region:&quot;Asia&quot;, lat:25.20, lon:55.27, tz:&quot;Asia/Dubai&quot;, pop:54 },
{ name:&quot;Tashkent&quot;, country:&quot;Uzbekistan&quot;, region:&quot;Asia&quot;, lat:41.30, lon:69.24, tz:&quot;Asia/Tashkent&quot;, pop:55 },
{ name:&quot;Hanoi&quot;, country:&quot;Vietnam&quot;, region:&quot;Asia&quot;, lat:21.03, lon:105.85, tz:&quot;Asia/Bangkok&quot;, pop:56 },
{ name:&quot;Ho Chi Minh City&quot;, country:&quot;Vietnam&quot;, region:&quot;Asia&quot;, lat:10.82, lon:106.62, tz:&quot;Asia/Ho_Chi_Minh&quot;, pop:57 },
{ name:&quot;Sana&#39;a&quot;, country:&quot;Yemen&quot;, region:&quot;Asia&quot;, lat:15.35, lon:44.21, tz:&quot;Asia/Aden&quot;, pop:58 },
{ name:&quot;Dili&quot;, country:&quot;Timor-Leste&quot;, region:&quot;Asia&quot;, lat:-8.55, lon:125.57, tz:&quot;Asia/Dili&quot;, pop:59 },
{ name:&quot;Yerevan&quot;, country:&quot;Armenia&quot;, region:&quot;Asia&quot;, lat:40.18, lon:44.51, tz:&quot;Asia/Yerevan&quot;, pop:60 },
{ name:&quot;Baku&quot;, country:&quot;Azerbaijan&quot;, region:&quot;Asia&quot;, lat:40.41, lon:49.87, tz:&quot;Asia/Baku&quot;, pop:61 },
{ name:&quot;Tbilisi&quot;, country:&quot;Georgia&quot;, region:&quot;Asia&quot;, lat:41.72, lon:44.78, tz:&quot;Asia/Tbilisi&quot;, pop:62 },
{ name:&quot;Ankara&quot;, country:&quot;Turkey&quot;, region:&quot;Asia&quot;, lat:39.93, lon:32.86, tz:&quot;Europe/Istanbul&quot;, pop:63 },
  
/* ===================== EUROPE ===================== */
{ name:&quot;London&quot;, country:&quot;United Kingdom&quot;, region:&quot;Europe&quot;, lat:51.50, lon:-0.12, tz:&quot;Europe/London&quot;, pop:64 },
{ name:&quot;Paris&quot;, country:&quot;France&quot;, region:&quot;Europe&quot;, lat:48.85, lon:2.35, tz:&quot;Europe/Paris&quot;, pop:65 },
{ name:&quot;Lyon&quot;, country:&quot;France&quot;, region:&quot;Europe&quot;, lat:45.76, lon:4.83, tz:&quot;Europe/Paris&quot;, pop:66 },
{ name:&quot;Berlin&quot;, country:&quot;Germany&quot;, region:&quot;Europe&quot;, lat:52.52, lon:13.40, tz:&quot;Europe/Berlin&quot;, pop:67 },
{ name:&quot;Munich&quot;, country:&quot;Germany&quot;, region:&quot;Europe&quot;, lat:48.13, lon:11.58, tz:&quot;Europe/Berlin&quot;, pop:68 },
{ name:&quot;Rome&quot;, country:&quot;Italy&quot;, region:&quot;Europe&quot;, lat:41.90, lon:12.49, tz:&quot;Europe/Rome&quot;, pop:69 },
{ name:&quot;Milan&quot;, country:&quot;Italy&quot;, region:&quot;Europe&quot;, lat:45.46, lon:9.19, tz:&quot;Europe/Rome&quot;, pop:70 },
{ name:&quot;Madrid&quot;, country:&quot;Spain&quot;, region:&quot;Europe&quot;, lat:40.41, lon:-3.70, tz:&quot;Europe/Madrid&quot;, pop:71 },
{ name:&quot;Barcelona&quot;, country:&quot;Spain&quot;, region:&quot;Europe&quot;, lat:41.38, lon:2.17, tz:&quot;Europe/Madrid&quot;, pop:72 },
{ name:&quot;Lisbon&quot;, country:&quot;Portugal&quot;, region:&quot;Europe&quot;, lat:38.72, lon:-9.14, tz:&quot;Europe/Lisbon&quot;, pop:73 },
{ name:&quot;Vienna&quot;, country:&quot;Austria&quot;, region:&quot;Europe&quot;, lat:48.21, lon:16.37, tz:&quot;Europe/Vienna&quot;, pop:74 },
{ name:&quot;Brussels&quot;, country:&quot;Belgium&quot;, region:&quot;Europe&quot;, lat:50.85, lon:4.35, tz:&quot;Europe/Brussels&quot;, pop:75 },
{ name:&quot;Amsterdam&quot;, country:&quot;Netherlands&quot;, region:&quot;Europe&quot;, lat:52.36, lon:4.90, tz:&quot;Europe/Amsterdam&quot;, pop:76 },
{ name:&quot;Bern&quot;, country:&quot;Switzerland&quot;, region:&quot;Europe&quot;, lat:46.95, lon:7.44, tz:&quot;Europe/Zurich&quot;, pop:77 },
{ name:&quot;Zurich&quot;, country:&quot;Switzerland&quot;, region:&quot;Europe&quot;, lat:47.37, lon:8.54, tz:&quot;Europe/Zurich&quot;, pop:78 },
{ name:&quot;Stockholm&quot;, country:&quot;Sweden&quot;, region:&quot;Europe&quot;, lat:59.33, lon:18.07, tz:&quot;Europe/Stockholm&quot;, pop:79 },
{ name:&quot;Oslo&quot;, country:&quot;Norway&quot;, region:&quot;Europe&quot;, lat:59.91, lon:10.75, tz:&quot;Europe/Oslo&quot;, pop:80 },
{ name:&quot;Helsinki&quot;, country:&quot;Finland&quot;, region:&quot;Europe&quot;, lat:60.17, lon:24.94, tz:&quot;Europe/Helsinki&quot;, pop:81 },
{ name:&quot;Copenhagen&quot;, country:&quot;Denmark&quot;, region:&quot;Europe&quot;, lat:55.68, lon:12.57, tz:&quot;Europe/Copenhagen&quot;, pop:82 },
{ name:&quot;Dublin&quot;, country:&quot;Ireland&quot;, region:&quot;Europe&quot;, lat:53.34, lon:-6.26, tz:&quot;Europe/Dublin&quot;, pop:83 },
{ name:&quot;Warsaw&quot;, country:&quot;Poland&quot;, region:&quot;Europe&quot;, lat:52.23, lon:21.01, tz:&quot;Europe/Warsaw&quot;, pop:84 },
{ name:&quot;Prague&quot;, country:&quot;Czech Republic&quot;, region:&quot;Europe&quot;, lat:50.08, lon:14.43, tz:&quot;Europe/Prague&quot;, pop:85 },
{ name:&quot;Budapest&quot;, country:&quot;Hungary&quot;, region:&quot;Europe&quot;, lat:47.50, lon:19.04, tz:&quot;Europe/Budapest&quot;, pop:86 },
{ name:&quot;Athens&quot;, country:&quot;Greece&quot;, region:&quot;Europe&quot;, lat:37.98, lon:23.72, tz:&quot;Europe/Athens&quot;, pop:87 },
{ name:&quot;Bucharest&quot;, country:&quot;Romania&quot;, region:&quot;Europe&quot;, lat:44.43, lon:26.10, tz:&quot;Europe/Bucharest&quot;, pop:88 },
{ name:&quot;Sofia&quot;, country:&quot;Bulgaria&quot;, region:&quot;Europe&quot;, lat:42.70, lon:23.32, tz:&quot;Europe/Sofia&quot;, pop:89 },
{ name:&quot;Belgrade&quot;, country:&quot;Serbia&quot;, region:&quot;Europe&quot;, lat:44.80, lon:20.46, tz:&quot;Europe/Belgrade&quot;, pop:90 },
{ name:&quot;Moscow&quot;, country:&quot;Russia&quot;, region:&quot;Europe&quot;, lat:55.75, lon:37.61, tz:&quot;Europe/Moscow&quot;, pop:91 },
{ name:&quot;St. Petersburg&quot;, country:&quot;Russia&quot;, region:&quot;Europe&quot;, lat:59.93, lon:30.33, tz:&quot;Europe/Moscow&quot;, pop:92 },
{ name:&quot;Kyiv&quot;, country:&quot;Ukraine&quot;, region:&quot;Europe&quot;, lat:50.45, lon:30.52, tz:&quot;Europe/Kyiv&quot;, pop:93 },
{ name:&quot;Minsk&quot;, country:&quot;Belarus&quot;, region:&quot;Europe&quot;, lat:53.90, lon:27.56, tz:&quot;Europe/Minsk&quot;, pop:94 },
{ name:&quot;Tirana&quot;, country:&quot;Albania&quot;, region:&quot;Europe&quot;, lat:41.33, lon:19.82, tz:&quot;Europe/Tirane&quot;, pop:95 },
{ name:&quot;Andorra la Vella&quot;, country:&quot;Andorra&quot;, region:&quot;Europe&quot;, lat:42.51, lon:1.52, tz:&quot;Europe/Andorra&quot;, pop:96 },
{ name:&quot;Sarajevo&quot;, country:&quot;Bosnia and Herzegovina&quot;, region:&quot;Europe&quot;, lat:43.86, lon:18.41, tz:&quot;Europe/Sarajevo&quot;, pop:97 },
{ name:&quot;Zagreb&quot;, country:&quot;Croatia&quot;, region:&quot;Europe&quot;, lat:45.81, lon:15.98, tz:&quot;Europe/Zagreb&quot;, pop:98 },
{ name:&quot;Nicosia&quot;, country:&quot;Cyprus&quot;, region:&quot;Europe&quot;, lat:35.19, lon:33.38, tz:&quot;Asia/Nicosia&quot;, pop:99 },
{ name:&quot;Reykjavik&quot;, country:&quot;Iceland&quot;, region:&quot;Europe&quot;, lat:64.15, lon:-21.94, tz:&quot;Atlantic/Reykjavik&quot;, pop:100 },
{ name:&quot;Riga&quot;, country:&quot;Latvia&quot;, region:&quot;Europe&quot;, lat:56.95, lon:24.11, tz:&quot;Europe/Riga&quot;, pop:101 },
{ name:&quot;Vaduz&quot;, country:&quot;Liechtenstein&quot;, region:&quot;Europe&quot;, lat:47.14, lon:9.52, tz:&quot;Europe/Vaduz&quot;, pop:102 },
{ name:&quot;Vilnius&quot;, country:&quot;Lithuania&quot;, region:&quot;Europe&quot;, lat:54.69, lon:25.28, tz:&quot;Europe/Vilnius&quot;, pop:103 },
{ name:&quot;Luxembourg&quot;, country:&quot;Luxembourg&quot;, region:&quot;Europe&quot;, lat:49.61, lon:6.13, tz:&quot;Europe/Luxembourg&quot;, pop:104 },
{ name:&quot;Valletta&quot;, country:&quot;Malta&quot;, region:&quot;Europe&quot;, lat:35.90, lon:14.51, tz:&quot;Europe/Malta&quot;, pop:105 },
{ name:&quot;Chișinău&quot;, country:&quot;Moldova&quot;, region:&quot;Europe&quot;, lat:47.01, lon:28.86, tz:&quot;Europe/Chisinau&quot;, pop:106 },
{ name:&quot;Monaco&quot;, country:&quot;Monaco&quot;, region:&quot;Europe&quot;, lat:43.74, lon:7.42, tz:&quot;Europe/Monaco&quot;, pop:107 },
{ name:&quot;Podgorica&quot;, country:&quot;Montenegro&quot;, region:&quot;Europe&quot;, lat:42.44, lon:19.26, tz:&quot;Europe/Podgorica&quot;, pop:108 },
{ name:&quot;Skopje&quot;, country:&quot;North Macedonia&quot;, region:&quot;Europe&quot;, lat:41.99, lon:21.43, tz:&quot;Europe/Skopje&quot;, pop:109 },
{ name:&quot;San Marino&quot;, country:&quot;San Marino&quot;, region:&quot;Europe&quot;, lat:43.94, lon:12.45, tz:&quot;Europe/San_Marino&quot;, pop:110 },
{ name:&quot;Bratislava&quot;, country:&quot;Slovakia&quot;, region:&quot;Europe&quot;, lat:48.15, lon:17.11, tz:&quot;Europe/Bratislava&quot;, pop:111 },
{ name:&quot;Ljubljana&quot;, country:&quot;Slovenia&quot;, region:&quot;Europe&quot;, lat:46.05, lon:14.51, tz:&quot;Europe/Ljubljana&quot;, pop:112 },
{ name:&quot;Vatican City&quot;, country:&quot;Vatican City&quot;, region:&quot;Europe&quot;, lat:41.90, lon:12.45, tz:&quot;Europe/Vatican&quot;, pop:113 },

/* ===================== AFRICA ===================== */
{ name:&quot;Cairo&quot;, country:&quot;Egypt&quot;, region:&quot;Africa&quot;, lat:30.04, lon:31.23, tz:&quot;Africa/Cairo&quot;, pop:114 },
{ name:&quot;Alexandria&quot;, country:&quot;Egypt&quot;, region:&quot;Africa&quot;, lat:31.20, lon:29.91, tz:&quot;Africa/Cairo&quot;, pop:115 },
{ name:&quot;Abuja&quot;, country:&quot;Nigeria&quot;, region:&quot;Africa&quot;, lat:9.08, lon:7.40, tz:&quot;Africa/Lagos&quot;, pop:116 },
{ name:&quot;Lagos&quot;, country:&quot;Nigeria&quot;, region:&quot;Africa&quot;, lat:6.52, lon:3.37, tz:&quot;Africa/Lagos&quot;, pop:117 },
{ name:&quot;Addis Ababa&quot;, country:&quot;Ethiopia&quot;, region:&quot;Africa&quot;, lat:8.98, lon:38.79, tz:&quot;Africa/Addis_Ababa&quot;, pop:118 },
{ name:&quot;Nairobi&quot;, country:&quot;Kenya&quot;, region:&quot;Africa&quot;, lat:-1.29, lon:36.82, tz:&quot;Africa/Nairobi&quot;, pop:119 },
{ name:&quot;Pretoria&quot;, country:&quot;South Africa&quot;, region:&quot;Africa&quot;, lat:-25.74, lon:28.18, tz:&quot;Africa/Johannesburg&quot;, pop:120 },
{ name:&quot;Johannesburg&quot;, country:&quot;South Africa&quot;, region:&quot;Africa&quot;, lat:-26.20, lon:28.04, tz:&quot;Africa/Johannesburg&quot;, pop:121 },
{ name:&quot;Cape Town&quot;, country:&quot;South Africa&quot;, region:&quot;Africa&quot;, lat:-33.92, lon:18.42, tz:&quot;Africa/Johannesburg&quot;, pop:122 },
{ name:&quot;Casablanca&quot;, country:&quot;Morocco&quot;, region:&quot;Africa&quot;, lat:33.57, lon:-7.58, tz:&quot;Africa/Casablanca&quot;, pop:123 },
{ name:&quot;Accra&quot;, country:&quot;Ghana&quot;, region:&quot;Africa&quot;, lat:5.60, lon:-0.18, tz:&quot;Africa/Accra&quot;, pop:124 },
{ name:&quot;Dar es Salaam&quot;, country:&quot;Tanzania&quot;, region:&quot;Africa&quot;, lat:-6.79, lon:39.20, tz:&quot;Africa/Dar_es_Salaam&quot;, pop:125 },
{ name:&quot;Luanda&quot;, country:&quot;Angola&quot;, region:&quot;Africa&quot;, lat:-8.83, lon:13.24, tz:&quot;Africa/Luanda&quot;, pop:126 },
{ name:&quot;Kinshasa&quot;, country:&quot;DR Congo&quot;, region:&quot;Africa&quot;, lat:-4.32, lon:15.31, tz:&quot;Africa/Kinshasa&quot;, pop:127 },
{ name:&quot;Algiers&quot;, country:&quot;Algeria&quot;, region:&quot;Africa&quot;, lat:36.75, lon:3.06, tz:&quot;Africa/Algiers&quot;, pop:128 },
{ name:&quot;Tunis&quot;, country:&quot;Tunisia&quot;, region:&quot;Africa&quot;, lat:36.81, lon:10.18, tz:&quot;Africa/Tunis&quot;, pop:129 },
{ name:&quot;Tripoli&quot;, country:&quot;Libya&quot;, region:&quot;Africa&quot;, lat:32.89, lon:13.19, tz:&quot;Africa/Tripoli&quot;, pop:130 },
{ name:&quot;Khartoum&quot;, country:&quot;Sudan&quot;, region:&quot;Africa&quot;, lat:15.50, lon:32.56, tz:&quot;Africa/Khartoum&quot;, pop:131 },
{ name:&quot;Juba&quot;, country:&quot;South Sudan&quot;, region:&quot;Africa&quot;, lat:4.85, lon:31.58, tz:&quot;Africa/Juba&quot;, pop:132 },
{ name:&quot;Porto-Novo&quot;, country:&quot;Benin&quot;, region:&quot;Africa&quot;, lat:6.50, lon:2.63, tz:&quot;Africa/Porto-Novo&quot;, pop:133 },
{ name:&quot;Ouagadougou&quot;, country:&quot;Burkina Faso&quot;, region:&quot;Africa&quot;, lat:12.37, lon:-1.53, tz:&quot;Africa/Ouagadougou&quot;, pop:134 },
{ name:&quot;Praia&quot;, country:&quot;Cabo Verde&quot;, region:&quot;Africa&quot;, lat:14.93, lon:-23.51, tz:&quot;Atlantic/Cape_Verde&quot;, pop:135 },
{ name:&quot;Yamoussoukro&quot;, country:&quot;Côte d’Ivoire&quot;, region:&quot;Africa&quot;, lat:6.82, lon:-5.28, tz:&quot;Africa/Abidjan&quot;, pop:136 },
{ name:&quot;Banjul&quot;, country:&quot;The Gambia&quot;, region:&quot;Africa&quot;, lat:13.45, lon:-16.57, tz:&quot;Africa/Banjul&quot;, pop:137 },
{ name:&quot;Conakry&quot;, country:&quot;Guinea&quot;, region:&quot;Africa&quot;, lat:9.64, lon:-13.58, tz:&quot;Africa/Conakry&quot;, pop:138 },
{ name:&quot;Bissau&quot;, country:&quot;Guinea-Bissau&quot;, region:&quot;Africa&quot;, lat:11.86, lon:-15.60, tz:&quot;Africa/Bissau&quot;, pop:139 },
{ name:&quot;Monrovia&quot;, country:&quot;Liberia&quot;, region:&quot;Africa&quot;, lat:6.31, lon:-10.80, tz:&quot;Africa/Monrovia&quot;, pop:140 },
{ name:&quot;Bamako&quot;, country:&quot;Mali&quot;, region:&quot;Africa&quot;, lat:12.65, lon:-8.00, tz:&quot;Africa/Bamako&quot;, pop:141 },
{ name:&quot;Nouakchott&quot;, country:&quot;Mauritania&quot;, region:&quot;Africa&quot;, lat:18.07, lon:-15.96, tz:&quot;Africa/Nouakchott&quot;, pop:142 },
{ name:&quot;Niamey&quot;, country:&quot;Niger&quot;, region:&quot;Africa&quot;, lat:13.51, lon:2.12, tz:&quot;Africa/Niamey&quot;, pop:143 },
{ name:&quot;Dakar&quot;, country:&quot;Senegal&quot;, region:&quot;Africa&quot;, lat:14.69, lon:-17.44, tz:&quot;Africa/Dakar&quot;, pop:144 },
{ name:&quot;Freetown&quot;, country:&quot;Sierra Leone&quot;, region:&quot;Africa&quot;, lat:8.48, lon:-13.23, tz:&quot;Africa/Freetown&quot;, pop:145 },
{ name:&quot;Lomé&quot;, country:&quot;Togo&quot;, region:&quot;Africa&quot;, lat:6.13, lon:1.22, tz:&quot;Africa/Lome&quot;, pop:146 },
{ name:&quot;Yaoundé&quot;, country:&quot;Cameroon&quot;, region:&quot;Africa&quot;, lat:3.87, lon:11.52, tz:&quot;Africa/Douala&quot;, pop:147 },
{ name:&quot;Bangui&quot;, country:&quot;Central African Republic&quot;, region:&quot;Africa&quot;, lat:4.39, lon:18.56, tz:&quot;Africa/Bangui&quot;, pop:148 },
{ name:&quot;N&#39;Djamena&quot;, country:&quot;Chad&quot;, region:&quot;Africa&quot;, lat:12.13, lon:15.05, tz:&quot;Africa/Ndjamena&quot;, pop:149 },
{ name:&quot;Brazzaville&quot;, country:&quot;Republic of the Congo&quot;, region:&quot;Africa&quot;, lat:-4.27, lon:15.28, tz:&quot;Africa/Brazzaville&quot;, pop:150 },
{ name:&quot;Malabo&quot;, country:&quot;Equatorial Guinea&quot;, region:&quot;Africa&quot;, lat:3.75, lon:8.78, tz:&quot;Africa/Malabo&quot;, pop:151 },
{ name:&quot;Libreville&quot;, country:&quot;Gabon&quot;, region:&quot;Africa&quot;, lat:0.39, lon:9.45, tz:&quot;Africa/Libreville&quot;, pop:152 },
{ name:&quot;São Tomé&quot;, country:&quot;São Tomé and Príncipe&quot;, region:&quot;Africa&quot;, lat:0.34, lon:6.73, tz:&quot;Africa/Sao_Tome&quot;, pop:153 },
{ name:&quot;Gitega&quot;, country:&quot;Burundi&quot;, region:&quot;Africa&quot;, lat:-3.43, lon:29.93, tz:&quot;Africa/Bujumbura&quot;, pop:154 },
{ name:&quot;Moroni&quot;, country:&quot;Comoros&quot;, region:&quot;Africa&quot;, lat:-11.70, lon:43.24, tz:&quot;Indian/Comoro&quot;, pop:155 },
{ name:&quot;Djibouti&quot;, country:&quot;Djibouti&quot;, region:&quot;Africa&quot;, lat:11.59, lon:43.15, tz:&quot;Africa/Djibouti&quot;, pop:156 },
{ name:&quot;Asmara&quot;, country:&quot;Eritrea&quot;, region:&quot;Africa&quot;, lat:15.33, lon:38.93, tz:&quot;Africa/Asmara&quot;, pop:157 },
{ name:&quot;Antananarivo&quot;, country:&quot;Madagascar&quot;, region:&quot;Africa&quot;, lat:-18.88, lon:47.51, tz:&quot;Indian/Antananarivo&quot;, pop:158 },
{ name:&quot;Lilongwe&quot;, country:&quot;Malawi&quot;, region:&quot;Africa&quot;, lat:-13.96, lon:33.79, tz:&quot;Africa/Blantyre&quot;, pop:159 },
{ name:&quot;Port Louis&quot;, country:&quot;Mauritius&quot;, region:&quot;Africa&quot;, lat:-20.16, lon:57.50, tz:&quot;Indian/Mauritius&quot;, pop:160 },
{ name:&quot;Maputo&quot;, country:&quot;Mozambique&quot;, region:&quot;Africa&quot;, lat:-25.97, lon:32.58, tz:&quot;Africa/Maputo&quot;, pop:161 },
{ name:&quot;Kigali&quot;, country:&quot;Rwanda&quot;, region:&quot;Africa&quot;, lat:-1.95, lon:30.06, tz:&quot;Africa/Kigali&quot;, pop:162 },
{ name:&quot;Victoria&quot;, country:&quot;Seychelles&quot;, region:&quot;Africa&quot;, lat:-4.62, lon:55.45, tz:&quot;Indian/Mahe&quot;, pop:163 },
{ name:&quot;Mogadishu&quot;, country:&quot;Somalia&quot;, region:&quot;Africa&quot;, lat:2.04, lon:45.34, tz:&quot;Africa/Mogadishu&quot;, pop:164 },
{ name:&quot;Kampala&quot;, country:&quot;Uganda&quot;, region:&quot;Africa&quot;, lat:0.31, lon:32.58, tz:&quot;Africa/Kampala&quot;, pop:165 },
{ name:&quot;Lusaka&quot;, country:&quot;Zambia&quot;, region:&quot;Africa&quot;, lat:-15.41, lon:28.29, tz:&quot;Africa/Lusaka&quot;, pop:166 },
{ name:&quot;Harare&quot;, country:&quot;Zimbabwe&quot;, region:&quot;Africa&quot;, lat:-17.83, lon:31.05, tz:&quot;Africa/Harare&quot;, pop:167 },
{ name:&quot;Gaborone&quot;, country:&quot;Botswana&quot;, region:&quot;Africa&quot;, lat:-24.63, lon:25.91, tz:&quot;Africa/Gaborone&quot;, pop:168 },
{ name:&quot;Mbabane&quot;, country:&quot;Eswatini&quot;, region:&quot;Africa&quot;, lat:-26.32, lon:31.13, tz:&quot;Africa/Mbabane&quot;, pop:169 },
{ name:&quot;Maseru&quot;, country:&quot;Lesotho&quot;, region:&quot;Africa&quot;, lat:-29.31, lon:27.48, tz:&quot;Africa/Maseru&quot;, pop:170 },
{ name:&quot;Windhoek&quot;, country:&quot;Namibia&quot;, region:&quot;Africa&quot;, lat:-22.57, lon:17.08, tz:&quot;Africa/Windhoek&quot;, pop:171 },
{ name:&quot;Nouadhibou&quot;, country:&quot;Mauritania&quot;, region:&quot;Africa&quot;, lat:20.93, lon:-17.03, tz:&quot;Africa/Nouakchott&quot;, pop:172 },  // optional major city
{ name:&quot;Sana&#39;a&quot;, country:&quot;Western Sahara&quot;, region:&quot;Africa&quot;, lat:24.25, lon:-15.50, tz:&quot;Africa/El_Aaiun&quot;, pop:173 }, // disputed territory, optional

/* ===================== AMERICAS ===================== */
{ name:&quot;Washington DC&quot;, country:&quot;United States&quot;, region:&quot;North America&quot;, lat:38.90, lon:-77.03, tz:&quot;America/New_York&quot;, pop:174 },
{ name:&quot;New York&quot;, country:&quot;United States&quot;, region:&quot;North America&quot;, lat:40.71, lon:-74.00, tz:&quot;America/New_York&quot;, pop:175 },
{ name:&quot;Los Angeles&quot;, country:&quot;United States&quot;, region:&quot;North America&quot;, lat:34.05, lon:-118.24, tz:&quot;America/Los_Angeles&quot;, pop:176 },
{ name:&quot;Chicago&quot;, country:&quot;United States&quot;, region:&quot;North America&quot;, lat:41.87, lon:-87.62, tz:&quot;America/Chicago&quot;, pop:177 },
{ name:&quot;Ottawa&quot;, country:&quot;Canada&quot;, region:&quot;North America&quot;, lat:45.42, lon:-75.69, tz:&quot;America/Toronto&quot;, pop:178 },
{ name:&quot;Toronto&quot;, country:&quot;Canada&quot;, region:&quot;North America&quot;, lat:43.65, lon:-79.38, tz:&quot;America/Toronto&quot;, pop:179 },
{ name:&quot;Vancouver&quot;, country:&quot;Canada&quot;, region:&quot;North America&quot;, lat:49.28, lon:-123.12, tz:&quot;America/Vancouver&quot;, pop:180 },
{ name:&quot;Mexico City&quot;, country:&quot;Mexico&quot;, region:&quot;North America&quot;, lat:19.43, lon:-99.13, tz:&quot;America/Mexico_City&quot;, pop:181 },
{ name:&quot;Brasilia&quot;, country:&quot;Brazil&quot;, region:&quot;South America&quot;, lat:-15.78, lon:-47.93, tz:&quot;America/Sao_Paulo&quot;, pop:182 },
{ name:&quot;Sao Paulo&quot;, country:&quot;Brazil&quot;, region:&quot;South America&quot;, lat:-23.55, lon:-46.63, tz:&quot;America/Sao_Paulo&quot;, pop:183 },
{ name:&quot;Rio de Janeiro&quot;, country:&quot;Brazil&quot;, region:&quot;South America&quot;, lat:-22.90, lon:-43.17, tz:&quot;America/Sao_Paulo&quot;, pop:184 },
{ name:&quot;Buenos Aires&quot;, country:&quot;Argentina&quot;, region:&quot;South America&quot;, lat:-34.60, lon:-58.38, tz:&quot;America/Argentina/Buenos_Aires&quot;, pop:185 },
{ name:&quot;Bogota&quot;, country:&quot;Colombia&quot;, region:&quot;South America&quot;, lat:4.71, lon:-74.07, tz:&quot;America/Bogota&quot;, pop:186 },
{ name:&quot;Lima&quot;, country:&quot;Peru&quot;, region:&quot;South America&quot;, lat:-12.04, lon:-77.04, tz:&quot;America/Lima&quot;, pop:187 },
{ name:&quot;Santiago&quot;, country:&quot;Chile&quot;, region:&quot;South America&quot;, lat:-33.45, lon:-70.66, tz:&quot;America/Santiago&quot;, pop:188 },
{ name:&quot;Havana&quot;, country:&quot;Cuba&quot;, region:&quot;North America&quot;, lat:23.11, lon:-82.36, tz:&quot;America/Havana&quot;, pop:189 },
{ name:&quot;Panama City&quot;, country:&quot;Panama&quot;, region:&quot;North America&quot;, lat:8.98, lon:-79.52, tz:&quot;America/Panama&quot;, pop:190 },
{ name:&quot;San Jose&quot;, country:&quot;Costa Rica&quot;, region:&quot;North America&quot;, lat:9.93, lon:-84.08, tz:&quot;America/Costa_Rica&quot;, pop:191 },
{ name:&quot;Caracas&quot;, country:&quot;Venezuela&quot;, region:&quot;South America&quot;, lat:10.48, lon:-66.90, tz:&quot;America/Caracas&quot;, pop:192 },
{ name:&quot;Nassau&quot;, country:&quot;The Bahamas&quot;, region:&quot;North America&quot;, lat:25.05, lon:-77.35, tz:&quot;America/Nassau&quot;, pop:193 },
{ name:&quot;Belmopan&quot;, country:&quot;Belize&quot;, region:&quot;North America&quot;, lat:17.25, lon:-88.77, tz:&quot;America/Belize&quot;, pop:194 },
{ name:&quot;Guatemala City&quot;, country:&quot;Guatemala&quot;, region:&quot;North America&quot;, lat:14.63, lon:-90.55, tz:&quot;America/Guatemala&quot;, pop:195 },
{ name:&quot;San Salvador&quot;, country:&quot;El Salvador&quot;, region:&quot;North America&quot;, lat:13.69, lon:-89.19, tz:&quot;America/El_Salvador&quot;, pop:196 },
{ name:&quot;Tegucigalpa&quot;, country:&quot;Honduras&quot;, region:&quot;North America&quot;, lat:14.07, lon:-87.19, tz:&quot;America/Tegucigalpa&quot;, pop:197 },
{ name:&quot;Managua&quot;, country:&quot;Nicaragua&quot;, region:&quot;North America&quot;, lat:12.14, lon:-86.25, tz:&quot;America/Managua&quot;, pop:198 },
{ name:&quot;Port-au-Prince&quot;, country:&quot;Haiti&quot;, region:&quot;North America&quot;, lat:18.54, lon:-72.34, tz:&quot;America/Port-au-Prince&quot;, pop:199 },
{ name:&quot;Santo Domingo&quot;, country:&quot;Dominican Republic&quot;, region:&quot;North America&quot;, lat:18.48, lon:-69.91, tz:&quot;America/Santo_Domingo&quot;, pop:200 },
{ name:&quot;Kingston&quot;, country:&quot;Jamaica&quot;, region:&quot;North America&quot;, lat:17.97, lon:-76.79, tz:&quot;America/Jamaica&quot;, pop:201 },
{ name:&quot;Bridgetown&quot;, country:&quot;Barbados&quot;, region:&quot;North America&quot;, lat:13.10, lon:-59.61, tz:&quot;America/Barbados&quot;, pop:202 },
{ name:&quot;Saint John&#39;s&quot;, country:&quot;Antigua and Barbuda&quot;, region:&quot;North America&quot;, lat:17.12, lon:-61.85, tz:&quot;America/Antigua&quot;, pop:203 },
{ name:&quot;Roseau&quot;, country:&quot;Dominica&quot;, region:&quot;North America&quot;, lat:15.30, lon:-61.39, tz:&quot;America/Dominica&quot;, pop:204 },
{ name:&quot;St. George&#39;s&quot;, country:&quot;Grenada&quot;, region:&quot;North America&quot;, lat:12.05, lon:-61.75, tz:&quot;America/Grenada&quot;, pop:205 },
{ name:&quot;Basseterre&quot;, country:&quot;Saint Kitts and Nevis&quot;, region:&quot;North America&quot;, lat:17.30, lon:-62.73, tz:&quot;America/St_Kitts&quot;, pop:206 },
{ name:&quot;Castries&quot;, country:&quot;Saint Lucia&quot;, region:&quot;North America&quot;, lat:14.01, lon:-60.99, tz:&quot;America/St_Lucia&quot;, pop:207 },
{ name:&quot;Kingstown&quot;, country:&quot;Saint Vincent and the Grenadines&quot;, region:&quot;North America&quot;, lat:13.16, lon:-61.23, tz:&quot;America/St_Vincent&quot;, pop:208 },
{ name:&quot;Port of Spain&quot;, country:&quot;Trinidad and Tobago&quot;, region:&quot;North America&quot;, lat:10.66, lon:-61.52, tz:&quot;America/Port_of_Spain&quot;, pop:209 },
{ name:&quot;Quito&quot;, country:&quot;Ecuador&quot;, region:&quot;South America&quot;, lat:-0.18, lon:-78.47, tz:&quot;America/Guayaquil&quot;, pop:210 },
{ name:&quot;Georgetown&quot;, country:&quot;Guyana&quot;, region:&quot;South America&quot;, lat:6.80, lon:-58.16, tz:&quot;America/Guyana&quot;, pop:211 },
{ name:&quot;Asuncion&quot;, country:&quot;Paraguay&quot;, region:&quot;South America&quot;, lat:-25.26, lon:-57.58, tz:&quot;America/Asuncion&quot;, pop:212 },
{ name:&quot;Paramaribo&quot;, country:&quot;Suriname&quot;, region:&quot;South America&quot;, lat:5.85, lon:-55.17, tz:&quot;America/Paramaribo&quot;, pop:213 },
{ name:&quot;Montevideo&quot;, country:&quot;Uruguay&quot;, region:&quot;South America&quot;, lat:-34.90, lon:-56.16, tz:&quot;America/Montevideo&quot;, pop:214 },
{ name:&quot;Sucre&quot;, country:&quot;Bolivia&quot;, region:&quot;South America&quot;, lat:-19.03, lon:-65.26, tz:&quot;America/La_Paz&quot;, pop:215 },
{ name:&quot;La Paz&quot;, country:&quot;Bolivia&quot;, region:&quot;South America&quot;, lat:-16.50, lon:-68.15, tz:&quot;America/La_Paz&quot;, pop:216 },

/* ===================== OCEANIA ===================== */
{ name:&quot;Canberra&quot;, country:&quot;Australia&quot;, region:&quot;Oceania&quot;, lat:-35.28, lon:149.13, tz:&quot;Australia/Sydney&quot;, pop:217 },
{ name:&quot;Sydney&quot;, country:&quot;Australia&quot;, region:&quot;Oceania&quot;, lat:-33.86, lon:151.20, tz:&quot;Australia/Sydney&quot;, pop:218 },
{ name:&quot;Melbourne&quot;, country:&quot;Australia&quot;, region:&quot;Oceania&quot;, lat:-37.81, lon:144.96, tz:&quot;Australia/Melbourne&quot;, pop:219 },
{ name:&quot;Wellington&quot;, country:&quot;New Zealand&quot;, region:&quot;Oceania&quot;, lat:-41.28, lon:174.77, tz:&quot;Pacific/Auckland&quot;, pop:220 },
{ name:&quot;Auckland&quot;, country:&quot;New Zealand&quot;, region:&quot;Oceania&quot;, lat:-36.84, lon:174.76, tz:&quot;Pacific/Auckland&quot;, pop:221 },
{ name:&quot;Port Moresby&quot;, country:&quot;Papua New Guinea&quot;, region:&quot;Oceania&quot;, lat:-9.44, lon:147.18, tz:&quot;Pacific/Port_Moresby&quot;, pop:222 },
{ name:&quot;Suva&quot;, country:&quot;Fiji&quot;, region:&quot;Oceania&quot;, lat:-18.14, lon:178.44, tz:&quot;Pacific/Fiji&quot;, pop:223 },
{ name:&quot;Apia&quot;, country:&quot;Samoa&quot;, region:&quot;Oceania&quot;, lat:-13.83, lon:-171.77, tz:&quot;Pacific/Apia&quot;, pop:224 },
{ name:&quot;Nuku&#39;alofa&quot;, country:&quot;Tonga&quot;, region:&quot;Oceania&quot;, lat:-21.14, lon:-175.20, tz:&quot;Pacific/Tongatapu&quot;, pop:225 },
{ name:&quot;Honiara&quot;, country:&quot;Solomon Islands&quot;, region:&quot;Oceania&quot;, lat:-9.43, lon:159.95, tz:&quot;Pacific/Guadalcanal&quot;, pop:226 },
{ name:&quot;Port Vila&quot;, country:&quot;Vanuatu&quot;, region:&quot;Oceania&quot;, lat:-17.74, lon:168.32, tz:&quot;Pacific/Efate&quot;, pop:227 },
{ name:&quot;Tarawa&quot;, country:&quot;Kiribati&quot;, region:&quot;Oceania&quot;, lat:1.33, lon:172.98, tz:&quot;Pacific/Tarawa&quot;, pop:228 },
{ name:&quot;Majuro&quot;, country:&quot;Marshall Islands&quot;, region:&quot;Oceania&quot;, lat:7.12, lon:171.38, tz:&quot;Pacific/Majuro&quot;, pop:229 },
{ name:&quot;Palikir&quot;, country:&quot;Micronesia&quot;, region:&quot;Oceania&quot;, lat:6.92, lon:158.16, tz:&quot;Pacific/Pohnpei&quot;, pop:230 },
{ name:&quot;Yaren&quot;, country:&quot;Nauru&quot;, region:&quot;Oceania&quot;, lat:-0.55, lon:166.92, tz:&quot;Pacific/Nauru&quot;, pop:231 },
{ name:&quot;Funafuti&quot;, country:&quot;Tuvalu&quot;, region:&quot;Oceania&quot;, lat:-8.52, lon:179.20, tz:&quot;Pacific/Funafuti&quot;, pop:232 },

];

let activeData = [];

async function handleRegionChange() {
    const region = document.getElementById(&#39;regionFilter&#39;).value;
    const regionCities = citiesDB.filter(c =&gt; c.region === region);
    
    const grid = document.getElementById(&#39;grid&#39;);
    grid.innerHTML = `&lt;div style=&quot;text-align: center; padding: 40px; color: var(--primary);&quot;&gt;Fetching Weather for ${region}...&lt;/div&gt;`;

    const weatherResults = await Promise.all(regionCities.map(async (city) =&gt; {
        try {
            const res = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${city.lat}&amp;longitude=${city.lon}&amp;current=temperature_2m,is_day,weather_code,wind_speed_10m,relative_humidity_2m&amp;timezone=auto`);
            const data = await res.json();
            return { ...city, ...data.current, temp: data.current.temperature_2m };
        } catch {
            return { ...city, temp: &#39;--&#39;, is_day: 1, wind_speed_10m: &#39;--&#39;, relative_humidity_2m: &#39;--&#39; };
        }
    }));

    activeData = weatherResults;
    // CRITICAL FIX: Sort right after fetching data
    sortCities(); 
}

function renderGrid(data) {
    const grid = document.getElementById(&#39;grid&#39;);
    grid.innerHTML = &#39;&#39;;
    
    // If no specific data passed, use activeData
    const dataToRender = data || activeData;

    dataToRender.forEach(city =&gt; {
        const row = document.createElement(&#39;div&#39;);
        row.className = `city-row ${city.is_day ? &#39;theme-day&#39; : &#39;theme-night&#39;}`;
        row.innerHTML = `
            &lt;div class=&quot;col-name&quot;&gt;
                &lt;div class=&quot;city-name&quot;&gt;${city.name}&lt;/div&gt;
                &lt;div class=&quot;country-name&quot;&gt;${city.country}&lt;/div&gt;
            &lt;/div&gt;
            &lt;div&gt;&lt;img src=&quot;https://openweathermap.org/img/wn/0${city.is_day ? &#39;1d&#39; : &#39;1n&#39;}@2x.png&quot; class=&quot;weather-icon-img&quot;&gt;&lt;/div&gt;
            &lt;div class=&quot;col-temp&quot;&gt;${Math.round(city.temp) || &#39;--&#39;}°C&lt;/div&gt;
            &lt;div class=&quot;col-meta&quot;&gt;💨 ${city.wind_speed_10m}k/h | 💧 ${city.relative_humidity_2m}%&lt;/div&gt;
            &lt;div class=&quot;col-time&quot;&gt;
                &lt;div class=&quot;local-time&quot; data-tz=&quot;${city.tz}&quot;&gt;${luxon.DateTime.now().setZone(city.tz).toFormat(&#39;HH:mm&#39;)}&lt;/div&gt;
                &lt;div class=&quot;time-tz&quot;&gt;${luxon.DateTime.now().setZone(city.tz).toFormat(&#39;ZZZZ&#39;)}&lt;/div&gt;
            &lt;/div&gt;
        `;
        grid.appendChild(row);
    });
}

function updateClocks() {
    document.querySelectorAll(&#39;.local-time&#39;).forEach(el =&gt; {
        el.textContent = luxon.DateTime.now().setZone(el.dataset.tz).toFormat(&#39;HH:mm&#39;);
    });
}

// RESTORED SORT FUNCTION
window.sortCities = () =&gt; {
    const mode = document.getElementById(&#39;sort&#39;).value;
    
    // Always sort the global activeData array so filters apply to sorted data
    if(mode === &#39;name&#39;) activeData.sort((a,b) =&gt; a.name.localeCompare(b.name));
    if(mode === &#39;pop&#39;) activeData.sort((a,b) =&gt; a.pop - b.pop);
    
    // For temperature, handle missing data safely
    if(mode === &#39;temp_high&#39;) activeData.sort((a,b) =&gt; (b.temp === &#39;--&#39; ? -999 : b.temp) - (a.temp === &#39;--&#39; ? -999 : a.temp));
    
    // Re-render
    renderGrid(activeData);
};

window.filterCities = async () =&gt; {
    const q = document.getElementById(&#39;search&#39;).value.toLowerCase().trim();
    if (q === &quot;&quot;) {
        handleRegionChange(); // Go back to Region View
        return;
    }

    // 1. Search Logic
    const globalMatches = citiesDB.filter(c =&gt; 
        c.name.toLowerCase().includes(q) || 
        c.country.toLowerCase().includes(q)
    );

    if (globalMatches.length &gt; 0) {
        const grid = document.getElementById(&#39;grid&#39;);
        grid.innerHTML = `&lt;div style=&quot;text-align: center; padding: 20px; font-size: 13px; opacity: 0.6;&quot;&gt;Searching globally...&lt;/div&gt;`;

        const weatherResults = await Promise.all(globalMatches.map(async (city) =&gt; {
            try {
                const res = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${city.lat}&amp;longitude=${city.lon}&amp;current=temperature_2m,is_day,weather_code,wind_speed_10m,relative_humidity_2m&amp;timezone=auto`);
                const data = await res.json();
                return { ...city, ...data.current, temp: data.current.temperature_2m };
            } catch {
                return { ...city, temp: &#39;--&#39;, is_day: 1, wind_speed_10m: &#39;--&#39;, relative_humidity_2m: &#39;--&#39; };
            }
        }));

        activeData = weatherResults;
        sortCities(); // Apply sort to search results too
    } else {
        document.getElementById(&#39;grid&#39;).innerHTML = `&lt;div style=&quot;text-align: center; padding: 40px; opacity: 0.5;&quot;&gt;No results found for &quot;${q}&quot;&lt;/div&gt;`;
    }
};

// Start
handleRegionChange();
setInterval(updateClocks, 1000);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1349756561215473232'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1349756561215473232'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/02/world-weather-studio-online.html' title='World Weather Studio Online'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-8950588751279814864</id><published>2026-02-10T08:41:00.000-08:00</published><updated>2026-02-10T08:51:44.974-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Flight TimeZone Sync"/><title type='text'>Flight Timezone Synchronizer</title><content type='html'>&lt;title&gt;Flight Timezone Synchronizer | Jet Lag, CO2 &amp; Itinerary Planner - OTechy&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;The ultimate travel planner. Sync flight times to your body clock, calculate CO2 emissions, plan ground connections, and generate a premium PDF Cheat Sheet.&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Flight Timezone Synchronizer (Ultimate) - OTechy&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/luxon/3.4.4/luxon.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.8.1/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #3b82f6; --primary-dark: #1d4ed8; --text-dark: #1e293b; --accent: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-blue: #f0f7ff; --success: #10b981; --warning: #f59e0b;
        --eco-green: #059669; --cold-blue: #0ea5e9; --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 80px 20px 20px; }
    
    .otechy-badge { display: table; margin: 0 auto 10px; background: #eff6ff; color: var(--primary); padding: 6px 16px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #dbeafe; }
    
    /* Header */
    .tool-header { text-align: center; margin-bottom: 30px; }
    .tool-header h1 { 
        font-size: clamp(24px, 5vw, 42px); font-weight: 850; color: var(--primary); margin: 0; 
        display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; text-align: center;
    }
    .bharat-flag { width: 28px; height: auto; border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
    .quick-value { color: var(--primary); font-weight: 600; font-size: 14px; margin-top: 5px; text-align: center; }
    
    /* Navigation */
    .tool-navigation { display: flex; justify-content: center; gap: 10px; margin-bottom: 25px; flex-wrap: wrap; margin-top: 20px; }
    .nav-link { text-decoration: none; font-size: 11px; font-weight: 700; color: var(--accent); background: var(--white); padding: 8px 18px; border-radius: 50px; border: 1px solid var(--border); transition: 0.3s; display: flex; align-items: center; gap: 6px; }
    .nav-link:hover { border-color: var(--primary); color: var(--primary); }

    /* Ads */
    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { text-align: center; background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; display: flex; align-items: center; justify-content: center; }

    /* Main Card */
    .otechy-card { background: var(--white); padding: 25px; border-radius: 12px; border: 1px solid var(--border); box-shadow: 0 4px 12px rgba(0,0,0,0.05); margin-bottom: 30px; }

    /* Form */
    .input-label { font-size: 11px; font-weight: 700; color: var(--accent); text-transform: uppercase; display: block; margin-bottom: 5px; }
    .form-control { width: 100%; padding: 12px; border: 2px solid var(--border); border-radius: 8px; font-size: 14px; outline: none; background: #fff; font-family: var(--font-main); }
    .form-control:focus { border-color: var(--primary); }

    /* Leg Container */
    .leg-card { background: #f8fafc; border: 1px dashed #cbd5e1; padding: 15px; border-radius: 8px; margin-bottom: 15px; position: relative; }
    .leg-title { font-size: 13px; font-weight: 700; color: var(--primary); margin-bottom: 10px; display: flex; justify-content: space-between; }
    .remove-leg { color: #ef4444; cursor: pointer; font-size: 11px; }
    .row-group { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }

    /* Ground Leg Style */
    .ground-leg { background: #f0fdf4; border-color: #bbf7d0; }
    .ground-title { color: var(--eco-green); }

    /* Buttons */
    .btn-row { display: flex; gap: 10px; margin-top: 15px; flex-wrap: wrap; }
    .otechy-btn { border: none; padding: 12px 20px; border-radius: 8px; font-weight: 700; font-size: 13px; cursor: pointer; transition: 0.2s; display: flex; align-items: center; justify-content: center; gap: 6px; flex: 1; }
    .btn-add { background: var(--soft-blue); color: var(--primary); border: 1px solid #bfdbfe; }
    .btn-ground { background: #ecfdf5; color: var(--eco-green); border: 1px solid #6ee7b7; }
    .btn-primary { background: var(--primary); color: white; width: 100%; margin-top: 15px; }
    .btn-pdf { background: var(--text-dark); color: white; width: 100%; margin-top: 10px; }

    /* Timeline */
    .timeline-container { margin-top: 40px; display: none; }
    .timeline-event { position: relative; padding-left: 20px; border-left: 3px solid #e2e8f0; margin-bottom: 30px; }
    .timeline-dot { width: 14px; height: 14px; background: var(--primary); border-radius: 50%; position: absolute; left: -8.5px; top: 20px; border: 3px solid #fff; box-shadow: 0 0 0 2px #e2e8f0; }
    .event-card { background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 15px; box-shadow: 0 2px 5px rgba(0,0,0,0.03); }
    
    .event-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #f1f5f9; padding-bottom: 8px; margin-bottom: 10px; }
    .route-title { font-size: 16px; font-weight: 850; color: var(--text-dark); }
    .flight-stats { font-size: 11px; font-weight: 600; color: var(--accent); background: #f1f5f9; padding: 4px 8px; border-radius: 4px; }

    .time-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
    .time-block h4 { font-size: 11px; text-transform: uppercase; color: var(--accent); margin: 0 0 4px 0; }
    .time-display { font-size: 15px; font-weight: 700; color: var(--text-dark); }
    .tz-name { font-size: 11px; color: var(--primary); font-weight: 600; }
    .body-time { font-size: 11px; color: #64748b; margin-top: 2px; }

    /* Rich Badges */
    .badge-grid { display: grid; gap: 10px; margin-top: 15px; }
    .rich-badge { font-size: 12px; padding: 10px; border-radius: 8px; display: flex; align-items: start; gap: 8px; line-height: 1.4; }
    
    .badge-eco { background: #ecfdf5; color: #047857; border: 1px solid #a7f3d0; }
    .badge-watch { background: #fff7ed; color: #c2410c; border: 1px solid #fdba74; }
    .badge-cold { background: #f0f9ff; color: #0369a1; border: 1px solid #bae6fd; }
    .badge-hot { background: #fefce8; color: #a16207; border: 1px solid #fef08a; }
    .badge-health { background: #fdf2f8; color: #db2777; border: 1px solid #fbcfe8; }

    /* Trust &amp; FAQ */
    .geo-citation { background: var(--white); padding: 25px; border-radius: 12px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0 20px; color: var(--text-dark); box-shadow: 0 4px 12px rgba(0,0,0,0.02); }
    
    .faq-section { margin-top: 60px; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 15px; }
    .faq-card { background: var(--white); padding: 20px; border-radius: 12px; border: 1px solid var(--border); transition:0.2s; }
    .faq-card:hover { border-color: var(--primary); }
    .faq-card h3 { font-size: 13px; color: var(--primary); margin: 0 0 8px; font-weight: 700; }
    .faq-card p { font-size: 11px; color: var(--accent); margin: 0; line-height: 1.5; }

    @media (max-width: 768px) { 
        .otechy-tool-wrapper { padding: 40px 15px 15px !important; }
        .row-group { grid-template-columns: 1fr; }
        .faq-grid { grid-template-columns: 1fr; } 
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;otechy-badge&quot;&gt;Travel Suite &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;

    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;
            Flight Timezone Synchronizer
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; style=&quot;vertical-align: middle; margin-left: 8px;&quot;&gt;&lt;defs&gt;&lt;clipPath id=&quot;circleView&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;12&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;g clip-path=&quot;url(#circleView)&quot;&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;0&quot; fill=&quot;#FF9933&quot;/&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;8&quot; fill=&quot;#FFFFFF&quot;/&gt;&lt;rect width=&quot;24&quot; height=&quot;8&quot; y=&quot;16&quot; fill=&quot;#138808&quot;/&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;3&quot; fill=&quot;none&quot; stroke=&quot;#000080&quot; stroke-width=&quot;0.5&quot;/&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;0.8&quot; fill=&quot;#000080&quot;/&gt;&lt;g stroke=&quot;#000080&quot; stroke-width=&quot;0.2&quot;&gt;&lt;line x1=&quot;12&quot; y1=&quot;9&quot; x2=&quot;12&quot; y2=&quot;15&quot;/&gt;&lt;line x1=&quot;9&quot; y1=&quot;12&quot; x2=&quot;15&quot; y2=&quot;12&quot;/&gt;&lt;line x1=&quot;9.8&quot; y1=&quot;9.8&quot; x2=&quot;14.2&quot; y2=&quot;14.2&quot;/&gt;&lt;line x1=&quot;9.8&quot; y1=&quot;14.2&quot; x2=&quot;14.2&quot; y2=&quot;9.8&quot;/&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Sync your flight plan with your Body Clock. Includes Smart Packing &amp; Weather Alerts.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;tool-navigation&quot;&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?find=currency&quot; class=&quot;nav-link&quot;&gt;
            &lt;svg width=&quot;14&quot; height=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;rect x=&quot;2&quot; y=&quot;6&quot; width=&quot;20&quot; height=&quot;12&quot; rx=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M12 12a2 2 0 1 0 0-4 2 2 0 0 0 0 4z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M6 12h.01M18 12h.01&quot;&gt;&lt;/path&gt;&lt;/svg&gt; Currency Converter
        &lt;/a&gt;
        &lt;a href=&quot;https://www.otechy.com/p/search.html?find=weather&quot; class=&quot;nav-link&quot;&gt;
            &lt;svg width=&quot;14&quot; height=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;/svg&gt; World Weather
        &lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px;&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        
        &lt;div class=&quot;flight-form&quot;&gt;
            &lt;div&gt;
                &lt;label class=&quot;input-label&quot;&gt;Your Home Timezone (My Watch Time)&lt;/label&gt;
                &lt;select id=&quot;homeTimezone&quot; class=&quot;form-control&quot;&gt;
                    &lt;option value=&quot;Asia/Kolkata&quot;&gt;(GMT+05:30) India Standard Time&lt;/option&gt;
                    &lt;option value=&quot;Asia/Dubai&quot;&gt;(GMT+04:00) Gulf Standard Time&lt;/option&gt;
                    &lt;option value=&quot;Europe/London&quot;&gt;(GMT+00:00) London / UK&lt;/option&gt;
                    &lt;option value=&quot;Europe/Paris&quot;&gt;(GMT+01:00) Central European Time&lt;/option&gt;
                    &lt;option value=&quot;America/New_York&quot;&gt;(GMT-05:00) Eastern Time (US)&lt;/option&gt;
                    &lt;option value=&quot;America/Los_Angeles&quot;&gt;(GMT-08:00) Pacific Time (US)&lt;/option&gt;
                    &lt;option value=&quot;Asia/Singapore&quot;&gt;(GMT+08:00) Singapore / China&lt;/option&gt;
                    &lt;option value=&quot;Asia/Tokyo&quot;&gt;(GMT+09:00) Japan / Korea&lt;/option&gt;
                    &lt;option value=&quot;Australia/Sydney&quot;&gt;(GMT+11:00) Sydney&lt;/option&gt;
                    &lt;option value=&quot;Pacific/Auckland&quot;&gt;(GMT+13:00) New Zealand&lt;/option&gt;
                    &lt;option value=&quot;Europe/Moscow&quot;&gt;(GMT+03:00) Moscow&lt;/option&gt;
                    &lt;option value=&quot;Asia/Bangkok&quot;&gt;(GMT+07:00) Thailand / Vietnam&lt;/option&gt;
                    &lt;option value=&quot;America/Chicago&quot;&gt;(GMT-06:00) Central Time (US)&lt;/option&gt;
                    &lt;option value=&quot;America/Denver&quot;&gt;(GMT-07:00) Mountain Time (US)&lt;/option&gt;
                    &lt;option value=&quot;Africa/Johannesburg&quot;&gt;(GMT+02:00) South Africa&lt;/option&gt;
                    &lt;option value=&quot;Africa/Cairo&quot;&gt;(GMT+02:00) Egypt&lt;/option&gt;
                    &lt;option value=&quot;America/Sao_Paulo&quot;&gt;(GMT-03:00) Brazil&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div id=&quot;legsContainer&quot;&gt;
                &lt;div class=&quot;leg-card&quot; id=&quot;leg-0&quot; data-type=&quot;flight&quot;&gt;
                    &lt;div class=&quot;leg-title&quot;&gt;Flight Leg 1&lt;/div&gt;
                    &lt;div class=&quot;row-group&quot;&gt;
                        &lt;div&gt;
                            &lt;label class=&quot;input-label&quot;&gt;Departure Airport&lt;/label&gt;
                            &lt;input type=&quot;text&quot; class=&quot;form-control dep-code&quot; placeholder=&quot;Search (e.g. CCU)&quot; list=&quot;airportList&quot;&gt;
                        &lt;/div&gt;
                        &lt;div&gt;
                            &lt;label class=&quot;input-label&quot;&gt;Departure Time&lt;/label&gt;
                            &lt;input type=&quot;datetime-local&quot; class=&quot;form-control dep-time&quot;&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;row-group&quot; style=&quot;margin-top:10px;&quot;&gt;
                        &lt;div&gt;
                            &lt;label class=&quot;input-label&quot;&gt;Arrival Airport&lt;/label&gt;
                            &lt;input type=&quot;text&quot; class=&quot;form-control arr-code&quot; placeholder=&quot;Search (e.g. DOH)&quot; list=&quot;airportList&quot;&gt;
                        &lt;/div&gt;
                        &lt;div&gt;
                            &lt;label class=&quot;input-label&quot;&gt;Arrival Time&lt;/label&gt;
                            &lt;input type=&quot;datetime-local&quot; class=&quot;form-control arr-time&quot;&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;btn-row&quot;&gt;
                &lt;button class=&quot;otechy-btn btn-add&quot; type=&quot;button&quot; onclick=&quot;addLeg()&quot;&gt;
                    &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot;&gt;&lt;path d=&quot;M12 5v14M5 12h14&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 
                    Add Flight
                &lt;/button&gt;
                &lt;button class=&quot;otechy-btn btn-ground&quot; type=&quot;button&quot; onclick=&quot;addGroundLeg()&quot;&gt;
                    &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;11&quot; width=&quot;18&quot; height=&quot;11&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M7 11V7a5 5 0 0 1 10 0v4&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 
                    Add Bus/Car/Train
                &lt;/button&gt;
            &lt;/div&gt;

            &lt;button class=&quot;otechy-btn btn-primary&quot; type=&quot;button&quot; onclick=&quot;generateItinerary()&quot;&gt;Generate Itinerary&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;timelineView&quot; class=&quot;timeline-container&quot;&gt;&lt;/div&gt;
        
        &lt;div id=&quot;exportArea&quot; style=&quot;display:none;&quot;&gt;
            &lt;button class=&quot;otechy-btn btn-pdf&quot; onclick=&quot;downloadPDF()&quot;&gt;Download Travel Cheat Sheet (PDF)&lt;/button&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px;&quot;&gt;&lt;/div&gt;

    &lt;datalist id=&quot;airportList&quot;&gt;&lt;/datalist&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        As international travel from &lt;strong&gt;India&lt;/strong&gt; grows, crossing multiple time zones creates confusion. Airlines list times in &lt;strong&gt;Local Time&lt;/strong&gt;, making it hard to know when to sleep or call home. This tool converts your entire itinerary into your &lt;strong&gt;Home Time (IST/Body Clock)&lt;/strong&gt;, calculates layovers, and provides essential packing advice based on destination weather.
    &lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What is &quot;Body Clock Time&quot;?&lt;/h3&gt;&lt;p&gt;It&#39;s the time your body *thinks* it is based on your home location. Knowing this helps you understand why you feel hungry or sleepy at odd hours during travel.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;How does the Packing Assistant work?&lt;/h3&gt;&lt;p&gt;Our smart engine analyzes the latitude of your destination. If you are flying from a hot zone (like Dubai) to a cold zone (like London), it alerts you to keep a jacket handy.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is the CO2 data accurate?&lt;/h3&gt;&lt;p&gt;We use the Haversine formula to calculate the exact flight distance and apply industry-standard carbon emission factors (approx 0.115kg per km) for economy flights.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Why does the ticket say &quot;Local Time&quot;?&lt;/h3&gt;&lt;p&gt;Airlines always use the local time of the airport for departure and arrival. This can be confusing. Our tool converts everything to ONE time zone for clarity.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I plan ground transport?&lt;/h3&gt;&lt;p&gt;Yes! Use the &quot;Add Bus/Car/Train&quot; button to include taxi rides or train connections in your timeline, ensuring you have a complete door-to-door plan.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Does it work for multi-city trips?&lt;/h3&gt;&lt;p&gt;Absolutely. You can add as many flight legs as you need. The tool will calculate layovers and time adjustments for each stop.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is my travel data saved?&lt;/h3&gt;&lt;p&gt;No. We prioritize privacy. All calculations happen instantly in your browser (Client-Side). No itinerary data is sent to our servers.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I use this offline?&lt;/h3&gt;&lt;p&gt;Yes. Once the page is loaded, the tool is fully functional even if you lose internet connection during your flight planning.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;What happens if I cross the Date Line?&lt;/h3&gt;&lt;p&gt;Our underlying logic (Luxon) handles date line crossings automatically, showing you the correct &quot;+1 Day&quot; or &quot;-1 Day&quot; arrival date.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;How do I use the PDF?&lt;/h3&gt;&lt;p&gt;Download the PDF and save it to your phone or print it. It serves as a &quot;Cheat Sheet&quot; so you don&#39;t have to do mental math while jet-lagged.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px;&quot;&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    // --- 1. GLOBAL DATA ---
    const airportData = {
        // ASIA
        &quot;CCU&quot;: [&quot;Asia/Kolkata&quot;, 22.65, 88.44, &quot;Kolkata, India&quot;], &quot;DEL&quot;: [&quot;Asia/Kolkata&quot;, 28.55, 77.10, &quot;Delhi, India&quot;],
        &quot;BOM&quot;: [&quot;Asia/Kolkata&quot;, 19.08, 72.86, &quot;Mumbai, India&quot;], &quot;BLR&quot;: [&quot;Asia/Kolkata&quot;, 13.19, 77.70, &quot;Bangalore, India&quot;],
        &quot;MAA&quot;: [&quot;Asia/Kolkata&quot;, 12.99, 80.17, &quot;Chennai, India&quot;], &quot;HYD&quot;: [&quot;Asia/Kolkata&quot;, 17.24, 78.42, &quot;Hyderabad, India&quot;],
        &quot;DXB&quot;: [&quot;Asia/Dubai&quot;, 25.25, 55.36, &quot;Dubai, UAE&quot;], &quot;DOH&quot;: [&quot;Asia/Qatar&quot;, 25.27, 51.61, &quot;Doha, Qatar&quot;],
        &quot;AUH&quot;: [&quot;Asia/Dubai&quot;, 24.43, 54.65, &quot;Abu Dhabi, UAE&quot;], &quot;SIN&quot;: [&quot;Asia/Singapore&quot;, 1.36, 103.99, &quot;Singapore&quot;],
        &quot;BKK&quot;: [&quot;Asia/Bangkok&quot;, 13.69, 100.75, &quot;Bangkok, Thailand&quot;], &quot;HKG&quot;: [&quot;Asia/Hong_Kong&quot;, 22.30, 113.91, &quot;Hong Kong&quot;],
        &quot;NRT&quot;: [&quot;Asia/Tokyo&quot;, 35.77, 140.39, &quot;Tokyo Narita&quot;], &quot;HND&quot;: [&quot;Asia/Tokyo&quot;, 35.54, 139.77, &quot;Tokyo Haneda&quot;],
        &quot;ICN&quot;: [&quot;Asia/Seoul&quot;, 37.46, 126.44, &quot;Seoul, Korea&quot;], &quot;KUL&quot;: [&quot;Asia/Kuala_Lumpur&quot;, 2.74, 101.70, &quot;Kuala Lumpur&quot;],
        &quot;PVG&quot;: [&quot;Asia/Shanghai&quot;, 31.14, 121.80, &quot;Shanghai, China&quot;], &quot;PEK&quot;: [&quot;Asia/Shanghai&quot;, 40.08, 116.60, &quot;Beijing, China&quot;],
        
        // EUROPE
        &quot;LHR&quot;: [&quot;Europe/London&quot;, 51.47, -0.45, &quot;London Heathrow&quot;], &quot;LGW&quot;: [&quot;Europe/London&quot;, 51.15, -0.18, &quot;London Gatwick&quot;],
        &quot;CDG&quot;: [&quot;Europe/Paris&quot;, 49.00, 2.55, &quot;Paris CDG&quot;], &quot;AMS&quot;: [&quot;Europe/Amsterdam&quot;, 52.31, 4.76, &quot;Amsterdam&quot;],
        &quot;FRA&quot;: [&quot;Europe/Berlin&quot;, 50.03, 8.57, &quot;Frankfurt&quot;], &quot;MUC&quot;: [&quot;Europe/Berlin&quot;, 48.35, 11.78, &quot;Munich&quot;],
        &quot;MAD&quot;: [&quot;Europe/Madrid&quot;, 40.48, -3.56, &quot;Madrid&quot;], &quot;BCN&quot;: [&quot;Europe/Madrid&quot;, 41.29, 2.08, &quot;Barcelona&quot;],
        &quot;FCO&quot;: [&quot;Europe/Rome&quot;, 41.80, 12.24, &quot;Rome&quot;], &quot;ZRH&quot;: [&quot;Europe/Zurich&quot;, 47.45, 8.55, &quot;Zurich&quot;],
        &quot;CPH&quot;: [&quot;Europe/Copenhagen&quot;, 55.61, 12.65, &quot;Copenhagen&quot;], &quot;DUB&quot;: [&quot;Europe/Dublin&quot;, 53.42, -6.27, &quot;Dublin&quot;],
        &quot;IST&quot;: [&quot;Europe/Istanbul&quot;, 41.27, 28.72, &quot;Istanbul&quot;], &quot;SVO&quot;: [&quot;Europe/Moscow&quot;, 55.97, 37.41, &quot;Moscow&quot;],
        &quot;VIE&quot;: [&quot;Europe/Vienna&quot;, 48.11, 16.56, &quot;Vienna&quot;], &quot;WAW&quot;: [&quot;Europe/Warsaw&quot;, 52.16, 20.96, &quot;Warsaw&quot;],

        // NORTH AMERICA
        &quot;JFK&quot;: [&quot;America/New_York&quot;, 40.64, -73.77, &quot;New York JFK&quot;], &quot;EWR&quot;: [&quot;America/New_York&quot;, 40.68, -74.17, &quot;Newark&quot;],
        &quot;ORD&quot;: [&quot;America/Chicago&quot;, 41.97, -87.90, &quot;Chicago&quot;], &quot;LAX&quot;: [&quot;America/Los_Angeles&quot;, 33.94, -118.40, &quot;Los Angeles&quot;],
        &quot;SFO&quot;: [&quot;America/Los_Angeles&quot;, 37.62, -122.37, &quot;San Francisco&quot;], &quot;DFW&quot;: [&quot;America/Chicago&quot;, 32.89, -97.04, &quot;Dallas&quot;],
        &quot;DEN&quot;: [&quot;America/Denver&quot;, 39.85, -104.67, &quot;Denver&quot;], &quot;SEA&quot;: [&quot;America/Los_Angeles&quot;, 47.45, -122.30, &quot;Seattle&quot;],
        &quot;YYZ&quot;: [&quot;America/Toronto&quot;, 43.67, -79.62, &quot;Toronto&quot;], &quot;YVR&quot;: [&quot;America/Vancouver&quot;, 49.19, -123.18, &quot;Vancouver&quot;],
        &quot;MEX&quot;: [&quot;America/Mexico_City&quot;, 19.43, -99.07, &quot;Mexico City&quot;], &quot;MIA&quot;: [&quot;America/New_York&quot;, 25.79, -80.28, &quot;Miami&quot;],

        // AFRICA &amp; S. AMERICA
        &quot;JNB&quot;: [&quot;Africa/Johannesburg&quot;, -26.13, 28.24, &quot;Johannesburg&quot;], &quot;CPT&quot;: [&quot;Africa/Johannesburg&quot;, -33.97, 18.60, &quot;Cape Town&quot;],
        &quot;CAI&quot;: [&quot;Africa/Cairo&quot;, 30.11, 31.40, &quot;Cairo&quot;], &quot;NBO&quot;: [&quot;Africa/Nairobi&quot;, -1.31, 36.92, &quot;Nairobi&quot;],
        &quot;GRU&quot;: [&quot;America/Sao_Paulo&quot;, -23.43, -46.47, &quot;Sao Paulo&quot;], &quot;EZE&quot;: [&quot;America/Argentina/Buenos_Aires&quot;, -34.82, -58.53, &quot;Buenos Aires&quot;],
        &quot;BOG&quot;: [&quot;America/Bogota&quot;, 4.70, -74.14, &quot;Bogota&quot;], &quot;LIM&quot;: [&quot;America/Lima&quot;, -12.02, -77.11, &quot;Lima&quot;],

        // OCEANIA
        &quot;SYD&quot;: [&quot;Australia/Sydney&quot;, -33.93, 151.17, &quot;Sydney&quot;], &quot;MEL&quot;: [&quot;Australia/Melbourne&quot;, -37.66, 144.84, &quot;Melbourne&quot;],
        &quot;BNE&quot;: [&quot;Australia/Brisbane&quot;, -27.38, 153.11, &quot;Brisbane&quot;], &quot;AKL&quot;: [&quot;Pacific/Auckland&quot;, -37.00, 174.78, &quot;Auckland&quot;],
        &quot;CHC&quot;: [&quot;Pacific/Auckland&quot;, -43.48, 172.53, &quot;Christchurch&quot;], &quot;NAN&quot;: [&quot;Pacific/Fiji&quot;, -17.75, 177.44, &quot;Nadi&quot;]
    };

    let legCount = 1;

    // Run this Immediately to populate lists
    (function populateLists() {
        const datalist = document.getElementById(&#39;airportList&#39;);
        if(datalist) {
            Object.keys(airportData).sort().forEach(code =&gt; {
                const info = airportData[code];
                const opt = document.createElement(&#39;option&#39;);
                opt.value = `${code} - ${info[3]}`;
                datalist.appendChild(opt);
            });
        }
    })();

    // Attached via onclick in HTML
    function addLeg() {
        const container = document.getElementById(&#39;legsContainer&#39;);
        const div = document.createElement(&#39;div&#39;);
        div.className = &#39;leg-card&#39;;
        div.setAttribute(&#39;data-type&#39;, &#39;flight&#39;);
        div.innerHTML = `
            &lt;div class=&quot;leg-title&quot;&gt;
                Flight Leg
                &lt;span class=&quot;remove-leg&quot; onclick=&quot;this.parentElement.parentElement.remove()&quot;&gt;Remove&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;row-group&quot;&gt;
                &lt;div&gt;&lt;label class=&quot;input-label&quot;&gt;Departure Airport&lt;/label&gt;&lt;input type=&quot;text&quot; class=&quot;form-control dep-code&quot; placeholder=&quot;Search (e.g. LHR)&quot; list=&quot;airportList&quot;&gt;&lt;/div&gt;
                &lt;div&gt;&lt;label class=&quot;input-label&quot;&gt;Departure Time&lt;/label&gt;&lt;input type=&quot;datetime-local&quot; class=&quot;form-control dep-time&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;row-group&quot; style=&quot;margin-top:10px;&quot;&gt;
                &lt;div&gt;&lt;label class=&quot;input-label&quot;&gt;Arrival Airport&lt;/label&gt;&lt;input type=&quot;text&quot; class=&quot;form-control arr-code&quot; placeholder=&quot;Search (e.g. JFK)&quot; list=&quot;airportList&quot;&gt;&lt;/div&gt;
                &lt;div&gt;&lt;label class=&quot;input-label&quot;&gt;Arrival Time&lt;/label&gt;&lt;input type=&quot;datetime-local&quot; class=&quot;form-control arr-time&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
        `;
        container.appendChild(div);
    }

    function addGroundLeg() {
        const container = document.getElementById(&#39;legsContainer&#39;);
        const div = document.createElement(&#39;div&#39;);
        div.className = &#39;leg-card ground-leg&#39;;
        div.setAttribute(&#39;data-type&#39;, &#39;ground&#39;);
        div.innerHTML = `
            &lt;div class=&quot;leg-title ground-title&quot;&gt;
                Ground Connection
                &lt;span class=&quot;remove-leg&quot; onclick=&quot;this.parentElement.parentElement.remove()&quot;&gt;Remove&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;row-group&quot;&gt;
                &lt;div&gt;&lt;label class=&quot;input-label&quot;&gt;Mode &amp; Details&lt;/label&gt;&lt;input type=&quot;text&quot; class=&quot;form-control ground-desc&quot; placeholder=&quot;e.g. Taxi to Hotel&quot;&gt;&lt;/div&gt;
                &lt;div&gt;&lt;label class=&quot;input-label&quot;&gt;Duration (Hours)&lt;/label&gt;&lt;input type=&quot;number&quot; class=&quot;form-control ground-dur&quot; placeholder=&quot;1.5&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
        `;
        container.appendChild(div);
    }

    function generateItinerary() {
        if (typeof luxon === &#39;undefined&#39;) { alert(&quot;System loading... please wait.&quot;); return; }
        const DateTime = luxon.DateTime;
        
        const homeZone = document.getElementById(&#39;homeTimezone&#39;).value;
        const timeline = document.getElementById(&#39;timelineView&#39;);
        const nodes = document.getElementById(&#39;legsContainer&#39;).children;
        
        timeline.innerHTML = &#39;&#39;;
        let exportData = []; 
        let previousArrTime = null;

        for (let node of nodes) {
            if(node.getAttribute(&#39;data-type&#39;) === &#39;flight&#39;) {
                const depCodeRaw = node.querySelector(&#39;.dep-code&#39;).value.toUpperCase().split(&#39; &#39;)[0];
                const arrCodeRaw = node.querySelector(&#39;.arr-code&#39;).value.toUpperCase().split(&#39; &#39;)[0];
                const depTimeStr = node.querySelector(&#39;.dep-time&#39;).value;
                const arrTimeStr = node.querySelector(&#39;.arr-time&#39;).value;

                if(!depCodeRaw || !arrCodeRaw || !depTimeStr) continue;

                const depInfo = airportData[depCodeRaw];
                const arrInfo = airportData[arrCodeRaw];

                const depTZ = depInfo ? depInfo[0] : homeZone;
                const arrTZ = arrInfo ? arrInfo[0] : homeZone;

                // 1. Local Times (As per ticket)
                const depLocal = DateTime.fromISO(depTimeStr, { zone: depTZ });
                const arrLocal = DateTime.fromISO(arrTimeStr, { zone: arrTZ });

                // 2. Body Clock (Convert EXACT moment to Home Time)
                // This preserves the absolute UTC timestamp but displays it in Home Zone
                const depHome = depLocal.setZone(homeZone);
                const arrHome = arrLocal.setZone(homeZone);

                const diff = arrHome.diff(depHome, [&#39;hours&#39;, &#39;minutes&#39;]).toObject();
                const durationStr = `${Math.floor(diff.hours)}h ${Math.floor(diff.minutes)}m`;
                const totalHours = diff.hours + (diff.minutes/60);
                
                let distKM = 0, co2KG = 0;
                if(depInfo &amp;&amp; arrInfo) {
                    distKM = getDistance(depInfo[1], depInfo[2], arrInfo[1], arrInfo[2]);
                    co2KG = Math.round(distKM * 0.115); 
                }

                const depTzName = depLocal.toFormat(&#39;ZZZZ&#39;);
                const arrTzName = arrLocal.toFormat(&#39;ZZZZ&#39;);

                // Watch Logic
                const offsetDiff = (arrLocal.offset - depLocal.offset) / 60;
                let watchMsg = &quot;No change&quot;;
                if(offsetDiff !== 0) {
                    watchMsg = offsetDiff &gt; 0 ? `Set Watch +${Math.abs(offsetDiff)}h` : `Set Watch -${Math.abs(offsetDiff)}h`;
                }

                // Rich Logic
                let packingMsg = &quot;&quot;;
                let healthMsg = &quot;&quot;;
                
                if(depInfo &amp;&amp; arrInfo) {
                    const dLat = depInfo[1];
                    const aLat = arrInfo[1];
                    // Hot (&lt; 30) to Cold (&gt; 45)
                    if (Math.abs(dLat) &lt; 30 &amp;&amp; Math.abs(aLat) &gt; 45) {
                        packingMsg = `&lt;div class=&quot;rich-badge badge-cold&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M12 2v20M2 12h20M4.93 4.93l14.14 14.14M19.07 4.93L4.93 19.07&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;Temperature Drop!&lt;/strong&gt; Keep a warm jacket, gloves, and muffler handy in carry-on.&lt;/div&gt;`;
                    }
                    // Cold to Hot
                    else if (Math.abs(dLat) &gt; 45 &amp;&amp; Math.abs(aLat) &lt; 30) {
                        packingMsg = `&lt;div class=&quot;rich-badge badge-hot&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;12&quot; y1=&quot;1&quot; x2=&quot;12&quot; y2=&quot;3&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;12&quot; y1=&quot;21&quot; x2=&quot;12&quot; y2=&quot;23&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;4.22&quot; y1=&quot;4.22&quot; x2=&quot;5.64&quot; y2=&quot;5.64&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;18.36&quot; y1=&quot;18.36&quot; x2=&quot;19.78&quot; y2=&quot;19.78&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;1&quot; y1=&quot;12&quot; x2=&quot;3&quot; y2=&quot;12&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;21&quot; y1=&quot;12&quot; x2=&quot;23&quot; y2=&quot;12&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;4.22&quot; y1=&quot;19.78&quot; x2=&quot;5.64&quot; y2=&quot;18.36&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;18.36&quot; y1=&quot;5.64&quot; x2=&quot;19.78&quot; y2=&quot;4.22&quot;&gt;&lt;/line&gt;&lt;/svg&gt; &lt;strong&gt;Landing in Heat!&lt;/strong&gt; Dress in layers and keep shorts/t-shirt accessible.&lt;/div&gt;`;
                    }
                }

                if (totalHours &gt; 6) {
                    healthMsg = `&lt;div class=&quot;rich-badge badge-health&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;Long Flight Tip:&lt;/strong&gt; Walk every 2 hours and hydrate to avoid stiffness.&lt;/div&gt;`;
                }

                if (previousArrTime) {
                    const layoverDiff = depHome.diff(previousArrTime, [&#39;hours&#39;, &#39;minutes&#39;]).toObject();
                    timeline.innerHTML += `
                        &lt;div class=&quot;timeline-event&quot; style=&quot;border-left:3px dashed #cbd5e1;&quot;&gt;
                            &lt;div class=&quot;timeline-dot&quot; style=&quot;background:#cbd5e1; border-color:#fff;&quot;&gt;&lt;/div&gt;
                            &lt;div style=&quot;font-size:12px; font-weight:700; color:#64748b; padding-left:10px;&quot;&gt;
                                ⏳ Layover: ${Math.floor(layoverDiff.hours)}h ${Math.floor(layoverDiff.minutes)}m
                            &lt;/div&gt;
                        &lt;/div&gt;
                    `;
                }
                previousArrTime = arrHome;

                timeline.innerHTML += `
                    &lt;div class=&quot;timeline-event&quot;&gt;
                        &lt;div class=&quot;timeline-dot&quot;&gt;&lt;/div&gt;
                        &lt;div class=&quot;event-card&quot;&gt;
                            &lt;div class=&quot;event-header&quot;&gt;
                                &lt;span class=&quot;route-title&quot;&gt;${depCodeRaw} ✈ ${arrCodeRaw}&lt;/span&gt;
                                &lt;span class=&quot;flight-stats&quot;&gt;${durationStr}&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;time-grid&quot;&gt;
                                &lt;div class=&quot;time-block&quot;&gt;
                                    &lt;h4&gt;Departure&lt;/h4&gt;
                                    &lt;div class=&quot;time-display&quot;&gt;${depLocal.toFormat(&#39;HH:mm&#39;)} &lt;span style=&quot;font-size:11px;&quot;&gt;${depLocal.toFormat(&#39;MMM dd&#39;)}&lt;/span&gt;&lt;/div&gt;
                                    &lt;div class=&quot;tz-name&quot;&gt;${depTzName}&lt;/div&gt;
                                    &lt;div class=&quot;body-time&quot;&gt;Body: ${depHome.toFormat(&#39;HH:mm&#39;)}&lt;/div&gt;
                                &lt;/div&gt;
                                &lt;div class=&quot;time-block&quot; style=&quot;text-align:right;&quot;&gt;
                                    &lt;h4&gt;Arrival&lt;/h4&gt;
                                    &lt;div class=&quot;time-display&quot;&gt;${arrLocal.toFormat(&#39;HH:mm&#39;)} &lt;span style=&quot;font-size:11px;&quot;&gt;${arrLocal.toFormat(&#39;MMM dd&#39;)}&lt;/span&gt;&lt;/div&gt;
                                    &lt;div class=&quot;tz-name&quot;&gt;${arrTzName}&lt;/div&gt;
                                    &lt;div class=&quot;body-time&quot;&gt;Body: ${arrHome.toFormat(&#39;HH:mm&#39;)}&lt;/div&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;badge-grid&quot;&gt;
                                &lt;div class=&quot;rich-badge badge-watch&quot;&gt;
                                    &lt;svg width=&quot;16&quot; height=&quot;16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;polyline points=&quot;12 6 12 12 16 14&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;
                                    &lt;strong&gt;Watch Action:&lt;/strong&gt; ${watchMsg}
                                &lt;/div&gt;
                                ${packingMsg}
                                ${healthMsg}
                                ${distKM &gt; 0 ? `&lt;div class=&quot;rich-badge badge-eco&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M12 2a10 10 0 1 0 10 10 10 10 0 0 0-10-10zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12 12l2-2-2-2&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;Eco Stats:&lt;/strong&gt; ${distKM}km / ${co2KG}kg CO2&lt;/div&gt;` : &#39;&#39;}
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                `;

                let note = watchMsg;
                if(packingMsg) note += &quot; | Pack for Cold/Hot&quot;;
                exportData.push([`Flight: ${depCodeRaw}-${arrCodeRaw}`, depLocal.toFormat(&#39;HH:mm&#39;), arrLocal.toFormat(&#39;HH:mm&#39;), arrHome.toFormat(&#39;HH:mm&#39;), note]);

            } else {
                const desc = node.querySelector(&#39;.ground-desc&#39;).value;
                const dur = node.querySelector(&#39;.ground-dur&#39;).value;
                if(!desc || !dur) continue;

                timeline.innerHTML += `
                    &lt;div class=&quot;timeline-event ground-card-display&quot;&gt;
                        &lt;div class=&quot;timeline-dot&quot;&gt;&lt;/div&gt;
                        &lt;div class=&quot;event-card&quot; style=&quot;background:#f0fdf4;&quot;&gt;
                            &lt;div class=&quot;route-title&quot; style=&quot;color:var(--eco-green); font-size:14px;&quot;&gt;
                                🚌 ${desc}
                            &lt;/div&gt;
                            &lt;div style=&quot;font-size:12px; color:#065f46; margin-top:4px;&quot;&gt;
                                Duration: ${dur} Hours
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                `;
                exportData.push([`Ground: ${desc}`, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, `${dur} Hours`]);
            }
        }

        timeline.style.display = &#39;block&#39;;
        document.getElementById(&#39;exportArea&#39;).style.display = &#39;block&#39;;
        window.currentItinerary = exportData;
    }

    function getDistance(lat1, lon1, lat2, lon2) {
        const R = 6371; 
        const dLat = (lat2 - lat1) * Math.PI/180;
        const dLon = (lon2 - lon1) * Math.PI/180;
        const a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                  Math.cos(lat1 * Math.PI/180) * Math.cos(lat2 * Math.PI/180) * Math.sin(dLon/2) * Math.sin(dLon/2);
        const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        return Math.round(R * c);
    }

    window.downloadPDF = function() {
        if(!window.currentItinerary) return;
        const { jsPDF } = window.jspdf;
        const doc = new jsPDF();

        // OTechy Premium Header
        doc.setFillColor(59, 130, 246);
        doc.rect(0, 0, 210, 40, &#39;F&#39;);
        doc.setFont(&quot;helvetica&quot;, &quot;bold&quot;); doc.setFontSize(22); doc.setTextColor(255, 255, 255);
        doc.text(&quot;OTechy Travel Tools&quot;, 20, 22);
        doc.setFontSize(10); doc.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
        doc.text(&quot;Personal Travel Itinerary &amp; Timezone Cheat Sheet&quot;, 20, 30);

        doc.autoTable({
            startY: 50,
            head: [[&#39;Leg Info&#39;, &#39;Dep (Local)&#39;, &#39;Arr (Local)&#39;, &#39;Body Clock&#39;, &#39;Notes &amp; Action&#39;]],
            body: window.currentItinerary,
            theme: &#39;grid&#39;,
            headStyles: { fillColor: [59, 130, 246] },
            styles: { fontSize: 9, cellPadding: 4 },
            columnStyles: { 3: { fontStyle: &#39;bold&#39;, textColor: [234, 88, 12] } } 
        });

        // OTechy Footer
        const pageCount = doc.internal.getNumberOfPages();
        for (let i = 1; i &lt;= pageCount; i++) {
            doc.setPage(i);
            const pageHeight = doc.internal.pageSize.height;
            doc.setFillColor(248, 250, 252);
            doc.rect(0, pageHeight - 20, 210, 20, &#39;F&#39;);
            doc.setFontSize(8); doc.setTextColor(100, 116, 139);
            doc.text(&quot;Generated by OTechy.com - Your Digital Toolkit&quot;, 20, pageHeight - 12);
            doc.text(&quot;Disclaimer: Flight schedules subject to change. Always check official airline data.&quot;, 20, pageHeight - 6);
        }

        doc.save(&quot;OTechy-Travel-Plan.pdf&quot;);
    }
&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/8950588751279814864'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/8950588751279814864'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/02/flight-timezone-synchronizer.html' title='Flight Timezone Synchronizer'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-9022839565483764368.post-1892534002589720287</id><published>2026-02-09T09:40:00.000-08:00</published><updated>2026-02-09T18:44:00.934-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Text Editor"/><title type='text'>Smart Text Editor Online Free</title><content type='html'>&lt;title&gt;Smart Text Editor Online | Rich Formatting, Cleaner &amp; Word Counter - OTechy&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Edit text with rich formatting (Bold, Color, Links). Clean messy text, convert case, and track word counts. Download as DOC/PDF. 100% Client-Side.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;rich text editor online, text cleaner, word counter, format text for word, html to doc converter, free writing tool&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Smart Text Editor Online - OTechy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;The ultimate rich text editor for writers. Format, clean, and convert text securely.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;

&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;850&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    /* --- OTechy Design System --- */
    :root { 
        --primary: #3b82f6; --primary-dark: #1d4ed8; --text-dark: #1e293b; --accent: #64748b; 
        --bg: #f8fafc; --white: #fff; --border: #e2e8f0; 
        --soft-blue: #f0f7ff; --success: #10b981; --safe-green: #dcfce7; --safe-text: #166534;
        --font-main: &#39;Poppins&#39;, sans-serif;
    }
    
    * { box-sizing: border-box; }
    body { background-color: var(--bg); font-family: var(--font-main); color: var(--text-dark); margin: 0; line-height: 1.6; }
    .otechy-tool-wrapper { max-width: 1000px; margin: 0 auto; padding: 80px 20px 20px; }
    
    .otechy-badge { display: table; margin: 0 auto 10px; background: #eff6ff; color: var(--primary); padding: 6px 16px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase; border: 1px solid #dbeafe; }
    
    /* Header */
    .tool-header { text-align: center; margin-bottom: 30px; }
    .tool-header h1 { font-size: clamp(24px, 5vw, 42px); font-weight: 850; color: var(--primary); margin: 0; display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; }
    .quick-value { color: var(--primary); font-weight: 600; font-size: 14px; margin-top: 5px; text-align: center; }
    
    /* Main Card */
    .otechy-card { background: var(--white); padding: 0; border-radius: 12px; border: 1px solid var(--border); box-shadow: 0 4px 12px rgba(0,0,0,0.05); margin-bottom: 30px; overflow: hidden; }

    /* Rich Toolbar */
    .toolbar-section { background: #f1f5f9; padding: 10px 15px; border-bottom: 1px solid var(--border); display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
    
    .fmt-btn { 
        background: var(--white); border: 1px solid var(--border); border-radius: 4px; 
        width: 32px; height: 32px; display: flex; align-items: center; justify-content: center;
        cursor: pointer; color: var(--text-dark); transition: 0.2s; font-weight: 700;
    }
    .fmt-btn:hover { background: #e2e8f0; }
    .fmt-btn.active { background: #dbeafe; color: var(--primary); border-color: var(--primary); }

    .fmt-select {
        height: 32px; padding: 0 8px; border: 1px solid var(--border); border-radius: 4px;
        background: var(--white); font-size: 13px; color: var(--text-dark); outline: none; cursor: pointer;
    }

    .divider { width: 1px; height: 24px; background: #cbd5e1; margin: 0 4px; }

    /* Rich Editor Area */
    .editor-box { 
        width: 100%; min-height: 400px; padding: 25px; 
        font-family: &#39;Poppins&#39;, sans-serif; font-size: 16px; line-height: 1.6; color: var(--text-dark); 
        border: none; outline: none; overflow-y: auto; background: #fff;
    }
    .editor-box:empty:before { content: attr(placeholder); color: #cbd5e1; display: block; }
    .editor-box a { color: var(--primary); text-decoration: underline; cursor: pointer; }

    /* Stats Bar */
    .stats-bar { 
        background: #f8fafc; border-top: 1px solid var(--border); padding: 8px 20px; 
        display: flex; flex-wrap: wrap; gap: 20px; font-size: 11px; color: var(--accent); font-weight: 600;
    }
    .stat-item strong { color: var(--primary); margin-right: 3px; }

    /* Export Bar */
    .export-section { 
        background: var(--white); padding: 15px 20px; border-top: 1px solid var(--border); 
        display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 15px;
    }
    .otechy-btn { border: none; padding: 10px 16px; border-radius: 6px; font-size: 13px; font-weight: 700; cursor: pointer; transition: 0.2s; display: flex; align-items: center; gap: 6px; }
    .btn-primary { background: var(--primary); color: white; }
    .btn-outline { background: white; border: 1px solid var(--border); color: var(--accent); }
    .btn-outline:hover { border-color: var(--primary); color: var(--primary); }

    /* Color Picker Hidden Input */
    #colorPicker { width: 0; height: 0; opacity: 0; position: absolute; }

    /* Content &amp; Trust */
    .geo-citation { background: var(--white); padding: 25px; border-radius: 12px; border-left: 5px solid var(--primary); font-size: 14px; margin: 40px 0 20px; color: var(--text-dark); box-shadow: 0 4px 12px rgba(0,0,0,0.02); }
    
    .security-shield { background: var(--safe-green); border: 1px solid #bbf7d0; border-radius: 12px; padding: 20px; display: flex; align-items: center; gap: 15px; color: var(--safe-text); margin-bottom: 40px; }

    /* FAQ Grid - UPDATED FOR MOBILE */
    .faq-section { margin-top: 60px; }
    .faq-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; }
    .faq-card { background: var(--white); padding: 20px; border-radius: 12px; border: 1px solid var(--border); }
    .faq-card h3 { font-size: 14px; color: var(--primary); margin: 0 0 8px; font-weight: 700; }
    .faq-card p { font-size: 12px; color: var(--accent); margin: 0; line-height: 1.5; }

    .otechy-ad-top, .otechy-ad-middle, .otechy-ad-bottom { text-align: center; background: #f1f5f9; color: #cbd5e1; font-size: 10px; font-weight: 700; text-transform: uppercase; display: flex; align-items: center; justify-content: center; }

    /* Mobile Adjustments */
    @media (max-width: 768px) { 
        .otechy-tool-wrapper { padding: 40px 15px 15px !important; } 
        .export-section { flex-direction: column; }
        .faq-grid { grid-template-columns: 1fr; } /* Forces single column on mobile to respect padding */
    }
&lt;/style&gt;

&lt;div class=&quot;otechy-tool-wrapper&quot;&gt;

    &lt;div class=&quot;otechy-badge&quot;&gt;Writer &amp; Dev Suite &lt;span class=&quot;dynamic-year&quot;&gt;&lt;/span&gt;&lt;/div&gt;

    &lt;div class=&quot;tool-header&quot;&gt;
        &lt;h1&gt;
            Smart Text Editor
            &lt;svg width=&quot;28&quot; height=&quot;28&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; style=&quot;vertical-align: middle; margin-left:8px;&quot;&gt;
                &lt;path d=&quot;M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7&quot;&gt;&lt;/path&gt;
                &lt;path d=&quot;M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z&quot;&gt;&lt;/path&gt;
            &lt;/svg&gt;
        &lt;/h1&gt;
        &lt;p class=&quot;quick-value&quot;&gt;Edit with Bold, Color, and Links. Download formatted Word/PDF documents.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-top&quot; id=&quot;ad-top-slot&quot; style=&quot;margin-bottom: 20px; height: 90px;&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;otechy-card&quot;&gt;
        
        &lt;div class=&quot;toolbar-section&quot;&gt;
            &lt;select class=&quot;fmt-select&quot; onchange=&quot;execCmd(&#39;fontName&#39;, this.value); this.value=&#39;Font&#39;;&quot;&gt;
                &lt;option value=&quot;Font&quot; disabled selected&gt;Font&lt;/option&gt;
                &lt;option value=&quot;Poppins&quot;&gt;Poppins&lt;/option&gt;
                &lt;option value=&quot;Arial&quot;&gt;Arial&lt;/option&gt;
                &lt;option value=&quot;Georgia&quot;&gt;Georgia&lt;/option&gt;
                &lt;option value=&quot;Courier New&quot;&gt;Courier&lt;/option&gt;
            &lt;/select&gt;
            
            &lt;select class=&quot;fmt-select&quot; onchange=&quot;execCmd(&#39;fontSize&#39;, this.value); this.value=&#39;Size&#39;;&quot;&gt;
                &lt;option value=&quot;Size&quot; disabled selected&gt;Size&lt;/option&gt;
                &lt;option value=&quot;3&quot;&gt;Normal&lt;/option&gt;
                &lt;option value=&quot;5&quot;&gt;Large&lt;/option&gt;
                &lt;option value=&quot;7&quot;&gt;Huge&lt;/option&gt;
            &lt;/select&gt;

            &lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;

            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;execCmd(&#39;bold&#39;)&quot; title=&quot;Bold&quot;&gt;B&lt;/button&gt;
            &lt;button class=&quot;fmt-btn&quot; style=&quot;font-style:italic;&quot; onclick=&quot;execCmd(&#39;italic&#39;)&quot; title=&quot;Italic&quot;&gt;I&lt;/button&gt;
            &lt;button class=&quot;fmt-btn&quot; style=&quot;text-decoration:underline;&quot; onclick=&quot;execCmd(&#39;underline&#39;)&quot; title=&quot;Underline&quot;&gt;U&lt;/button&gt;
            
            &lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;

            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;document.getElementById(&#39;colorPicker&#39;).click()&quot; title=&quot;Text Color&quot; style=&quot;color:var(--primary);&quot;&gt;A&lt;/button&gt;
            &lt;input type=&quot;color&quot; id=&quot;colorPicker&quot; onchange=&quot;execCmd(&#39;foreColor&#39;, this.value)&quot;&gt;

            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;addLink()&quot; title=&quot;Hyperlink&quot;&gt;🔗&lt;/button&gt;
            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;execCmd(&#39;removeFormat&#39;)&quot; title=&quot;Clear Format&quot;&gt;✖&lt;/button&gt;

            &lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;

            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;convertCase(&#39;upper&#39;)&quot; style=&quot;font-size:10px;&quot;&gt;AA&lt;/button&gt;
            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;convertCase(&#39;lower&#39;)&quot; style=&quot;font-size:10px;&quot;&gt;aa&lt;/button&gt;
            &lt;button class=&quot;fmt-btn&quot; onclick=&quot;convertCase(&#39;title&#39;)&quot; style=&quot;font-size:10px;&quot;&gt;Aa&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;richEditor&quot; class=&quot;editor-box&quot; contenteditable=&quot;true&quot; placeholder=&quot;Type or paste your text here...&quot;&gt;&lt;/div&gt;

        &lt;div class=&quot;stats-bar&quot;&gt;
            &lt;span class=&quot;stat-item&quot;&gt;&lt;strong id=&quot;wordCount&quot;&gt;0&lt;/strong&gt; Words&lt;/span&gt;
            &lt;span class=&quot;stat-item&quot;&gt;&lt;strong id=&quot;charCount&quot;&gt;0&lt;/strong&gt; Chars&lt;/span&gt;
            &lt;span class=&quot;stat-item&quot;&gt;&lt;strong id=&quot;readTime&quot;&gt;0&lt;/strong&gt; Min Read&lt;/span&gt;
        &lt;/div&gt;

        &lt;div class=&quot;export-section&quot;&gt;
            &lt;div style=&quot;display:flex; gap:10px;&quot;&gt;
                &lt;button class=&quot;otechy-btn btn-outline&quot; onclick=&quot;exportDoc(&#39;txt&#39;)&quot;&gt;TXT&lt;/button&gt;
                &lt;button class=&quot;otechy-btn btn-outline&quot; onclick=&quot;exportDoc(&#39;pdf&#39;)&quot;&gt;PDF&lt;/button&gt;
                &lt;button class=&quot;otechy-btn btn-outline&quot; onclick=&quot;exportDoc(&#39;doc&#39;)&quot; style=&quot;color:var(--primary); border-color:var(--primary);&quot;&gt;
                    &lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot;&gt;&lt;path d=&quot;M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z&quot;&gt;&lt;/path&gt;&lt;polyline points=&quot;14 2 14 8 20 8&quot;&gt;&lt;/polyline&gt;&lt;text x=&quot;8&quot; y=&quot;18&quot; font-size=&quot;6&quot; fill=&quot;currentColor&quot; font-weight=&quot;bold&quot;&gt;W&lt;/text&gt;&lt;/svg&gt;
                    Save DOCX
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;button class=&quot;otechy-btn btn-primary&quot; onclick=&quot;copyRich()&quot;&gt;Copy Content&lt;/button&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-middle&quot; id=&quot;ad-mid-slot&quot; style=&quot;margin: 30px 0; height: 90px;&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;geo-citation&quot;&gt;
        Need to format a document quickly without opening Word? The OTechy &lt;strong&gt;Smart Text Editor&lt;/strong&gt; lets you Bold, Italicize, Color, and Link your text directly in the browser. Best of all, you can export your formatted work as a Word-compatible (.doc) or formatted PDF instantly.
    &lt;/div&gt;

    &lt;div class=&quot;security-shield&quot;&gt;
        &lt;svg width=&quot;32&quot; height=&quot;32&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot;&gt;&lt;path d=&quot;M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z&quot;/&gt;&lt;/svg&gt;
        &lt;div class=&quot;security-content&quot;&gt;
            &lt;h4 style=&quot;margin:0 0 4px; font-size:14px; font-weight:800;&quot;&gt;100% Privacy Guaranteed&lt;/h4&gt;
            &lt;p style=&quot;margin:0; font-size:12px; opacity:0.9;&quot;&gt;Your documents are processed locally. We do not store, save, or upload your content.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;faq-section&quot;&gt;
        &lt;h2 class=&quot;section-h2&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
        &lt;div class=&quot;faq-grid&quot;&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Does the PDF retain colors and links?&lt;/h3&gt;&lt;p&gt;Yes! We use a smart rendering engine that captures your colors, bold fonts, and clickable hyperlinks in the downloaded PDF.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Does it save formatting in Word?&lt;/h3&gt;&lt;p&gt;Yes! If you choose &lt;strong&gt;.DOC&lt;/strong&gt;, all your colors, links, and fonts are preserved for Microsoft Word.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I paste from Word?&lt;/h3&gt;&lt;p&gt;Yes, you can paste rich text from Word or websites, and the editor will preserve the basic styling.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;How do I add a link?&lt;/h3&gt;&lt;p&gt;Select the text you want to link, click the chain icon (🔗), and enter the URL.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is it private?&lt;/h3&gt;&lt;p&gt;100%. Everything happens in your browser. We don&#39;t see or store your documents.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I change text size?&lt;/h3&gt;&lt;p&gt;Yes, use the &quot;Size&quot; dropdown in the toolbar to switch between Normal, Large, and Huge text.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Does it support Hindi text?&lt;/h3&gt;&lt;p&gt;Yes, the editor supports Unicode, so you can type or paste text in Hindi, Bengali, or any other language.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Can I clear all formatting?&lt;/h3&gt;&lt;p&gt;Yes, click the &quot;Clear Format&quot; (✖) button to strip styles and revert to plain text.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is there a word limit?&lt;/h3&gt;&lt;p&gt;Practically no. You can edit large documents, limited only by your browser&#39;s memory.&lt;/p&gt;&lt;/div&gt;
            &lt;div class=&quot;faq-card&quot;&gt;&lt;h3&gt;Is it free?&lt;/h3&gt;&lt;p&gt;Yes, completely free to use with no daily limits or watermarks.&lt;/p&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;otechy-ad-bottom&quot; id=&quot;ad-bottom-slot&quot; style=&quot;margin-top: 30px; height: 90px;&quot;&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
    const editor = document.getElementById(&#39;richEditor&#39;);
    const wordCountEl = document.getElementById(&#39;wordCount&#39;);
    const charCountEl = document.getElementById(&#39;charCount&#39;);
    const readTimeEl = document.getElementById(&#39;readTime&#39;);

    // Rich Text Commands
    function execCmd(command, value = null) {
        document.execCommand(command, false, value);
        editor.focus();
        updateStats();
    }

    function addLink() {
        const url = prompt(&quot;Enter URL:&quot;, &quot;https://&quot;);
        if(url) execCmd(&#39;createLink&#39;, url);
    }

    // Stats Logic
    function updateStats() {
        const text = editor.innerText || &quot;&quot;;
        const trimmed = text.trim();
        const words = trimmed ? trimmed.split(/\s+/).length : 0;
        
        wordCountEl.innerText = words;
        charCountEl.innerText = text.length;
        readTimeEl.innerText = Math.ceil(words / 200) + &quot; min&quot;;
    }

    editor.addEventListener(&#39;input&#39;, updateStats);

    // Case Conversion (Preserves formatting roughly)
    function convertCase(type) {
        const sel = window.getSelection();
        if(sel.rangeCount &gt; 0 &amp;&amp; !sel.isCollapsed) {
            let text = sel.toString();
            let newText = &quot;&quot;;
            if(type === &#39;upper&#39;) newText = text.toUpperCase();
            if(type === &#39;lower&#39;) newText = text.toLowerCase();
            if(type === &#39;title&#39;) newText = text.toLowerCase().replace(/(?:^|\s)\S/g, a =&gt; a.toUpperCase());
            
            execCmd(&#39;insertText&#39;, newText);
        } else {
            alert(&quot;Please select the text you want to convert first.&quot;);
        }
    }

    function copyRich() {
        const range = document.createRange();
        range.selectNodeContents(editor);
        const sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
        document.execCommand(&#39;copy&#39;);
        alert(&quot;Formatted text copied!&quot;);
    }

    // Export Logic
    function exportDoc(type) {
        const content = editor.innerHTML;
        const plainText = editor.innerText;

        if(!plainText.trim()) { alert(&quot;Editor is empty!&quot;); return; }

        if(type === &#39;txt&#39;) {
            const blob = new Blob([plainText], { type: &quot;text/plain;charset=utf-8&quot; });
            saveAs(blob, &quot;OTechy-Notes.txt&quot;);
        } 
        else if (type === &#39;doc&#39;) {
            // HTML-based DOC export (Preserves colors/links)
            const preHtml = `&lt;html xmlns:o=&#39;urn:schemas-microsoft-com:office:office&#39; xmlns:w=&#39;urn:schemas-microsoft-com:office:word&#39;&gt;&lt;head&gt;&lt;meta charset=&#39;utf-8&#39;&gt;&lt;title&gt;Doc&lt;/title&gt;&lt;/head&gt;&lt;body&gt;`;
            const postHtml = `&lt;/body&gt;&lt;/html&gt;`;
            const blob = new Blob([&#39;\ufeff&#39;, preHtml + content + postHtml], { type: &#39;application/msword&#39; });
            saveAs(blob, &quot;OTechy-Document.doc&quot;);
        }
        else if (type === &#39;pdf&#39;) {
            // UPDATED: HTML Rendering Logic for PDF (Preserves Style &amp; Colors)
            const { jsPDF } = window.jspdf;
            const doc = new jsPDF({ unit: &#39;pt&#39;, format: &#39;a4&#39; });
            
            // Standard A4 width is 595.28pt
            const pdfWidth = 595.28;
            const margin = 40;
            const contentWidth = pdfWidth - (margin * 2);

            // Use .html() to capture styled content (Bold, Colors, Links)
            doc.html(editor, {
                callback: function (doc) {
                    doc.save(&#39;OTechy-Document.pdf&#39;);
                },
                x: margin,
                y: margin,
                width: contentWidth, // Constrain width so text wraps
                windowWidth: 800     // Virtual browser width to ensure layout matches
            });
        }
    }
&lt;/script&gt;
</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1892534002589720287'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9022839565483764368/posts/default/1892534002589720287'/><link rel='alternate' type='text/html' href='https://www.otechy.com/2026/02/smart-text-editor-online-free.html' title='Smart Text Editor Online Free'/><author><name>Gyan Mainali</name><uri>http://www.blogger.com/profile/18241384659702317569</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCcEfrfBf955vnm9oGY2UbbK78HlpdJ3o37XN4ENMw0OWGMq_9zgctmp5w0w0pdSqSg5IdKEtHQo2nK9WFl1RfTDMM_e3D62NchZaZwVGo4e01AP4M4IxdreOAkMl7Ue2Vw3dHTYKTuVP9o05DYj_P4EFkJJJczOwexwO5cgQmwF1OzQ/s1600/Gyan_Border.jpg'/></author></entry></feed>