{"id":2021,"date":"2026-04-10T23:31:57","date_gmt":"2026-04-10T23:31:57","guid":{"rendered":"https:\/\/www.brooklynclick.com\/?page_id=2021"},"modified":"2026-08-25T17:28:32","modified_gmt":"2026-08-25T17:28:32","slug":"julian-date-converter","status":"publish","type":"page","link":"https:\/\/www.brooklynclick.com\/julian-date-converter\/","title":{"rendered":"Julian Date Converter"},"content":{"rendered":"<div class=\"wpb-content-wrapper\" id=\"wpb-content-root\"><div data-vc-full-width=\"true\" data-vc-full-width-temp=\"true\" data-vc-full-width-init=\"false\" data-vc-stretch-content=\"true\" class=\"vc_row wpb_row vc_row-fluid bg-image-ps-inherit\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t    <!-- BROOKLYNCLICK \u2014 THE JULIAN DAY ALMANAC v5.0 ULTIMATE -->\n    <style>\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=Spectral:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap');\n\n    :root {\n      --bc-bg: #070b16;\n      --bc-bg-alt: #0c1224;\n      --bc-panel: #11182c;\n      --bc-panel-alt: #17203c;\n      --bc-border: #232d49;\n      --bc-border-light: #2e3a5c;\n      --bc-brass: #c9a227;\n      --bc-brass-bright: #eac54f;\n      --bc-brass-dim: #8a6f1a;\n      --bc-cyan: #6ee7d9;\n      --bc-cyan-bright: #a8f0e6;\n      --bc-text: #ece8dd;\n      --bc-muted: #8d96b3;\n      --bc-muted-light: #a8b0cc;\n      --bc-warn: #e8825f;\n      --bc-success: #7dc97d;\n      --bc-glow: rgba(110, 231, 217, 0.12);\n      --bc-shadow: 0 30px 80px rgba(0, 0, 0, 0.5);\n      --bc-radius: 16px;\n      --bc-radius-sm: 10px;\n      --bc-transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n      --bc-card-bg: linear-gradient(180deg, var(--bc-panel-alt), var(--bc-panel));\n    }\n\n    .bc-jd.light-theme {\n      --bc-bg: #f0ede4;\n      --bc-bg-alt: #faf8f2;\n      --bc-panel: #f7f4ea;\n      --bc-panel-alt: #fdfbf5;\n      --bc-border: #d5d0c0;\n      --bc-border-light: #c5c0ae;\n      --bc-text: #1a1a1a;\n      --bc-muted: #6b6758;\n      --bc-muted-light: #8a8674;\n      --bc-brass: #8f741f;\n      --bc-brass-bright: #b8962b;\n      --bc-brass-dim: #6b5712;\n      --bc-cyan: #2b8a7a;\n      --bc-cyan-bright: #1a6e61;\n      --bc-warn: #c25e3e;\n      --bc-success: #4a8f4a;\n      --bc-glow: rgba(43, 138, 122, 0.12);\n      --bc-shadow: 0 25px 60px rgba(0, 0, 0, 0.12);\n      --bc-card-bg: linear-gradient(180deg, #fffdf7, #faf6eb);\n    }\n\n    .bc-jd.sepia-theme {\n      --bc-bg: #1e1814;\n      --bc-bg-alt: #2a211b;\n      --bc-panel: #352a22;\n      --bc-panel-alt: #40342b;\n      --bc-border: #5b4a3a;\n      --bc-border-light: #6f5a48;\n      --bc-brass: #d4a942;\n      --bc-brass-bright: #edc96b;\n      --bc-brass-dim: #9a7a2b;\n      --bc-cyan: #8fd0c0;\n      --bc-cyan-bright: #b3e6d9;\n      --bc-text: #f0e6d8;\n      --bc-muted: #b0a08c;\n      --bc-muted-light: #c5b6a3;\n      --bc-warn: #d9825f;\n      --bc-success: #8dc98d;\n      --bc-glow: rgba(143, 208, 192, 0.15);\n      --bc-shadow: 0 25px 60px rgba(0, 0, 0, 0.5);\n      --bc-card-bg: linear-gradient(180deg, #40342b, #352a22);\n    }\n\n    .bc-jd {\n      background: var(--bc-bg);\n      border: 1px solid var(--bc-border);\n      border-radius: var(--bc-radius);\n      color: var(--bc-text);\n      font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n      max-width: 1180px;\n      margin: 40px auto;\n      padding: 40px 32px 30px;\n      position: relative;\n      box-shadow: var(--bc-shadow);\n      overflow: hidden;\n      transition: background var(--bc-transition), color var(--bc-transition);\n    }\n\n    .bc-jd::before {\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      height: 3px;\n      background: linear-gradient(90deg, transparent, var(--bc-brass), var(--bc-cyan), transparent);\n      opacity: 0.9;\n      z-index: 1;\n    }\n\n    .bc-jd *, .bc-jd *::before, .bc-jd *::after { box-sizing: border-box; }\n\n    .bc-jd h1, .bc-jd h2, .bc-jd h3 { font-family: 'Spectral', Georgia, serif; margin: 0; letter-spacing: 0.01em; }\n\n    \/* ===== Header ===== *\/\n    .bc-jd__header {\n      display: grid;\n      grid-template-columns: 240px 1fr;\n      gap: 36px;\n      align-items: center;\n      padding-bottom: 30px;\n      margin-bottom: 30px;\n      border-bottom: 1px solid var(--bc-border);\n      position: relative;\n      z-index: 2;\n    }\n\n    .bc-jd__dial { position: relative; width: 240px; height: 240px; }\n    .bc-jd__dial-svg { width: 100%; height: 100%; }\n    .bc-jd__dial-ring { fill: none; stroke: var(--bc-border); stroke-width: 1.5; }\n    .bc-jd__dial-ring-inner { fill: var(--bc-panel); stroke: var(--bc-brass); stroke-width: 1.5; opacity: 0.7; }\n    .tick { stroke: var(--bc-muted); stroke-width: 0.8; opacity: 0.5; }\n    .tick--major { stroke: var(--bc-brass); stroke-width: 2; opacity: 0.9; }\n    .tick--medium { stroke: var(--bc-muted); stroke-width: 1.2; opacity: 0.7; }\n    .dial-num { fill: var(--bc-muted); font-family: 'IBM Plex Mono', monospace; font-size: 7.5px; font-weight: 500; }\n    .dial-date { fill: var(--bc-brass-bright); font-family: 'IBM Plex Mono', monospace; font-size: 10px; font-weight: 600; text-anchor: middle; }\n\n    .bc-jd__needle { stroke-linecap: round; transform-origin: 110px 110px; transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); }\n    .bc-jd__needle--hour { stroke: var(--bc-cyan); stroke-width: 2.2; filter: drop-shadow(0 0 5px var(--bc-cyan)); }\n    .bc-jd__needle--min { stroke: var(--bc-brass-bright); stroke-width: 1.2; opacity: 0.7; }\n    .bc-jd__needle--sec { stroke: var(--bc-warn); stroke-width: 0.8; opacity: 0.9; transition: transform 0.2s linear; }\n    .bc-jd__hub { fill: var(--bc-brass-bright); }\n    .bc-jd__hub-inner { fill: #fff; opacity: 0.9; }\n\n    .bc-jd__dial-readout { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 0 30px; }\n    .bc-jd__dial-label { font-size: 8.5px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--bc-muted); margin-bottom: 5px; font-weight: 500; }\n    .bc-jd__dial-value { font-family: 'IBM Plex Mono', monospace; font-size: 14px; font-weight: 600; color: var(--bc-cyan); line-height: 1.25; }\n    .bc-jd__dial-sub { font-family: 'IBM Plex Mono', monospace; font-size: 9px; color: var(--bc-muted); margin-top: 4px; }\n    .bc-jd__dial-live { display: flex; align-items: center; gap: 5px; font-size: 8px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bc-success); margin-top: 6px; font-weight: 600; }\n    .bc-jd__live-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--bc-success); animation: bcPulse 2s ease-in-out infinite; }\n    @keyframes bcPulse { 0%,100% { opacity:1; box-shadow:0 0 0 0 rgba(125,201,125,0.4); } 50% { opacity:0.6; box-shadow:0 0 0 5px rgba(125,201,125,0); } }\n\n    .bc-jd__title h1 { font-size: 36px; color: var(--bc-text); }\n    .bc-jd__subtitle { color: var(--bc-muted); font-size: 14.5px; line-height: 1.65; margin: 10px 0 0; max-width: 58ch; }\n\n    .bc-jd__quick-bar { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 18px; align-items: center; }\n    .bc-preset, .bc-theme-toggle, .bc-settings-btn, .bc-action-btn {\n      padding: 8px 14px; font-size: 11px; font-family: 'IBM Plex Mono', monospace;\n      background: var(--bc-bg-alt); color: var(--bc-muted-light);\n      border: 1px solid var(--bc-border); border-radius: 20px; cursor: pointer;\n      transition: all var(--bc-transition); letter-spacing: 0.03em;\n      display: inline-flex; align-items: center; gap: 5px;\n    }\n    .bc-preset:hover, .bc-theme-toggle:hover, .bc-settings-btn:hover, .bc-action-btn:hover {\n      border-color: var(--bc-brass); color: var(--bc-brass-bright);\n      background: rgba(201,162,39,0.08);\n    }\n\n    \/* ===== Cards & Grid ===== *\/\n    .bc-jd__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; }\n    .bc-card {\n      background: var(--bc-card-bg);\n      border: 1px solid var(--bc-border); border-radius: var(--bc-radius-sm);\n      padding: 26px 24px; transition: border-color var(--bc-transition), box-shadow var(--bc-transition), transform var(--bc-transition);\n      position: relative;\n      overflow: hidden;\n    }\n    .bc-card:hover { border-color: var(--bc-border-light); box-shadow: 0 8px 30px rgba(0,0,0,0.3); }\n\n    .bc-card__head { margin-bottom: 18px; display: flex; justify-content: space-between; align-items: flex-end; flex-wrap: wrap; gap: 12px; }\n    .bc-card__eyebrow { display: block; font-size: 10px; text-transform: uppercase; letter-spacing: 0.13em; color: var(--bc-brass); font-weight: 600; margin-bottom: 6px; }\n    .bc-card h2 { font-size: 20px; }\n\n    .bc-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }\n    .bc-field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; font-size: 12.5px; color: var(--bc-muted); font-weight: 500; }\n    .bc-field input, .bc-field select, .bc-field textarea {\n      font-family: 'IBM Plex Mono', monospace; font-size: 13.5px; padding: 11px 13px;\n      border-radius: 8px; border: 1px solid var(--bc-border); background: var(--bc-bg-alt);\n      color: var(--bc-text); outline: none; transition: border-color var(--bc-transition), box-shadow var(--bc-transition);\n      width: 100%;\n    }\n    .bc-field input:focus, .bc-field select:focus, .bc-field textarea:focus {\n      border-color: var(--bc-cyan); box-shadow: 0 0 0 3px var(--bc-glow);\n    }\n    .bc-field input::placeholder, .bc-field textarea::placeholder { color: var(--bc-muted); opacity: 0.5; }\n    .bc-field input::-webkit-calendar-picker-indicator { filter: invert(0.6); cursor: pointer; }\n    .bc-field--invalid input { border-color: var(--bc-warn) !important; box-shadow: 0 0 0 3px rgba(232,130,95,0.12); }\n    .bc-field--valid input { border-color: var(--bc-success) !important; }\n\n    .bc-toggle { display: inline-flex; border: 1px solid var(--bc-border); border-radius: 8px; overflow: hidden; margin-bottom: 14px; background: var(--bc-bg-alt); }\n    .bc-toggle__opt { font-family: 'IBM Plex Mono', monospace; font-size: 12.5px; padding: 9px 18px; background: transparent; color: var(--bc-muted); border: none; border-right: 1px solid var(--bc-border); cursor: pointer; transition: all var(--bc-transition); font-weight: 500; }\n    .bc-toggle__opt:last-child { border-right: none; }\n    .bc-toggle__opt:hover { color: var(--bc-text); background: rgba(255,255,255,0.03); }\n    .bc-toggle__opt.is-active { background: var(--bc-brass); color: #1a1406; font-weight: 600; }\n\n    .bc-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 13px 20px; background: var(--bc-brass); color: #1a1406; border: none; border-radius: 8px; cursor: pointer; font-weight: 600; font-size: 14px; font-family: 'Inter', sans-serif; transition: all var(--bc-transition); letter-spacing: 0.02em; }\n    .bc-btn:hover { background: var(--bc-brass-bright); transform: translateY(-1px); }\n    .bc-btn:active { transform: translateY(0) scale(0.99); }\n    .bc-btn__label { flex: 1; }\n    .bc-btn__shortcut { font-family: 'IBM Plex Mono', monospace; font-size: 10px; opacity: 0.55; }\n\n    .bc-btn--ghost { background: transparent; color: var(--bc-muted-light); border: 1px solid var(--bc-border); font-size: 12px; padding: 8px 15px; font-weight: 500; width: auto; }\n    .bc-btn--ghost:hover { color: var(--bc-warn); border-color: var(--bc-warn); background: rgba(232,130,95,0.06); transform: none; }\n\n    .bc-btn--small { padding: 8px 12px; font-size: 12px; width: auto; }\n\n    \/* ===== Readouts ===== *\/\n    .bc-readouts { margin-top: 18px; display: flex; flex-direction: column; gap: 10px; animation: bcFadeSlideIn 0.35s ease-out; }\n    @keyframes bcFadeSlideIn { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }\n    .bc-readout { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 10px; padding: 13px 15px; background: var(--bc-bg-alt); border: 1px solid var(--bc-border); border-radius: 8px; transition: border-color var(--bc-transition); }\n    .bc-readout:hover { border-color: var(--bc-border-light); }\n    .bc-readout__label { font-size: 11px; color: var(--bc-muted); grid-column: 1 \/ -1; letter-spacing: 0.04em; font-weight: 500; }\n    .bc-readout__value { font-family: 'IBM Plex Mono', monospace; font-size: 16px; font-weight: 600; color: var(--bc-cyan); letter-spacing: -0.02em; word-break: break-all; }\n    .bc-copy { display: inline-flex; align-items: center; gap: 5px; font-size: 10.5px; padding: 5px 11px; background: transparent; color: var(--bc-muted); border: 1px solid var(--bc-border); border-radius: 6px; cursor: pointer; transition: all var(--bc-transition); font-weight: 500; }\n    .bc-copy:hover { color: var(--bc-brass-bright); border-color: var(--bc-brass); background: rgba(201,162,39,0.06); }\n    .bc-copy:active { transform: scale(0.95); }\n\n    \/* ===== Extended Stats ===== *\/\n    .bc-jd__extended { margin-bottom: 20px; }\n    .bc-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; }\n    .bc-stat { padding: 15px 14px; background: var(--bc-bg-alt); border: 1px solid var(--bc-border); border-radius: 8px; transition: all var(--bc-transition); }\n    .bc-stat:hover { border-color: var(--bc-border-light); transform: translateY(-2px); box-shadow: 0 4px 16px rgba(0,0,0,0.25); }\n    .bc-stat__label { font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.09em; color: var(--bc-muted); display: block; margin-bottom: 7px; font-weight: 500; }\n    .bc-stat__value { font-family: 'IBM Plex Mono', monospace; font-size: 14.5px; font-weight: 600; color: var(--bc-text); letter-spacing: -0.01em; }\n    .bc-stat__value--highlight { color: var(--bc-cyan); }\n    .bc-stat__bar { height: 4px; border-radius: 2px; background: var(--bc-border); margin-top: 8px; overflow: hidden; }\n    .bc-stat__bar span { display: block; height: 100%; background: var(--bc-cyan); border-radius: 2px; transition: width 0.6s ease-out; }\n\n    \/* ===== Settings Panel ===== *\/\n    .bc-jd__settings { margin-bottom: 20px; display: none; }\n    .bc-jd__settings.open { display: block; }\n    .bc-settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 15px; margin-top: 15px; }\n\n    \/* ===== Log ===== *\/\n    .bc-jd__history { margin-bottom: 22px; }\n    .bc-jd__history-actions { display: flex; gap: 8px; flex-wrap: wrap; }\n    .bc-jd__empty { color: var(--bc-muted); font-size: 13px; margin: 4px 0 0; font-style: italic; }\n    .bc-jd__log { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; max-height: 300px; overflow-y: auto; }\n    .bc-jd__log li { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 11px 15px; background: var(--bc-bg-alt); border: 1px solid var(--bc-border); border-radius: 8px; font-family: 'IBM Plex Mono', monospace; font-size: 12px; flex-wrap: wrap; transition: border-color var(--bc-transition); animation: bcFadeSlideIn 0.25s ease-out; }\n    .bc-jd__log li:hover { border-color: var(--bc-border-light); }\n    .bc-jd__log .bc-jd__log-from { color: var(--bc-muted); }\n    .bc-jd__log .bc-jd__log-to { color: var(--bc-cyan); font-weight: 600; }\n    .bc-jd__log .bc-jd__log-time { color: var(--bc-muted); font-size: 10px; opacity: 0.6; }\n\n    \/* ===== Toast ===== *\/\n    .bc-toast-container { position: fixed; bottom: 24px; right: 24px; z-index: 9999; display: flex; flex-direction: column; gap: 8px; pointer-events: none; }\n    .bc-toast { background: var(--bc-panel-alt); border: 1px solid var(--bc-border); border-left: 3px solid var(--bc-cyan); color: var(--bc-text); padding: 12px 18px; border-radius: 8px; font-size: 13px; font-weight: 500; box-shadow: 0 8px 25px rgba(0,0,0,0.45); animation: bcToastIn 0.3s ease-out, bcToastOut 0.25s ease-in 2.2s forwards; pointer-events: auto; }\n    .bc-toast--error { border-left-color: var(--bc-warn); }\n    .bc-toast--success { border-left-color: var(--bc-success); }\n    @keyframes bcToastIn { from { opacity:0; transform:translateY(12px) scale(0.97); } to { opacity:1; transform:translateY(0) scale(1); } }\n    @keyframes bcToastOut { from { opacity:1; } to { opacity:0; transform:translateY(8px); } }\n\n    \/* ===== Responsive ===== *\/\n    @media (max-width: 780px) {\n      .bc-jd { padding: 28px 18px 20px; margin: 16px auto; border-radius: 12px; }\n      .bc-jd__header { grid-template-columns: 1fr; text-align: center; justify-items: center; gap: 20px; }\n      .bc-jd__dial { width: 190px; height: 190px; }\n      .bc-jd__title h1 { font-size: 28px; }\n      .bc-jd__grid { grid-template-columns: 1fr; gap: 16px; }\n      .bc-card { padding: 20px 18px; }\n      .bc-field-row { grid-template-columns: 1fr; gap: 0; }\n      .bc-readout { grid-template-columns: 1fr auto; gap: 6px; }\n      .bc-readout__value { font-size: 14px; }\n      .bc-jd__history-actions { flex-direction: column; }\n      .bc-stats { grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); }\n      .bc-toast-container { bottom: 12px; right: 12px; left: 12px; }\n      .bc-btn__shortcut { display: none; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .bc-jd__needle, .bc-readouts, .bc-jd__log li { animation: none; transition: none; }\n      .bc-live-dot { animation: none; }\n    }\n    <\/style>\n\n    <div class=\"bc-jd\" id=\"bcJd\">\n      <!-- ===== Header with Dial ===== -->\n      <div class=\"bc-jd__header\">\n        <div class=\"bc-jd__dial\" aria-hidden=\"true\">\n          <svg viewBox=\"0 0 220 220\" class=\"bc-jd__dial-svg\">\n            <circle cx=\"110\" cy=\"110\" r=\"98\" class=\"bc-jd__dial-ring\"><\/circle>\n            <circle cx=\"110\" cy=\"110\" r=\"80\" class=\"bc-jd__dial-ring-inner\"><\/circle>\n            <g id=\"bcTicks\"><\/g>\n            <g id=\"bcDialLabels\"><\/g>\n            <text x=\"110\" y=\"30\" id=\"bcDialDate\" class=\"dial-date\">\u2014<\/text>\n            <line id=\"bcNeedleHour\" x1=\"110\" y1=\"110\" x2=\"110\" y2=\"40\" class=\"bc-jd__needle bc-jd__needle--hour\"><\/line>\n            <line id=\"bcNeedleMin\" x1=\"110\" y1=\"110\" x2=\"110\" y2=\"28\" class=\"bc-jd__needle bc-jd__needle--min\"><\/line>\n            <line id=\"bcNeedleSec\" x1=\"110\" y1=\"110\" x2=\"110\" y2=\"20\" class=\"bc-jd__needle bc-jd__needle--sec\"><\/line>\n            <circle cx=\"110\" cy=\"110\" r=\"4.5\" class=\"bc-jd__hub\"><\/circle>\n            <circle cx=\"110\" cy=\"110\" r=\"2\" class=\"bc-jd__hub-inner\"><\/circle>\n          <\/svg>\n          <div class=\"bc-jd__dial-readout\">\n            <span class=\"bc-jd__dial-label\">Current Julian Date<\/span>\n            <span class=\"bc-jd__dial-value\" id=\"bcLiveJD\">\u2014<\/span>\n            <span class=\"bc-jd__dial-sub\" id=\"bcLiveUTC\">\u2014<\/span>\n            <span class=\"bc-jd__dial-live\"><span class=\"bc-jd__live-dot\"><\/span> LIVE<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"bc-jd__title\">\n          <h1>The Julian Day Almanac<\/h1>\n          <p class=\"bc-jd__subtitle\">\n            Professional astronomical date conversion and analysis. Gregorian, Julian Day Number, Modified Julian Date, Unix timestamp, moon phase, zodiac, solar declination, equation of time, and more. Built on the Fliegel\u2011Van Flandern algorithm for full proleptic Gregorian calendar support.\n          <\/p>\n          <div class=\"bc-jd__quick-bar\">\n            <button class=\"bc-preset\" data-preset=\"today\">Today<\/button>\n            <button class=\"bc-preset\" data-preset=\"tomorrow\">Tomorrow<\/button>\n            <button class=\"bc-preset\" data-preset=\"yesterday\">Yesterday<\/button>\n            <button class=\"bc-preset\" data-preset=\"j2000\">J2000.0<\/button>\n            <button class=\"bc-preset\" data-preset=\"unix\">Unix Epoch<\/button>\n            <button class=\"bc-preset\" data-preset=\"mjd0\">MJD 0<\/button>\n            <button class=\"bc-action-btn\" id=\"bcNowBtn\" title=\"Set to current date and time\">\ud83d\udd52 Now<\/button>\n            <button class=\"bc-theme-toggle\" id=\"bcThemeToggle\" title=\"Cycle theme (dark\/light\/sepia)\">\n              <span class=\"bc-theme-icon\">\ud83c\udfa8<\/span> Theme\n            <\/button>\n            <button class=\"bc-settings-btn\" id=\"bcSettingsToggle\" title=\"Settings\">\u2699 Settings<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- ===== Main Converters ===== -->\n      <div class=\"bc-jd__grid\">\n        <!-- Calendar \u2192 Julian -->\n        <div class=\"bc-card\">\n          <div class=\"bc-card__head\">\n            <span class=\"bc-card__eyebrow\">Calendar \u2192 Julian<\/span>\n            <h2>Enter a date<\/h2>\n          <\/div>\n          <div class=\"bc-field-row\">\n            <label class=\"bc-field\">\n              <span>Date<\/span>\n              <input type=\"date\" id=\"bcDateInput\">\n            <\/label>\n            <label class=\"bc-field bc-field--time\">\n              <span>Time (UTC)<\/span>\n              <input type=\"time\" id=\"bcTimeInput\" step=\"1\" value=\"12:00:00\">\n            <\/label>\n          <\/div>\n          <button class=\"bc-btn bc-btn--primary\" id=\"bcToJulianBtn\">\n            <span class=\"bc-btn__label\">Convert to Julian<\/span>\n            <span class=\"bc-btn__shortcut\">\u2318\u21b5<\/span>\n          <\/button>\n          <div class=\"bc-readouts\" id=\"bcJulianOut\" hidden>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Julian Day Number<\/span>\n              <span class=\"bc-readout__value\" id=\"outJDN\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outJDN\">\ud83d\udccb Copy<\/button>\n            <\/div>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Julian Date (with time)<\/span>\n              <span class=\"bc-readout__value\" id=\"outJD\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outJD\">\ud83d\udccb Copy<\/button>\n            <\/div>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Modified Julian Date<\/span>\n              <span class=\"bc-readout__value\" id=\"outMJD\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outMJD\">\ud83d\udccb Copy<\/button>\n            <\/div>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Unix timestamp<\/span>\n              <span class=\"bc-readout__value\" id=\"outUnix\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outUnix\">\ud83d\udccb Copy<\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Julian \u2192 Calendar -->\n        <div class=\"bc-card\">\n          <div class=\"bc-card__head\">\n            <span class=\"bc-card__eyebrow\">Julian \u2192 Calendar<\/span>\n            <h2>Enter a Julian value<\/h2>\n          <\/div>\n          <div class=\"bc-toggle\" role=\"radiogroup\" aria-label=\"Julian value type\">\n            <button type=\"button\" class=\"bc-toggle__opt is-active\" data-mode=\"jdn\">JDN<\/button>\n            <button type=\"button\" class=\"bc-toggle__opt\" data-mode=\"jd\">JD<\/button>\n            <button type=\"button\" class=\"bc-toggle__opt\" data-mode=\"mjd\">MJD<\/button>\n            <button type=\"button\" class=\"bc-toggle__opt\" data-mode=\"unix\">Unix<\/button>\n          <\/div>\n          <label class=\"bc-field\">\n            <span id=\"bcJulianInLabel\">Julian Day Number<\/span>\n            <input type=\"number\" id=\"bcJulianInput\" step=\"any\" placeholder=\"e.g. 2461278\">\n          <\/label>\n          <button class=\"bc-btn bc-btn--primary\" id=\"bcToGregBtn\">\n            <span class=\"bc-btn__label\">Convert to Calendar<\/span>\n            <span class=\"bc-btn__shortcut\">\u2318\u21b5<\/span>\n          <\/button>\n          <div class=\"bc-readouts\" id=\"bcGregOut\" hidden>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Gregorian date<\/span>\n              <span class=\"bc-readout__value\" id=\"outGregDate\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outGregDate\">\ud83d\udccb Copy<\/button>\n            <\/div>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Time (UTC)<\/span>\n              <span class=\"bc-readout__value\" id=\"outGregTime\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outGregTime\">\ud83d\udccb Copy<\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- ===== Extended Readout ===== -->\n      <div class=\"bc-card bc-jd__extended\" id=\"bcExtended\" hidden>\n        <div class=\"bc-card__head bc-card__head--row\">\n          <div>\n            <span class=\"bc-card__eyebrow\">Full breakdown<\/span>\n            <h2>Astronomical &amp; calendar details<\/h2>\n          <\/div>\n          <div style=\"display:flex; gap:8px; flex-wrap:wrap;\">\n            <button class=\"bc-btn bc-btn--ghost bc-btn--small\" id=\"bcCopyAllStats\">\ud83d\udcc4 Copy All Data<\/button>\n            <button class=\"bc-btn bc-btn--ghost bc-btn--small\" id=\"bcCopyJSON\">\ud83d\udccb Copy JSON<\/button>\n          <\/div>\n        <\/div>\n        <div class=\"bc-stats\" id=\"bcStats\"><\/div>\n      <\/div>\n\n      <!-- ===== Additional Tools ===== -->\n      <div class=\"bc-jd__grid\">\n        <!-- Date Math -->\n        <div class=\"bc-card\">\n          <div class=\"bc-card__head\">\n            <span class=\"bc-card__eyebrow\">Date math<\/span>\n            <h2>Add or subtract days<\/h2>\n          <\/div>\n          <div class=\"bc-field-row\">\n            <label class=\"bc-field\">\n              <span>Starting date<\/span>\n              <input type=\"date\" id=\"bcMathDate\">\n            <\/label>\n            <label class=\"bc-field\">\n              <span>Days (use \u2212 to subtract)<\/span>\n              <input type=\"number\" id=\"bcMathDays\" step=\"1\" placeholder=\"e.g. 90 or -45\">\n            <\/label>\n          <\/div>\n          <button class=\"bc-btn bc-btn--primary\" id=\"bcMathBtn\">\n            <span class=\"bc-btn__label\">Calculate date<\/span>\n            <span class=\"bc-btn__shortcut\">\u2318\u21b5<\/span>\n          <\/button>\n          <div class=\"bc-readouts\" id=\"bcMathOut\" hidden>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Resulting date<\/span>\n              <span class=\"bc-readout__value\" id=\"outMathDate\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outMathDate\">\ud83d\udccb Copy<\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Days Between -->\n        <div class=\"bc-card\">\n          <div class=\"bc-card__head\">\n            <span class=\"bc-card__eyebrow\">Date math<\/span>\n            <h2>Days between two dates<\/h2>\n          <\/div>\n          <div class=\"bc-field-row\">\n            <label class=\"bc-field\">\n              <span>First date<\/span>\n              <input type=\"date\" id=\"bcDiffA\">\n            <\/label>\n            <label class=\"bc-field\">\n              <span>Second date<\/span>\n              <input type=\"date\" id=\"bcDiffB\">\n            <\/label>\n          <\/div>\n          <button class=\"bc-btn bc-btn--primary\" id=\"bcDiffBtn\">\n            <span class=\"bc-btn__label\">Calculate difference<\/span>\n            <span class=\"bc-btn__shortcut\">\u2318\u21b5<\/span>\n          <\/button>\n          <div class=\"bc-readouts\" id=\"bcDiffOut\" hidden>\n            <div class=\"bc-readout\">\n              <span class=\"bc-readout__label\">Difference<\/span>\n              <span class=\"bc-readout__value\" id=\"outDiff\">\u2014<\/span>\n              <button class=\"bc-copy\" data-copy-target=\"outDiff\">\ud83d\udccb Copy<\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- ===== Settings Panel ===== -->\n      <div class=\"bc-card bc-jd__settings\" id=\"bcSettingsPanel\">\n        <div class=\"bc-card__head\">\n          <span class=\"bc-card__eyebrow\">Preferences<\/span>\n          <h2>Settings<\/h2>\n        <\/div>\n        <div class=\"bc-settings-grid\">\n          <label class=\"bc-field\">\n            <span>Log entries limit<\/span>\n            <select id=\"bcLogLimit\">\n              <option value=\"5\">5<\/option>\n              <option value=\"8\" selected>8<\/option>\n              <option value=\"10\">10<\/option>\n              <option value=\"15\">15<\/option>\n              <option value=\"20\">20<\/option>\n              <option value=\"30\">30<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"bc-field\">\n            <span>Default time (UTC)<\/span>\n            <input type=\"time\" id=\"bcDefaultTime\" value=\"12:00:00\" step=\"1\">\n          <\/label>\n          <label class=\"bc-field\">\n            <span>Copy format for Julian Date<\/span>\n            <select id=\"bcJDFormat\">\n              <option value=\"6\" selected>6 decimals<\/option>\n              <option value=\"5\">5 decimals<\/option>\n              <option value=\"4\">4 decimals<\/option>\n              <option value=\"3\">3 decimals<\/option>\n              <option value=\"full\">Full precision<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"bc-field\">\n            <span>Show advanced stats<\/span>\n            <select id=\"bcAdvancedStats\">\n              <option value=\"1\" selected>Yes<\/option>\n              <option value=\"0\">No<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"bc-field\">\n            <span>Theme<\/span>\n            <select id=\"bcThemeSelect\">\n              <option value=\"dark\" selected>Dark<\/option>\n              <option value=\"light\">Light<\/option>\n              <option value=\"sepia\">Sepia<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"bc-field\">\n            <span>Default date format<\/span>\n            <select id=\"bcDateFormat\">\n              <option value=\"YYYY-MM-DD\" selected>YYYY-MM-DD<\/option>\n              <option value=\"MM\/DD\/YYYY\">MM\/DD\/YYYY<\/option>\n              <option value=\"DD.MM.YYYY\">DD.MM.YYYY<\/option>\n            <\/select>\n          <\/label>\n        <\/div>\n        <button class=\"bc-btn bc-btn--ghost\" id=\"bcSaveSettings\" style=\"margin-top:10px;\">\ud83d\udcbe Save Settings<\/button>\n        <button class=\"bc-btn bc-btn--ghost\" id=\"bcResetSettings\" style=\"margin-top:10px; margin-left:8px;\">\ud83d\udd04 Reset<\/button>\n      <\/div>\n\n      <!-- ===== Session Log ===== -->\n      <div class=\"bc-card bc-jd__history\">\n        <div class=\"bc-card__head bc-card__head--row\">\n          <div>\n            <span class=\"bc-card__eyebrow\">This session<\/span>\n            <h2>Conversion log<\/h2>\n          <\/div>\n          <div class=\"bc-jd__history-actions\">\n            <button class=\"bc-btn bc-btn--ghost bc-btn--small\" id=\"bcExportLog\">\u2b07 CSV<\/button>\n            <button class=\"bc-btn bc-btn--ghost bc-btn--small\" id=\"bcExportJSON\">\u2b07 JSON<\/button>\n            <button class=\"bc-btn bc-btn--ghost bc-btn--small\" id=\"bcExportTXT\">\u2b07 TXT<\/button>\n            <button class=\"bc-btn bc-btn--ghost bc-btn--small\" id=\"bcClearLog\">\ud83d\uddd1 Clear<\/button>\n          <\/div>\n        <\/div>\n        <p class=\"bc-jd__empty\" id=\"bcLogEmpty\">Conversions you run will appear here so you can compare them.<\/p>\n        <ul class=\"bc-jd__log\" id=\"bcLog\"><\/ul>\n      <\/div>\n\n      <!-- Toast container -->\n      <div class=\"bc-toast-container\" id=\"bcToastContainer\" aria-live=\"polite\"><\/div>\n\n      <p class=\"bc-jd__footnote\" style=\"font-size:11px;color:var(--bc-muted);line-height:1.7;margin:0;opacity:0.75;\">\n        Julian Day Numbers use the Fliegel &amp; Van Flandern algorithm across the proleptic Gregorian calendar. Julian calendar (old style) and moon phase figures are approximate for dates far from the present. Equation of time and solar declination are computed using standard approximations. \u0394T (Terrestrial Time \u2212 UT) is estimated from a simple polynomial.\n        <span style=\"display:block;margin-top:4px;font-size:10px;letter-spacing:0.06em;opacity:0.5;\">v5.0 Ultimate \u2014 Free forever, built with precision astronomy algorithms.<\/span>\n      <\/p>\n    <\/div>\n\n    <script>\n    (function() {\n      'use strict';\n\n      var root = document.getElementById('bcJd');\n      if (!root) return;\n\n      \/\/ ---------- Helper functions ----------\n      function pad(n) { return String(n).padStart(2,'0'); }\n      function fmtDate(y,m,d, format) {\n        if (format === 'MM\/DD\/YYYY') return pad(m)+'\/'+pad(d)+'\/'+y;\n        if (format === 'DD.MM.YYYY') return pad(d)+'.'+pad(m)+'.'+y;\n        return y+'-'+pad(m)+'-'+pad(d);\n      }\n      function parseDate(str) {\n        \/\/ assumes YYYY-MM-DD from input\n        var parts = str.split('-').map(Number);\n        return { y: parts[0], m: parts[1], d: parts[2] };\n      }\n      function getUTCToday() { var now=new Date(); return fmtDate(now.getUTCFullYear(),now.getUTCMonth()+1,now.getUTCDate()); }\n      function getUTCDateStr(offset) { var d=new Date(); d.setUTCDate(d.getUTCDate()+(offset||0)); return fmtDate(d.getUTCFullYear(),d.getUTCMonth()+1,d.getUTCDate()); }\n      function setAllDates(dateStr) {\n        document.getElementById('bcDateInput').value = dateStr;\n        document.getElementById('bcMathDate').value = dateStr;\n        document.getElementById('bcDiffA').value = dateStr;\n        document.getElementById('bcDiffB').value = dateStr;\n      }\n\n      \/\/ ---------- Core astronomical algorithms ----------\n      function civilToJDN(y, m, d) {\n        var a = Math.floor((14 - m) \/ 12);\n        var yy = y + 4800 - a;\n        var mm = m + 12 * a - 3;\n        return d + Math.floor((153 * mm + 2) \/ 5) + 365 * yy + Math.floor(yy \/ 4) - Math.floor(yy \/ 100) + Math.floor(yy \/ 400) - 32045;\n      }\n      function jdnToGregorian(jdn) {\n        var a = jdn + 32044;\n        var b = Math.floor((4 * a + 3) \/ 146097);\n        var c = a - Math.floor((146097 * b) \/ 4);\n        var d = Math.floor((4 * c + 3) \/ 1461);\n        var e = c - Math.floor((1461 * d) \/ 4);\n        var m = Math.floor((5 * e + 2) \/ 153);\n        var day = e - Math.floor((153 * m + 2) \/ 5) + 1;\n        var month = m + 3 - 12 * Math.floor(m \/ 10);\n        var year = 100 * b + d - 4800 + Math.floor(m \/ 10);\n        return { year, month, day };\n      }\n      function jdnToJulianCalendar(jdn) {\n        var c = jdn + 32082;\n        var d = Math.floor((4 * c + 3) \/ 1461);\n        var e = c - Math.floor((1461 * d) \/ 4);\n        var m = Math.floor((5 * e + 2) \/ 153);\n        var day = e - Math.floor((153 * m + 2) \/ 5) + 1;\n        var month = m + 3 - 12 * Math.floor(m \/ 10);\n        var year = d - 4800 + Math.floor(m \/ 10);\n        return { year, month, day };\n      }\n      function toJD(y, m, d, h, mi, s) {\n        var jdn = civilToJDN(y, m, d);\n        var frac = ((h||0)*3600 + (mi||0)*60 + (s||0)) \/ 86400;\n        return jdn - 0.5 + frac;\n      }\n      function fromJD(jd) {\n        var jdnFloor = Math.floor(jd + 0.5);\n        var remainder = jd + 0.5 - jdnFloor;\n        var civil = jdnToGregorian(jdnFloor);\n        var totalSeconds = Math.round(remainder * 86400);\n        var hour = Math.floor(totalSeconds\/3600); totalSeconds -= hour*3600;\n        var min = Math.floor(totalSeconds\/60);\n        var sec = totalSeconds - min*60;\n        if (sec === 60) { sec=0; min++; }\n        if (min === 60) { min=0; hour++; }\n        if (hour === 24) { hour=0; }\n        return { year: civil.year, month: civil.month, day: civil.day, hour, min, sec };\n      }\n      function isLeapGregorian(y) { return (y%4===0 && y%100!==0) || y%400===0; }\n      function dayOfWeekName(jdn) {\n        var names = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'];\n        return names[((jdn%7)+7)%7];\n      }\n      function dayOfYear(y, m, d) { return civilToJDN(y,m,d) - civilToJDN(y,1,1) + 1; }\n      function isoWeek(y, m, d) {\n        var date = new Date(Date.UTC(y, m-1, d));\n        var dayNum = date.getUTCDay() || 7;\n        date.setUTCDate(date.getUTCDate() + 4 - dayNum);\n        var yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\n        return Math.ceil((((date - yearStart)\/86400000) + 1)\/7);\n      }\n      function moonPhaseInfo(jd) {\n        var synodic = 29.530588853;\n        var ref = 2451550.1;\n        var age = (jd - ref) % synodic;\n        if (age < 0) age += synodic;\n        var illumination = (1 - Math.cos(2*Math.PI*age\/synodic))\/2;\n        var phaseNames = [\n          {max:1.84566, name:'New Moon', icon:'\ud83c\udf11'},\n          {max:5.53699, name:'Waxing Crescent', icon:'\ud83c\udf12'},\n          {max:9.22831, name:'First Quarter', icon:'\ud83c\udf13'},\n          {max:12.91963, name:'Waxing Gibbous', icon:'\ud83c\udf14'},\n          {max:16.61096, name:'Full Moon', icon:'\ud83c\udf15'},\n          {max:20.30228, name:'Waning Gibbous', icon:'\ud83c\udf16'},\n          {max:23.99361, name:'Last Quarter', icon:'\ud83c\udf17'},\n          {max:27.68493, name:'Waning Crescent', icon:'\ud83c\udf18'},\n          {max:Infinity, name:'New Moon', icon:'\ud83c\udf11'}\n        ];\n        var phase = phaseNames.find(p => age < p.max) || phaseNames[0];\n        return { name: phase.name, icon: phase.icon, illumination: Math.round(illumination*1000)\/10, age, synodic };\n      }\n      function zodiacSign(y, m, d) {\n        var ranges = [\n          { name:'Capricorn', symbol:'\u2651', start:[12,22], end:[1,19] },\n          { name:'Aquarius', symbol:'\u2652', start:[1,20], end:[2,18] },\n          { name:'Pisces', symbol:'\u2653', start:[2,19], end:[3,20] },\n          { name:'Aries', symbol:'\u2648', start:[3,21], end:[4,19] },\n          { name:'Taurus', symbol:'\u2649', start:[4,20], end:[5,20] },\n          { name:'Gemini', symbol:'\u264a', start:[5,21], end:[6,20] },\n          { name:'Cancer', symbol:'\u264b', start:[6,21], end:[7,22] },\n          { name:'Leo', symbol:'\u264c', start:[7,23], end:[8,22] },\n          { name:'Virgo', symbol:'\u264d', start:[8,23], end:[9,22] },\n          { name:'Libra', symbol:'\u264e', start:[9,23], end:[10,22] },\n          { name:'Scorpio', symbol:'\u264f', start:[10,23], end:[11,21] },\n          { name:'Sagittarius', symbol:'\u2650', start:[11,22], end:[12,21] }\n        ];\n        for (var i=0; i<ranges.length; i++) {\n          var r = ranges[i], s = r.start, e = r.end;\n          if ((m===s[0] && d>=s[1]) || (m===e[0] && d<=e[1]) || (m>s[0]&&m<e[0]) || (s[0]>e[0]&&(m>s[0]||m<e[0]))) return r;\n        }\n        return ranges[0];\n      }\n      function getSeason(y, m, d) {\n        var doy = dayOfYear(y,m,d);\n        var isLeap = isLeapGregorian(y);\n        var spr = 80, sum = isLeap?173:172, aut = isLeap?267:266, win = isLeap?356:355;\n        if (doy>=spr && doy<sum) return 'Spring';\n        if (doy>=sum && doy<aut) return 'Summer';\n        if (doy>=aut && doy<win) return 'Autumn';\n        return 'Winter';\n      }\n      function solarDeclination(jd) {\n        var n = jd - 2451545.0;\n        var L = (280.460 + 0.9856474*n) % 360;\n        var g = (357.528 + 0.9856003*n) % 360;\n        var lambda = L + 1.915*Math.sin(g*Math.PI\/180) + 0.020*Math.sin(2*g*Math.PI\/180);\n        var epsilon = 23.439 - 0.0000004*n;\n        return Math.asin(Math.sin(epsilon*Math.PI\/180) * Math.sin(lambda*Math.PI\/180)) * 180\/Math.PI;\n      }\n      function equationOfTime(jd) {\n        var n = jd - 2451545.0;\n        var L = (280.460 + 0.9856474*n) % 360;\n        var g = (357.528 + 0.9856003*n) % 360;\n        var e = 0.016708634;\n        var y = Math.tan((Math.PI\/180)*g\/2);\n        y = y*y;\n        var eq = y*Math.sin(2*L*Math.PI\/180) - 2*e*Math.sin(g*Math.PI\/180) + 4*e*y*Math.sin(g*Math.PI\/180)*Math.cos(2*L*Math.PI\/180) - 0.5*y*y*Math.sin(4*L*Math.PI\/180) - 1.25*e*e*Math.sin(2*g*Math.PI\/180);\n        return eq * 4 * 180\/Math.PI;\n      }\n      function estimateDeltaT(year) {\n        \/\/ Simple approximation for \u0394T (seconds)\n        if (year < -500) return -20;\n        if (year < 500) return 10583.6 - 1014.41*year + 33.78311*year*year - 5.952053*year*year*year;\n        if (year < 1600) return 1574.2 - 556.01*(year-1000)\/100 + 71.23472*Math.pow((year-1000)\/100,2);\n        if (year < 1700) return 120 - 0.9808*(year-1600) - 0.01532*(year-1600)*(year-1600);\n        if (year < 1800) return 8.83 + 0.1603*(year-1700) + 0.0059285*(year-1700)*(year-1700);\n        if (year < 1860) return 13.72 - 0.332447*(year-1800) + 0.0068612*(year-1800)*(year-1800);\n        if (year < 1900) return 7.62 + 0.5737*(year-1860) - 0.251754*(year-1860)*(year-1860);\n        if (year < 1920) return -2.79 + 1.494119*(year-1900) - 0.0598939*(year-1900)*(year-1900);\n        if (year < 1941) return -2.79 + 1.494119*(year-1900) - 0.0598939*(year-1900)*(year-1900);\n        if (year < 1961) return 29.07 + 0.407*(year-1950) - 0.0002*(year-1950)*(year-1950);\n        if (year < 1986) return 45.45 + 1.067*(year-1975) - 0.0014*(year-1975)*(year-1975);\n        if (year < 2005) return 63.86 + 0.3345*(year-1990) - 0.060374*(year-1990)*(year-1990);\n        if (year < 2050) return 62.92 + 0.32217*(year-2000) + 0.005589*(year-2000)*(year-2000);\n        return 62.92 + 0.32217*50;\n      }\n      function unixFromJD(jd) { return Math.round((jd - 2440587.5) * 86400); }\n      function jdFromUnix(unix) { return unix\/86400 + 2440587.5; }\n\n      \/\/ ---------- Theme management ----------\n      var themeSelect = document.getElementById('bcThemeSelect');\n      var themeToggle = document.getElementById('bcThemeToggle');\n      var savedTheme = localStorage.getItem('bc_jd_theme') || 'dark';\n      function applyTheme(theme) {\n        root.classList.remove('dark-theme','light-theme','sepia-theme');\n        if (theme === 'light') root.classList.add('light-theme');\n        else if (theme === 'sepia') root.classList.add('sepia-theme');\n        \/\/ default is dark (no class)\n        localStorage.setItem('bc_jd_theme', theme);\n        themeSelect.value = theme;\n      }\n      applyTheme(savedTheme);\n      themeToggle.addEventListener('click', function() {\n        var current = localStorage.getItem('bc_jd_theme') || 'dark';\n        var next = current === 'dark' ? 'light' : current === 'light' ? 'sepia' : 'dark';\n        applyTheme(next);\n        showToast('Theme: ' + next, 'success');\n      });\n      themeSelect.addEventListener('change', function() {\n        applyTheme(themeSelect.value);\n        showToast('Theme: ' + themeSelect.value, 'success');\n      });\n\n      \/\/ ---------- Settings management ----------\n      var settingsPanel = document.getElementById('bcSettingsPanel');\n      var settingsToggle = document.getElementById('bcSettingsToggle');\n      var saveSettingsBtn = document.getElementById('bcSaveSettings');\n      var resetSettingsBtn = document.getElementById('bcResetSettings');\n      var logLimitSelect = document.getElementById('bcLogLimit');\n      var defaultTimeInput = document.getElementById('bcDefaultTime');\n      var jdFormatSelect = document.getElementById('bcJDFormat');\n      var advancedStatsSelect = document.getElementById('bcAdvancedStats');\n      var dateFormatSelect = document.getElementById('bcDateFormat');\n\n      function loadSettings() {\n        var savedLogLimit = localStorage.getItem('bc_jd_log_limit') || '8';\n        var savedDefaultTime = localStorage.getItem('bc_jd_default_time') || '12:00:00';\n        var savedJDFormat = localStorage.getItem('bc_jd_jd_format') || '6';\n        var savedAdvancedStats = localStorage.getItem('bc_jd_advanced_stats') || '1';\n        var savedDateFormat = localStorage.getItem('bc_jd_date_format') || 'YYYY-MM-DD';\n        logLimitSelect.value = savedLogLimit;\n        defaultTimeInput.value = savedDefaultTime;\n        jdFormatSelect.value = savedJDFormat;\n        advancedStatsSelect.value = savedAdvancedStats;\n        dateFormatSelect.value = savedDateFormat;\n        \/\/ apply default time to time input\n        document.getElementById('bcTimeInput').value = savedDefaultTime;\n      }\n      loadSettings();\n\n      settingsToggle.addEventListener('click', function() {\n        settingsPanel.classList.toggle('open');\n        settingsPanel.style.display = settingsPanel.classList.contains('open') ? 'block' : 'none';\n      });\n      saveSettingsBtn.addEventListener('click', function() {\n        localStorage.setItem('bc_jd_log_limit', logLimitSelect.value);\n        localStorage.setItem('bc_jd_default_time', defaultTimeInput.value);\n        localStorage.setItem('bc_jd_jd_format', jdFormatSelect.value);\n        localStorage.setItem('bc_jd_advanced_stats', advancedStatsSelect.value);\n        localStorage.setItem('bc_jd_date_format', dateFormatSelect.value);\n        showToast('Settings saved', 'success');\n      });\n      resetSettingsBtn.addEventListener('click', function() {\n        localStorage.removeItem('bc_jd_log_limit');\n        localStorage.removeItem('bc_jd_default_time');\n        localStorage.removeItem('bc_jd_jd_format');\n        localStorage.removeItem('bc_jd_advanced_stats');\n        localStorage.removeItem('bc_jd_date_format');\n        loadSettings();\n        showToast('Settings reset to defaults', 'success');\n      });\n\n      \/\/ ---------- Dial setup ----------\n      var ticksG = document.getElementById('bcTicks');\n      var labelsG = document.getElementById('bcDialLabels');\n      for (var i=0; i<72; i++) {\n        var angle = (i\/72)*360;\n        var major = i%18===0, medium = i%6===0;\n        var r1 = major?84:(medium?88:92), r2=98;\n        var rad = (angle-90)*Math.PI\/180;\n        var x1=110+r1*Math.cos(rad), y1=110+r1*Math.sin(rad);\n        var x2=110+r2*Math.cos(rad), y2=110+r2*Math.sin(rad);\n        var line = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','line');\n        line.setAttribute('x1',x1); line.setAttribute('y1',y1); line.setAttribute('x2',x2); line.setAttribute('y2',y2);\n        line.setAttribute('class','tick'+(major?' tick--major':(medium?' tick--medium':'')));\n        ticksG.appendChild(line);\n        if (major) {\n          var numAngle = (i\/72)*360, numRad = (numAngle-90)*Math.PI\/180;\n          var numX = 110+74*Math.cos(numRad), numY = 110+74*Math.sin(numRad);\n          var text = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','text');\n          text.setAttribute('x',numX); text.setAttribute('y',numY+3);\n          text.setAttribute('text-anchor','middle'); text.setAttribute('class','dial-num');\n          text.textContent = ((i\/72)*24).toFixed(0);\n          labelsG.appendChild(text);\n        }\n      }\n      var needleHour = document.getElementById('bcNeedleHour');\n      var needleMin = document.getElementById('bcNeedleMin');\n      var needleSec = document.getElementById('bcNeedleSec');\n      var liveJDEl = document.getElementById('bcLiveJD');\n      var liveUTCEl = document.getElementById('bcLiveUTC');\n      var dialDateEl = document.getElementById('bcDialDate');\n\n      function tickClock() {\n        var now = new Date();\n        var jd = toJD(now.getUTCFullYear(), now.getUTCMonth()+1, now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\n        liveJDEl.textContent = jd.toFixed(5);\n        liveUTCEl.textContent = fmtDate(now.getUTCFullYear(),now.getUTCMonth()+1,now.getUTCDate())+' '+pad(now.getUTCHours())+':'+pad(now.getUTCMinutes())+':'+pad(now.getUTCSeconds())+' UTC';\n        var hourAngle = ((now.getUTCHours()+now.getUTCMinutes()\/60+now.getUTCSeconds()\/3600)\/24)*360;\n        var minAngle = ((now.getUTCMinutes()+now.getUTCSeconds()\/60)\/60)*360;\n        var secAngle = (now.getUTCSeconds()\/60)*360;\n        needleHour.style.transform = 'rotate('+hourAngle+'deg)';\n        needleMin.style.transform = 'rotate('+minAngle+'deg)';\n        needleSec.style.transform = 'rotate('+secAngle+'deg)';\n        dialDateEl.textContent = fmtDate(now.getUTCFullYear(), now.getUTCMonth()+1, now.getUTCDate(), dateFormatSelect.value);\n      }\n      tickClock();\n      setInterval(tickClock, 1000);\n\n      \/\/ ---------- Presets and Now button ----------\n      root.querySelectorAll('.bc-preset').forEach(btn => {\n        btn.addEventListener('click', function() {\n          var preset = btn.dataset.preset;\n          switch(preset) {\n            case 'today': setAllDates(getUTCToday()); showToast('Date set to today (UTC)','success'); break;\n            case 'tomorrow': setAllDates(getUTCDateStr(1)); showToast('Date set to tomorrow (UTC)','success'); break;\n            case 'yesterday': setAllDates(getUTCDateStr(-1)); showToast('Date set to yesterday (UTC)','success'); break;\n            case 'j2000': setAllDates('2000-01-01'); document.getElementById('bcTimeInput').value='12:00:00'; showToast('J2000.0 epoch: 2000-01-01 12:00 UTC','success'); break;\n            case 'unix': setAllDates('1970-01-01'); document.getElementById('bcTimeInput').value='00:00:00'; showToast('Unix epoch: 1970-01-01 00:00 UTC','success'); break;\n            case 'mjd0': setAllDates('1858-11-17'); document.getElementById('bcTimeInput').value='00:00:00'; showToast('MJD 0: 1858-11-17 00:00 UTC','success'); break;\n          }\n        });\n      });\n\n      document.getElementById('bcNowBtn').addEventListener('click', function() {\n        var now = new Date();\n        var dateStr = fmtDate(now.getUTCFullYear(), now.getUTCMonth()+1, now.getUTCDate());\n        setAllDates(dateStr);\n        document.getElementById('bcTimeInput').value = pad(now.getUTCHours())+':'+pad(now.getUTCMinutes())+':'+pad(now.getUTCSeconds());\n        showToast('Set to current date & time (UTC)', 'success');\n      });\n\n      \/\/ ---------- Toast system ----------\n      var toastContainer = document.getElementById('bcToastContainer');\n      function showToast(message, type) {\n        var toast = document.createElement('div');\n        toast.className = 'bc-toast' + (type ? ' bc-toast--'+type : '');\n        toast.textContent = message;\n        toastContainer.appendChild(toast);\n        setTimeout(() => { if(toast.parentNode) toast.parentNode.removeChild(toast); }, 2200);\n      }\n\n      \/\/ ---------- Copy system ----------\n      function copyText(text, successMsg) {\n        if (navigator.clipboard && navigator.clipboard.writeText) {\n          navigator.clipboard.writeText(text).then(() => showToast(successMsg || 'Copied!','success')).catch(() => showToast('Copy failed','error'));\n        } else {\n          var ta = document.createElement('textarea');\n          ta.value = text; ta.style.position='fixed'; ta.style.opacity='0';\n          document.body.appendChild(ta); ta.select();\n          try { document.execCommand('copy'); showToast(successMsg || 'Copied!','success'); }\n          catch(err) { showToast('Copy failed','error'); }\n          document.body.removeChild(ta);\n        }\n      }\n      root.addEventListener('click', function(e) {\n        var btn = e.target.closest('.bc-copy');\n        if (!btn) return;\n        var target = document.getElementById(btn.dataset.copyTarget);\n        if (!target) return;\n        copyText(target.textContent.trim(), 'Copied: '+target.textContent.trim());\n      });\n\n      \/\/ ---------- Log system ----------\n      var logList = document.getElementById('bcLog');\n      var logEmpty = document.getElementById('bcLogEmpty');\n      var entries = [];\n      var logLimit = parseInt(logLimitSelect.value,10) || 8;\n\n      function pushLog(from, to) {\n        var now = new Date();\n        var timeStr = pad(now.getHours())+':'+pad(now.getMinutes());\n        entries.unshift({from, to, time:timeStr, timestamp: now.toISOString()});\n        entries = entries.slice(0, logLimit);\n        renderLog();\n      }\n      function renderLog() {\n        logList.innerHTML = '';\n        logEmpty.hidden = entries.length > 0;\n        entries.forEach(item => {\n          var li = document.createElement('li');\n          li.innerHTML = '<span class=\"bc-jd__log-from\">'+item.from+'<\/span><span>\u2192<\/span><span class=\"bc-jd__log-to\">'+item.to+'<\/span><span class=\"bc-jd__log-time\">'+item.time+'<\/span>';\n          logList.appendChild(li);\n        });\n      }\n      document.getElementById('bcClearLog').addEventListener('click', () => { entries=[]; renderLog(); showToast('Log cleared','success'); });\n      function exportLog(format) {\n        if (entries.length===0) { showToast('Log is empty','error'); return; }\n        var content, mime, ext;\n        if (format === 'csv') {\n          content = 'From,To,Time,Timestamp\\n';\n          entries.forEach(item => { content += '\"'+item.from+'\",\"'+item.to+'\",\"'+item.time+'\",\"'+item.timestamp+'\"\\n'; });\n          mime = 'text\/csv;charset=utf-8;'; ext = 'csv';\n        } else if (format === 'json') {\n          content = JSON.stringify(entries, null, 2); mime = 'application\/json'; ext = 'json';\n        } else if (format === 'txt') {\n          content = entries.map(item => item.from+' \u2192 '+item.to+' ('+item.time+')').join('\\n'); mime = 'text\/plain'; ext = 'txt';\n        }\n        var blob = new Blob([content], {type: mime});\n        var link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'julian-day-log.'+ext; link.click();\n        URL.revokeObjectURL(link.href); showToast('Log exported as '+ext.toUpperCase(),'success');\n      }\n      document.getElementById('bcExportLog').addEventListener('click', () => exportLog('csv'));\n      document.getElementById('bcExportJSON').addEventListener('click', () => exportLog('json'));\n      document.getElementById('bcExportTXT').addEventListener('click', () => exportLog('txt'));\n\n      \/\/ ---------- Extended readout ----------\n      var extended = document.getElementById('bcExtended');\n      var statsWrap = document.getElementById('bcStats');\n      var lastExtendedData = null;\n\n      function showExtended(y, m, d, jd) {\n        var jdn = civilToJDN(y,m,d);\n        var jc = jdnToJulianCalendar(jdn);\n        var moon = moonPhaseInfo(jd);\n        var zodiac = zodiacSign(y,m,d);\n        var season = getSeason(y,m,d);\n        var doy = dayOfYear(y,m,d);\n        var totalDays = isLeapGregorian(y) ? 366 : 365;\n        var yearProgress = Math.round((doy\/totalDays)*1000)\/10;\n        var daysRemaining = totalDays - doy;\n        var decl = solarDeclination(jd);\n        var eot = equationOfTime(jd);\n        var eotSign = eot >= 0 ? '+' : '\u2212';\n        var eotAbs = Math.abs(eot).toFixed(2);\n        var deltaT = estimateDeltaT(y);\n        var deltaTSign = deltaT >= 0 ? '+' : '\u2212';\n        var deltaTAbs = Math.abs(deltaT).toFixed(1);\n\n        var stats = [\n          { label: 'Day of week', value: dayOfWeekName(jdn) },\n          { label: 'Day of year', value: doy+' of '+totalDays },\n          { label: 'Year progress', value: yearProgress+'%', bar: yearProgress },\n          { label: 'Days remaining', value: daysRemaining+' days' },\n          { label: 'ISO week', value: 'Week '+isoWeek(y,m,d) },\n          { label: 'Leap year', value: isLeapGregorian(y) ? 'Yes \u2713' : 'No' },\n          { label: 'Julian calendar (old style)', value: fmtDate(jc.year,jc.month,jc.day) },\n          { label: 'Unix timestamp', value: unixFromJD(jd) },\n          { label: 'Moon phase', value: moon.icon+' '+moon.name, bar: moon.illumination },\n          { label: 'Moon illumination', value: moon.illumination+'%' },\n          { label: 'Moon age (days)', value: moon.age.toFixed(2)+' days' },\n          { label: 'Zodiac sign', value: zodiac.symbol+' '+zodiac.name },\n          { label: 'Season (N. Hemisphere)', value: season },\n          { label: 'Solar declination', value: decl.toFixed(3)+'\u00b0' },\n          { label: 'Equation of time', value: eotSign+eotAbs+' min' },\n          { label: '\u0394T (TT\u2212UT)', value: deltaTSign+deltaTAbs+' sec' }\n        ];\n\n        if (advancedStatsSelect.value === '0') {\n          stats = stats.slice(0, 7);\n        }\n\n        lastExtendedData = { y, m, d, jd, stats };\n\n        statsWrap.innerHTML = '';\n        stats.forEach(s => {\n          var div = document.createElement('div');\n          div.className = 'bc-stat';\n          var barHtml = s.bar !== undefined ? '<div class=\"bc-stat__bar\"><span style=\"width:'+Math.min(s.bar,100)+'%\"><\/span><\/div>' : '';\n          var valueClass = ['Day of week','Zodiac sign','Moon phase'].includes(s.label) ? ' bc-stat__value--highlight' : '';\n          div.innerHTML = '<span class=\"bc-stat__label\">'+s.label+'<\/span><span class=\"bc-stat__value'+valueClass+'\">'+s.value+'<\/span>'+barHtml;\n          statsWrap.appendChild(div);\n        });\n        extended.hidden = false;\n        extended.scrollIntoView({ behavior:'smooth', block:'nearest' });\n      }\n\n      document.getElementById('bcCopyAllStats').addEventListener('click', function() {\n        if (!lastExtendedData) { showToast('Run a conversion first','error'); return; }\n        var lines = lastExtendedData.stats.map(s => s.label+': '+s.value);\n        var fullText = 'Julian Day Almanac \u2014 Full Breakdown\\nDate: '+fmtDate(lastExtendedData.y,lastExtendedData.m,lastExtendedData.d,dateFormatSelect.value)+'\\nJD: '+lastExtendedData.jd.toFixed(6)+'\\n'+lines.join('\\n');\n        copyText(fullText, 'Full breakdown copied');\n      });\n\n      document.getElementById('bcCopyJSON').addEventListener('click', function() {\n        if (!lastExtendedData) { showToast('Run a conversion first','error'); return; }\n        var obj = {\n          date: fmtDate(lastExtendedData.y,lastExtendedData.m,lastExtendedData.d,dateFormatSelect.value),\n          julianDate: lastExtendedData.jd,\n          stats: Object.fromEntries(lastExtendedData.stats.map(s => [s.label, s.value]))\n        };\n        copyText(JSON.stringify(obj, null, 2), 'JSON copied');\n      });\n\n      \/\/ ---------- Keyboard shortcuts ----------\n      root.addEventListener('keydown', function(e) {\n        if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n          e.preventDefault();\n          var activeEl = document.activeElement;\n          if (!activeEl) return;\n          var card = activeEl.closest('.bc-card');\n          if (!card) return;\n          if (card.querySelector('#bcToJulianBtn')) document.getElementById('bcToJulianBtn').click();\n          else if (card.querySelector('#bcToGregBtn')) document.getElementById('bcToGregBtn').click();\n          else if (card.querySelector('#bcMathBtn')) document.getElementById('bcMathBtn').click();\n          else if (card.querySelector('#bcDiffBtn')) document.getElementById('bcDiffBtn').click();\n        }\n        if (e.key === 'Escape') {\n          document.querySelectorAll('.bc-toast').forEach(t => t.remove());\n        }\n      });\n\n      \/\/ ---------- Validation ----------\n      function markInvalid(input, isInvalid) {\n        var field = input.closest('.bc-field');\n        if (field) {\n          field.classList.toggle('bc-field--invalid', isInvalid);\n          field.classList.toggle('bc-field--valid', !isInvalid);\n        }\n      }\n      function validateDateInput(input) {\n        var valid = input.value !== '' && !isNaN(new Date(input.value + 'T00:00:00Z').getTime());\n        markInvalid(input, !valid);\n        return valid;\n      }\n\n      \/\/ ---------- Converters ----------\n      document.getElementById('bcToJulianBtn').addEventListener('click', function() {\n        var dateInput = document.getElementById('bcDateInput');\n        var timeInput = document.getElementById('bcTimeInput');\n        var dateVal = dateInput.value;\n        if (!dateVal || !validateDateInput(dateInput)) { showToast('Please enter a valid date','error'); return; }\n        var timeVal = timeInput.value || defaultTimeInput.value || '12:00:00';\n        var parts = dateVal.split('-').map(Number);\n        var tp = timeVal.split(':').map(Number);\n        var y=parts[0], m=parts[1], d=parts[2];\n        var h=tp[0]||0, mi=tp[1]||0, s=tp[2]||0;\n        var jdn = civilToJDN(y,m,d);\n        var jd = toJD(y,m,d,h,mi,s);\n        var mjd = jd - 2400000.5;\n        var unix = unixFromJD(jd);\n\n        var jdFormat = jdFormatSelect.value;\n        var jdStr = jdFormat === 'full' ? jd.toString() : jd.toFixed(parseInt(jdFormat));\n\n        document.getElementById('outJDN').textContent = jdn;\n        document.getElementById('outJD').textContent = jdStr;\n        document.getElementById('outMJD').textContent = mjd.toFixed(6);\n        document.getElementById('outUnix').textContent = unix;\n        document.getElementById('bcJulianOut').hidden = false;\n\n        showExtended(y,m,d,jd);\n        pushLog(fmtDate(y,m,d,dateFormatSelect.value)+' '+pad(h)+':'+pad(mi), 'JDN '+jdn);\n      });\n\n      var mode = 'jdn';\n      var modeLabels = { jdn:'Julian Day Number', jd:'Julian Date', mjd:'Modified Julian Date', unix:'Unix timestamp' };\n      root.querySelectorAll('.bc-toggle__opt').forEach(btn => {\n        btn.addEventListener('click', function() {\n          root.querySelectorAll('.bc-toggle__opt').forEach(b => b.classList.remove('is-active'));\n          btn.classList.add('is-active');\n          mode = btn.dataset.mode;\n          document.getElementById('bcJulianInLabel').textContent = modeLabels[mode];\n          \/\/ update placeholder\n          var input = document.getElementById('bcJulianInput');\n          if (mode === 'unix') input.placeholder = 'e.g. 1700000000';\n          else if (mode === 'mjd') input.placeholder = 'e.g. 60000';\n          else if (mode === 'jd') input.placeholder = 'e.g. 2461278.5';\n          else input.placeholder = 'e.g. 2461278';\n        });\n      });\n\n      document.getElementById('bcToGregBtn').addEventListener('click', function() {\n        var input = document.getElementById('bcJulianInput');\n        var raw = input.value;\n        if (raw === '' || isNaN(parseFloat(raw))) { markInvalid(input,true); showToast('Please enter a valid value','error'); return; }\n        markInvalid(input,false);\n        var val = parseFloat(raw);\n        var jd;\n        if (mode === 'jdn') jd = val;\n        else if (mode === 'mjd') jd = val + 2400000.5;\n        else if (mode === 'unix') jd = jdFromUnix(val);\n        else jd = val;\n\n        var civil = fromJD(jd);\n        document.getElementById('outGregDate').textContent = fmtDate(civil.year,civil.month,civil.day,dateFormatSelect.value);\n        document.getElementById('outGregTime').textContent = pad(civil.hour)+':'+pad(civil.min)+':'+pad(civil.sec)+' UTC';\n        document.getElementById('bcGregOut').hidden = false;\n        showExtended(civil.year,civil.month,civil.day,jd);\n        pushLog(modeLabels[mode]+' '+val, fmtDate(civil.year,civil.month,civil.day,dateFormatSelect.value));\n      });\n\n      document.getElementById('bcMathBtn').addEventListener('click', function() {\n        var dateInput = document.getElementById('bcMathDate');\n        var offsetInput = document.getElementById('bcMathDays');\n        var dateVal = dateInput.value;\n        var offset = parseInt(offsetInput.value || '0',10);\n        if (!dateVal || !validateDateInput(dateInput)) { showToast('Please enter a valid starting date','error'); return; }\n        if (isNaN(offset)) { markInvalid(offsetInput,true); showToast('Please enter a valid number of days','error'); return; }\n        markInvalid(offsetInput,false);\n        var parts = dateVal.split('-').map(Number);\n        var jdn = civilToJDN(parts[0],parts[1],parts[2]) + offset;\n        var result = jdnToGregorian(jdn);\n        var dow = dayOfWeekName(jdn);\n        var text = fmtDate(result.year,result.month,result.day,dateFormatSelect.value)+' \u00b7 '+dow;\n        document.getElementById('outMathDate').textContent = text;\n        document.getElementById('bcMathOut').hidden = false;\n        pushLog(dateVal+(offset>=0?' +':' ')+offset+'d', fmtDate(result.year,result.month,result.day,dateFormatSelect.value));\n      });\n\n      document.getElementById('bcDiffBtn').addEventListener('click', function() {\n        var aInput = document.getElementById('bcDiffA');\n        var bInput = document.getElementById('bcDiffB');\n        var aVal = aInput.value, bVal = bInput.value;\n        var aValid = aVal !== '' && validateDateInput(aInput);\n        var bValid = bVal !== '' && validateDateInput(bInput);\n        if (!aValid || !bValid) { showToast('Please enter both dates','error'); return; }\n        var a = aVal.split('-').map(Number), b = bVal.split('-').map(Number);\n        var jdnA = civilToJDN(a[0],a[1],a[2]), jdnB = civilToJDN(b[0],b[1],b[2]);\n        var diff = Math.abs(jdnB - jdnA);\n        var years = Math.floor(diff\/365.2425);\n        var text = diff+' day'+(diff===1?'':'s')+(diff>=365?' \u2248 '+years+' year'+(years===1?'':'s'):'')+' ('+(jdnB>=jdnA?'forward':'backward')+')';\n        document.getElementById('outDiff').textContent = text;\n        document.getElementById('bcDiffOut').hidden = false;\n        pushLog(aVal+' \u2192 '+bVal, diff+' days');\n      });\n\n      \/\/ ---------- Initial render ----------\n      renderLog();\n    })();\n    <\/script>\n    \n\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div><div class=\"vc_row-full-width vc_clearfix\"><\/div><div class=\"vc_row wpb_row vc_row-fluid bg-image-ps-inherit\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_raw_code wpb_raw_html wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<!-- ================= BROOKLYNCLICK JULIAN DATE CONVERTER FULL SEO PAGE ================= -->\r\n\r\n<div class=\"bc-seo\">\r\n\r\n  <h2>Why Choose Our Julian Date Converter 2026?<\/h2>\r\n\r\n  <p class=\"bc-seo-text\">\r\n    Our <strong>Julian Date Converter 2026<\/strong> is a fast, accurate, and completely free online tool \r\n    to convert Gregorian dates into <strong>Julian Day Number (JDN)<\/strong> and \r\n    <strong>Modified Julian Date (MJD)<\/strong>. \r\n    Perfect for students, engineers, astronomers, and scientific calculations.\r\n  <\/p>\r\n\r\n  <!-- ================= COMPARISON TABLE ================= -->\r\n  <div class=\"bc-table-wrap\">\r\n    <table class=\"bc-table\">\r\n      <tr>\r\n        <th>Feature<\/th>\r\n        <th>BrooklynClick Tool<\/th>\r\n        <th>Other Tools<\/th>\r\n      <\/tr>\r\n      <tr>\r\n        <td>Free Access<\/td>\r\n        <td>\u2705 Unlimited<\/td>\r\n        <td>\u26a0\ufe0f Limited<\/td>\r\n      <\/tr>\r\n      <tr>\r\n        <td>MJD Support<\/td>\r\n        <td>\u2705 Included<\/td>\r\n        <td>\u274c Not Available<\/td>\r\n      <\/tr>\r\n      <tr>\r\n        <td>Accuracy<\/td>\r\n        <td>\u2705 Astronomical Standard<\/td>\r\n        <td>\u26a0\ufe0f Varies<\/td>\r\n      <\/tr>\r\n      <tr>\r\n        <td>Mobile Friendly<\/td>\r\n        <td>\u2705 Fully Responsive<\/td>\r\n        <td>\u26a0\ufe0f Inconsistent<\/td>\r\n      <\/tr>\r\n      <tr>\r\n        <td>Instant Results<\/td>\r\n        <td>\u2705 Yes<\/td>\r\n        <td>\u26a0\ufe0f Slower<\/td>\r\n      <\/tr>\r\n    <\/table>\r\n  <\/div>\r\n\r\n  <!-- ================= FAQ SECTION ================= -->\r\n  <h2>Frequently Asked Questions (FAQs)<\/h2>\r\n\r\n  <div class=\"faq-accordion\">\r\n\r\n    <div class=\"faq-item\">\r\n      <div class=\"faq-question\">What is a Julian Date?<\/div>\r\n      <div class=\"faq-answer\">\r\n        A Julian Date is a continuous count of days starting from noon on January 1, 4713 BC. It is widely used in astronomy and scientific calculations.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"faq-item\">\r\n      <div class=\"faq-question\">What is Julian Day Number (JDN)?<\/div>\r\n      <div class=\"faq-answer\">\r\n        JDN is the integer-based day count used in astronomical time systems.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"faq-item\">\r\n      <div class=\"faq-question\">What is Modified Julian Date (MJD)?<\/div>\r\n      <div class=\"faq-answer\">\r\n        MJD = JDN - 2400000.5, used for simpler and smaller numeric values in scientific systems.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"faq-item\">\r\n      <div class=\"faq-question\">Is this tool free?<\/div>\r\n      <div class=\"faq-answer\">\r\n        Yes, this Julian Date Converter is completely free with no registration required.\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ================= STYLE ================= -->\r\n<style>\r\n.bc-seo {\r\n  margin: 40px auto;\r\n  padding: 40px 25px;\r\n  max-width: 850px;\r\n  background: #fff;\r\n  border-radius: 16px;\r\n  box-shadow: 0 8px 30px rgba(0,0,0,0.07);\r\n  font-family: Arial, sans-serif;\r\n  text-align: left;\r\n}\r\n\r\n\/* TEXT *\/\r\n.bc-seo-text {\r\n  line-height: 1.7;\r\n  color: #000;\r\n  margin-bottom: 35px;\r\n}\r\n\r\n\/* TABLE *\/\r\n.bc-table-wrap {\r\n  overflow-x: auto;\r\n  margin-bottom: 40px;\r\n}\r\n\r\n.bc-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  border-radius: 12px;\r\n  overflow: hidden;\r\n  box-shadow: 0 6px 20px rgba(0,0,0,0.06);\r\n}\r\n\r\n.bc-table th {\r\n  background: #1e3a8a;\r\n  color: #fff;\r\n  padding: 15px;\r\n  text-align: center;\r\n}\r\n\r\n.bc-table td {\r\n  padding: 14px;\r\n  border-bottom: 1px solid #e5e7eb;\r\n  text-align: left;\r\n  color: #000;\r\n}\r\n\r\n\/* ================= FAQ ACCORDION ================= *\/\r\n.faq-accordion {\r\n  text-align: left;\r\n}\r\n\r\n.faq-item {\r\n  margin-bottom: 15px;\r\n  border-radius: 10px;\r\n  overflow: hidden;\r\n  background: #fff;\r\n  box-shadow: 0 4px 10px rgba(0,0,0,0.08);\r\n  transition: 0.3s ease;\r\n}\r\n\r\n.faq-item:hover {\r\n  transform: scale(1.02);\r\n}\r\n\r\n.faq-question {\r\n  background: #007bff;\r\n  color: #fff;\r\n  padding: 15px 20px;\r\n  cursor: pointer;\r\n  font-weight: bold;\r\n  position: relative;\r\n}\r\n\r\n.faq-question::after {\r\n  content: '+';\r\n  position: absolute;\r\n  right: 20px;\r\n  font-size: 1.5rem;\r\n}\r\n\r\n.faq-item.active .faq-question::after {\r\n  content: '-';\r\n}\r\n\r\n.faq-answer {\r\n  display: none;\r\n  padding: 15px 20px;\r\n  background: #f9f9f9;\r\n  color: #000;\r\n}\r\n\r\n.faq-item.active .faq-answer {\r\n  display: block;\r\n}\r\n<\/style>\r\n\r\n<!-- ================= SCRIPT ================= -->\r\n<script>\r\ndocument.querySelectorAll('.faq-question').forEach(q => {\r\n  q.addEventListener('click', () => {\r\n    q.parentElement.classList.toggle('active');\r\n  });\r\n});\r\n<\/script>\r\n\r\n<!-- ================= SCHEMAS ================= -->\r\n\r\n<!-- WebPage Schema -->\r\n<script type=\"application\/ld+json\">\r\n{\r\n  \"@context\": \"https:\/\/schema.org\",\r\n  \"@type\": \"WebPage\",\r\n  \"name\": \"Julian Date Converter 2026\",\r\n  \"description\": \"Free tool to convert Gregorian dates to Julian Day Number (JDN) and Modified Julian Date (MJD).\",\r\n  \"publisher\": {\r\n    \"@type\": \"Organization\",\r\n    \"name\": \"BrooklynClick\"\r\n  }\r\n}\r\n<\/script>\r\n\r\n<!-- Software Schema -->\r\n<script type=\"application\/ld+json\">\r\n{\r\n  \"@context\": \"https:\/\/schema.org\",\r\n  \"@type\": \"SoftwareApplication\",\r\n  \"name\": \"Julian Date Converter\",\r\n  \"applicationCategory\": \"Utility\",\r\n  \"operatingSystem\": \"All\",\r\n  \"offers\": {\r\n    \"@type\": \"Offer\",\r\n    \"price\": \"0\",\r\n    \"priceCurrency\": \"USD\"\r\n  }\r\n}\r\n<\/script>\r\n\r\n<!-- FAQ Schema -->\r\n<script type=\"application\/ld+json\">\r\n{\r\n  \"@context\": \"https:\/\/schema.org\",\r\n  \"@type\": \"FAQPage\",\r\n  \"mainEntity\": [\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"What is a Julian Date?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"A Julian Date is a continuous count of days starting from noon on January 1, 4713 BC.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"What is Julian Day Number (JDN)?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"JDN is the integer-based day count used in astronomy.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"What is Modified Julian Date (MJD)?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"MJD = JDN - 2400000.5, used for simplified time calculations.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"Is this tool free?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"Yes, it is completely free with no registration required.\"\r\n      }\r\n    }\r\n  ]\r\n}\r\n<\/script>\r\n\r\n<!-- ================= END ================= -->\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div><div class=\"vc_row wpb_row vc_row-fluid bg-image-ps-inherit\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_raw_code wpb_raw_html wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<h2>Explore More Free Tools<\/h2>\r\n<ul>\r\n<li><a href=\"https:\/\/www.brooklynclick.com\/product-barcode-generator\/\">Product Barcode Generator<\/a><\/li>\r\n<li><a href=\"https:\/\/www.brooklynclick.com\/bulk-hyperlinks-generator\/\">Bulk Hyperlinks Generator<\/a><\/li>\r\n<li><a href=\"https:\/\/www.brooklynclick.com\/free-tools\/\">All Online Tools<\/a><\/li>\r\n<\/ul>\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"\u2014 Current Julian Date \u2014 \u2014 LIVE The Julian Day Almanac Professional astronomical date conversion and analysis. Gregorian, Julian Day Number, Modified Julian Date, Unix timestamp, moon phase, zodiac, solar declination, equation of time, and more. Built on the Fliegel\u2011Van Flandern algorithm for full proleptic Gregorian calendar support. Today Tomorrow Yesterday J2000.0 Unix Epoch MJD [...]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"rs_blank_template":"","rs_page_bg_color":"","slide_template_v7":"","footnotes":""},"class_list":["post-2021","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Julian Date Converter<\/title>\n<meta name=\"description\" content=\"Convert Gregorian dates to Julian Day Number (JDN) and Modified Julian Date (MJD) instantly. Free Julian Date Converter 2026 online tool.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.brooklynclick.com\/ig\/wp-json\/wp\/v2\/pages\/2021\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Julian Date Converter\" \/>\n<meta property=\"og:description\" content=\"Our Julian Date Converter 2026 is a fast, accurate, and completely free online tool to convert Gregorian dates into Julian Day Number (JDN) and Modified Julian\u2026\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.brooklynclick.com\/julian-date-converter\/\" \/>\n<meta property=\"og:site_name\" content=\"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Brooklynclick786\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T17:28:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.brooklynclick.com\/wp-content\/uploads\/2025\/05\/brooklyn-click-favicon.png\" \/>\n\t<meta property=\"og:image:width\" content=\"790\" \/>\n\t<meta property=\"og:image:height\" content=\"672\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Julian Date Converter\" \/>\n<meta name=\"twitter:description\" content=\"Our Julian Date Converter 2026 is a fast, accurate, and completely free online tool to convert Gregorian dates into Julian Day Number (JDN) and Modified Julian\u2026\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/julian-date-converter\\\/\",\"url\":\"https:\\\/\\\/www.brooklynclick.com\\\/julian-date-converter\\\/\",\"name\":\"Julian Date Converter\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/#website\"},\"datePublished\":\"2026-04-10T23:31:57+00:00\",\"dateModified\":\"2026-08-25T17:28:32+00:00\",\"description\":\"Convert Gregorian dates to Julian Day Number (JDN) and Modified Julian Date (MJD) instantly. Free Julian Date Converter 2026 online tool.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/julian-date-converter\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.brooklynclick.com\\\/julian-date-converter\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/julian-date-converter\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.brooklynclick.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Julian Date Converter\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/#website\",\"url\":\"https:\\\/\\\/www.brooklynclick.com\\\/\",\"name\":\"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA\",\"description\":\"BrooklynClick.com is a dynamic SEO and digital marketing agency based in the heart of Brooklyn, dedicated to driving growth and visibility for businesses of all sizes.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.brooklynclick.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/#organization\",\"name\":\"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA\",\"url\":\"https:\\\/\\\/www.brooklynclick.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.brooklynclick.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/brooklyn-click-favicon.png\",\"contentUrl\":\"https:\\\/\\\/www.brooklynclick.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/brooklyn-click-favicon.png\",\"width\":790,\"height\":672,\"caption\":\"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA\"},\"image\":{\"@id\":\"https:\\\/\\\/www.brooklynclick.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Brooklynclick786\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Julian Date Converter","description":"Convert Gregorian dates to Julian Day Number (JDN) and Modified Julian Date (MJD) instantly. Free Julian Date Converter 2026 online tool.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.brooklynclick.com\/ig\/wp-json\/wp\/v2\/pages\/2021\/","og_locale":"en_US","og_type":"article","og_title":"Julian Date Converter","og_description":"Our Julian Date Converter 2026 is a fast, accurate, and completely free online tool to convert Gregorian dates into Julian Day Number (JDN) and Modified Julian\u2026","og_url":"https:\/\/www.brooklynclick.com\/julian-date-converter\/","og_site_name":"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA","article_publisher":"https:\/\/www.facebook.com\/Brooklynclick786\/","article_modified_time":"2026-08-25T17:28:32+00:00","og_image":[{"width":790,"height":672,"url":"https:\/\/www.brooklynclick.com\/wp-content\/uploads\/2025\/05\/brooklyn-click-favicon.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_title":"Julian Date Converter","twitter_description":"Our Julian Date Converter 2026 is a fast, accurate, and completely free online tool to convert Gregorian dates into Julian Day Number (JDN) and Modified Julian\u2026","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.brooklynclick.com\/julian-date-converter\/","url":"https:\/\/www.brooklynclick.com\/julian-date-converter\/","name":"Julian Date Converter","isPartOf":{"@id":"https:\/\/www.brooklynclick.com\/#website"},"datePublished":"2026-04-10T23:31:57+00:00","dateModified":"2026-08-25T17:28:32+00:00","description":"Convert Gregorian dates to Julian Day Number (JDN) and Modified Julian Date (MJD) instantly. Free Julian Date Converter 2026 online tool.","breadcrumb":{"@id":"https:\/\/www.brooklynclick.com\/julian-date-converter\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.brooklynclick.com\/julian-date-converter\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.brooklynclick.com\/julian-date-converter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.brooklynclick.com\/"},{"@type":"ListItem","position":2,"name":"Julian Date Converter"}]},{"@type":"WebSite","@id":"https:\/\/www.brooklynclick.com\/#website","url":"https:\/\/www.brooklynclick.com\/","name":"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA","description":"BrooklynClick.com is a dynamic SEO and digital marketing agency based in the heart of Brooklyn, dedicated to driving growth and visibility for businesses of all sizes.","publisher":{"@id":"https:\/\/www.brooklynclick.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.brooklynclick.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.brooklynclick.com\/#organization","name":"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA","url":"https:\/\/www.brooklynclick.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.brooklynclick.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.brooklynclick.com\/wp-content\/uploads\/2025\/05\/brooklyn-click-favicon.png","contentUrl":"https:\/\/www.brooklynclick.com\/wp-content\/uploads\/2025\/05\/brooklyn-click-favicon.png","width":790,"height":672,"caption":"Brooklyn Click :: SEO And Digital Marketing Agency in Brooklyn USA"},"image":{"@id":"https:\/\/www.brooklynclick.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Brooklynclick786\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/pages\/2021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/comments?post=2021"}],"version-history":[{"count":0,"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/pages\/2021\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.brooklynclick.com\/wp-json\/wp\/v2\/media?parent=2021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}