{"id":451,"date":"2025-09-08T16:50:39","date_gmt":"2025-09-08T16:50:39","guid":{"rendered":"https:\/\/tomchan.hk\/?page_id=451"},"modified":"2025-09-08T17:20:18","modified_gmt":"2025-09-08T17:20:18","slug":"echo-tools","status":"publish","type":"page","link":"https:\/\/tomchan.hk\/?page_id=451","title":{"rendered":"Cardiac Output Calculator (Echo)"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n<title>Cardiac Output Calculator (Echo)<\/title>\n<style>\n  *, *::before, *::after { box-sizing: border-box; }\n  :root{\n    --teal:#00a8c8;\n    --bg:#ffffff;\n    --muted:#6b7280;\n    --border:#e5e7eb;\n    --ink:#111827;\n    --ink-soft:#374151;\n    --radius:12px;\n    --pad:12px;\n  }\n  body{\n    margin:0;\n    background:#fff;\n    color:var(--ink);\n    font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;\n  }\n\n  .co{\n    max-width: 760px;\n    margin: 24px auto;\n    padding: 0 16px;\n  }\n  .co__title{\n    margin:0 0 14px 0;\n    padding: 12px 14px;\n    background: var(--teal);\n    color: #fff;\n    border-radius: var(--radius);\n    font-size: 1.15rem;\n  }\n\n  \/* Two rows: 2 cols first, 3 cols second *\/\n  .co__rowGrid{\n    display:grid;\n    gap: 12px;\n    margin-bottom: 12px;\n  }\n  .row2col{ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }\n  .row3col{ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }\n\n  .co__field{ display:block; }\n  .co__label{ display:block; font-size:.9rem; color:var(--ink-soft); margin: 2px 0 6px; }\n  .co__inputWrap{\n    display:flex; align-items:center;\n    border:1px solid var(--border);\n    border-radius: 10px;\n    padding: 8px 10px;\n    background: var(--bg);\n    min-width: 0;\n  }\n  .co__inputWrap:focus-within{\n    border-color: var(--teal);\n    box-shadow: 0 0 0 3px color-mix(in oklab, var(--teal) 20%, white);\n  }\n  input[type=\"number\"]{\n    flex:1; border:0; outline:0; min-width:0; background:transparent;\n    font-size: 1rem; color: var(--ink);\n    padding: 4px 0;\n  }\n  input::placeholder{ color:#9ca3af; }\n  .co__unit{ margin-left:8px; white-space:nowrap; color:var(--muted); }\n\n  .co__card{\n    margin-top:16px;\n    border:1px solid var(--border);\n    border-radius: var(--radius);\n    overflow:hidden;\n    background:#f9fafb;\n  }\n  .co__cardHeader{\n    background: var(--teal);\n    color:#fff;\n    padding: 10px 12px;\n    font-weight: 700;\n  }\n  .co__cardBody{ padding: var(--pad); }\n  .co__row{\n    display:grid;\n    grid-template-columns: 1.2fr 1fr;\n    gap: 10px;\n    padding: 10px 0;\n    border-bottom: 1px dashed #e8eaee;\n  }\n  .co__row:last-child{ border-bottom:0; }\n  .co__term{ font-weight:600; }\n  .co__val{ text-align:right; font-variant-numeric: tabular-nums; }\n<\/style>\n<\/head>\n<body>\n\n<div id=\"co-calc\" class=\"co\">\n  <h2 class=\"co__title\">Cardiac Output Calculator (Echo)<\/h2>\n\n  <!-- Row 1: BW + BH -->\n  <div class=\"co__rowGrid row2col\">\n    <label class=\"co__field\">\n      <span class=\"co__label\">Body Weight<\/span>\n      <span class=\"co__inputWrap\">\n        <input type=\"number\" id=\"weight\" inputmode=\"decimal\" step=\"0.1\" min=\"0\" placeholder=\"70\">\n        <span class=\"co__unit\">kg<\/span>\n      <\/span>\n    <\/label>\n\n    <label class=\"co__field\">\n      <span class=\"co__label\">Height<\/span>\n      <span class=\"co__inputWrap\">\n        <input type=\"number\" id=\"height\" inputmode=\"decimal\" step=\"0.1\" min=\"0\" placeholder=\"170\">\n        <span class=\"co__unit\">cm<\/span>\n      <\/span>\n    <\/label>\n  <\/div>\n\n  <!-- Row 2: LVOT Diameter, LVOT VTI, HR -->\n  <div class=\"co__rowGrid row3col\">\n    <label class=\"co__field\">\n      <span class=\"co__label\">LVOT Diameter<\/span>\n      <span class=\"co__inputWrap\">\n        <input type=\"number\" id=\"lvot_d\" inputmode=\"decimal\" step=\"0.01\" min=\"0\" placeholder=\"2.0\">\n        <span class=\"co__unit\">cm<\/span>\n      <\/span>\n    <\/label>\n\n    <label class=\"co__field\">\n      <span class=\"co__label\">LVOT VTI<\/span>\n      <span class=\"co__inputWrap\">\n        <input type=\"number\" id=\"lvot_vti\" inputmode=\"decimal\" step=\"0.1\" min=\"0\" placeholder=\"20\">\n        <span class=\"co__unit\">cm<\/span>\n      <\/span>\n    <\/label>\n\n    <label class=\"co__field\">\n      <span class=\"co__label\">Heart Rate<\/span>\n      <span class=\"co__inputWrap\">\n        <input type=\"number\" id=\"hr\" inputmode=\"numeric\" step=\"1\" min=\"0\" placeholder=\"70\">\n        <span class=\"co__unit\">bpm<\/span>\n      <\/span>\n    <\/label>\n  <\/div>\n\n  <!-- Results -->\n  <section class=\"co__card\" aria-live=\"polite\">\n    <div class=\"co__cardHeader\" id=\"results-heading\">Results<\/div>\n    <div class=\"co__cardBody\">\n      <div class=\"co__row\"><div class=\"co__term\">BSA (Mosteller)<\/div><div class=\"co__val\" id=\"bsa\">\u2014 m\u00b2<\/div><\/div>\n      <div class=\"co__row\"><div class=\"co__term\">Stroke Volume (SV)<\/div><div class=\"co__val\" id=\"sv\">\u2014 mL<\/div><\/div>\n      <div class=\"co__row\"><div class=\"co__term\">Cardiac Output (CO)<\/div><div class=\"co__val\" id=\"co\">\u2014 L\/min<\/div><\/div>\n      <div class=\"co__row\"><div class=\"co__term\">Cardiac Index (CI)<\/div><div class=\"co__val\" id=\"ci\">\u2014 L\/min\/m\u00b2<\/div><\/div>\n    <\/div>\n  <\/section>\n<\/div>\n\n<script>\n(function(){\n  const $ = (id) => document.getElementById(id);\n  const fields = [\"weight\",\"height\",\"lvot_d\",\"lvot_vti\",\"hr\"];\n\n  function fmt(value, digits=2){\n    return Number.isFinite(value) ? value.toFixed(digits) : \"\u2014\";\n  }\n\n  function calc(){\n    const weight = parseFloat($(\"weight\").value);\n    const height = parseFloat($(\"height\").value);\n    const d = parseFloat($(\"lvot_d\").value);\n    const vti = parseFloat($(\"lvot_vti\").value);\n    const hr = parseFloat($(\"hr\").value);\n\n    const bsa = (weight>0 && height>0) ? Math.sqrt((height * weight) \/ 3600) : NaN;\n    const sv = (d>0 && vti>=0) ? Math.PI * Math.pow(d\/2, 2) * vti : NaN;\n    const co = (sv>0 && hr>0) ? (sv * hr) \/ 1000 : NaN;\n    const ci = (co>0 && bsa>0) ? co \/ bsa : NaN;\n\n    $(\"bsa\").textContent = fmt(bsa) + \" m\u00b2\";\n    $(\"sv\").textContent  = fmt(sv)  + \" mL\";\n    $(\"co\").textContent  = fmt(co)  + \" L\/min\";\n    $(\"ci\").textContent  = fmt(ci)  + \" L\/min\/m\u00b2\";\n  }\n\n  fields.forEach(id => $(id).addEventListener(\"input\", calc));\n  calc();\n})();\n<\/script>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Cardiac Output Calculator (Echo) Cardiac Output Calculator (Echo) Body Weight kg Height cm LVOT Diameter cm LVOT VTI cm Heart Rate bpm Results BSA (Mosteller) \u2014 m\u00b2 Stroke Volume (SV) \u2014 mL Cardiac Output (CO) \u2014 L\/min Cardiac Index (CI) \u2014 L\/min\/m\u00b2<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-full.php","meta":{"footnotes":""},"tags":[],"class_list":["post-451","page","type-page","status-publish","article"],"_links":{"self":[{"href":"https:\/\/tomchan.hk\/index.php?rest_route=\/wp\/v2\/pages\/451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tomchan.hk\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tomchan.hk\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tomchan.hk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tomchan.hk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=451"}],"version-history":[{"count":12,"href":"https:\/\/tomchan.hk\/index.php?rest_route=\/wp\/v2\/pages\/451\/revisions"}],"predecessor-version":[{"id":465,"href":"https:\/\/tomchan.hk\/index.php?rest_route=\/wp\/v2\/pages\/451\/revisions\/465"}],"wp:attachment":[{"href":"https:\/\/tomchan.hk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=451"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tomchan.hk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}