{"id":8,"date":"2026-05-30T06:30:20","date_gmt":"2026-05-30T06:30:20","guid":{"rendered":"https:\/\/benchpresscalculator.fit\/?page_id=8"},"modified":"2026-05-30T10:30:15","modified_gmt":"2026-05-30T10:30:15","slug":"8-2","status":"publish","type":"page","link":"https:\/\/benchpresscalculator.fit\/","title":{"rendered":"Bench Press Calculator &#8211; Home"},"content":{"rendered":"\n<div class=\"bpc\" id=\"bench-press-calc\">\n<style>\n\/* \u2500\u2500 Variables + Wrapper \u2500\u2500 *\/\n.bpc {\n    --charcoal:   #2E2C26;\n    --charcoal-l: #38362f;\n    --charcoal-d: #221f1a;\n    --slate:      #3D4F5A;\n    --slate-l:    #4d6370;\n    --slate-d:    #2d3c45;\n    --aloe:       #73795D;\n    --aloe-l:     #8c937a;\n    --aloe-d:     #595e48;\n    --fog:        #E2DECE;\n    --fog-md:     #c4c0b2;\n    --fog-dim:    #9e9b90;\n    --fog-ghost:  rgba(226,222,206,0.12);\n    --radius:     16px;\n    --radius-sm:  10px;\n    --shadow:     0 4px 20px rgba(0,0,0,0.35);\n    --shadow-l:   0 12px 48px rgba(0,0,0,0.45);\n    --transition: 0.25s cubic-bezier(0.4,0,0.2,1);\n    \/* Wrapper layout *\/\n    width: 100%;\n    max-width: 100%;\n    overflow-x: hidden;\n    box-sizing: border-box;\n    background: var(--charcoal);\n    color: var(--fog);\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;\n    line-height: 1.5;\n    position: relative;\n    border-radius: 12px;\n}\n\n\/* \u2500\u2500 Scoped reset \u2500\u2500 *\/\n.bpc *, .bpc *::before, .bpc *::after { margin:0; padding:0; box-sizing:border-box; }\n\n\/* \u2500\u2500 Background vignette \u2500\u2500 *\/\n.bpc::before {\n    content:'';\n    position:absolute; inset:0; pointer-events:none; z-index:0;\n    background: radial-gradient(ellipse 80% 60% at 50% 0%, rgba(61,79,90,0.18), transparent 70%),\n                radial-gradient(ellipse 60% 50% at 80% 100%, rgba(115,121,93,0.1), transparent 60%);\n    border-radius: 12px;\n}\n\n.bpc .app {\n    position: relative; z-index:1;\n    max-width: 860px; margin:0 auto;\n    padding: 0 20px 100px;\n}\n\n\/* \u2500\u2500 Playfair helper \u2500\u2500 *\/\n.bpc .pf { font-family:Georgia, 'Palatino Linotype', Palatino, serif; }\n\n\/* \u2500\u2500 Header \u2500\u2500 *\/\n.bpc header {\n    display:flex; align-items:center; justify-content:space-between;\n    padding: 28px 0 16px;\n}\n.bpc .logo {\n    font-family:Georgia, 'Palatino Linotype', Palatino, serif;\n    font-size: 1.9rem; font-weight:700; font-style:italic;\n    color: var(--fog); letter-spacing:-0.5px;\n}\n.bpc .logo-dot { color: var(--aloe); font-style:normal; }\n.bpc .header-right { display:flex; align-items:center; gap:12px; }\n\n.bpc .streak-badge {\n    display:flex; align-items:center; gap:6px;\n    background: var(--slate-d); border:1px solid rgba(226,222,206,0.15);\n    border-radius:24px; padding:6px 14px;\n    font-size:0.82rem; font-weight:600; color:var(--fog);\n}\n.bpc .streak-badge strong { color:var(--fog); }\n\n.bpc .unit-toggle {\n    display:flex; background:var(--slate-d);\n    border:1px solid rgba(226,222,206,0.1);\n    border-radius:24px; padding:4px; gap:3px;\n}\n.bpc .unit-btn {\n    border:none; background:transparent; color:var(--fog-md);\n    padding:5px 14px; border-radius:20px;\n    cursor:pointer; font-size:0.8rem; font-weight:700;\n    transition: all var(--transition);\n}\n.bpc .unit-btn.active { background: var(--aloe); color: var(--charcoal); }\n\n\/* \u2500\u2500 Tabs \u2500\u2500 *\/\n.bpc .tabs-wrap { position:relative; margin:10px 0 24px; }\n.bpc .tabs {\n    display:flex; background: var(--slate-d);\n    border:1px solid rgba(226,222,206,0.07);\n    border-radius: var(--radius); padding:5px; gap:3px;\n    overflow-x:auto; scrollbar-width:none;\n    position:relative;\n}\n.bpc .tabs::-webkit-scrollbar { display:none; }\n\n.bpc .tab-indicator {\n    position:absolute; top:5px;\n    height:calc(100% - 10px);\n    background: var(--slate);\n    border:1px solid rgba(115,121,93,0.35);\n    border-radius:12px;\n    transition: left 0.32s cubic-bezier(0.34,1.46,0.64,1), width 0.28s ease;\n    pointer-events:none; z-index:0;\n    box-shadow: 0 2px 10px rgba(0,0,0,0.25);\n    will-change: left, width;\n}\n\n.bpc .tab-btn {\n    position:relative; z-index:1;\n    flex:1; min-width:72px; border:none; background:transparent;\n    color:rgba(226,222,206,0.62); padding:11px 8px; border-radius:12px;\n    cursor:pointer; font-size:0.74rem; font-weight:700;\n    transition: color var(--transition); white-space:nowrap;\n    display:flex; flex-direction:column; align-items:center; gap:3px;\n    letter-spacing:0.02em; text-transform:uppercase;\n}\n.bpc .tab-btn.active { color:var(--fog); }\n.bpc .tab-icon { font-size:1.1rem; }\n\n\/* \u2500\u2500 Cards \u2500\u2500 *\/\n.bpc .card {\n    background: var(--slate);\n    border: 1px solid rgba(226,222,206,0.07);\n    border-radius: var(--radius); padding:26px;\n    margin-bottom:14px;\n    box-shadow: var(--shadow);\n    transition: transform var(--transition), box-shadow var(--transition);\n}\n.bpc .card:hover { transform:translateY(-2px); box-shadow:var(--shadow-l); }\n\n.bpc .card-title {\n    font-family:Georgia, 'Palatino Linotype', Palatino, serif;\n    font-size:0.9rem; font-weight:600; font-style:italic;\n    color:var(--fog-md); margin-bottom:18px; letter-spacing:0.01em;\n}\n\n\/* \u2500\u2500 Inputs \u2500\u2500 *\/\n.bpc .input-grid { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:20px; }\n.bpc .input-group { display:flex; flex-direction:column; gap:8px; }\n.bpc .input-label {\n    font-size:0.68rem; font-weight:700; text-transform:uppercase;\n    letter-spacing:0.1em; color:var(--fog-md);\n}\n.bpc .input-wrapper { position:relative; }\n.bpc .input-field {\n    width:100%; background:var(--slate-d);\n    border:1.5px solid rgba(226,222,206,0.18);\n    border-radius:var(--radius-sm); color:var(--fog);\n    font-family:Georgia, 'Palatino Linotype', Palatino, serif;\n    font-size:1.7rem; font-weight:700;\n    padding:14px 48px 14px 16px; outline:none;\n    transition: border-color var(--transition), background var(--transition), box-shadow var(--transition);\n}\n.bpc .input-field:focus {\n    border-color: var(--aloe);\n    background: rgba(61,79,90,0.8);\n    box-shadow: 0 0 0 3px rgba(115,121,93,0.18);\n}\n.bpc .input-field::placeholder { color:var(--fog-md); font-style:italic; }\n.bpc .input-unit {\n    position:absolute; right:14px; top:50%;\n    transform:translateY(-50%);\n    color:var(--fog-md); font-size:0.82rem; font-weight:600;\n    pointer-events:none;\n}\n.bpc .input-field-sm { font-size:1.25rem; padding:11px 48px 11px 16px; }\n\n.bpc input[type=\"range\"] {\n    width:100%; -webkit-appearance:none; appearance:none;\n    height:5px; border-radius:3px; margin-top:8px;\n    background: rgba(226,222,206,0.25); outline:none; cursor:pointer;\n}\n.bpc input[type=\"range\"]::-webkit-slider-thumb {\n    -webkit-appearance:none;\n    width:20px; height:20px; border-radius:50%;\n    background:var(--aloe); border:3px solid var(--fog);\n    cursor:pointer; box-shadow:0 2px 8px rgba(0,0,0,0.3);\n    transition: transform 0.15s;\n}\n.bpc input[type=\"range\"]::-webkit-slider-thumb:hover { transform:scale(1.2); }\n\n\/* \u2500\u2500 Big result \u2500\u2500 *\/\n.bpc .result-hero {\n    text-align:center; padding:20px 0 12px;\n    border-bottom:1px solid rgba(226,222,206,0.07);\n    margin-bottom:20px;\n}\n.bpc .result-eyebrow {\n    font-size:0.68rem; font-weight:700; text-transform:uppercase;\n    letter-spacing:0.18em; color:var(--fog-md); margin-bottom:10px;\n}\n.bpc .result-number {\n    font-family:Georgia, 'Palatino Linotype', Palatino, serif;\n    font-size:6rem; font-weight:900; line-height:1;\n    color:var(--fog); position:relative; display:inline-block;\n}\n.bpc .result-number::after {\n    content:attr(data-unit);\n    font-size:1.6rem; font-weight:400; font-style:italic;\n    color:var(--aloe-l); margin-left:8px; vertical-align:baseline;\n    font-family:Georgia, 'Palatino Linotype', Palatino, serif;\n}\n@keyframes bpc-popIn { from{transform:scale(0.8);opacity:0} to{transform:scale(1);opacity:1} }\n\n.bpc .formula-row {\n    display:flex; justify-content:center; gap:8px;\n    margin-top:16px; flex-wrap:wrap;\n}\n.bpc .formula-chip {\n    background:var(--slate-d); border:1px solid rgba(226,222,206,0.08);\n    border-radius:8px; padding:7px 14px; font-size:0.76rem;\n}\n.bpc .formula-name { color:var(--fog-md); }\n.bpc .formula-val { color:var(--fog); font-weight:700; margin-left:5px; font-family:Georgia,serif; }\n\n.bpc .strength-badge {\n    display:inline-flex; align-items:center; gap:8px;\n    padding:8px 18px; border-radius:24px;\n    font-weight:700; font-size:0.86rem; margin-top:14px;\n    font-family:Georgia,serif; font-style:italic;\n}\n\n\/* \u2500\u2500 Buttons \u2500\u2500 *\/\n.bpc .action-row { display:flex; gap:10px; margin-top:22px; }\n.bpc .btn {\n    flex:1; padding:14px 20px; border:none; border-radius:var(--radius-sm);\n    font-weight:700; font-size:0.88rem; cursor:pointer;\n    transition: all var(--transition); position:relative; overflow:hidden;\n    letter-spacing:0.03em;\n}\n.bpc .btn-primary { background:var(--aloe); color:var(--charcoal); }\n.bpc .btn-primary:hover { background:var(--aloe-l); transform:translateY(-1px); box-shadow:0 6px 20px rgba(115,121,93,0.35); }\n.bpc .btn-secondary {\n    background: var(--charcoal-l); border:1.5px solid rgba(226,222,206,0.12);\n    color:var(--fog-md);\n}\n.bpc .btn-secondary:hover { background:var(--charcoal); color:var(--fog); }\n.bpc .btn-sm { padding:8px 16px; font-size:0.8rem; flex:unset; }\n\n\/* Ripple *\/\n.bpc .ripple {\n    position:absolute; border-radius:50%;\n    background:rgba(226,222,206,0.2); transform:scale(0);\n    animation:bpc-rippleAnim 0.55s linear; pointer-events:none;\n}\n@keyframes bpc-rippleAnim { to{transform:scale(4);opacity:0} }\n\n\/* \u2500\u2500 PCT Table \u2500\u2500 *\/\n.bpc .pct-table { width:100%; border-collapse:collapse; }\n.bpc .pct-table th {\n    font-size:0.65rem; font-weight:800; text-transform:uppercase;\n    letter-spacing:0.1em; color:var(--fog-md); text-align:left;\n    padding:8px 12px; border-bottom:1px solid rgba(226,222,206,0.12);\n}\n.bpc .pct-table td { padding:10px 12px; font-size:0.88rem; }\n.bpc .pct-table tr { transition:background 0.15s; }\n.bpc .pct-table tr:hover td { background:rgba(226,222,206,0.04); }\n.bpc .pct-table tr:not(:last-child) td { border-bottom:1px solid rgba(226,222,206,0.04); }\n.bpc .pct-bar {\n    height:3px; border-radius:2px; margin-top:4px; width:0;\n    transition: width 0.7s cubic-bezier(0.34,1.2,0.64,1);\n}\n\n\/* \u2500\u2500 Warmup \u2500\u2500 *\/\n.bpc .warmup-row {\n    display:flex; align-items:center; gap:14px;\n    padding:12px 0; border-bottom:1px solid rgba(226,222,206,0.05);\n    transition:background 0.15s;\n}\n.bpc .warmup-row:last-child { border-bottom:none; }\n.bpc .warmup-row:hover { background:rgba(226,222,206,0.02); border-radius:8px; padding-left:6px; }\n.bpc .warmup-num {\n    width:28px; height:28px; border-radius:50%; flex-shrink:0;\n    background:var(--aloe-d); display:flex; align-items:center; justify-content:center;\n    font-size:0.72rem; font-weight:800; color:var(--fog);\n}\n.bpc .warmup-details { flex:1; }\n.bpc .warmup-weight { font-family:Georgia,serif; font-weight:700; font-size:1rem; color:var(--fog); }\n.bpc .warmup-desc { font-size:0.76rem; color:var(--fog-md); margin-top:1px; }\n.bpc .warmup-pct { font-size:0.75rem; color:var(--aloe-l); font-weight:700; }\n\n\/* \u2500\u2500 Plate calculator \u2500\u2500 *\/\n.bpc .bar-visual {\n    margin:22px 0; overflow-x:auto; padding:20px 8px;\n    display:flex; align-items:center; justify-content:center;\n    background:var(--charcoal-l); border-radius:var(--radius-sm);\n    border:1px solid rgba(226,222,206,0.05);\n}\n.bpc .bar-container { display:flex; align-items:center; min-width:240px; }\n.bpc .bar-collar {\n    width:16px; height:24px;\n    background:linear-gradient(180deg,#c0bfbb,#888780);\n    border-radius:3px; flex-shrink:0;\n    box-shadow:0 2px 6px rgba(0,0,0,0.4);\n}\n.bpc .bar-shaft {\n    height:10px; width:110px; flex-shrink:0;\n    background:linear-gradient(180deg,#c0bfbb,#888780);\n    box-shadow:0 2px 8px rgba(0,0,0,0.3);\n}\n.bpc .plates-side { display:flex; align-items:center; gap:2px; flex-shrink:0; }\n.bpc .plates-side.right { flex-direction:row-reverse; }\n.bpc .plate {\n    display:flex; align-items:center; justify-content:center;\n    border-radius:4px; font-weight:900; cursor:default;\n    writing-mode:vertical-rl; text-orientation:mixed;\n    font-size:0.55rem; transition:transform 0.15s;\n    box-shadow:1px 0 4px rgba(0,0,0,0.4), -1px 0 4px rgba(0,0,0,0.2);\n}\n.bpc .plate:hover { transform:scaleY(1.07); }\n.bpc .plate-list { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; }\n.bpc .plate-chip {\n    display:flex; align-items:center; gap:8px;\n    background:var(--charcoal-l); border:1px solid rgba(226,222,206,0.08);\n    border-radius:8px; padding:8px 14px; font-size:0.82rem; font-weight:600;\n    transition:background 0.15s;\n}\n.bpc .plate-chip:hover { background:var(--charcoal); }\n.bpc .plate-dot { width:10px; height:10px; border-radius:50%; flex-shrink:0; }\n\n\/* \u2500\u2500 RPE Table \u2500\u2500 *\/\n.bpc .rpe-scroll { overflow-x:auto; }\n.bpc .rpe-table { width:100%; border-collapse:collapse; font-size:0.77rem; }\n.bpc .rpe-table th {\n    background:var(--charcoal-l); padding:8px 7px;\n    font-weight:700; text-align:center;\n    color:var(--fog-md); font-size:0.65rem;\n    text-transform:uppercase; letter-spacing:0.06em;\n}\n.bpc .rpe-table td {\n    padding:6px 7px; text-align:center;\n    border:1px solid rgba(226,222,206,0.06);\n    color:var(--fog-md);\n}\n.bpc .rpe-table tr:hover td { background:rgba(226,222,206,0.03); }\n.bpc .rpe-hl { background:rgba(115,121,93,0.2) !important; color:var(--aloe-l) !important; font-weight:800 !important; border-radius:4px; }\n\n\/* \u2500\u2500 Progress chart \u2500\u2500 *\/\n.bpc .chart-wrap { position:relative; }\n.bpc #progress-chart { width:100%; display:block; cursor:crosshair; }\n.bpc .chart-tooltip {\n    position:absolute; pointer-events:none;\n    background:var(--charcoal); border:1px solid rgba(226,222,206,0.12);\n    border-radius:8px; padding:8px 12px; font-size:0.78rem; font-weight:600;\n    opacity:0; transform:translateY(-4px);\n    transition:opacity 0.15s, transform 0.15s;\n    white-space:nowrap; box-shadow:var(--shadow);\n    color:var(--fog);\n}\n.bpc .chart-tooltip.show { opacity:1; transform:translateY(0); }\n.bpc .history-list {\n    display:flex; flex-direction:column; gap:8px;\n    max-height:320px; overflow-y:auto;\n}\n.bpc .history-item {\n    display:flex; align-items:center; justify-content:space-between;\n    padding:12px 16px; background:var(--charcoal-l);\n    border-radius:var(--radius-sm); border:1px solid rgba(226,222,206,0.06);\n    transition:background 0.15s; animation:bpc-slideIn 0.3s ease both;\n}\n@keyframes bpc-slideIn { from{opacity:0;transform:translateX(-10px)} to{opacity:1;transform:none} }\n.bpc .history-item:hover { background:var(--charcoal); }\n.bpc .history-date { font-size:0.72rem; color:var(--fog-md); }\n.bpc .history-wt { font-family:Georgia,serif; font-weight:700; font-size:1rem; margin-top:2px; }\n.bpc .history-orm { font-size:0.78rem; color:var(--aloe-l); font-weight:600; }\n.bpc .pr-badge {\n    background:var(--aloe-d); color:var(--fog);\n    font-size:0.62rem; font-weight:800; padding:3px 8px;\n    border-radius:5px; margin-top:3px; display:inline-block;\n    letter-spacing:0.05em;\n}\n\n\/* \u2500\u2500 Standards \u2500\u2500 *\/\n.bpc .standards-levels { display:flex; flex-direction:column; gap:15px; margin-top:16px; }\n.bpc .level-row { display:flex; align-items:center; gap:14px; }\n.bpc .level-name { width:112px; font-size:0.78rem; font-weight:700; text-transform:uppercase; letter-spacing:0.05em; flex-shrink:0; }\n.bpc .level-track { flex:1; height:8px; background:rgba(226,222,206,0.07); border-radius:5px; overflow:hidden; }\n.bpc .level-fill { height:100%; border-radius:5px; width:0; transition:width 0.8s cubic-bezier(0.34,1.2,0.64,1); }\n.bpc .level-val { width:76px; text-align:right; font-size:0.82rem; font-weight:700; font-family:Georgia,serif; flex-shrink:0; }\n\n\/* \u2500\u2500 Programs \u2500\u2500 *\/\n.bpc .program-select { display:flex; gap:8px; margin-bottom:18px; }\n.bpc .program-card {\n    flex:1; padding:16px 10px; background:var(--charcoal-l);\n    border:2px solid rgba(226,222,206,0.08); border-radius:var(--radius-sm);\n    cursor:pointer; transition:all var(--transition); text-align:center;\n}\n.bpc .program-card:hover { border-color:rgba(115,121,93,0.4); transform:translateY(-1px); }\n.bpc .program-card.selected { border-color:var(--aloe); background:rgba(115,121,93,0.1); }\n.bpc .program-card h4 { font-family:Georgia,serif; font-size:0.95rem; margin-bottom:3px; color:var(--fog); }\n.bpc .program-card p { font-size:0.72rem; color:var(--fog-md); }\n.bpc .week-title {\n    font-family:Georgia,serif; font-style:italic;\n    font-size:0.88rem; color:var(--aloe-l); margin-bottom:10px; padding-top:6px;\n}\n.bpc .prog-row {\n    display:grid; grid-template-columns:60px 60px 1fr 88px;\n    gap:6px; padding:9px 0; border-bottom:1px solid rgba(226,222,206,0.05);\n    font-size:0.85rem; align-items:center;\n}\n.bpc .prog-row.hdr { font-size:0.65rem; color:var(--fog-md); font-weight:800; text-transform:uppercase; letter-spacing:0.08em; }\n\n\/* \u2500\u2500 Goal ring \u2500\u2500 *\/\n.bpc .goal-ring-wrap { position:relative; width:120px; height:120px; margin:0 auto 16px; }\n.bpc .goal-ring-wrap svg { transform:rotate(-90deg); }\n.bpc .ring-bg { fill:none; stroke:rgba(226,222,206,0.08); stroke-width:9; }\n.bpc .ring-fill { fill:none; stroke:var(--aloe); stroke-width:9; stroke-linecap:round; transition:stroke-dashoffset 0.7s ease; }\n.bpc .ring-text { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; }\n.bpc .ring-pct { font-family:Georgia,serif; font-size:1.6rem; font-weight:900; color:var(--fog); }\n.bpc .ring-sub { font-size:0.62rem; color:var(--fog-dim); text-transform:uppercase; letter-spacing:0.08em; }\n.bpc .milestones { display:flex; flex-direction:column; gap:7px; margin-top:12px; }\n.bpc .m-row { display:flex; align-items:center; gap:10px; font-size:0.82rem; }\n.bpc .m-dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }\n\n\/* \u2500\u2500 Share modal \u2500\u2500 *\/\n.bpc .modal-overlay {\n    position:fixed; inset:0; background:rgba(0,0,0,0.85);\n    backdrop-filter:blur(12px); display:flex; align-items:center;\n    justify-content:center; z-index:99998; padding:16px;\n    opacity:0; pointer-events:none; transition:opacity 0.2s;\n}\n.bpc .modal-overlay.show { opacity:1; pointer-events:all; }\n.bpc .modal {\n    background:var(--slate-d); border:1px solid rgba(226,222,206,0.1);\n    border-radius:var(--radius); padding:24px; width:100%; max-width:420px;\n    box-shadow:var(--shadow-l);\n}\n.bpc .modal-title { font-family:Georgia,serif; font-size:1.2rem; font-weight:700; font-style:italic; margin-bottom:16px; color:var(--fog); }\n.bpc #share-canvas { width:100%; border-radius:var(--radius-sm); display:block; margin-bottom:14px; }\n.bpc .modal-actions { display:flex; gap:9px; }\n\n\/* \u2500\u2500 Confetti (document-level fixed position) \u2500\u2500 *\/\n.bpc-confetti {\n    position:fixed; pointer-events:none; z-index:99999;\n    width:8px; height:8px; border-radius:2px;\n    animation:bpc-confettiFall 1.2s ease-in forwards;\n}\n@keyframes bpc-confettiFall {\n    0%   {transform:translateY(0) rotate(0deg) scale(1); opacity:1;}\n    100% {transform:translateY(100vh) rotate(720deg) scale(0.5); opacity:0;}\n}\n\n\/* \u2500\u2500 Tab content transitions \u2500\u2500 *\/\n.bpc .tab-content { display:none; }\n.bpc .tab-content.active {\n    display:block;\n    animation:bpc-tabFadeIn 0.28s ease both;\n}\n@keyframes bpc-tabFadeIn {\n    from{opacity:0;transform:translateY(10px)}\n    to{opacity:1;transform:translateY(0)}\n}\n\n\/* \u2500\u2500 Custom scrollbar \u2500\u2500 *\/\n.bpc ::-webkit-scrollbar { width:4px; height:4px; }\n.bpc ::-webkit-scrollbar-track { background:transparent; }\n.bpc ::-webkit-scrollbar-thumb { background:rgba(226,222,206,0.12); border-radius:2px; }\n\n\/* \u2500\u2500 Responsive \u2500\u2500 *\/\n@media(max-width:500px){\n    .bpc .input-grid { grid-template-columns:1fr; }\n    .bpc .result-number { font-size:4.2rem; }\n    .bpc .tab-btn { min-width:60px; font-size:0.67rem; }\n    .bpc .prog-row { grid-template-columns:48px 52px 1fr 72px; font-size:0.79rem; }\n    .bpc .card { padding:18px 16px; }\n}\n<\/style>\n\n<div class=\"app\">\n\n    <!-- \u2500\u2500 Header \u2500\u2500 -->\n    <header>\n        <div class=\"logo pf\">Bench Press <span class=\"logo-dot\">Calculator<\/span><\/div>\n        <div class=\"header-right\">\n            <div class=\"streak-badge\">&#x1f525; <strong id=\"bpc-streak-count\">0<\/strong>&nbsp;day streak<\/div>\n            <div class=\"unit-toggle\">\n                <button class=\"unit-btn active\" onclick=\"bpcSetUnit('kg')\" id=\"bpc-btn-kg\">kg<\/button>\n                <button class=\"unit-btn\" onclick=\"bpcSetUnit('lbs')\" id=\"bpc-btn-lbs\">lbs<\/button>\n            <\/div>\n        <\/div>\n    <\/header>\n\n    <!-- \u2500\u2500 Tabs \u2500\u2500 -->\n    <div class=\"tabs-wrap\">\n        <div class=\"tabs\" id=\"bpc-tabs-bar\">\n            <div class=\"tab-indicator\" id=\"bpc-tab-ind\"><\/div>\n            <button class=\"tab-btn active\" onclick=\"bpcSwitchTab('calc')\" id=\"bpc-tab-calc\">     <span class=\"tab-icon\">&#x1f3cb;&#xfe0f;<\/span>1RM<\/button>\n            <button class=\"tab-btn\" onclick=\"bpcSwitchTab('plates')\" id=\"bpc-tab-plates\">   <span class=\"tab-icon\">&#x2696;&#xfe0f;<\/span>Plates<\/button>\n            <button class=\"tab-btn\" onclick=\"bpcSwitchTab('progress')\" id=\"bpc-tab-progress\"> <span class=\"tab-icon\">&#x1f4c8;<\/span>Progress<\/button>\n            <button class=\"tab-btn\" onclick=\"bpcSwitchTab('standards')\" id=\"bpc-tab-standards\"><span class=\"tab-icon\">&#x1f3c6;<\/span>Standards<\/button>\n            <button class=\"tab-btn\" onclick=\"bpcSwitchTab('programs')\" id=\"bpc-tab-programs\"> <span class=\"tab-icon\">&#x1f4cb;<\/span>Programs<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 CALCULATOR \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"tab-content active\" id=\"bpc-content-calc\">\n\n        <div class=\"card\">\n            <div class=\"card-title\">Your Lift<\/div>\n            <div class=\"input-grid\">\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Weight Lifted<\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field\" id=\"bpc-weight-input\" placeholder=\"100\" min=\"1\" max=\"600\" oninput=\"bpcCalculate()\">\n                        <span class=\"input-unit\" id=\"bpc-lbl-wu\">kg<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Reps \u2014 <span id=\"bpc-reps-display\">5<\/span><\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field\" id=\"bpc-reps-input\" value=\"5\" min=\"1\" max=\"30\" oninput=\"bpcSyncSlider();bpcCalculate()\">\n                        <span class=\"input-unit\">reps<\/span>\n                    <\/div>\n                    <input type=\"range\" id=\"bpc-reps-slider\" min=\"1\" max=\"30\" value=\"5\" oninput=\"bpcSyncRepsInput();bpcCalculate()\">\n                <\/div>\n            <\/div>\n\n            <div id=\"bpc-result-section\" style=\"display:none\">\n                <div class=\"result-hero\">\n                    <div class=\"result-eyebrow\">Estimated 1 Rep Max<\/div>\n                    <div class=\"result-number\" id=\"bpc-result-1rm\" data-unit=\"kg\">\u2014<\/div>\n                    <div class=\"formula-row\">\n                        <div class=\"formula-chip\"><span class=\"formula-name\">Epley<\/span><span class=\"formula-val\" id=\"bpc-f-epley\">\u2014<\/span><\/div>\n                        <div class=\"formula-chip\"><span class=\"formula-name\">Brzycki<\/span><span class=\"formula-val\" id=\"bpc-f-brzycki\">\u2014<\/span><\/div>\n                        <div class=\"formula-chip\"><span class=\"formula-name\">Lander<\/span><span class=\"formula-val\" id=\"bpc-f-lander\">\u2014<\/span><\/div>\n                    <\/div>\n                    <div id=\"bpc-strength-badge-calc\"><\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"action-row\">\n                <button class=\"btn btn-primary\" id=\"bpc-log-btn\" onclick=\"bpcLogWorkout(event)\">+ Log Workout<\/button>\n                <button class=\"btn btn-secondary\" onclick=\"bpcOpenShareModal(event)\">Share Result<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Training zones -->\n        <div class=\"card\" id=\"bpc-pct-card\" style=\"display:none\">\n            <div class=\"card-title\">Training Zones<\/div>\n            <table class=\"pct-table\">\n                <thead><tr><th>%<\/th><th>Weight<\/th><th>Goal<\/th><th>Reps<\/th><\/tr><\/thead>\n                <tbody id=\"bpc-pct-tbody\"><\/tbody>\n            <\/table>\n        <\/div>\n\n        <!-- Warmup -->\n        <div class=\"card\" id=\"bpc-warmup-card\" style=\"display:none\">\n            <div class=\"card-title\">Warm-up Sets<\/div>\n            <div id=\"bpc-warmup-sets\"><\/div>\n        <\/div>\n\n        <!-- Goal tracker -->\n        <div class=\"card\">\n            <div class=\"card-title\">Goal Tracker<\/div>\n            <div class=\"input-grid\" style=\"margin-bottom:10px\">\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Goal 1RM<\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field input-field-sm\" id=\"bpc-goal-input\" placeholder=\"140\" oninput=\"bpcUpdateGoal()\">\n                        <span class=\"input-unit\" id=\"bpc-lbl-gu\">kg<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Bodyweight<\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field input-field-sm\" id=\"bpc-bw-input\" placeholder=\"80\" oninput=\"bpcUpdateGoal();bpcSyncBW()\">\n                        <span class=\"input-unit\" id=\"bpc-lbl-bu\">kg<\/span>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <div id=\"bpc-goal-display\" style=\"display:none;text-align:center;padding:10px 0\">\n                <div class=\"goal-ring-wrap\">\n                    <svg viewBox=\"0 0 120 120\" width=\"120\" height=\"120\">\n                        <circle class=\"ring-bg\" cx=\"60\" cy=\"60\" r=\"51\"><\/circle>\n                        <circle class=\"ring-fill\" id=\"bpc-goal-ring\" cx=\"60\" cy=\"60\" r=\"51\" stroke-dasharray=\"320.4\" stroke-dashoffset=\"320.4\"><\/circle>\n                    <\/svg>\n                    <div class=\"ring-text\">\n                        <div class=\"ring-pct\" id=\"bpc-goal-pct-text\">0%<\/div>\n                        <div class=\"ring-sub\">to goal<\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"milestones\" id=\"bpc-milestones\"><\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 PLATES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"tab-content\" id=\"bpc-content-plates\">\n        <div class=\"card\">\n            <div class=\"card-title\">Plate Calculator<\/div>\n            <div class=\"input-grid\">\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Target Weight<\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field\" id=\"bpc-plate-weight\" placeholder=\"100\" oninput=\"bpcCalcPlates()\">\n                        <span class=\"input-unit\" id=\"bpc-lbl-pu\">kg<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Bar Weight<\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field\" id=\"bpc-bar-weight\" value=\"20\" oninput=\"bpcCalcPlates()\">\n                        <span class=\"input-unit\" id=\"bpc-lbl-bbu\">kg<\/span>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <div class=\"bar-visual\" id=\"bpc-bar-visual\" style=\"display:none\">\n                <div class=\"bar-container\" id=\"bpc-bar-container\"><\/div>\n            <\/div>\n            <div id=\"bpc-plate-result\"><\/div>\n        <\/div>\n        <div class=\"card\">\n            <div class=\"card-title\">RPE &#x2194; % Reference<\/div>\n            <div class=\"rpe-scroll\"><table class=\"rpe-table\" id=\"bpc-rpe-table\"><\/table><\/div>\n            <div style=\"margin-top:10px;font-size:0.72rem;color:var(--fog-md)\">\n                RPE 10 = 0 reps left. Each point down = 1 more rep in the tank.\n                <span id=\"bpc-rpe-note\" style=\"color:var(--aloe-l)\"><\/span>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 PROGRESS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"tab-content\" id=\"bpc-content-progress\">\n        <div class=\"card\">\n            <div class=\"card-title\">1RM Progress<\/div>\n            <div class=\"chart-wrap\">\n                <canvas id=\"bpc-progress-chart\" height=\"210\"><\/canvas>\n                <div class=\"chart-tooltip\" id=\"bpc-chart-tt\"><\/div>\n            <\/div>\n            <div id=\"bpc-empty-chart\" style=\"text-align:center;padding:40px;color:var(--fog-md)\">\n                <div style=\"font-family:Georgia,serif;font-size:2.2rem;margin-bottom:8px;font-style:italic\">No data yet<\/div>\n                Log workouts to see your progress\n            <\/div>\n        <\/div>\n        <div class=\"card\">\n            <div class=\"card-title\">Workout Log<\/div>\n            <div class=\"history-list\" id=\"bpc-history-list\"><\/div>\n            <div id=\"bpc-empty-hist\" style=\"text-align:center;padding:20px;color:var(--fog-md);font-size:0.85rem\">No workouts logged yet<\/div>\n            <button class=\"btn btn-secondary\" style=\"margin-top:14px;width:100%;padding:11px\" onclick=\"bpcClearHistory(event)\">Clear All History<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STANDARDS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"tab-content\" id=\"bpc-content-standards\">\n        <div class=\"card\">\n            <div class=\"card-title\">Your Profile<\/div>\n            <div class=\"input-grid\">\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Bodyweight<\/div>\n                    <div class=\"input-wrapper\">\n                        <input type=\"number\" class=\"input-field input-field-sm\" id=\"bpc-std-bw\" placeholder=\"80\" oninput=\"bpcUpdateStandards()\">\n                        <span class=\"input-unit\" id=\"bpc-lbl-sbu\">kg<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"input-group\">\n                    <div class=\"input-label\">Gender<\/div>\n                    <div style=\"display:flex;gap:8px;margin-top:4px\">\n                        <button class=\"btn btn-primary btn-sm\" id=\"bpc-gender-m\" onclick=\"bpcSetGender('m')\">Male<\/button>\n                        <button class=\"btn btn-secondary btn-sm\" id=\"bpc-gender-f\" onclick=\"bpcSetGender('f')\">Female<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"card\" id=\"bpc-standards-card\" style=\"display:none\">\n            <div class=\"card-title\">Bench Press Levels<\/div>\n            <div id=\"bpc-current-level-disp\" style=\"margin-bottom:20px\"><\/div>\n            <div class=\"standards-levels\" id=\"bpc-standards-levels\"><\/div>\n            <div style=\"margin-top:16px;padding-top:14px;border-top:1px solid rgba(226,222,206,0.07);font-size:0.72rem;color:var(--fog-md)\">\n                Based on bodyweight multipliers \u2014 general population benchmarks.\n            <\/div>\n        <\/div>\n        <div class=\"card\">\n            <div class=\"card-title\">IPF Weight Classes<\/div>\n            <div id=\"bpc-ipf-classes\"><\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 PROGRAMS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"tab-content\" id=\"bpc-content-programs\">\n        <div class=\"card\">\n            <div class=\"card-title\">Choose Program<\/div>\n            <div class=\"program-select\">\n                <div class=\"program-card selected\" id=\"bpc-prog-531\" onclick=\"bpcSelectProgram('531')\">\n                    <h4>5\/3\/1<\/h4><p>Wendler classic<\/p>\n                <\/div>\n                <div class=\"program-card\" id=\"bpc-prog-lp\" onclick=\"bpcSelectProgram('lp')\">\n                    <h4>Linear<\/h4><p>Beginner gains<\/p>\n                <\/div>\n                <div class=\"program-card\" id=\"bpc-prog-sl\" onclick=\"bpcSelectProgram('sl')\">\n                    <h4>5\u00d75<\/h4><p>StrongLifts<\/p>\n                <\/div>\n            <\/div>\n            <div style=\"font-size:0.78rem;color:var(--fog-md)\">Requires 1RM calculation first.<\/div>\n        <\/div>\n        <div id=\"bpc-program-output\"><\/div>\n    <\/div>\n<\/div>\n\n<!-- Share Modal (inside .bpc for scoped CSS) -->\n<div class=\"modal-overlay\" id=\"bpc-share-modal\" onclick=\"bpcCloseShareModal(event)\">\n    <div class=\"modal\">\n        <div class=\"modal-title\">Share Your Result<\/div>\n        <canvas id=\"bpc-share-canvas\" width=\"800\" height=\"440\"><\/canvas>\n        <div class=\"modal-actions\">\n            <button class=\"btn btn-primary\" onclick=\"bpcDownloadShare(event)\">Download PNG<\/button>\n            <button class=\"btn btn-secondary\" onclick=\"document.getElementById('bpc-share-modal').classList.remove('show')\">Close<\/button>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n\/* ================================================================\n   STATE\n================================================================ *\/\nvar bpcS = {\n    unit:'kg', gender:'m', orm:0, liftW:0, liftR:5,\n    history:[], streak:0, lastLogDate:null, program:'531'\n};\n\n\/* ================================================================\n   INIT\n================================================================ *\/\nfunction bpcInit() {\n    var raw = localStorage.getItem('benchiq3');\n    if (raw) {\n        try {\n            var p = JSON.parse(raw);\n            bpcS.unit=p.unit||'kg'; bpcS.gender=p.gender||'m';\n            bpcS.history=p.history||[]; bpcS.streak=p.streak||0;\n            bpcS.lastLogDate=p.lastLogDate||null;\n        } catch(e){}\n    }\n    bpcCheckStreak();\n    bpcApplyUnit();\n    bpcRenderStreak();\n    bpcRenderHistory();\n    bpcBuildRPE();\n    bpcBuildIPF();\n    document.getElementById('bpc-gender-m').className = bpcS.gender==='m'?'btn btn-primary btn-sm':'btn btn-secondary btn-sm';\n    document.getElementById('bpc-gender-f').className = bpcS.gender==='f'?'btn btn-primary btn-sm':'btn btn-secondary btn-sm';\n    requestAnimationFrame(function(){ bpcMoveIndicator('calc'); });\n    document.querySelectorAll('#bench-press-calc .btn').forEach(bpcAddRipple);\n}\n\nfunction bpcSave() {\n    localStorage.setItem('benchiq3', JSON.stringify({\n        unit:bpcS.unit, gender:bpcS.gender, history:bpcS.history,\n        streak:bpcS.streak, lastLogDate:bpcS.lastLogDate\n    }));\n}\n\nfunction bpcCheckStreak() {\n    if (!bpcS.lastLogDate) return;\n    var diff = Math.floor((Date.now()-new Date(bpcS.lastLogDate+'T00:00:00').getTime())\/86400000);\n    if (diff>1){bpcS.streak=0;bpcSave();}\n}\n\n\/* ================================================================\n   RIPPLE\n================================================================ *\/\nfunction bpcAddRipple(btn) {\n    btn.addEventListener('click', function(e) {\n        var r=document.createElement('span'); r.className='ripple';\n        var rect=btn.getBoundingClientRect();\n        var size=Math.max(rect.width,rect.height);\n        r.style.cssText='width:'+size+'px;height:'+size+'px;left:'+(e.clientX-rect.left-size\/2)+'px;top:'+(e.clientY-rect.top-size\/2)+'px';\n        btn.appendChild(r);\n        setTimeout(function(){r.remove();},600);\n    });\n}\n\n\/* ================================================================\n   UNIT\n================================================================ *\/\nfunction bpcApplyUnit() {\n    var u=bpcS.unit;\n    document.getElementById('bpc-btn-kg').classList.toggle('active',u==='kg');\n    document.getElementById('bpc-btn-lbs').classList.toggle('active',u==='lbs');\n    ['bpc-lbl-wu','bpc-lbl-gu','bpc-lbl-bu','bpc-lbl-pu','bpc-lbl-bbu','bpc-lbl-sbu'].forEach(function(id){\n        var el=document.getElementById(id); if(el) el.textContent=u;\n    });\n    document.getElementById('bpc-result-1rm').dataset.unit = u;\n    var bw=document.getElementById('bpc-bar-weight');\n    if(bw&&!bw._set) bw.value=u==='kg'?20:45;\n}\n\nfunction bpcSetUnit(u){ bpcS.unit=u; bpcSave(); bpcApplyUnit(); bpcCalculate(); bpcCalcPlates(); }\n\n\/* ================================================================\n   TABS\n================================================================ *\/\nfunction bpcSwitchTab(tab) {\n    document.querySelectorAll('#bench-press-calc .tab-btn').forEach(function(b){b.classList.remove('active');});\n    document.querySelectorAll('#bench-press-calc .tab-content').forEach(function(c){c.classList.remove('active');});\n    document.getElementById('bpc-tab-'+tab).classList.add('active');\n    document.getElementById('bpc-content-'+tab).classList.add('active');\n    bpcMoveIndicator(tab);\n    if(tab==='progress'){bpcRenderChart();bpcRenderHistory();}\n    if(tab==='programs')bpcRenderProgram();\n    if(tab==='standards')bpcUpdateStandards();\n}\n\nfunction bpcMoveIndicator(tab) {\n    var btn=document.getElementById('bpc-tab-'+tab);\n    var bar=document.getElementById('bpc-tabs-bar');\n    var ind=document.getElementById('bpc-tab-ind');\n    if(!btn||!bar||!ind) return;\n    var br=btn.getBoundingClientRect();\n    var bar_r=bar.getBoundingClientRect();\n    ind.style.left=(br.left-bar_r.left+bar.scrollLeft)+'px';\n    ind.style.width=br.width+'px';\n}\n\n\/* ================================================================\n   1RM CALC\n================================================================ *\/\nfunction bpcCalc1RM(w,r){\n    if(r===1)return{epley:w,brzycki:w,lander:w,avg:w};\n    var ep=Math.round(w*(1+r\/30));\n    var br=Math.round(w\/(1.0278-0.0278*r));\n    var la=Math.round((100*w)\/(101.3-2.67123*r));\n    return{epley:ep,brzycki:br,lander:la,avg:Math.round((ep+br+la)\/3)};\n}\n\nfunction bpcCalculate(){\n    var w=parseFloat(document.getElementById('bpc-weight-input').value);\n    var r=parseInt(document.getElementById('bpc-reps-input').value);\n    var hide=function(id){document.getElementById(id).style.display='none';};\n    var show=function(id){document.getElementById(id).style.display='block';};\n    if(!w||w<=0||!r||r<1||r>30){\n        ['bpc-result-section','bpc-pct-card','bpc-warmup-card'].forEach(hide);\n        bpcS.orm=0; return;\n    }\n    var res=bpcCalc1RM(w,r);\n    var prev=bpcS.orm;\n    bpcS.orm=res.avg; bpcS.liftW=w; bpcS.liftR=r;\n    ['bpc-result-section','bpc-pct-card','bpc-warmup-card'].forEach(show);\n    var el=document.getElementById('bpc-result-1rm');\n    bpcCountUp(el,prev,res.avg,420);\n    document.getElementById('bpc-f-epley').textContent   = res.epley+' '+bpcS.unit;\n    document.getElementById('bpc-f-brzycki').textContent = res.brzycki+' '+bpcS.unit;\n    document.getElementById('bpc-f-lander').textContent  = res.lander+' '+bpcS.unit;\n    bpcRenderPCT(res.avg);\n    bpcRenderWarmup(w);\n    bpcRenderBadge(res.avg);\n    bpcUpdateGoal();\n    bpcBuildRPE();\n}\n\nfunction bpcCountUp(el,from,to,ms){\n    var t0=performance.now();\n    function step(t){\n        var prog=Math.min((t-t0)\/ms,1);\n        var eased=1-Math.pow(1-prog,3);\n        el.textContent=Math.round(from+(to-from)*eased);\n        if(prog<1)requestAnimationFrame(step);\n    }\n    requestAnimationFrame(step);\n}\n\n\/* ================================================================\n   SLIDER\n================================================================ *\/\nfunction bpcSyncSlider(){\n    var v=document.getElementById('bpc-reps-input').value;\n    document.getElementById('bpc-reps-slider').value=v;\n    document.getElementById('bpc-reps-display').textContent=v;\n}\nfunction bpcSyncRepsInput(){\n    var v=document.getElementById('bpc-reps-slider').value;\n    document.getElementById('bpc-reps-input').value=v;\n    document.getElementById('bpc-reps-display').textContent=v;\n}\n\n\/* ================================================================\n   PCT TABLE\n================================================================ *\/\nvar bpcPCT=[\n    {p:95,r:'1-2',g:'Max Strength',c:'#c2524a'},\n    {p:90,r:'2-3',g:'Max Strength',c:'#c2524a'},\n    {p:85,r:'3-5',g:'Strength',    c:'#d47a3a'},\n    {p:80,r:'4-6',g:'Strength',    c:'#d47a3a'},\n    {p:75,r:'6-8',g:'Strength\/Size',c:'#8a9172'},\n    {p:70,r:'8-10',g:'Hypertrophy',c:'#8a9172'},\n    {p:65,r:'10-12',g:'Hypertrophy',c:'#5a7a6a'},\n    {p:60,r:'12-15',g:'Endurance', c:'#5a7a6a'},\n    {p:50,r:'15-20',g:'Endurance', c:'#4a6a5a'},\n];\nfunction bpcRenderPCT(orm){\n    document.getElementById('bpc-pct-tbody').innerHTML=bpcPCT.map(function(row,i){\n        var wt=Math.round(orm*row.p\/100);\n        return '<tr><td style=\"color:var(--aloe-l);font-weight:800;font-family:Georgia,serif\">'+row.p+'%<\/td>'\n            +'<td><strong style=\"font-family:Georgia,serif\">'+wt+' '+bpcS.unit+'<\/strong>'\n            +'<div class=\"pct-bar\" id=\"bpc-pbar'+i+'\" style=\"background:'+row.c+'\"><\/div><\/td>'\n            +'<td style=\"color:var(--fog-md);font-size:0.8rem\">'+row.g+'<\/td>'\n            +'<td style=\"color:var(--fog-md)\">'+row.r+'<\/td><\/tr>';\n    }).join('');\n    bpcPCT.forEach(function(_,i){\n        setTimeout(function(){\n            var b=document.getElementById('bpc-pbar'+i);\n            if(b) b.style.width=bpcPCT[i].p+'%';\n        }, i*40+50);\n    });\n}\n\n\/* ================================================================\n   WARMUP\n================================================================ *\/\nfunction bpcRenderWarmup(target){\n    var sets=[\n        {p:40,r:10,l:'Empty bar \/ very light'},\n        {p:55,r:6, l:'Light'},\n        {p:70,r:3, l:'Moderate'},\n        {p:82,r:2, l:'Heavy'},\n        {p:90,r:1, l:'Near-max'},\n        {p:100,r:'?',l:'Working set'},\n    ];\n    document.getElementById('bpc-warmup-sets').innerHTML=sets.map(function(s,i){\n        return '<div class=\"warmup-row\">'\n            +'<div class=\"warmup-num\">'+(i+1)+'<\/div>'\n            +'<div class=\"warmup-details\">'\n            +'<div class=\"warmup-weight\">'+Math.round(target*s.p\/100)+' '+bpcS.unit+'<\/div>'\n            +'<div class=\"warmup-desc\">'+s.l+' - '+s.r+' reps<\/div>'\n            +'<\/div>'\n            +'<div class=\"warmup-pct\">'+s.p+'%<\/div>'\n            +'<\/div>';\n    }).join('');\n}\n\n\/* ================================================================\n   STANDARDS\n================================================================ *\/\nvar bpcSTD_M=[\n    {l:'Untrained',  m:0.50,c:'#5a6a72'},\n    {l:'Beginner',   m:0.75,c:'#5a7a6a'},\n    {l:'Novice',     m:1.00,c:'#73795D'},\n    {l:'Intermediate',m:1.25,c:'#8a9172'},\n    {l:'Advanced',   m:1.50,c:'#9a8060'},\n    {l:'Elite',      m:2.00,c:'#c8a84a'},\n];\nvar bpcSTD_F=[\n    {l:'Untrained',  m:0.25,c:'#5a6a72'},\n    {l:'Beginner',   m:0.45,c:'#5a7a6a'},\n    {l:'Novice',     m:0.65,c:'#73795D'},\n    {l:'Intermediate',m:0.80,c:'#8a9172'},\n    {l:'Advanced',   m:1.00,c:'#9a8060'},\n    {l:'Elite',      m:1.30,c:'#c8a84a'},\n];\n\nfunction bpcToKG(v){return bpcS.unit==='lbs'?v\/2.205:v;}\nfunction bpcFromKG(v){return bpcS.unit==='lbs'?v*2.205:v;}\n\nfunction bpcGetLvl(orm,bw){\n    var s=bpcS.gender==='m'?bpcSTD_M:bpcSTD_F;\n    var ratio=bpcToKG(orm)\/bpcToKG(bw);\n    var cur=s[0];\n    for(var i=0;i<s.length;i++)if(ratio>=s[i].m)cur=s[i];\n    return{cur:cur,ratio:ratio,stds:s};\n}\n\nfunction bpcRenderBadge(orm){\n    var bw=parseFloat(document.getElementById('bpc-bw-input').value);\n    var el=document.getElementById('bpc-strength-badge-calc');\n    if(!bw){el.innerHTML='';return;}\n    var lv=bpcGetLvl(orm,bw);\n    el.innerHTML='<div class=\"strength-badge\" style=\"background:'+lv.cur.c+'18;border:1px solid '+lv.cur.c+'44;color:'+lv.cur.c+'\">'\n        +'&#127942; '+lv.cur.l+' - '+lv.ratio.toFixed(2)+'x bodyweight<\/div>';\n}\n\nfunction bpcSetGender(g){\n    bpcS.gender=g;\n    document.getElementById('bpc-gender-m').className=g==='m'?'btn btn-primary btn-sm':'btn btn-secondary btn-sm';\n    document.getElementById('bpc-gender-f').className=g==='f'?'btn btn-primary btn-sm':'btn btn-secondary btn-sm';\n    bpcUpdateStandards(); bpcRenderBadge(bpcS.orm); bpcSave();\n}\n\nfunction bpcSyncBW(){\n    var v=document.getElementById('bpc-bw-input').value;\n    document.getElementById('bpc-std-bw').value=v;\n    bpcUpdateStandards();\n}\n\nfunction bpcUpdateStandards(){\n    var bw=parseFloat(document.getElementById('bpc-std-bw').value);\n    if(!bw){document.getElementById('bpc-standards-card').style.display='none';return;}\n    document.getElementById('bpc-standards-card').style.display='block';\n    var stds=bpcS.gender==='m'?bpcSTD_M:bpcSTD_F;\n    var bwKG=bpcToKG(bw); var ormKG=bpcToKG(bpcS.orm);\n    var maxV=bpcFromKG(bwKG*stds[stds.length-1].m);\n    document.getElementById('bpc-standards-levels').innerHTML=stds.map(function(s,i){\n        var val=Math.round(bpcFromKG(bwKG*s.m));\n        var done=ormKG>=bwKG*s.m;\n        return '<div class=\"level-row\">'\n            +'<div class=\"level-name\" style=\"color:'+(done?s.c:'var(--fog-dim)')+'\">'+s.l+'<\/div>'\n            +'<div class=\"level-track\"><div class=\"level-fill\" id=\"bpc-lf'+i+'\" style=\"background:'+s.c+';opacity:'+(done?1:0.25)+'\"><\/div><\/div>'\n            +'<div class=\"level-val\" style=\"color:'+(done?s.c:'var(--fog-dim)')+'\">'+val+' '+bpcS.unit+'<\/div>'\n            +'<\/div>';\n    }).join('');\n    stds.forEach(function(_,i){\n        var fill=Math.min(100,(Math.round(bpcFromKG(bwKG*stds[i].m))\/maxV)*100);\n        setTimeout(function(){\n            var el=document.getElementById('bpc-lf'+i);\n            if(el)el.style.width=fill+'%';\n        },i*80+100);\n    });\n    var d=document.getElementById('bpc-current-level-disp');\n    if(bpcS.orm>0){\n        var lv=bpcGetLvl(bpcS.orm,bw);\n        d.innerHTML='<div class=\"strength-badge\" style=\"background:'+lv.cur.c+'18;border:1px solid '+lv.cur.c+'44;color:'+lv.cur.c+'\">'\n            +'Your level: <strong style=\"margin-left:6px\">'+lv.cur.l+'<\/strong>'\n            +'<span style=\"margin-left:8px;opacity:0.65\">'+lv.ratio.toFixed(2)+'x BW<\/span><\/div>';\n    } else {\n        d.innerHTML='<div style=\"color:var(--fog-md);font-size:0.83rem\">Calculate your 1RM to see your level<\/div>';\n    }\n}\n\n\/* ================================================================\n   GOAL\n================================================================ *\/\nfunction bpcUpdateGoal(){\n    var goal=parseFloat(document.getElementById('bpc-goal-input').value);\n    if(!goal||bpcS.orm===0){document.getElementById('bpc-goal-display').style.display='none';return;}\n    document.getElementById('bpc-goal-display').style.display='block';\n    var pct=Math.min(100,Math.round((bpcS.orm\/goal)*100));\n    document.getElementById('bpc-goal-pct-text').textContent=pct+'%';\n    var circ=320.4;\n    document.getElementById('bpc-goal-ring').style.strokeDashoffset=circ-(pct\/100)*circ;\n    var steps=[50,60,70,80,90,95,100];\n    document.getElementById('bpc-milestones').innerHTML=steps.map(function(s){\n        var val=Math.round(goal*s\/100);\n        var done=bpcS.orm>=val;\n        var next=!done&&steps.find(function(x){return bpcS.orm<goal*x\/100;})===s;\n        var clr=done?'var(--aloe-l)':next?'var(--fog)':'var(--fog-dim)';\n        var dot=done?'#73795D':next?'var(--fog)':'rgba(226,222,206,0.15)';\n        return '<div class=\"m-row\"><div class=\"m-dot\" style=\"background:'+dot+'\"><\/div>'\n            +'<span style=\"color:'+clr+'\">'+s+'% - '+val+' '+bpcS.unit+'<\/span>'\n            +(done?'<span style=\"color:var(--aloe-l);margin-left:auto;font-size:0.72rem\">&#10003;<\/span>':'')\n            +'<\/div>';\n    }).join('');\n}\n\n\/* ================================================================\n   PLATES\n================================================================ *\/\nvar bpcPLT_KG=[25,20,15,10,5,2.5,1.25];\nvar bpcPLT_LB=[45,35,25,10,5,2.5];\nvar bpcPCFG={\n    25:{h:76,w:20,bg:'#b04040',fg:'#f8f8f8'},\n    45:{h:76,w:20,bg:'#b04040',fg:'#f8f8f8'},\n    20:{h:66,w:17,bg:'#3a5888',fg:'#f8f8f8'},\n    35:{h:62,w:16,bg:'#3a5888',fg:'#f8f8f8'},\n    15:{h:56,w:14,bg:'#b8962a',fg:'#1a1a1a'},\n    10:{h:46,w:12,bg:'#3a7858',fg:'#f8f8f8'},\n    5: {h:38,w:10,bg:'#c8c4b8',fg:'#333'},\n    2.5:{h:30,w:8,bg:'#3d4f5a',fg:'#c8c4b8'},\n    1.25:{h:24,w:6,bg:'#b8962a',fg:'#1a1a1a'},\n};\nfunction bpcCalcPlates(){\n    var tgt=parseFloat(document.getElementById('bpc-plate-weight').value);\n    var bar=parseFloat(document.getElementById('bpc-bar-weight').value)||(bpcS.unit==='kg'?20:45);\n    document.getElementById('bpc-bar-weight')._set=true;\n    var vis=document.getElementById('bpc-bar-visual');\n    var res=document.getElementById('bpc-plate-result');\n    if(!tgt||tgt<=bar){vis.style.display='none';res.innerHTML='';return;}\n    var plates=bpcS.unit==='kg'?bpcPLT_KG:bpcPLT_LB;\n    var rem=(tgt-bar)\/2; var loaded=[];\n    for(var i=0;i<plates.length;i++)while(rem>=plates[i]-0.001){loaded.push(plates[i]);rem=Math.round((rem-plates[i])*1000)\/1000;}\n    var actual=bar+loaded.reduce(function(a,b){return a+b;},0)*2;\n    var diff=Math.round((tgt-actual)*100)\/100;\n    vis.style.display='flex';\n    bpcRenderBar(loaded);\n    var cnts={};\n    loaded.forEach(function(p){cnts[p]=(cnts[p]||0)+1;});\n    var plist=Object.keys(cnts).sort(function(a,b){return b-a;}).map(function(p){\n        var c=bpcPCFG[p]||{bg:'#666',fg:'#fff'};\n        return '<div class=\"plate-chip\"><div class=\"plate-dot\" style=\"background:'+c.bg+'\"><\/div><span><strong>'+cnts[p]+'x<\/strong> '+p+bpcS.unit+'<\/span><\/div>';\n    }).join('');\n    res.innerHTML='<div style=\"margin-bottom:12px\">'\n        +'<span style=\"font-family:Georgia,serif;color:var(--fog);font-weight:800;font-size:1.2rem\">'+actual+' '+bpcS.unit+'<\/span>'\n        +(diff!==0?'<span style=\"color:var(--fog-md);font-size:0.8rem;margin-left:8px\">('+( diff>0?'+':'')+diff+' from target)<\/span>'\n                  :'<span style=\"color:var(--aloe-l);font-size:0.8rem;margin-left:8px\">&#10003; Exact<\/span>')\n        +'<\/div><div class=\"plate-list\">'+plist+'<\/div>'\n        +'<div style=\"margin-top:10px;font-size:0.78rem;color:var(--fog-md)\">'+loaded.length+' plates per side \u00b7 '+(loaded.length*2)+' total<\/div>';\n}\nfunction bpcRenderBar(plates){\n    var mk=function(p){var c=bpcPCFG[p]||{h:40,w:10,bg:'#666',fg:'#fff'};return '<div class=\"plate\" style=\"width:'+c.w+'px;height:'+c.h+'px;background:'+c.bg+';color:'+c.fg+'\">'+p+'<\/div>';};\n    document.getElementById('bpc-bar-container').innerHTML=\n        '<div class=\"bar-collar\"><\/div>'\n        +'<div class=\"plates-side left\">'+plates.map(mk).join('')+'<\/div>'\n        +'<div class=\"bar-shaft\"><\/div>'\n        +'<div class=\"plates-side right\">'+[].concat(plates).reverse().map(mk).join('')+'<\/div>'\n        +'<div class=\"bar-collar\"><\/div>';\n}\n\n\/* ================================================================\n   RPE TABLE\n================================================================ *\/\nvar bpcRPE_D={\n    10: [100,95,93,90,87,85,83,81,79,77],\n    9.5:[97, 93,91,88,85,83,81,79,77,75],\n    9:  [96, 92,89,86,84,81,79,77,75,73],\n    8.5:[94, 90,87,84,81,79,77,75,73,71],\n    8:  [92, 88,85,82,80,77,75,73,71,69],\n    7.5:[91, 86,83,80,77,75,73,71,69,67],\n    7:  [89, 84,81,78,75,73,71,69,67,65],\n};\nfunction bpcBuildRPE(){\n    var rpes=[10,9.5,9,8.5,8,7.5,7];\n    var rArr=[1,2,3,4,5,6,7,8,9,10];\n    var curPct=bpcS.orm>0?Math.round((bpcS.liftW\/bpcS.orm)*100):-1;\n    var note='';\n    var h='<thead><tr><th style=\"color:var(--aloe-l)\">RPE<\/th>'+rArr.map(function(r){return '<th>'+r+'R<\/th>';}).join('')+'<\/tr><\/thead>';\n    var b='<tbody>'+rpes.map(function(rpe){\n        return '<tr><td style=\"font-weight:800;color:var(--aloe-l);font-family:Georgia,serif\">'+rpe+'<\/td>'\n            +bpcRPE_D[rpe].map(function(pct,i){\n                var hi=curPct>0&&rArr[i]===bpcS.liftR&&Math.abs(pct-curPct)<=3;\n                if(hi)note='Your lift approx RPE '+rpe;\n                return '<td class=\"'+(hi?'rpe-hl':'')+'\">'+pct+'%<\/td>';\n            }).join('')+'<\/tr>';\n    }).join('')+'<\/tbody>';\n    document.getElementById('bpc-rpe-table').innerHTML=h+b;\n    var n=document.getElementById('bpc-rpe-note');\n    if(n)n.textContent=note?' - '+note:'';\n}\n\n\/* ================================================================\n   PROGRESS \/ LOG\n================================================================ *\/\nfunction bpcLogWorkout(e){\n    var w=parseFloat(document.getElementById('bpc-weight-input').value);\n    var r=parseInt(document.getElementById('bpc-reps-input').value);\n    if(!w||!r||bpcS.orm===0){alert('Calculate your 1RM first!');return;}\n    var today=new Date().toISOString().split('T')[0];\n    if(bpcS.lastLogDate!==today){\n        var yest=new Date();yest.setDate(yest.getDate()-1);\n        bpcS.streak=bpcS.lastLogDate===yest.toISOString().split('T')[0]?bpcS.streak+1:1;\n        bpcS.lastLogDate=today;\n    }\n    var isPR=bpcS.history.length===0||bpcS.orm>Math.max.apply(null,bpcS.history.map(function(h){return h.orm;}));\n    bpcS.history.unshift({date:today,weight:w,reps:r,orm:bpcS.orm,unit:bpcS.unit});\n    if(bpcS.history.length>100)bpcS.history.length=100;\n    bpcSave(); bpcRenderStreak(); bpcRenderHistory();\n    if(isPR)bpcConfettiBurst(e);\n    var btn=document.getElementById('bpc-log-btn');\n    var orig=btn.textContent;\n    btn.textContent='&#10003; '+(isPR?'New PR!':'Logged!');\n    btn.style.background=isPR?'#c8a84a':'var(--aloe)';\n    setTimeout(function(){btn.textContent=orig;btn.style.background='';},2200);\n}\n\nfunction bpcRenderStreak(){ document.getElementById('bpc-streak-count').textContent=bpcS.streak; }\n\nfunction bpcRenderHistory(){\n    var list=document.getElementById('bpc-history-list');\n    var emp=document.getElementById('bpc-empty-hist');\n    if(!bpcS.history.length){list.innerHTML='';emp.style.display='block';return;}\n    emp.style.display='none';\n    var maxOrm=Math.max.apply(null,bpcS.history.map(function(h){return h.orm;}));\n    list.innerHTML=bpcS.history.slice(0,25).map(function(h,i){\n        var isPR=h.orm===maxOrm&&i===bpcS.history.findIndex(function(x){return x.orm===maxOrm;});\n        var dt=new Date(h.date+'T00:00:00').toLocaleDateString('en-US',{month:'short',day:'numeric',year:'numeric'});\n        return '<div class=\"history-item\" style=\"animation-delay:'+(i*30)+'ms\">'\n            +'<div><div class=\"history-date\">'+dt+'<\/div>'\n            +'<div class=\"history-wt\">'+h.weight+' '+h.unit+' x '+h.reps+' reps<\/div><\/div>'\n            +'<div style=\"text-align:right\"><div class=\"history-orm\">~'+h.orm+' '+h.unit+'<\/div>'\n            +(isPR?'<div class=\"pr-badge\">&#127942; PR<\/div>':'')+'<\/div><\/div>';\n    }).join('');\n}\n\nfunction bpcClearHistory(e){\n    if(!confirm('Clear all history?'))return;\n    bpcS.history=[];bpcS.streak=0;bpcS.lastLogDate=null;bpcSave();\n    bpcRenderStreak();bpcRenderHistory();bpcRenderChart();\n}\n\n\/* ================================================================\n   CONFETTI\n================================================================ *\/\nfunction bpcConfettiBurst(e){\n    var colors=['#73795D','#E2DECE','#3D4F5A','#c8a84a','#b04040','#3a7858'];\n    var cx=e?e.clientX:window.innerWidth\/2;\n    var cy=e?e.clientY:window.innerHeight\/2;\n    for(var i=0;i<36;i++){\n        var p=document.createElement('div');\n        p.className='bpc-confetti';\n        var angle=Math.random()*360;\n        var dist=80+Math.random()*120;\n        var tx=Math.cos(angle*Math.PI\/180)*dist;\n        var ty=Math.sin(angle*Math.PI\/180)*dist-100;\n        p.style.cssText='left:'+cx+'px;top:'+cy+'px;background:'+colors[i%colors.length]+';'\n            +'animation-duration:'+(0.9+Math.random()*0.5)+'s;'\n            +'animation-delay:'+(Math.random()*0.15)+'s;'\n            +'transform:translate('+tx+'px,'+ty+'px)';\n        document.body.appendChild(p);\n        setTimeout(function(){p.remove();},1600);\n    }\n}\n\n\/* ================================================================\n   CHART\n================================================================ *\/\nfunction bpcRenderChart(){\n    var canvas=document.getElementById('bpc-progress-chart');\n    var emp=document.getElementById('bpc-empty-chart');\n    var same=bpcS.history.filter(function(h){return h.unit===bpcS.unit;});\n    if(same.length<2){canvas.style.display='none';emp.style.display='block';return;}\n    canvas.style.display='block';emp.style.display='none';\n    var dpr=window.devicePixelRatio||1;\n    var cw=canvas.parentElement.clientWidth-44;\n    var ch=210;\n    canvas.width=cw*dpr;canvas.height=ch*dpr;\n    canvas.style.width=cw+'px';canvas.style.height=ch+'px';\n    var ctx=canvas.getContext('2d');\n    ctx.scale(dpr,dpr);\n    var data=[].concat(same).reverse().slice(-20);\n    var vals=data.map(function(d){return d.orm;});\n    var minV=Math.min.apply(null,vals)*0.94;\n    var maxV=Math.max.apply(null,vals)*1.06;\n    var pad={t:16,r:16,b:30,l:46};\n    var gw=cw-pad.l-pad.r, gh=ch-pad.t-pad.b;\n    var xs=gw\/(data.length-1||1);\n    var pts=data.map(function(d,i){return {x:pad.l+i*xs,y:pad.t+gh-(d.orm-minV)*gh\/(maxV-minV||1),d:d,v:d.orm};});\n    canvas._pts=pts; canvas._cw=cw; canvas._ch=ch;\n    ctx.strokeStyle='rgba(226,222,206,0.06)';ctx.lineWidth=1;\n    for(var i=0;i<=4;i++){\n        var y=pad.t+(gh\/4)*i;\n        ctx.beginPath();ctx.moveTo(pad.l,y);ctx.lineTo(pad.l+gw,y);ctx.stroke();\n        ctx.fillStyle='rgba(226,222,206,0.3)';ctx.font='10px sans-serif';\n        ctx.textAlign='right';\n        ctx.fillText(Math.round(maxV-(maxV-minV)*i\/4),pad.l-5,y+4);\n    }\n    var fill=ctx.createLinearGradient(0,pad.t,0,pad.t+gh);\n    fill.addColorStop(0,'rgba(115,121,93,0.28)');fill.addColorStop(1,'rgba(115,121,93,0)');\n    ctx.beginPath();ctx.moveTo(pts[0].x,pts[0].y);\n    pts.slice(1).forEach(function(p){ctx.lineTo(p.x,p.y);});\n    ctx.lineTo(pts[pts.length-1].x,pad.t+gh);ctx.lineTo(pts[0].x,pad.t+gh);\n    ctx.closePath();ctx.fillStyle=fill;ctx.fill();\n    ctx.beginPath();ctx.moveTo(pts[0].x,pts[0].y);\n    pts.slice(1).forEach(function(p){ctx.lineTo(p.x,p.y);});\n    ctx.strokeStyle='#73795D';ctx.lineWidth=2.5;ctx.lineJoin='round';ctx.stroke();\n    pts.forEach(function(p){\n        ctx.beginPath();ctx.arc(p.x,p.y,4.5,0,Math.PI*2);\n        ctx.fillStyle='#E2DECE';ctx.fill();\n        ctx.strokeStyle='#2E2C26';ctx.lineWidth=2;ctx.stroke();\n    });\n    ctx.fillStyle='rgba(226,222,206,0.3)';ctx.font='9px sans-serif';ctx.textAlign='center';\n    var step=Math.ceil(data.length\/5);\n    data.forEach(function(d,i){\n        if(i%step===0||i===data.length-1){\n            var dt=new Date(d.date+'T00:00:00');\n            ctx.fillText((dt.getMonth()+1)+'\/'+(dt.getDate()),pts[i].x,ch-7);\n        }\n    });\n}\n\ndocument.getElementById('bpc-progress-chart').addEventListener('mousemove',function(e){\n    var pts=this._pts;\n    if(!pts)return;\n    var rect=this.getBoundingClientRect();\n    var mx=(e.clientX-rect.left)*(this._cw\/(rect.width));\n    var closest=null,minDx=Infinity;\n    pts.forEach(function(p){var dx=Math.abs(p.x-mx);if(dx<minDx){minDx=dx;closest=p;}});\n    var tt=document.getElementById('bpc-chart-tt');\n    if(closest?minDx<30:0){\n        var dt=new Date(closest.d.date+'T00:00:00').toLocaleDateString('en-US',{month:'short',day:'numeric'});\n        tt.textContent=dt+' - '+closest.v+' '+bpcS.unit;\n        tt.style.left=(closest.x\/this._cw*100)+'%';\n        tt.style.top=((closest.y-44)\/210*100)+'%';\n        tt.classList.add('show');\n    } else tt.classList.remove('show');\n});\ndocument.getElementById('bpc-progress-chart').addEventListener('mouseleave',function(){\n    document.getElementById('bpc-chart-tt').classList.remove('show');\n});\n\n\/* ================================================================\n   IPF\n================================================================ *\/\nfunction bpcBuildIPF(){\n    document.getElementById('bpc-ipf-classes').innerHTML=\n        '<div style=\"margin-bottom:12px\">'\n        +'<div style=\"font-size:0.68rem;color:var(--fog-md);font-weight:800;text-transform:uppercase;letter-spacing:0.1em;margin-bottom:8px\">Men<\/div>'\n        +'<div style=\"display:flex;flex-wrap:wrap;gap:6px\">'\n        +[59,66,74,83,93,105,120,'120+'].map(function(c){return '<div style=\"background:rgba(61,79,90,0.5);border:1px solid rgba(61,79,90,0.8);border-radius:8px;padding:5px 14px;font-size:0.8rem;font-weight:700;color:var(--fog-md)\">'+c+'kg<\/div>';}).join('')\n        +'<\/div><\/div>'\n        +'<div>'\n        +'<div style=\"font-size:0.68rem;color:var(--fog-md);font-weight:800;text-transform:uppercase;letter-spacing:0.1em;margin-bottom:8px\">Women<\/div>'\n        +'<div style=\"display:flex;flex-wrap:wrap;gap:6px\">'\n        +[47,52,57,63,69,76,84,'84+'].map(function(c){return '<div style=\"background:rgba(115,121,93,0.2);border:1px solid rgba(115,121,93,0.4);border-radius:8px;padding:5px 14px;font-size:0.8rem;font-weight:700;color:var(--aloe-l)\">'+c+'kg<\/div>';}).join('')\n        +'<\/div><\/div>';\n}\n\n\/* ================================================================\n   PROGRAMS\n================================================================ *\/\nfunction bpcSelectProgram(p){\n    bpcS.program=p;\n    ['531','lp','sl'].forEach(function(id){document.getElementById('bpc-prog-'+id).classList.toggle('selected',id===p);});\n    bpcRenderProgram();\n}\nfunction bpcRenderProgram(){\n    var out=document.getElementById('bpc-program-output');\n    if(!bpcS.orm){\n        out.innerHTML='<div class=\"card\" style=\"text-align:center;color:var(--fog-md);padding:44px\">'\n            +'<div style=\"font-family:Georgia,serif;font-size:2rem;font-style:italic;margin-bottom:8px\">No 1RM yet<\/div>'\n            +'Calculate your 1 rep max first<\/div>';\n        return;\n    }\n    if(bpcS.program==='531')bpcRender531();\n    else if(bpcS.program==='lp')bpcRenderLP();\n    else bpcRenderSL();\n}\n\nfunction bpcPRow(s,i,hilite){\n    var tm=Math.round(bpcS.orm*0.9);\n    var wt=Math.round(tm*s.p\/100);\n    var amrap=s.r.toString().indexOf('+')>=0;\n    return '<div class=\"prog-row\" style=\"'+(hilite||'')+'\">'\n        +'<span>Set '+(i+1)+'<\/span><span>'+s.p+'%<\/span>'\n        +'<span style=\"font-family:Georgia,serif;font-weight:700\">'+wt+' '+bpcS.unit+'<\/span>'\n        +'<span>'+s.r+(amrap?'<span style=\"color:var(--fog-md);font-size:0.72rem\"> AMRAP<\/span>':'')+'<\/span>'\n        +'<\/div>';\n}\n\nfunction bpcRender531(){\n    var tm=Math.round(bpcS.orm*0.9);\n    var wks=[\n        {n:'Week 1 - 5s',    s:[{p:65,r:'5'},{p:75,r:'5'},{p:85,r:'5+'}]},\n        {n:'Week 2 - 3s',    s:[{p:70,r:'3'},{p:80,r:'3'},{p:90,r:'3+'}]},\n        {n:'Week 3 - 5\/3\/1', s:[{p:75,r:'5'},{p:85,r:'3'},{p:95,r:'1+'}]},\n        {n:'Week 4 - Deload', s:[{p:40,r:'5'},{p:50,r:'5'},{p:60,r:'5'}]},\n    ];\n    document.getElementById('bpc-program-output').innerHTML='<div class=\"card\">'\n        +'<div class=\"card-title\">5\/3\/1 - Wendler<\/div>'\n        +'<div style=\"color:var(--fog-md);font-size:0.8rem;margin-bottom:18px\">Training Max: <strong style=\"color:var(--fog);font-family:Georgia,serif\">'+tm+' '+bpcS.unit+'<\/strong> (90% of 1RM)<\/div>'\n        +wks.map(function(w){\n            return '<div style=\"margin-bottom:18px\"><div class=\"week-title\">'+w.n+'<\/div>'\n                +'<div class=\"prog-row hdr\"><span>#<\/span><span>%TM<\/span><span>Weight<\/span><span>Reps<\/span><\/div>'\n                +w.s.map(function(s,i){return bpcPRow(s,i,s.r.toString().indexOf('+')>=0?'color:var(--fog)':'');}).join('')\n                +'<\/div>';\n        }).join('')+'<\/div>';\n}\n\nfunction bpcRenderLP(){\n    var inc=bpcS.unit==='kg'?2.5:5;\n    var w=Math.round(bpcS.orm*0.6);\n    var rows=[];\n    for(var i=0;i<8;i++){rows.push({d:i+1,w:w});w+=inc;}\n    document.getElementById('bpc-program-output').innerHTML='<div class=\"card\">'\n        +'<div class=\"card-title\">Linear Progression - 3x5<\/div>'\n        +'<div style=\"color:var(--fog-md);font-size:0.8rem;margin-bottom:16px\">Start 60% 1RM \u00b7 +'+inc+bpcS.unit+' per session \u00b7 3 sets x 5 reps<\/div>'\n        +'<div class=\"prog-row hdr\"><span>Day<\/span><span colspan=\"2\">Weight<\/span><span>SetsxReps<\/span><\/div>'\n        +rows.map(function(r){return '<div class=\"prog-row\"><span>Day '+r.d+'<\/span>'\n            +'<span style=\"font-family:Georgia,serif;font-weight:700;grid-column:span 2;color:var(--fog)\">'+r.w+' '+bpcS.unit+'<\/span>'\n            +'<span>3x5<\/span><\/div>';}).join('')\n        +'<div style=\"margin-top:14px;font-size:0.78rem;color:var(--fog-md)\">3 consecutive fails - deload 10%<\/div>'\n        +'<\/div>';\n}\n\nfunction bpcRenderSL(){\n    var inc=bpcS.unit==='kg'?2.5:5;\n    var w=Math.round(bpcS.orm*0.5);\n    var rows=[];\n    for(var i=0;i<8;i++){rows.push({d:i+1,w:w});w+=inc;}\n    document.getElementById('bpc-program-output').innerHTML='<div class=\"card\">'\n        +'<div class=\"card-title\">StrongLifts 5x5<\/div>'\n        +'<div style=\"color:var(--fog-md);font-size:0.8rem;margin-bottom:16px\">Start 50% 1RM \u00b7 +'+inc+bpcS.unit+' per session \u00b7 5 sets x 5 reps \u00b7 3x\/week<\/div>'\n        +'<div class=\"prog-row hdr\"><span>Day<\/span><span colspan=\"2\">Weight<\/span><span>SetsxReps<\/span><\/div>'\n        +rows.map(function(r){return '<div class=\"prog-row\"><span>Day '+r.d+'<\/span>'\n            +'<span style=\"font-family:Georgia,serif;font-weight:700;grid-column:span 2;color:var(--fog)\">'+r.w+' '+bpcS.unit+'<\/span>'\n            +'<span>5x5<\/span><\/div>';}).join('')\n        +'<div style=\"margin-top:14px;font-size:0.78rem;color:var(--fog-md)\">Fail 5x5 twice - deload 10% next session<\/div>'\n        +'<\/div>';\n}\n\n\/* ================================================================\n   SHARE CARD\n================================================================ *\/\nfunction bpcOpenShareModal(e){\n    if(!bpcS.orm){alert('Calculate your 1RM first!');return;}\n    bpcDrawShare();\n    document.getElementById('bpc-share-modal').classList.add('show');\n}\nfunction bpcCloseShareModal(e){\n    if(e.target.id==='bpc-share-modal')document.getElementById('bpc-share-modal').classList.remove('show');\n}\nfunction bpcDrawShare(){\n    var c=document.getElementById('bpc-share-canvas');\n    var ctx=c.getContext('2d');\n    var W=800,H=440;\n    ctx.clearRect(0,0,W,H);\n    ctx.fillStyle='#2E2C26';ctx.fillRect(0,0,W,H);\n    var r1=ctx.createRadialGradient(100,100,0,100,100,350);\n    r1.addColorStop(0,'rgba(61,79,90,0.25)');r1.addColorStop(1,'transparent');\n    ctx.fillStyle=r1;ctx.fillRect(0,0,W,H);\n    var r2=ctx.createRadialGradient(650,350,0,650,350,300);\n    r2.addColorStop(0,'rgba(115,121,93,0.18)');r2.addColorStop(1,'transparent');\n    ctx.fillStyle=r2;ctx.fillRect(0,0,W,H);\n    ctx.fillStyle='rgba(61,79,90,0.45)';bpcRR(ctx,36,36,W-72,H-72,20);ctx.fill();\n    ctx.strokeStyle='rgba(226,222,206,0.09)';ctx.lineWidth=1;bpcRR(ctx,36,36,W-72,H-72,20);ctx.stroke();\n    ctx.fillStyle='#E2DECE';ctx.font='italic 700 28px Georgia,serif';ctx.textAlign='left';\n    ctx.fillText('BenchIQ',68,96);\n    ctx.fillStyle='rgba(226,222,206,0.38)';ctx.font='700 12px sans-serif';\n    ctx.fillText('ESTIMATED 1 REP MAX',68,148);\n    ctx.fillStyle='#E2DECE';ctx.font='900 116px Georgia,serif';\n    ctx.fillText(bpcS.orm,68,292);\n    var nw=ctx.measureText(bpcS.orm+' ').width-8;\n    ctx.fillStyle='rgba(226,222,206,0.45)';ctx.font='italic 400 34px Georgia,serif';\n    ctx.fillText(bpcS.unit,68+nw,292);\n    ctx.fillStyle='rgba(226,222,206,0.38)';ctx.font='500 16px sans-serif';\n    ctx.fillText(bpcS.liftW+' '+bpcS.unit+' x '+bpcS.liftR+' reps',68,336);\n    var res=bpcCalc1RM(bpcS.liftW,bpcS.liftR);\n    [{n:'Epley',v:res.epley},{n:'Brzycki',v:res.brzycki},{n:'Lander',v:res.lander}].forEach(function(f,i){\n        var fx=68+i*178;\n        ctx.fillStyle='rgba(226,222,206,0.07)';bpcRR(ctx,fx,358,162,50,10);ctx.fill();\n        ctx.fillStyle='rgba(226,222,206,0.3)';ctx.font='500 11px sans-serif';\n        ctx.textAlign='left';ctx.fillText(f.n,fx+12,379);\n        ctx.fillStyle='#E2DECE';ctx.font='700 16px Georgia,serif';\n        ctx.fillText(f.v+' '+bpcS.unit,fx+12,397);\n    });\n    ctx.fillStyle='rgba(226,222,206,0.15)';ctx.font='500 12px sans-serif';\n    ctx.textAlign='right';ctx.fillText('benchiq.app',W-68,H-48);\n}\nfunction bpcRR(ctx,x,y,w,h,r){\n    ctx.beginPath();\n    ctx.moveTo(x+r,y);ctx.lineTo(x+w-r,y);ctx.arcTo(x+w,y,x+w,y+r,r);\n    ctx.lineTo(x+w,y+h-r);ctx.arcTo(x+w,y+h,x+w-r,y+h,r);\n    ctx.lineTo(x+r,y+h);ctx.arcTo(x,y+h,x,y+h-r,r);\n    ctx.lineTo(x,y+r);ctx.arcTo(x,y,x+r,y,r);ctx.closePath();\n}\nfunction bpcDownloadShare(e){\n    var a=document.createElement('a');\n    a.download='benchiq-result.png';\n    a.href=document.getElementById('bpc-share-canvas').toDataURL('image\/png');\n    a.click();\n}\n\n\/* ================================================================\n   BOOT\n================================================================ *\/\nbpcInit();\n<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bench Press Calculator &#x1f525; 0&nbsp;day streak kg lbs &#x1f3cb;&#xfe0f;1RM &#x2696;&#xfe0f;Plates &#x1f4c8;Progress &#x1f3c6;Standards &#x1f4cb;Programs Your Lift Weight Lifted kg Reps \u2014 5 reps Estimated 1 Rep Max \u2014 Epley\u2014 Brzycki\u2014 Lander\u2014 + Log Workout Share Result Training Zones % Weight Goal Reps Warm-up Sets Goal Tracker Goal 1RM kg Bodyweight kg 0% to goal Plate Calculator &#8230; <a title=\"Bench Press Calculator &#8211; Home\" class=\"read-more\" href=\"https:\/\/benchpresscalculator.fit\/\" aria-label=\"Read more about Bench Press Calculator &#8211; Home\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8"}],"version-history":[{"count":6,"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":18,"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=\/wp\/v2\/pages\/8\/revisions\/18"}],"wp:attachment":[{"href":"https:\/\/benchpresscalculator.fit\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}