{"id":8252,"date":"2026-10-20T09:00:33","date_gmt":"2026-10-20T09:00:33","guid":{"rendered":"https:\/\/snugglesouls.com\/?page_id=8252"},"modified":"2026-10-21T11:55:23","modified_gmt":"2026-10-21T11:55:23","slug":"cat-adoption-cost-calculator","status":"publish","type":"page","link":"https:\/\/snugglesouls.com\/de\/cat-adoption-cost-calculator\/","title":{"rendered":"Cat Adoption Cost Calculator &#038; Budget Planner"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"8252\" class=\"elementor elementor-8252 elementor-bc-flex-widget\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-df1a2fd e-con-full e-flex e-con e-parent\" data-id=\"df1a2fd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-47b7dce elementor-widget elementor-widget-html\" data-id=\"47b7dce\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n#ss-adoption-budget{--ab-ink:#233d37;--ab-green:#335e4b;--ab-mute:#566b62;--ab-line:#d6e1d8;--ab-bg:#f8faf7;--ab-soft:#e7eee4;--ab-gold:#d4ac56;--ab-alert:#914a20;background:var(--ab-bg);color:var(--ab-ink);font:16px\/1.65 Arial,Helvetica,sans-serif;overflow-wrap:anywhere;text-align:left}\n#ss-adoption-budget *{box-sizing:border-box}#ss-adoption-budget [hidden]{display:none!important}#ss-adoption-budget h1,#ss-adoption-budget h2,#ss-adoption-budget h3,#ss-adoption-budget h4,#ss-adoption-budget p,#ss-adoption-budget figure{margin:0}#ss-adoption-budget h1,#ss-adoption-budget h2,#ss-adoption-budget h3,#ss-adoption-budget h4{font-family:Arial,Helvetica,sans-serif;color:var(--ab-ink);font-weight:700;line-height:1.18;letter-spacing:-.025em}#ss-adoption-budget h1{font-size:clamp(40px,4.8vw,67px);margin:18px 0}#ss-adoption-budget h2{font-size:34px}#ss-adoption-budget h3{font-size:23px}#ss-adoption-budget a{color:var(--ab-green);text-underline-offset:4px}#ss-adoption-budget a:hover{text-decoration:underline}#ss-adoption-budget button,#ss-adoption-budget input,#ss-adoption-budget select,#ss-adoption-budget textarea{font:inherit;letter-spacing:normal}#ss-adoption-budget button{cursor:pointer}#ss-adoption-budget button:disabled{opacity:.5;cursor:not-allowed}#ss-adoption-budget input,#ss-adoption-budget select,#ss-adoption-budget textarea{color:var(--ab-ink)}#ss-adoption-budget :is(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:3px solid #a26b22;outline-offset:3px}#ss-adoption-budget .ab-wrap{max-width:1240px;padding-inline:28px;margin-inline:auto}#ss-adoption-budget .ab-kicker{font-size:11px;letter-spacing:.15em;color:var(--ab-green);font-weight:700}#ss-adoption-budget .ab-hero{display:grid;grid-template-columns:1.1fr 1fr;gap:65px;align-items:center;padding-block:52px 34px}#ss-adoption-budget .ab-hero-sub{font:27px\/1.35 Georgia,serif;margin:20px 0 16px}#ss-adoption-budget .ab-intro{font-size:16px;max-width:580px}#ss-adoption-budget .ab-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}#ss-adoption-budget .ab-hero .ab-actions{margin-block:24px 12px}#ss-adoption-budget .ab-primary,#ss-adoption-budget .ab-secondary,#ss-adoption-budget .ab-upload{display:inline-flex;align-items:center;justify-content:center;gap:24px;min-height:46px;border:1px solid var(--ab-green);border-radius:6px;background:var(--ab-green);color:white;font-size:14px;font-weight:700;text-decoration:none;line-height:1.4;padding:12px 18px}#ss-adoption-budget .ab-primary:hover{background:#254735;color:white;text-decoration:none}#ss-adoption-budget .ab-secondary,#ss-adoption-budget .ab-upload{background:white;color:var(--ab-green);border-color:#a1b49f;font-size:12px;padding:10px 14px;gap:8px}#ss-adoption-budget .ab-secondary:hover,#ss-adoption-budget .ab-upload:hover{background:var(--ab-soft)}#ss-adoption-budget .ab-link{display:inline-block;min-height:40px;padding:8px 0;border:0;background:transparent;color:var(--ab-green);font-size:13px;font-weight:700;text-decoration:underline;text-underline-offset:4px}#ss-adoption-budget .ab-fine{font-size:12px;line-height:1.7;color:var(--ab-mute)}#ss-adoption-budget .ab-envelope-scene{position:relative;min-height:400px;isolation:isolate}#ss-adoption-budget .ab-envelope-scene:before{content:'';position:absolute;inset:18px 0 24px 12px;border:1px solid #cfdbd1;border-radius:50%;transform:rotate(-25deg);z-index:-1}#ss-adoption-budget .ab-envelope-scene>p{position:absolute;bottom:0;right:0;font-size:12px;color:var(--ab-mute)}#ss-adoption-budget .ab-envelope{position:absolute;width:225px;height:175px;padding:25px 24px;box-shadow:0 6px 0 #273e3210;border:1px solid #a2b7a3;border-radius:4px;overflow:hidden}#ss-adoption-budget .ab-envelope:after{content:'';position:absolute;inset:auto -10px -85px -10px;height:160px;border:1px solid #26473628;transform:rotate(-24deg)}#ss-adoption-budget .ab-envelope span{font-size:9px;letter-spacing:.1em;display:block;margin-bottom:12px}#ss-adoption-budget .ab-envelope strong{font:25px\/1.15 Georgia,serif;display:block}#ss-adoption-budget .ab-envelope i{position:absolute;right:20px;top:58px;font:40px\/1 Georgia,serif;font-style:normal}#ss-adoption-budget .ab-env-one{left:0;top:5px;background:#dfe9d7;transform:rotate(-8deg)}#ss-adoption-budget .ab-env-two{right:0;top:103px;background:#f0e2b9;transform:rotate(7deg)}#ss-adoption-budget .ab-env-three{left:27px;bottom:34px;background:#335e4b;color:white;transform:rotate(-3deg);border-color:#335e4b}#ss-adoption-budget .ab-env-three:after{border-color:#ffffff35}#ss-adoption-budget .ab-page-nav{display:flex;gap:12px 28px;flex-wrap:wrap;border-block:1px solid var(--ab-line);padding-block:15px;font-size:13px}#ss-adoption-budget .ab-page-nav a{text-decoration:none}#ss-adoption-budget .ab-planner{padding-block:36px;scroll-margin-top:15px}#ss-adoption-budget .ab-section-heading{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:23px}#ss-adoption-budget .ab-section-heading h2{margin-top:7px}#ss-adoption-budget .ab-plan-status{font-size:11px;color:var(--ab-mute);padding:6px 12px;border:1px solid var(--ab-line);border-radius:30px;white-space:nowrap}#ss-adoption-budget label{display:block;font-weight:700;font-size:12px}#ss-adoption-budget input:not([type=checkbox]):not([type=file]),#ss-adoption-budget select,#ss-adoption-budget textarea{display:block;width:100%;min-width:0;min-height:44px;padding:10px 11px;border:1px solid #acbcac;border-radius:5px;background:white;box-shadow:none;margin:5px 0 0;font-size:14px;line-height:1.4}#ss-adoption-budget textarea{resize:vertical}#ss-adoption-budget .ab-plan-settings{display:grid;grid-template-columns:1.4fr 1fr .7fr;gap:18px;border-top:2px solid var(--ab-ink);padding-top:20px}#ss-adoption-budget .ab-settings-note{margin:9px 0 25px}#ss-adoption-budget .ab-workbench{display:grid;grid-template-columns:minmax(0,1fr) 345px;gap:28px;align-items:start}#ss-adoption-budget .ab-editor{min-width:0}#ss-adoption-budget .ab-tabs{display:flex;gap:0;border-bottom:1px solid #9db39e;position:sticky;top:0;background:var(--ab-bg);z-index:2}#ss-adoption-budget .ab-tabs button{flex:1;padding:14px 9px;border:0;border-bottom:3px solid transparent;border-radius:0;background:transparent;color:var(--ab-mute);font-size:13px;font-weight:700;white-space:nowrap;line-height:1.5}#ss-adoption-budget .ab-tabs button span{display:block;font-size:10px;font-weight:400;letter-spacing:.1em;margin-bottom:2px}#ss-adoption-budget .ab-tabs button[aria-selected=true]{border-color:var(--ab-green);color:var(--ab-ink);background:var(--ab-soft)}#ss-adoption-budget .ab-panel-intro{padding-block:23px 18px;border-bottom:1px solid var(--ab-line)}#ss-adoption-budget .ab-panel-intro h3{font-size:23px;margin-bottom:12px}#ss-adoption-budget .ab-panel-intro p{font-size:14px;margin-top:9px}#ss-adoption-budget .ab-panel-intro .ab-fine{font-size:12px}#ss-adoption-budget .ab-row{padding:16px 0;border-bottom:1px solid var(--ab-line);display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:9px 18px;align-items:start}#ss-adoption-budget .ab-row-title{font-size:14px;font-weight:700;line-height:1.5;margin-bottom:6px}#ss-adoption-budget .ab-row-title input{font-size:14px!important;margin:0!important}#ss-adoption-budget .ab-row-hint{font-size:11px;color:var(--ab-mute);line-height:1.6;margin-bottom:6px!important}#ss-adoption-budget .ab-row select{font-size:12px;min-height:40px;padding:8px 9px}#ss-adoption-budget .ab-row-price{display:grid;grid-template-columns:1fr 1fr;gap:9px}#ss-adoption-budget .ab-row-price label{font-size:10px}#ss-adoption-budget .ab-row-price input{font-size:16px!important;font-variant-numeric:tabular-nums}#ss-adoption-budget .ab-row-price select{min-height:44px}#ss-adoption-budget .ab-counted{grid-column:1\/-1;display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;font-size:11px;color:var(--ab-mute);line-height:1.5}#ss-adoption-budget .ab-row[data-excluded=true] .ab-row-price{opacity:.6}#ss-adoption-budget .ab-row-error{color:#934b21;font-size:11px;grid-column:1\/-1}#ss-adoption-budget .ab-row-remove{padding:2px 0;border:0;background:transparent;color:#875021;font-size:11px;text-decoration:underline}#ss-adoption-budget .ab-check{font-size:12px;display:flex;align-items:start;gap:9px;font-weight:600;line-height:1.6}#ss-adoption-budget input[type=checkbox]{accent-color:var(--ab-green);width:16px;height:16px;flex:none;margin:2px 0 0}#ss-adoption-budget .ab-due{grid-column:1\/-1}#ss-adoption-budget .ab-due label{font-size:11px;font-weight:400}#ss-adoption-budget .ab-add{background:transparent;color:var(--ab-green);border:1px dashed #9db29c;border-radius:5px;font-size:13px;font-weight:700;min-height:44px;padding:10px 16px;width:100%;margin-top:20px}#ss-adoption-budget .ab-summary{position:sticky;top:14px;border:1px solid #b8c9b7;border-radius:8px;overflow:hidden;background:white}#ss-adoption-budget .ab-summary-top{padding:24px;background:var(--ab-green);color:white;position:relative}#ss-adoption-budget .ab-summary-top:after{content:'+';position:absolute;right:25px;bottom:15px;font:60px\/1 Georgia,serif;color:#b4c89b}#ss-adoption-budget .ab-summary-top p{font-size:9px;letter-spacing:.15em;margin-bottom:12px}#ss-adoption-budget .ab-summary-top h3{color:white;font:29px\/1.2 Georgia,serif;letter-spacing:0}#ss-adoption-budget .ab-summary-body{padding:20px 23px}#ss-adoption-budget .ab-completeness{font-size:12px;color:var(--ab-alert);line-height:1.6;margin-bottom:16px}#ss-adoption-budget .ab-completeness .ab-link{display:block;font-size:11px;min-height:25px;padding:3px 0}#ss-adoption-budget .ab-total{padding-bottom:17px;border-bottom:1px solid var(--ab-line)}#ss-adoption-budget .ab-total>span,#ss-adoption-budget .ab-cash-block>span{display:block;font-size:12px;font-weight:700}#ss-adoption-budget .ab-total>strong{display:block;font-size:39px;letter-spacing:-.04em;font-weight:500;line-height:1.4;font-variant-numeric:tabular-nums}#ss-adoption-budget .ab-total small,#ss-adoption-budget .ab-mini-totals small{display:block;color:var(--ab-mute);font-size:10px;line-height:1.65}#ss-adoption-budget .ab-mini-totals{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:16px 0;border-bottom:1px solid var(--ab-line)}#ss-adoption-budget .ab-mini-totals span{font-size:10px;display:block}#ss-adoption-budget .ab-mini-totals strong{display:block;font-size:21px;font-weight:500;line-height:1.6;font-variant-numeric:tabular-nums}#ss-adoption-budget .ab-cash-block{padding:17px 0 10px}#ss-adoption-budget .ab-cash-block>strong{display:block;font-size:29px;font-weight:500;margin:4px 0 8px;font-variant-numeric:tabular-nums}#ss-adoption-budget .ab-cash-block .ab-fine{font-size:10px}#ss-adoption-budget .ab-cash-row{margin-top:12px;font-size:10px}#ss-adoption-budget .ab-cash-row>div:first-child{display:flex;justify-content:space-between;gap:10px}#ss-adoption-budget .ab-cash-row .ab-bar{background:#edf1e9;height:5px;border-radius:2px;margin-top:4px;overflow:hidden}#ss-adoption-budget .ab-cash-row .ab-bar i{display:block;height:100%;background:var(--ab-green)}#ss-adoption-budget .ab-cash-row:nth-child(2) .ab-bar i{background:#739978}#ss-adoption-budget .ab-cash-row:nth-child(3) .ab-bar i{background:#9aa96b}#ss-adoption-budget .ab-cash-row:nth-child(4) .ab-bar i{background:#9baf9d}#ss-adoption-budget .ab-cash-row:nth-child(5) .ab-bar i{background:#c4a14c}#ss-adoption-budget .ab-summary-actions{display:grid;gap:4px;margin:20px 0 14px}#ss-adoption-budget .ab-summary-actions .ab-primary{width:100%}#ss-adoption-budget .ab-summary-actions .ab-link{font-size:11px}#ss-adoption-budget .ab-comparison{border-top:1px solid var(--ab-line);margin-top:15px;padding-top:15px;font-size:11px}#ss-adoption-budget .ab-comparison h4{font-size:14px;margin-bottom:6px}#ss-adoption-budget .ab-comparison p{margin-top:7px}#ss-adoption-budget .ab-buffer-block{border-bottom:1px solid var(--ab-line);padding:22px 0}#ss-adoption-budget .ab-buffer-block p{margin-top:12px}#ss-adoption-budget .ab-two-fields{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:15px}#ss-adoption-budget .ab-code{font-size:10px;font-weight:400;color:var(--ab-mute);float:right}#ss-adoption-budget [data-role=deposit-field]{margin-top:15px}#ss-adoption-budget #ab-panel-buffer>label{margin-top:25px}#ss-adoption-budget .ab-notice{border:1px solid #d5b269;background:#fbf2da;color:#65451e;padding:14px 18px;font-size:13px;margin-bottom:17px}#ss-adoption-budget .ab-form-message{font-size:13px;color:var(--ab-alert);min-height:0;margin-top:12px;line-height:1.65}#ss-adoption-budget .ab-review{border-top:2px solid var(--ab-ink);padding-top:14px;margin-top:28px}#ss-adoption-budget summary{font-size:16px;font-weight:700;color:var(--ab-green);cursor:pointer;padding:9px 0}#ss-adoption-budget .ab-table-scroll{overflow:auto;max-width:100%;margin-block:15px}#ss-adoption-budget table{border-collapse:collapse;width:100%;font-size:12px;line-height:1.6;background:transparent;margin:0}#ss-adoption-budget th,#ss-adoption-budget td{border:0;border-bottom:1px solid var(--ab-line);padding:12px 10px;background:transparent;color:var(--ab-ink);vertical-align:top;text-align:left}#ss-adoption-budget th{background:var(--ab-soft);font-size:10px;text-transform:uppercase;letter-spacing:.04em}#ss-adoption-budget td small{display:block;color:var(--ab-mute);font-size:10px}#ss-adoption-budget .ab-plan-files{border-block:1px solid var(--ab-line);padding:24px 0;margin-top:20px}#ss-adoption-budget .ab-plan-files h3{font-size:21px}#ss-adoption-budget .ab-plan-files p{font-size:13px;margin-top:9px}#ss-adoption-budget .ab-plan-files .ab-actions{margin:17px 0}#ss-adoption-budget .ab-plan-files .ab-fine{font-size:11px}#ss-adoption-budget .ab-upload{position:relative;overflow:hidden;cursor:pointer}#ss-adoption-budget .ab-upload input{position:absolute;inset:0;width:100%;opacity:0;cursor:pointer}#ss-adoption-budget .ab-upload:focus-within{outline:3px solid #a26b22;outline-offset:3px}#ss-adoption-budget .ab-editorial{border-top:1px solid var(--ab-line);padding-block:46px}#ss-adoption-budget .ab-editorial h2{margin-bottom:20px}#ss-adoption-budget .ab-editorial h3{font-size:21px;margin:23px 0 10px}#ss-adoption-budget .ab-editorial p{font-size:15px;line-height:1.8;margin-block:12px}#ss-adoption-budget .ab-editorial .ab-kicker{font-size:11px;margin-top:0}#ss-adoption-budget .ab-columns{display:grid;grid-template-columns:1fr 1fr;gap:45px}#ss-adoption-budget .ab-editorial img{display:block;width:100%;height:auto;border-radius:5px}#ss-adoption-budget figcaption{font-size:12px;color:var(--ab-mute);padding-top:10px}#ss-adoption-budget .ab-editorial ul,#ss-adoption-budget .ab-editorial ol{padding-left:22px;font-size:14px;line-height:1.8}#ss-adoption-budget .ab-editorial li{margin-block:8px}#ss-adoption-budget .ab-callout{padding:24px;border-left:3px solid var(--ab-green);background:var(--ab-soft)}#ss-adoption-budget .ab-callout h3:first-child{margin-top:0}#ss-adoption-budget .ab-example-math{padding:18px;background:white;border:1px solid var(--ab-line);font-size:14px;line-height:1.8;font-variant-numeric:tabular-nums}#ss-adoption-budget .ab-link-list{list-style:none;padding:0!important;margin:0}#ss-adoption-budget .ab-link-list li{border-bottom:1px solid var(--ab-line);padding:14px 0;margin:0}#ss-adoption-budget .ab-link-list a{font-weight:700}#ss-adoption-budget .ab-link-list p{font-size:13px;margin:6px 0 0}#ss-adoption-budget .ab-faq details{border-bottom:1px solid var(--ab-line);padding:7px 0}#ss-adoption-budget .ab-faq summary{font-size:15px;color:var(--ab-ink);line-height:1.65}#ss-adoption-budget .ab-faq p{font-size:14px;margin:8px 0 15px;max-width:950px}#ss-adoption-budget .ab-editorial .ab-method-note{font-size:12px;color:var(--ab-mute)}#ss-adoption-budget .ab-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}\n@media(max-width:1100px){#ss-adoption-budget .ab-hero{gap:30px}#ss-adoption-budget .ab-envelope{width:200px;height:160px;padding:22px 18px}#ss-adoption-budget .ab-envelope strong{font-size:23px}#ss-adoption-budget .ab-envelope-scene{min-height:390px}#ss-adoption-budget .ab-workbench{grid-template-columns:minmax(0,1fr) 310px;gap:22px}#ss-adoption-budget .ab-row{grid-template-columns:1fr;gap:9px}#ss-adoption-budget .ab-row-price{grid-template-columns:1fr 1fr}#ss-adoption-budget .ab-row-left{display:grid;grid-template-columns:1fr 1fr;gap:3px 12px;align-items:center}#ss-adoption-budget .ab-row-left .ab-row-hint{grid-column:1\/-1}#ss-adoption-budget .ab-row-left>label{grid-column:2;grid-row:1\/3}#ss-adoption-budget .ab-row-left .ab-row-title{margin:0}#ss-adoption-budget .ab-summary-body{padding:18px}#ss-adoption-budget .ab-total>strong{font-size:35px}}\n@media(max-width:850px){#ss-adoption-budget .ab-hero{grid-template-columns:1.1fr 1fr;gap:22px;padding-top:34px}#ss-adoption-budget h1{font-size:46px}#ss-adoption-budget .ab-envelope{width:160px;height:150px;padding:20px 15px}#ss-adoption-budget .ab-envelope span{font-size:8px}#ss-adoption-budget .ab-envelope strong{font-size:22px}#ss-adoption-budget .ab-envelope i{font-size:29px;right:12px}#ss-adoption-budget .ab-envelope-scene{min-height:390px}#ss-adoption-budget .ab-envelope-scene>p{max-width:150px;bottom:15px}#ss-adoption-budget .ab-env-two{top:110px}#ss-adoption-budget .ab-env-three{left:0;bottom:30px}#ss-adoption-budget .ab-workbench{grid-template-columns:1fr;gap:26px}#ss-adoption-budget .ab-summary{position:static;display:grid;grid-template-columns:190px minmax(0,1fr)}#ss-adoption-budget .ab-summary-top{padding:22px 18px}#ss-adoption-budget .ab-summary-top:after{bottom:28px}#ss-adoption-budget .ab-summary-top h3{font-size:26px}#ss-adoption-budget .ab-summary-body{padding:22px}#ss-adoption-budget .ab-tabs{top:0}#ss-adoption-budget .ab-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px 22px}#ss-adoption-budget .ab-row-left{display:block}#ss-adoption-budget .ab-row-left>label{margin-top:7px}#ss-adoption-budget .ab-plan-settings{gap:14px}#ss-adoption-budget .ab-columns{gap:27px}}\n@media(max-width:600px){#ss-adoption-budget .ab-wrap{padding-inline:18px}#ss-adoption-budget .ab-hero{grid-template-columns:1fr;padding-block:30px 26px;gap:24px}#ss-adoption-budget h1{font-size:44px;margin-block:14px}#ss-adoption-budget .ab-hero-sub{font-size:25px;margin-top:18px}#ss-adoption-budget .ab-hero .ab-actions{gap:10px 15px;margin-top:20px}#ss-adoption-budget .ab-envelope-scene{min-height:175px;margin-top:0}#ss-adoption-budget .ab-envelope-scene:before{inset:5px 6px 4px;border-radius:40%}#ss-adoption-budget .ab-envelope{width:43%;height:122px;padding:17px 12px}#ss-adoption-budget .ab-envelope span{font-size:7px;margin-bottom:8px}#ss-adoption-budget .ab-envelope strong{font-size:20px}#ss-adoption-budget .ab-envelope i{display:none}#ss-adoption-budget .ab-env-one{left:0;top:5px}#ss-adoption-budget .ab-env-two{right:0;top:11px}#ss-adoption-budget .ab-env-three{left:28%;bottom:0;transform:rotate(1deg);height:110px;width:45%}#ss-adoption-budget .ab-envelope-scene>p{display:none}#ss-adoption-budget .ab-page-nav{gap:9px 25px;font-size:12px;padding-block:13px}#ss-adoption-budget .ab-planner{padding-top:27px}#ss-adoption-budget h2{font-size:29px}#ss-adoption-budget .ab-section-heading{align-items:start;gap:10px}#ss-adoption-budget .ab-section-heading h2{font-size:27px}#ss-adoption-budget .ab-plan-status{font-size:9px;padding:5px 8px;max-width:110px;white-space:normal;text-align:center}#ss-adoption-budget .ab-plan-settings{grid-template-columns:1fr 1fr;gap:13px}#ss-adoption-budget .ab-plan-settings label:first-child{grid-column:1\/-1}#ss-adoption-budget .ab-plan-settings label{font-size:11px}#ss-adoption-budget .ab-plan-settings select{font-size:12px}#ss-adoption-budget .ab-tabs button{font-size:11px;padding:12px 4px}#ss-adoption-budget .ab-tabs button span{font-size:9px}#ss-adoption-budget .ab-panel-intro h3{font-size:22px}#ss-adoption-budget .ab-panel-intro p{font-size:13px}#ss-adoption-budget .ab-row{grid-template-columns:1fr;gap:11px;padding-block:16px}#ss-adoption-budget .ab-row-left{display:grid;grid-template-columns:1.1fr 1fr;gap:4px 10px;align-items:start}#ss-adoption-budget .ab-row-left>label{grid-column:2;grid-row:1\/3;margin:0}#ss-adoption-budget .ab-row-title{font-size:14px}#ss-adoption-budget .ab-row-left .ab-row-hint{grid-column:1}#ss-adoption-budget .ab-row-left>label select{font-size:11px;padding:8px 6px}#ss-adoption-budget .ab-row-price{gap:12px}#ss-adoption-budget .ab-summary{display:block;scroll-margin-top:15px}#ss-adoption-budget .ab-summary-top{padding:20px 23px}#ss-adoption-budget .ab-summary-top h3{font-size:28px}#ss-adoption-budget .ab-summary-top h3 br{display:none}#ss-adoption-budget .ab-summary-top:after{font-size:45px;bottom:12px;right:12px;opacity:.35}#ss-adoption-budget .ab-summary-body{padding:22px}#ss-adoption-budget .ab-summary .ab-total>strong{font-size:40px}#ss-adoption-budget .ab-two-fields{grid-template-columns:1fr;gap:15px}#ss-adoption-budget .ab-table-scroll table{min-width:620px}#ss-adoption-budget .ab-plan-files .ab-actions{gap:9px}#ss-adoption-budget .ab-plan-files .ab-secondary,#ss-adoption-budget .ab-plan-files .ab-upload{font-size:11px;padding:9px 11px}#ss-adoption-budget .ab-columns{grid-template-columns:1fr;gap:26px}#ss-adoption-budget .ab-editorial{padding-block:32px}#ss-adoption-budget .ab-editorial h2{font-size:29px}#ss-adoption-budget .ab-editorial p{font-size:14px}#ss-adoption-budget .ab-callout{padding:21px}}\n@media(min-width:768px) and (max-width:1024px){body:has(#ss-adoption-budget) .elementor-element-dcfe3ff .elementor-button{padding-inline:8px;max-width:100%;box-sizing:border-box}}\n#ss-adoption-budget .ab-mobile-dock,#ss-adoption-budget .ab-back-inputs{display:none}\n#ss-adoption-budget .ab-hero{overflow:clip}\n@media(min-width:851px){#ss-adoption-budget .ab-summary{max-height:calc(100dvh - 28px);overflow:auto;scrollbar-width:thin}}\n@media(max-width:850px){#ss-adoption-budget .ab-mobile-dock{position:fixed;bottom:10px;left:12px;right:12px;z-index:8;display:flex;align-items:center;justify-content:space-between;gap:10px;background:#233d37;color:white;padding:10px 15px;border:1px solid #9bad96;border-radius:7px;box-shadow:0 4px 14px #233d3720}#ss-adoption-budget .ab-mobile-dock small{display:block;font-size:8px;letter-spacing:.12em;color:#dce6d4}#ss-adoption-budget .ab-mobile-dock strong{font-size:14px;font-weight:500;display:block}#ss-adoption-budget .ab-mobile-dock button{background:#e5eedc;color:#233d37;border:0;border-radius:4px;font-size:12px;font-weight:700;min-height:40px;padding:8px 14px}#ss-adoption-budget .ab-back-inputs{display:block}#ss-adoption-budget .ab-plan-files{padding-bottom:65px}}\n\n\n\/* Tool photo banner: owner-approved shared header treatment. *\/\n#ss-adoption-budget header.ss-tool-banner{position:relative;isolation:isolate;display:flex;align-items:center;width:100%;min-height:410px;padding:44px 46px;margin:0 0 26px;border:0;border-radius:10px;overflow:hidden;background:#123f34;color:#fff;text-align:left;box-sizing:border-box}\n#ss-adoption-budget .ss-tool-banner-media{position:absolute;inset:0 0 0 auto;width:76%;z-index:0;pointer-events:none;mask-image:linear-gradient(90deg,transparent,#000 18%)}\n#ss-adoption-budget .ss-tool-banner .ss-tool-banner-media img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;object-position:var(--banner-position,center);border:0;border-radius:0;margin:0;filter:none}\n#ss-adoption-budget header.ss-tool-banner:after{content:'';position:absolute;inset:0;z-index:0;background:linear-gradient(90deg,#123f34 0%,rgba(18,63,52,.98) 23%,rgba(18,63,52,.91) 39%,rgba(18,63,52,.64) 54%,rgba(18,63,52,.16) 76%,rgba(18,63,52,.06) 100%);pointer-events:none}\n#ss-adoption-budget .ss-tool-banner-copy{position:relative;z-index:1;min-width:0;width:100%;max-width:650px}\n#ss-adoption-budget .ss-tool-banner h1{font-family:inherit;color:#fff;font-size:clamp(34px,4.2vw,49px);font-weight:700;line-height:1.15;letter-spacing:-.03em;margin:0;text-wrap:balance;max-width:650px}\n#ss-adoption-budget .ss-tool-banner-copy>p{font-family:inherit;color:#fff;font-size:18px;line-height:1.7;max-width:570px;margin:20px 0 0;text-wrap:pretty}\n#ss-adoption-budget .ss-tool-banner-actions{display:flex;align-items:center;flex-wrap:wrap;gap:12px 16px;margin-top:25px}\n#ss-adoption-budget .ss-tool-banner .ss-tool-banner-actions>:is(a,button){display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:46px;padding:11px 17px;margin:0;border:1px solid #fff;border-radius:6px;background:transparent;color:#fff;font-family:inherit;font-size:14px;font-weight:600;line-height:1.5;text-align:center;text-decoration:none;box-shadow:none;cursor:pointer}\n#ss-adoption-budget .ss-tool-banner .ss-tool-banner-actions>:first-child{background:#fff;color:#123f34}\n#ss-adoption-budget .ss-tool-banner .ss-tool-banner-actions>:is(a,button):hover{background:#edf5f0;color:#123f34;text-decoration:none}\n#ss-adoption-budget .ss-tool-banner :is(a,button):focus-visible{outline:3px solid #fff;outline-offset:4px}\n#ss-adoption-budget header.ss-tool-banner[data-align=right]{justify-content:flex-end}\n#ss-adoption-budget .ss-tool-banner[data-align=right] .ss-tool-banner-media{inset:0 auto 0 0;mask-image:linear-gradient(270deg,transparent,#000 18%)}\n#ss-adoption-budget header.ss-tool-banner[data-align=right]:after{background:linear-gradient(270deg,#123f34 0%,rgba(18,63,52,.98) 23%,rgba(18,63,52,.91) 39%,rgba(18,63,52,.64) 54%,rgba(18,63,52,.16) 76%,rgba(18,63,52,.06) 100%)}\n@media(max-width:1024px){#ss-adoption-budget header.ss-tool-banner{padding:36px;min-height:390px}#ss-adoption-budget .ss-tool-banner-copy{max-width:610px}#ss-adoption-budget .ss-tool-banner h1{font-size:42px}#ss-adoption-budget .ss-tool-banner-copy>p{max-width:520px}#ss-adoption-budget header.ss-tool-banner:after{background:linear-gradient(90deg,rgba(18,63,52,.98),rgba(18,63,52,.90) 44%,rgba(18,63,52,.32))}#ss-adoption-budget header.ss-tool-banner[data-align=right]:after{background:linear-gradient(270deg,rgba(18,63,52,.98),rgba(18,63,52,.90) 44%,rgba(18,63,52,.32))}}\n@media(max-width:767px){#ss-adoption-budget header.ss-tool-banner{padding:30px 26px;min-height:370px}#ss-adoption-budget .ss-tool-banner .ss-tool-banner-media{width:100%;mask-image:none}#ss-adoption-budget .ss-tool-banner h1{font-size:36px}#ss-adoption-budget .ss-tool-banner-copy>p{font-size:17px}#ss-adoption-budget header.ss-tool-banner:after,#ss-adoption-budget header.ss-tool-banner[data-align=right]:after{background:linear-gradient(90deg,rgba(10,38,29,.88),rgba(10,38,29,.75))}#ss-adoption-budget .ss-tool-banner .ss-tool-banner-media img{object-position:var(--banner-mobile-position,center)}}\n@media(max-width:540px){#ss-adoption-budget header.ss-tool-banner{min-height:360px;padding:28px 22px;border-radius:8px}#ss-adoption-budget .ss-tool-banner h1{font-size:34px;line-height:1.17}#ss-adoption-budget .ss-tool-banner-copy>p{font-size:16px;line-height:1.7;margin-top:18px}#ss-adoption-budget .ss-tool-banner-actions{gap:10px;margin-top:22px}#ss-adoption-budget .ss-tool-banner .ss-tool-banner-actions>:is(a,button){font-size:13px;padding:10px 13px;min-height:45px}}\n\n#ss-adoption-budget header.ss-tool-banner{width:auto;max-width:1144px;margin:36px auto 28px}\n@media(max-width:1200px){#ss-adoption-budget header.ss-tool-banner{margin-inline:28px}}\n@media(max-width:767px){#ss-adoption-budget header.ss-tool-banner{margin:26px 20px}}\n@media(max-width:540px){#ss-adoption-budget header.ss-tool-banner{margin:24px 18px}}\n\n<\/style>\n<main id=\"ss-adoption-budget\">\n<header class=\"ss-tool-banner\" data-banner=\"photo-overlay-v1\" data-tool=\"adoption\" data-align=\"left\" style=\"--banner-position:54% 58%;--banner-mobile-position:54% 58%\"><div class=\"ss-tool-banner-media\" aria-hidden=\"true\"><img fetchpriority=\"high\" src=\"https:\/\/snugglesouls.com\/wp-content\/uploads\/2026\/07\/new-cat-safe-room-setup.webp\" srcset=\"https:\/\/snugglesouls.com\/wp-content\/uploads\/2026\/07\/new-cat-safe-room-setup-768x512.webp 768w, https:\/\/snugglesouls.com\/wp-content\/uploads\/2026\/07\/new-cat-safe-room-setup.webp 1536w\" sizes=\"(max-width:767px) 95vw,900px\" width=\"1536\" height=\"1024\" alt=\"\" role=\"presentation\" data-no-lazy=\"1\" loading=\"eager\" fetchpriority=\"high\" decoding=\"async\"><\/div><div class=\"ss-tool-banner-copy\"><h1>Cat Adoption Cost Calculator<\/h1><p>Build your own cat adoption budget: what you still need to buy, what care costs each month, and the cash you want to keep in reserve.<\/p><div class=\"ss-tool-banner-actions\"><a class=\"ab-primary\" href=\"#ab-planner\">Build my budget <span aria-hidden=\"true\">\u2197<\/span><\/a><button type=\"button\" class=\"ab-link\" data-action=\"example\">See a worked example<\/button><\/div><\/div><\/header>\n<nav class=\"ab-page-nav ab-wrap\" aria-label=\"On this page\"><a href=\"#ab-planner\">Budget planner<\/a><a href=\"#ab-cost-guide\">What to budget for<\/a><a href=\"#ab-first-year\">First-year costs<\/a><a href=\"#ab-faq\">Common questions<\/a><\/nav>\n<section class=\"ab-wrap ab-planner\" id=\"ab-planner\" aria-labelledby=\"ab-planner-title\"><div class=\"ab-section-heading\"><div><p class=\"ab-kicker\">PRICE THE PLAN, PIECE BY PIECE<\/p><h2 id=\"ab-planner-title\">Your adoption budget<\/h2><\/div><span class=\"ab-plan-status\" data-role=\"save-status\">Not saved yet<\/span><\/div>\n<noscript><p class=\"ab-notice\">Enable JavaScript to calculate your plan. The cost checklist and source links below remain readable.<\/p><\/noscript>\n<p class=\"ab-notice\" data-role=\"storage-message\" role=\"status\" hidden><\/p><p class=\"ab-notice\" data-role=\"example-message\" hidden><strong>FICTIONAL EXAMPLE<\/strong> \u2014 These amounts demonstrate the arithmetic. They are not local price estimates or a recommended reserve.<\/p>\n<form data-role=\"plan-form\" novalidate><div class=\"ab-plan-settings\"><label for=\"ab-name\">Plan name<input id=\"ab-name\" data-field=\"name\" type=\"text\" maxlength=\"80\" placeholder=\"e.g. Luna\u2019s homecoming\"><\/label><label for=\"ab-currency\">Currency<select id=\"ab-currency\" data-field=\"currency\"><option value=\"USD\">USD \u2014 US dollar<\/option><option value=\"GBP\">GBP \u2014 British pound<\/option><option value=\"EUR\">EUR \u2014 Euro<\/option><option value=\"CAD\">CAD \u2014 Canadian dollar<\/option><option value=\"AUD\">AUD \u2014 Australian dollar<\/option><option value=\"NZD\">NZD \u2014 NZ dollar<\/option><\/select><\/label><label for=\"ab-cats\">Cats in this plan<select id=\"ab-cats\" data-field=\"cats\"><option value=\"1\">1 cat<\/option><option value=\"2\">2 cats<\/option><option value=\"3\">3 cats<\/option><option value=\"4\">4 cats<\/option><\/select><\/label><\/div><p class=\"ab-fine ab-settings-note\" data-role=\"currency-message\" role=\"status\">Currency labels amounts; this tool does not use exchange rates. \u201cPer cat\u201d rows multiply by the selected number of cats.<\/p>\n<div class=\"ab-workbench\"><div class=\"ab-editor\"><div class=\"ab-tabs\" role=\"tablist\" aria-label=\"Budget categories\"><button type=\"button\" role=\"tab\" id=\"ab-tab-setup\" aria-controls=\"ab-panel-setup\" aria-selected=\"true\" tabindex=\"0\" data-tab=\"setup\"><span>01<\/span> Set-up<\/button><button type=\"button\" role=\"tab\" id=\"ab-tab-monthly\" aria-controls=\"ab-panel-monthly\" aria-selected=\"false\" tabindex=\"-1\" data-tab=\"monthly\"><span>02<\/span> Monthly<\/button><button type=\"button\" role=\"tab\" id=\"ab-tab-annual\" aria-controls=\"ab-panel-annual\" aria-selected=\"false\" tabindex=\"-1\" data-tab=\"annual\"><span>03<\/span> Annual<\/button><button type=\"button\" role=\"tab\" id=\"ab-tab-buffer\" aria-controls=\"ab-panel-buffer\" aria-selected=\"false\" tabindex=\"-1\" data-tab=\"buffer\"><span>04<\/span> Cash buffer<\/button><\/div>\n<section role=\"tabpanel\" id=\"ab-panel-setup\" aria-labelledby=\"ab-tab-setup\" data-panel=\"setup\"><div class=\"ab-panel-intro\"><h3>What is still left to buy or pay?<\/h3><p>Enter prices for what you still need. Mark anything included in the adoption fee, already owned or paid, or not applicable. Those rows are excluded from remaining spending.<\/p><p class=\"ab-fine\">Leave an unknown price blank. Enter 0 only when you know there is no charge. Food and litter refills belong in Monthly, so the same purchase is not counted twice.<\/p><\/div><div data-rows=\"setup\"><\/div><button type=\"button\" class=\"ab-add\" data-action=\"add\" data-group=\"setup\">+ Add a set-up item<\/button><\/section>\n<section role=\"tabpanel\" id=\"ab-panel-monthly\" aria-labelledby=\"ab-tab-monthly\" data-panel=\"monthly\" hidden><div class=\"ab-panel-intro\"><h3>What will you spend each month?<\/h3><p>Use the monthly amount you expect to pay. Keep annual bills in the next section. Include a cost in only one place if a care plan bundles several services.<\/p><p class=\"ab-fine\">Need a food estimate? The <a href=\"\/wet-dry-cat-food-calculator\/\" target=\"_blank\" rel=\"noopener\">wet &amp; dry food calculator \u2197<\/a> works from your actual pack prices and portions.<\/p><\/div><div data-rows=\"monthly\"><\/div><button type=\"button\" class=\"ab-add\" data-action=\"add\" data-group=\"monthly\">+ Add a monthly item<\/button><\/section>\n<section role=\"tabpanel\" id=\"ab-panel-annual\" aria-labelledby=\"ab-tab-annual\" data-panel=\"annual\" hidden><div class=\"ab-panel-intro\"><h3>Which costs happen less often?<\/h3><p>Enter the total you expect over the next 12 months. The monthly planning figure spreads this total over 12 months; it does not change when the bill is due.<\/p><p class=\"ab-fine\">Check \u201cFull amount due at the start\u201d only if you want that entire annual amount included in your starting cash plan. It is still counted just once in first-year spending.<\/p><\/div><div data-rows=\"annual\"><\/div><button type=\"button\" class=\"ab-add\" data-action=\"add\" data-group=\"annual\">+ Add an annual item<\/button><\/section>\n<section role=\"tabpanel\" id=\"ab-panel-buffer\" aria-labelledby=\"ab-tab-buffer\" data-panel=\"buffer\" hidden><div class=\"ab-panel-intro\"><h3>Keep a buffer separate from spending<\/h3><p>Choose your own cash reserve after checking local veterinary costs and any insurance terms. Money held in reserve is not treated as a bill you have already spent.<\/p><\/div><div class=\"ab-buffer-block\"><label class=\"ab-check\"><input type=\"checkbox\" data-field=\"reserveEnabled\" id=\"ab-reserve-enabled\" checked>Include a cash reserve in this plan<\/label><div class=\"ab-two-fields\" data-role=\"reserve-fields\"><label for=\"ab-target\">Total reserve target <span class=\"ab-code\">USD<\/span><input id=\"ab-target\" type=\"number\" min=\"0\" max=\"1000000\" step=\"0.01\" inputmode=\"decimal\" data-field=\"reserveTarget\" placeholder=\"Your chosen target\"><\/label><label for=\"ab-current\">Already set aside for this reserve <span class=\"ab-code\">USD<\/span><input id=\"ab-current\" type=\"number\" min=\"0\" max=\"1000000\" step=\"0.01\" inputmode=\"decimal\" data-field=\"reserveSaved\" placeholder=\"Enter 0 if none\"><\/label><\/div><p class=\"ab-fine\">These amounts cover the whole household, not each cat. Only the shortfall is added to starting cash. Do not enter the same money as both a paid expense and savings.<\/p><\/div><div class=\"ab-buffer-block\"><label class=\"ab-check\"><input type=\"checkbox\" data-field=\"depositEnabled\" id=\"ab-deposit-enabled\">I need a refundable pet \/ housing deposit<\/label><div data-role=\"deposit-field\" hidden><label for=\"ab-deposit\">Refundable deposit for this household <span class=\"ab-code\">USD<\/span><input id=\"ab-deposit\" type=\"number\" min=\"0\" max=\"1000000\" step=\"0.01\" inputmode=\"decimal\" data-field=\"deposit\" placeholder=\"Amount to tie up\"><\/label><\/div><p class=\"ab-fine\">A refundable deposit ties up cash but is excluded from spending here. Put a nonrefundable fee in Set-up, and ongoing pet rent in Monthly. Confirm terms with the housing provider.<\/p><\/div><label for=\"ab-notes\">Quote sources, included services &amp; questions<textarea id=\"ab-notes\" data-field=\"notes\" rows=\"5\" maxlength=\"2000\" placeholder=\"Shelter fee and included care; local vet quotes; insurance excess\/deductible; items still to confirm\u2026\"><\/textarea><\/label><\/section>\n<p class=\"ab-form-message\" data-role=\"form-message\" role=\"status\"><\/p><\/div>\n<aside class=\"ab-summary\" aria-labelledby=\"ab-summary-title\"><div class=\"ab-summary-top\"><p>THE PLAN AT A GLANCE<\/p><h3 id=\"ab-summary-title\">Room in the budget.<br> Room for a cat.<\/h3><\/div><div class=\"ab-summary-body\"><div class=\"ab-completeness\" data-role=\"completeness\" role=\"status\" aria-live=\"polite\"><\/div><div class=\"ab-total\"><span>Remaining first-year spending<\/span><strong data-out=\"year\">\u2014<\/strong><small>Set-up still to pay + 12 months of monthly costs + annual costs.<\/small><\/div><div class=\"ab-mini-totals\"><div><span>Set-up still to pay<\/span><strong data-out=\"setup\">\u2014<\/strong><\/div><div><span>Monthly planning average<\/span><strong data-out=\"monthly\">\u2014<\/strong><small>Monthly costs + annual costs \u00f7 12<\/small><\/div><\/div><div class=\"ab-cash-block\"><span>Starting cash plan<\/span><strong data-out=\"cash\">\u2014<\/strong><p class=\"ab-fine\">Set-up + one month of monthly costs + annual amounts due at the start + refundable deposit + reserve shortfall.<\/p><div data-role=\"cash-bars\"><\/div><\/div><p class=\"ab-fine\" data-role=\"reserve-summary\"><\/p><div class=\"ab-comparison\" data-role=\"comparison\" hidden><\/div><div class=\"ab-summary-actions\"><button type=\"button\" class=\"ab-primary\" data-action=\"print\" disabled data-enable>Print \/ Save as PDF<\/button><button type=\"button\" class=\"ab-link\" data-action=\"pin\" disabled data-enable>Pin this plan to compare<\/button><button type=\"button\" class=\"ab-link ab-back-inputs\" data-action=\"inputs\">Back to budget entries \u2191<\/button><\/div><p class=\"ab-fine\">These are your entered estimates, not a price quote or an adoption approval.<\/p><\/div><\/aside><\/div>\n<\/form>\n<details class=\"ab-review\"><summary>See the full cost breakdown &amp; excluded items<\/summary><div class=\"ab-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"All budget items\"><table><caption class=\"ab-sr\">All entered cost items with their status, scope and counted totals<\/caption><thead><tr><th scope=\"col\">Item<\/th><th scope=\"col\">Timing<\/th><th scope=\"col\">Entered price<\/th><th scope=\"col\">Scope<\/th><th scope=\"col\">Counted amount<\/th><\/tr><\/thead><tbody data-role=\"breakdown\"><\/tbody><\/table><\/div><\/details>\n<section class=\"ab-plan-files\" aria-labelledby=\"ab-files-title\"><div><h3 id=\"ab-files-title\">Keep a copy of your plan<\/h3><p>Save deliberately, then update quotes as you learn more. This planner does not send entries to our server.<\/p><\/div><div class=\"ab-actions\"><button type=\"button\" class=\"ab-secondary\" data-action=\"save\" disabled data-enable>Save in this browser<\/button><button type=\"button\" class=\"ab-secondary\" data-action=\"download\" disabled data-enable>Download editable plan<\/button><button type=\"button\" class=\"ab-secondary\" data-action=\"csv\" disabled data-enable>Export CSV<\/button><label class=\"ab-upload\" for=\"ab-import\">Import plan<input id=\"ab-import\" type=\"file\" accept=\".json,application\/json\"><\/label><button type=\"button\" class=\"ab-link\" data-action=\"new\">Start a blank plan<\/button><\/div><p class=\"ab-fine\">One locally saved plan per browser. No cloud sync. Clearing browser data may remove it; download an editable backup to move devices. <a href=\"\/privacy-policy\/\">Privacy policy<\/a>.<\/p><p class=\"ab-form-message\" data-role=\"file-message\" role=\"status\"><\/p><\/section>\n<\/section>\n<div class=\"ab-mobile-dock\" data-role=\"mobile-dock\" hidden><span><small>FIRST-YEAR PLAN<\/small><strong data-role=\"dock-total\">No prices entered<\/strong><\/span><button type=\"button\" data-action=\"totals\">View totals \u2193<\/button><\/div>\n<div class=\"ab-wrap\">\n<section class=\"ab-editorial\" id=\"ab-cost-guide\" aria-labelledby=\"ab-cost-title\"><p class=\"ab-kicker\">BEYOND THE ADOPTION FEE<\/p><h2 id=\"ab-cost-title\">How much does it cost to adopt a cat?<\/h2><div class=\"ab-columns\"><div><p>The adoption fee is one part of the plan. Add the supplies you still need, care not included by the rescue, ongoing food and litter, and costs that arrive less often. The useful number is the one built from your local quotes and the cat\u2019s actual needs.<\/p><p>For a fuller breakdown, read our <a href=\"\/how-much-does-it-cost-to-adopt-a-cat\/\">cat adoption cost guide<\/a>. Then use the <a href=\"\/first-30-days-with-your-new-cat\/\">first 30 days checklist<\/a> and our <a href=\"\/how-to-settle-a-cat-into-a-new-home\/\">settling-in guide<\/a> to plan the start at home.<\/p><p>This cat adoption cost calculator starts with blank prices so an old average or a different country\u2019s prices are not mistaken for your budget. You can leave an item unpriced while you gather quotes; the result stays labeled as a partial estimate.<\/p><h3>Ask the shelter what the fee includes<\/h3><p>Confirm the vaccination record, spay\/neuter status, microchip and registration arrangements, any remaining veterinary care and the food currently being fed. Some adoption organizations bundle several services, but what is included varies. Cats Protection describes its own included services; confirm the terms of the organization you use. <a href=\"#ab-sources\">[1]<\/a><\/p><p>Mark an included cost accordingly in the planner. Counting the adoption fee and the full price of the same included service would inflate your remaining budget.<\/p><\/div><figure><img loading=\"lazy\" src=\"https:\/\/snugglesouls.com\/wp-content\/uploads\/2026\/07\/new-cat-safe-room-setup-768x512.webp\" srcset=\"https:\/\/snugglesouls.com\/wp-content\/uploads\/2026\/07\/new-cat-safe-room-setup-768x512.webp 768w, https:\/\/snugglesouls.com\/wp-content\/uploads\/2026\/07\/new-cat-safe-room-setup.webp 1536w\" sizes=\"auto, (max-width:600px) 94vw,560px\" width=\"1536\" height=\"1024\" alt=\"A cat in a simple hiding box beside bedding, scratching supplies, litter facilities and food and water bowls.\" loading=\"lazy\" decoding=\"async\"><figcaption>Price a practical starter space: suitable litter facilities, food and water stations, scratching, rest and hiding options. Use the supplies you already have where appropriate.<\/figcaption><\/figure><\/div><\/section>\n<section class=\"ab-editorial\" aria-labelledby=\"ab-monthly-title\"><p class=\"ab-kicker\">THE ROUTINE AFTER HOMECOMING<\/p><h2 id=\"ab-monthly-title\">What is the monthly cost of owning a cat?<\/h2><div class=\"ab-columns\"><div><p>Start with food, litter and any recurring care or insurance payments you choose or need. Add ongoing pet rent if it applies. Then set aside part of the annual budget for costs such as vet care beyond the initial visit, cat sitting and replacements.<\/p><p>The planner shows a <strong>monthly planning average<\/strong>: monthly costs plus one twelfth of annual costs. It is a budgeting figure, not a promise that bills arrive evenly.<\/p><p>Use the <a href=\"\/wet-dry-cat-food-calculator\/\">wet and dry cat food calculator<\/a> to estimate food spending from the actual products and portions you intend to use. Transfer that monthly amount once, rather than adding it again under supplies.<\/p><h3>For two cats, separate individual and shared costs<\/h3><p>A per-cat quote is multiplied by the number of cats in the plan. A household total is counted once. Use household totals for a combined quote; do not label an already combined two-cat food bill \u201ceach cat.\u201d The tool assumes no automatic multi-cat discount.<\/p><\/div><aside class=\"ab-callout\"><h3>Watch for overlapping care plans<\/h3><p>A wellness plan, adoption package or other service may bundle items you would otherwise enter separately. Read what it includes and budget only the additional cost in each row.<\/p><p>An insurance premium is an expense; a reserve is money held aside. This planner does not estimate claim reimbursement, decide what a policy covers or assume an emergency bill will be paid by insurance.<\/p><p>Note waiting periods, exclusions, deductibles\/excesses and payment arrangements in your questions for the provider. The amount of cash you need available depends on the actual terms. <a href=\"#ab-sources\">[4]<\/a><\/p><\/aside><\/div><\/section>\n<section class=\"ab-editorial\" id=\"ab-first-year\" aria-labelledby=\"ab-year-title\"><p class=\"ab-kicker\">SPENDING AND CASH ARE DIFFERENT TOTALS<\/p><h2 id=\"ab-year-title\">How to plan the first year with a cat<\/h2><div class=\"ab-columns\"><div><p><strong>Remaining first-year spending<\/strong> adds the set-up items still to pay, twelve months of monthly costs and the annual costs entered. Already owned or paid items are excluded: this is a forward budget, not a complete history of everything you have ever spent.<\/p><p><strong>Starting cash<\/strong> adds set-up, one month of monthly costs, the annual amounts you mark due at the start, a refundable deposit if applicable and the shortfall in your chosen reserve.<\/p><p>The two totals answer different questions. Do not add them together: they overlap. A reserve contribution is not treated as an expense, and an annual amount marked due at the start is counted only once in first-year spending.<\/p><h3>Illustrative example, not a price guide<\/h3><div class=\"ab-example-math\">Set-up still to pay: 340<br>Monthly costs: 80<br>Annual costs: 360<br><strong>First-year spending = 340 + 80 \u00d7 12 + 360 = 1,660<\/strong><br>Monthly planning average = 80 + 360 \u00f7 12 = 110<\/div><p>If 120 of annual costs is due at the start, the refundable deposit is 200, and a reserve target of 500 already has 150 saved, starting cash is <strong>340 + 80 + 120 + 200 + 350 = 1,090<\/strong>. All figures are fictional units in one currency.<\/p><\/div><div><h3>How much should I save before adopting?<\/h3><p>Use the starting cash breakdown to see the parts of your own plan. Ask local providers for quotes and decide what reserve fits the care arrangements you are making. There is no universal emergency-fund amount supplied by this tool.<\/p><p>A refundable pet deposit is separated because it ties up money even when it is not an expected expense. A nonrefundable fee belongs in set-up; monthly pet rent belongs in monthly costs. Check the actual housing agreement rather than assuming these terms mean the same thing.<\/p><h3>Compare a changed plan<\/h3><p>Pin your current plan, then change a quote, mark existing supplies as already owned, or change the number of cats. The comparison shows numerical differences; it does not rate whether someone is eligible to adopt.<\/p><p>You can include a reserve shortfall now in the starting cash plan. The planner does not calculate a savings deadline, interest, a repayment plan or investment returns.<\/p><\/div><\/div><\/section>\n<section class=\"ab-editorial\" aria-labelledby=\"ab-checklist-title\"><p class=\"ab-kicker\">A SHORT QUOTE-GATHERING CHECKLIST<\/p><h2 id=\"ab-checklist-title\">What to confirm before you bring a cat home<\/h2><div class=\"ab-columns\"><div><ol><li><strong>Shelter or rescue:<\/strong> the fee, included services, existing records, remaining care and current food.<\/li><li><strong>Veterinary practice:<\/strong> the first visit and care specific to the cat, plus any recurring costs not bundled elsewhere.<\/li><li><strong>Home:<\/strong> transport, suitable litter facilities, food and water supplies, scratching, rest and hiding options. The ASPCA\u2019s cat care checklist is a useful starting reference. <a href=\"#ab-sources\">[2]<\/a><\/li><li><strong>Housing and time away:<\/strong> any permitted-pet terms, deposit\/fees and the cost of reliable care while you travel.<\/li><li><strong>Payment and backup arrangements:<\/strong> when larger bills are due, how any coverage works, and the reserve you want available.<\/li><\/ol><\/div><div><ul class=\"ab-link-list\"><li><a href=\"\/how-to-settle-a-cat-into-a-new-home\/\">Prepare the first week in a new home<\/a><p>Connect the supplies budget with a practical settling-in routine.<\/p><\/li><li><a href=\"\/best-cat-litter-box-setup\/\">Choose a litter box set-up<\/a><p>Consider size, placement and cleaning supplies before buying.<\/p><\/li><li><a href=\"\/how-to-keep-cat-vaccine-records\/\">Keep vaccination records organized<\/a><p>Bring the existing record and questions to the veterinary team.<\/p><\/li><li><a href=\"\/how-to-choose-a-cat-sitter\/\">Plan cat care when you travel<\/a><p>Know which visits and services you are requesting before asking for a quote.<\/p><\/li><\/ul><\/div><\/div><\/section>\n<section class=\"ab-editorial ab-faq\" id=\"ab-faq\" aria-labelledby=\"ab-faq-title\"><h2 id=\"ab-faq-title\">Cat adoption budget questions<\/h2><details><summary>Is the adoption fee the full cost of bringing home a cat?<\/summary><p>Usually it is one part of the plan. Confirm what the fee includes, then add the supplies, housing charges and care you still need to pay for. Ongoing monthly and annual care need their own budget.<\/p><\/details><details><summary>Does this calculator use average cat prices for my country?<\/summary><p>No. You enter your own quotes. Currency changes the label and formatting only; it does not load local prices or convert existing amounts. The optional worked example is fictional and remains marked as an example.<\/p><\/details><details><summary>Can I leave an unknown cost blank?<\/summary><p>Yes. Active blank prices stay marked as unknown and the totals show a partial estimate. They are not assumed to be free. Enter 0 only for a confirmed zero charge, or choose the appropriate excluded status.<\/p><\/details><details><summary>How do I avoid counting vaccinations or neutering twice?<\/summary><p>Ask what the adoption fee includes. If a service is already included or paid for, mark its row that way. For annual care or a wellness plan, enter only the costs not already included in another row.<\/p><\/details><details><summary>Can I use the planner for a kitten, adult cat or senior cat?<\/summary><p>Yes. Adjust the included services, quotes and care costs for the individual cat. The tool does not assume that a certain age automatically costs more or less, or generate a veterinary care schedule from age.<\/p><\/details><details><summary>How do I estimate the cost of adopting two cats?<\/summary><p>Select two cats, then check each row\u2019s scope. \u201cEach cat\u201d multiplies the entered amount by two. \u201cWhole household\u201d counts the total once. Use custom items for differences between cats instead of doubling every cost indiscriminately.<\/p><\/details><details><summary>Why is a refundable pet deposit excluded from first-year spending?<\/summary><p>The planner treats it as cash tied up rather than an expected expense, so it appears in starting cash. If a fee is nonrefundable, enter it in set-up. The tool does not interpret housing law or promise that a deposit will be returned.<\/p><\/details><details><summary>Should I add the starting cash figure to the first-year total?<\/summary><p>No. The totals overlap. Starting cash includes some spending already in the first-year figure, plus separate deposits and reserve funding. Adding them together would double count those expenses.<\/p><\/details><details><summary>Does buying insurance remove the need for an emergency fund?<\/summary><p>This planner makes no such assumption. Enter the premium as a recurring expense and choose a reserve separately if you want one in your plan. Check the actual policy\u2019s terms and how bills must be paid before deciding how much cash to hold.<\/p><\/details><details><summary>Can I save, print and update my adoption budget?<\/summary><p>Yes. Save one plan in the current browser, download an editable JSON file, export the cost breakdown as CSV, or use the print dialog to save a PDF. Imports replace the plan on the page after confirmation when there are unsaved changes; they do not replace the browser save until you explicitly save.<\/p><\/details><\/section>\n<section class=\"ab-editorial\" id=\"ab-sources\" aria-labelledby=\"ab-method-title\"><p class=\"ab-kicker\">CALCULATIONS &amp; REFERENCES<\/p><h2 id=\"ab-method-title\">How your adoption budget is calculated<\/h2><p>Per-cat costs use your selected number of cats. Household totals are counted once. The monthly planning average spreads annual costs over 12 months.<\/p><p>Included, already paid\/owned and not-applicable items are excluded from remaining spending. Reserve shortfall = the greater of target minus existing reserve or zero. No currency conversion, inflation, financing cost, medical-cost forecast or insurance reimbursement is applied.<\/p><ol><li><a href=\"https:\/\/www.cats.org.uk\/help-and-advice\/getting-a-cat\/cost-of-owning-a-cat\" target=\"_blank\" rel=\"noopener\">Cats Protection: cost of owning a cat, including initial, monthly and ongoing categories<\/a>. Its figures and included services relate to its UK context; they are not loaded as defaults here.<\/li><li><a href=\"https:\/\/www.aspca.org\/pet-care\/cat-care\/general-cat-care\" target=\"_blank\" rel=\"noopener\">ASPCA: General Cat Care and Cat Supply Checklist<\/a>.<\/li><li><a href=\"https:\/\/www.aspca.org\/pet-care\/general-pet-care\/cutting-pet-care-costs\" target=\"_blank\" rel=\"noopener\">ASPCA: Cutting Pet Care Costs<\/a>. The cost table on that page is labeled \u201c2021 UPDATE\u201d; it is not represented as a current local quote.<\/li><li><a href=\"https:\/\/content.naic.org\/article\/consumer-insight-pet-insurance-it-could-save-your-pets-life-could-save-you-money\" target=\"_blank\" rel=\"noopener\">NAIC: consumer questions about pet insurance, deductibles, limits, exclusions and reimbursement<\/a>.<\/li><\/ol><\/section>\n<\/div>\n\n<\/main>\n\n<script data-no-optimize=\"1\" data-cfasync=\"false\">\n(function(){\"use strict\";\nconst abRoot=document.getElementById('ss-adoption-budget');if(!abRoot||abRoot.dataset.initialized)return;abRoot.dataset.initialized='true';\nconst abQ=r=>abRoot.querySelector('[data-role=\"'+r+'\"]'),AB_KEY='snugglesouls.adoption-budget.v1';\nconst AB_GROUPS={setup:'Set-up \/ one time',monthly:'Monthly',annual:'Annual \/ next 12 months'};\nconst AB_STATUS={need:'Still to pay \/ budget',included:'Included in another fee',owned:'Already have \/ paid',skip:'Not applicable'};\nconst AB_CURRENCIES=['USD','GBP','EUR','CAD','AUD','NZD'];\nconst AB_DEFS={setup:[\n ['fee','Adoption fee','Check exactly what your shelter or rescue includes.','cat'],\n ['carrier','Carrier(s)','Price the transport supplies you still need.','house'],\n ['litter-setup','Litter boxes & scoop','Set-up supplies only; refills go in Monthly.','house'],\n ['bowls','Food & water bowls','Budget for the whole set you need.','house'],\n ['scratch','Scratching supplies','Choose a suitable, stable set-up.','house'],\n ['bedding','Bedding, hiding space & toys','Include what you need rather than a full shopping wish list.','house'],\n ['exam','Initial vet examination','Only the part not included in the adoption fee.','cat'],\n ['vaccines','Outstanding initial vaccinations','Confirm the record and remaining care with the vet.','cat'],\n ['neuter','Spay \/ neuter not included','Ask whether it is already completed or covered.','cat'],\n ['chip','Microchip \/ registration not included','Confirm what has been done and any transfer fee.','cat'],\n ['housing-fee','Nonrefundable pet \/ housing fee','Refundable deposits go in Cash buffer.','house','skip']\n ],monthly:[\n ['food','Food & treats','Enter the combined monthly cost; avoid a second food entry.','cat'],\n ['litter','Litter refills & waste supplies','Use the amount for the selected scope.','cat'],\n ['insurance','Insurance premium','Use a real quote; this does not assume any claim is covered.','cat'],\n ['preventive','Preventive care \/ wellness plan','Enter only costs not budgeted elsewhere.','cat'],\n ['pet-rent','Ongoing pet rent','Confirm any extra monthly charge.','house','skip'],\n ['monthly-other','Other monthly care','Include regular costs specific to your cat.','house','skip']\n ],annual:[\n ['routine','Routine vet care beyond initial set-up','Annual budget not covered by another row or plan.','cat'],\n ['sitting','Cat sitting \/ boarding','Budget all anticipated visits or days over 12 months.','house'],\n ['replace','Replacements & other annual care','Exclude supplies already counted in Set-up.','house']\n ]};\nconst abEsc=s=>String(s).replace(\/[&<>\"']\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\nconst abId=()=>globalThis.crypto?.randomUUID?crypto.randomUUID():'custom-'+Date.now().toString(36)+Math.random().toString(36).slice(2);\nfunction abFresh(){return {name:'',currency:'USD',cats:1,example:false,reserveEnabled:true,reserveTarget:'',reserveSaved:'',depositEnabled:false,deposit:'',notes:'',rows:Object.fromEntries(Object.entries(AB_DEFS).map(([g,defs])=>[g,defs.map(([id,label,hint,scope,status])=>({id,label,hint,scope,status:status||'need',amount:'',due:false,custom:false}))]))};}\nlet abPlan=abFresh(),abComparison=null,abActiveTab='setup',abDirty=false,abStorageBlocked=false;\nfunction abMoney(value){\n if(value==='')return {value:null};\n if(typeof value!=='string'||!\/^\\d+(?:\\.\\d{1,2})?$\/.test(value)||Number(value)>1000000)return {value:null,error:'Use a nonnegative price up to 1,000,000 with at most 2 decimal places.'};\n const [whole,part='']=value.split('.');return {value:Number(whole)*100+Number(part.padEnd(2,'0'))};\n}\nfunction abAmount(cents,currency=abPlan.currency){return new Intl.NumberFormat('en-US',{style:'currency',currency,currencyDisplay:'symbol',minimumFractionDigits:2,maximumFractionDigits:2}).format(cents\/100);}\nfunction abCompute(plan){\n const r={setup:0,monthly:0,annual:0,due:0,deposit:0,reserveGap:0,reserveTarget:0,reserveSaved:0,missing:[],errors:[],known:0,groups:{}};\n for(const group of Object.keys(AB_GROUPS)){\n  let sum=0,missing=0,known=0,active=0;\n  for(const row of plan.rows[group]){\n   if(row.custom&&!row.label.trim())r.errors.push({group,id:row.id,field:'label',message:'Name this custom item.'});\n   if(row.status!=='need')continue;active++;const parsed=abMoney(row.amount);\n   if(parsed.error){r.errors.push({group,id:row.id,field:'amount',message:parsed.error});continue;}\n   if(parsed.value===null){missing++;r.missing.push({group,id:row.id,field:'amount'});continue;}\n   const amount=parsed.value*(row.scope==='cat'?plan.cats:1);sum+=amount;known++;r.known++;\n   if(group==='annual'&&row.due)r.due+=amount;\n  }\n  r[group]=sum;r.groups[group]={sum,missing,known,active};\n }\n r.costMissing=r.missing.length;r.costErrors=r.errors.length;\n const field=(name)=>{const parsed=abMoney(plan[name]);if(parsed.error)r.errors.push({group:'buffer',field:name,message:parsed.error});else if(parsed.value===null)r.missing.push({group:'buffer',field:name});return parsed.value;};\n if(plan.reserveEnabled){const target=field('reserveTarget'),saved=field('reserveSaved');r.reserveTarget=target;r.reserveSaved=saved;if(target!==null&&saved!==null)r.reserveGap=Math.max(0,target-saved);}\n if(plan.depositEnabled){const deposit=field('deposit');r.deposit=deposit??0;}\n r.year=r.setup+12*r.monthly+r.annual;r.monthAverage=r.monthly+r.annual\/12;r.cash=r.setup+r.monthly+r.due+r.deposit+r.reserveGap;\n return r;\n}\nfunction abValidatePlan(p){\n const fail=()=>{throw new Error('The plan format is not recognized or an entry exceeds its allowed limit.');};\n if(!p||typeof p!=='object'||!AB_CURRENCIES.includes(p.currency)||!Number.isInteger(p.cats)||p.cats<1||p.cats>4||typeof p.name!=='string'||p.name.length>80||typeof p.notes!=='string'||p.notes.length>2000||typeof p.reserveEnabled!=='boolean'||typeof p.depositEnabled!=='boolean')fail();\n const result={...abFresh(),name:p.name,currency:p.currency,cats:p.cats,notes:p.notes,example:!!p.example,reserveEnabled:p.reserveEnabled,depositEnabled:p.depositEnabled};\n for(const key of ['reserveTarget','reserveSaved','deposit']){if(typeof p[key]!=='string'||p[key].length>24)fail();result[key]=p[key];}\n for(const group of Object.keys(AB_GROUPS)){\n  const list=p.rows?.[group];if(!Array.isArray(list)||list.length<AB_DEFS[group].length||list.length>AB_DEFS[group].length+8)fail();const ids=new Set();\n  result.rows[group]=list.map(row=>{\n   if(!row||typeof row.id!=='string'||!row.id||row.id.length>120||ids.has(row.id)||typeof row.label!=='string'||row.label.length>80||typeof row.amount!=='string'||row.amount.length>24||!Object.hasOwn(AB_STATUS,row.status)||!['cat','house'].includes(row.scope)||typeof row.due!=='boolean'||typeof row.custom!=='boolean')fail();ids.add(row.id);\n   const base=AB_DEFS[group].find(d=>d[0]===row.id);if(!base&&!row.custom)fail();\n   return {id:row.id,label:base?base[1]:row.label,hint:base?base[2]:'Your additional cost.',scope:row.scope,status:row.status,amount:row.amount,due:row.due,custom:!base};\n  });\n  if(AB_DEFS[group].some(d=>!ids.has(d[0])))fail();\n }\n if(abCompute(result).errors.length)throw new Error('Correct invalid amounts or unnamed custom items in the source plan before importing.');\n return result;\n}\nfunction abPacket(){return {app:'snugglesouls.adoption-budget',version:1,savedAt:new Date().toISOString(),plan:abPlan,comparison:abComparison};}\nfunction abReadPacket(data){if(!data||data.app!=='snugglesouls.adoption-budget'||data.version!==1)throw new Error('Choose a SnuggleSouls adoption-budget JSON file (version 1).');return {plan:abValidatePlan(data.plan),comparison:data.comparison?abValidatePlan(data.comparison):null};}\nfunction abRowHTML(row,group){\n const rid='ab-'+group+'-'+row.id,unit=group==='monthly'?'Price \/ month':group==='annual'?'Price \/ 12 months':'Price';\n return '<div class=\"ab-row\" data-group=\"'+group+'\" data-row=\"'+abEsc(row.id)+'\" data-excluded=\"'+(row.status!=='need')+'\"><div class=\"ab-row-left\"><div class=\"ab-row-title\">'+(row.custom?'<label class=\"ab-sr\" for=\"'+rid+'-label\">Custom item name<\/label><input id=\"'+rid+'-label\" type=\"text\" maxlength=\"80\" data-row-field=\"label\" value=\"'+abEsc(row.label)+'\" aria-label=\"Custom item name\">':abEsc(row.label))+'<\/div><p class=\"ab-row-hint\">'+abEsc(row.hint)+'<\/p><label for=\"'+rid+'-status\">Status<select id=\"'+rid+'-status\" data-row-field=\"status\">'+Object.entries(AB_STATUS).map(([k,v])=>'<option value=\"'+k+'\"'+(row.status===k?' selected':'')+'>'+v+'<\/option>').join('')+'<\/select><\/label><\/div><div class=\"ab-row-price\"><label for=\"'+rid+'-amount\">'+unit+' <span class=\"ab-code\">'+abPlan.currency+'<\/span><input id=\"'+rid+'-amount\" data-row-field=\"amount\" type=\"number\" min=\"0\" max=\"1000000\" step=\"0.01\" inputmode=\"decimal\" value=\"'+abEsc(row.amount)+'\" placeholder=\"To price\"'+(row.status!=='need'?' disabled':'')+'><\/label><label for=\"'+rid+'-scope\">Amount covers<select id=\"'+rid+'-scope\" data-row-field=\"scope\"'+(row.status!=='need'?' disabled':'')+'><option value=\"cat\"'+(row.scope==='cat'?' selected':'')+'>Each cat<\/option><option value=\"house\"'+(row.scope==='house'?' selected':'')+'>Whole household<\/option><\/select><\/label><div class=\"ab-counted\"><span data-row-total><\/span>'+(row.custom?'<button type=\"button\" class=\"ab-row-remove\" data-action=\"remove\">Remove item<\/button>':'')+'<\/div><\/div>'+(group==='annual'?'<div class=\"ab-due\"><label class=\"ab-check\"><input type=\"checkbox\" data-row-field=\"due\"'+(row.due?' checked':'')+(row.status!=='need'?' disabled':'')+'>Full amount due at the start<\/label><\/div>':'')+'<p class=\"ab-row-error\" data-row-error hidden><\/p><\/div>';\n}\nfunction abPaintRows(group){abRoot.querySelector('[data-rows=\"'+group+'\"]').innerHTML=abPlan.rows[group].map(r=>abRowHTML(r,group)).join('');}\nfunction abPaintRow(el){\n const row=abPlan.rows[el.dataset.group].find(r=>r.id===el.dataset.row),excluded=row.status!=='need',p=abMoney(row.amount);el.dataset.excluded=String(excluded);\n for(const e of el.querySelectorAll('[data-row-field]'))if(['amount','scope','due'].includes(e.dataset.rowField))e.disabled=excluded;\n el.querySelector('[data-row-total]').textContent=excluded?'Not counted: '+AB_STATUS[row.status]:p.error?'Check the entered price':p.value===null?'Price not entered':abAmount(p.value*(row.scope==='cat'?abPlan.cats:1))+' counted'+(row.scope==='cat'?' \u00b7 '+abPlan.cats+' \u00d7 entered price':' \u00b7 household total');\n const err=el.querySelector('[data-row-error]');err.hidden=excluded||!p.error;err.textContent=p.error||'';const input=el.querySelector('[data-row-field=amount]');if(!excluded&&p.error)input.setAttribute('aria-invalid','true');else input.removeAttribute('aria-invalid');\n}\nfunction abSelectTab(tab,focus=false){\n abActiveTab=tab;abRoot.querySelectorAll('[data-tab]').forEach(b=>{const active=b.dataset.tab===tab;b.setAttribute('aria-selected',String(active));b.tabIndex=active?0:-1;if(active&&focus)b.focus();});abRoot.querySelectorAll('[data-panel]').forEach(p=>p.hidden=p.dataset.panel!==tab);\n}\nfunction abPaintAll(){\n for(const el of abRoot.querySelectorAll('[data-field]')){const value=abPlan[el.dataset.field];if(el.type==='checkbox')el.checked=!!value;else el.value=String(value);}\n for(const group of Object.keys(AB_GROUPS))abPaintRows(group);abRoot.querySelectorAll('.ab-code').forEach(e=>e.textContent=abPlan.currency);abSelectTab(abActiveTab);abRender();\n}\nfunction abMissingTarget(r){const issue=r.errors[0]||r.missing[0];if(!issue)return;abSelectTab(issue.group,true);let el;if(issue.group==='buffer'){el=abRoot.querySelector('[data-field=\"'+issue.field+'\"]');}else{const row=Array.from(abRoot.querySelectorAll('.ab-row')).find(e=>e.dataset.row===issue.id&&e.dataset.group===issue.group);el=row?.querySelector('[data-row-field=\"'+issue.field+'\"]');}if(el){el.focus({preventScroll:true});el.scrollIntoView({behavior:'instant',block:'center'});}}\nfunction abRender(){\n const r=abCompute(abPlan);abRoot.querySelectorAll('.ab-row').forEach(abPaintRow);\n abQ('reserve-fields').hidden=!abPlan.reserveEnabled;abQ('deposit-field').hidden=!abPlan.depositEnabled;abQ('example-message').hidden=!abPlan.example;\n const complete=r.missing.length===0&&r.errors.length===0,hasCost=r.known>0||r.costMissing===0;\n const set=(key,value)=>{abRoot.querySelector('[data-out=\"'+key+'\"]').textContent=value;};\n set('year',hasCost?abAmount(r.year):'\u2014');set('setup',r.groups.setup.known>0||r.groups.setup.missing===0?abAmount(r.setup):'\u2014');set('monthly',r.groups.monthly.known+r.groups.annual.known>0||(r.groups.monthly.missing+r.groups.annual.missing===0)?abAmount(r.monthAverage):'\u2014');\n const cashVisible=hasCost||(abPlan.reserveEnabled&&r.reserveTarget!==null&&r.reserveSaved!==null)||(abPlan.depositEnabled&&abMoney(abPlan.deposit).value!==null);\n set('cash',cashVisible?abAmount(r.cash):'\u2014');\n abQ('completeness').innerHTML=r.errors.length?'Fix '+r.errors.length+' invalid entr'+(r.errors.length===1?'y':'ies')+'. Totals exclude invalid amounts.<button type=\"button\" class=\"ab-link\" data-action=\"missing\">Find the first issue \u2192<\/button>':!complete?'PARTIAL ESTIMATE \u00b7 '+r.missing.length+' price \/ savings entr'+(r.missing.length===1?'y':'ies')+' still blank. Totals include priced items only.<button type=\"button\" class=\"ab-link\" data-action=\"missing\">Find a missing amount \u2192<\/button>':'All active amounts entered. Recheck quotes and included services before relying on this plan.';\n const uncertain=g=>r.missing.concat(r.errors).some(e=>e.group===g);\n const dueUnknown=abPlan.rows.annual.some(row=>row.status==='need'&&row.due&&(abMoney(row.amount).value===null));\n const reserveUnknown=abPlan.reserveEnabled&&(r.reserveTarget===null||r.reserveSaved===null);\n const bars=[['Set-up still to pay',r.setup,uncertain('setup')],['One month of monthly costs',r.monthly,uncertain('monthly')],['Annual amounts due at start',r.due,dueUnknown],['Refundable deposit',r.deposit,abPlan.depositEnabled&&abMoney(abPlan.deposit).value===null],['Reserve shortfall',r.reserveGap,reserveUnknown]];\n abQ('cash-bars').innerHTML=bars.map(([label,value,partial])=>'<div class=\"ab-cash-row\"><div><span>'+label+'<\/span><span>'+(partial?(value?abAmount(value)+' priced':'Awaiting amounts'):abAmount(value))+'<\/span><\/div><div class=\"ab-bar\"><i style=\"width:'+(r.cash?value\/r.cash*100:0)+'%\"><\/i><\/div><\/div>').join('');\n abQ('reserve-summary').textContent=abPlan.reserveEnabled?(r.reserveTarget===null||r.reserveSaved===null?'Enter both reserve figures to include the shortfall.':abAmount(r.reserveTarget)+' reserve target \u2212 '+abAmount(r.reserveSaved)+' already set aside = '+abAmount(r.reserveGap)+' to add. Existing reserve savings are not counted as new spending.'):'Cash reserve is excluded by your selection; this does not indicate that one is unnecessary.';\n const breakdown=[];for(const [group,rows] of Object.entries(abPlan.rows))for(const row of rows){const p=abMoney(row.amount);breakdown.push('<tr><td>'+abEsc(row.label)+'<small>'+AB_STATUS[row.status]+'<\/small><\/td><td>'+AB_GROUPS[group]+(group==='annual'&&row.due&&row.status==='need'?'<small>Full amount due at start<\/small>':'')+'<\/td><td>'+(p.error?'Invalid price':p.value===null?'Not priced':abAmount(p.value))+'<\/td><td>'+(row.scope==='cat'?'Each cat \u00d7 '+abPlan.cats:'Whole household')+'<\/td><td>'+(row.status!=='need'?'Excluded':p.error?'Not counted \u2014 invalid':p.value===null?'Unknown':abAmount(p.value*(row.scope==='cat'?abPlan.cats:1)))+'<\/td><\/tr>');}abQ('breakdown').innerHTML=breakdown.join('');\n const comp=abQ('comparison');comp.hidden=!abComparison;\n if(abComparison){const b=abCompute(abComparison);comp.innerHTML='<h4>Pinned: '+abEsc(abComparison.name||'Untitled plan')+'<\/h4>'+(abComparison.currency!==abPlan.currency?'<p>Choose the same currency label to compare. No exchange conversion is performed.<\/p>':'<p>Current minus pinned plan:<\/p>'+[['First-year spending',r.year-b.year],['Monthly average',r.monthAverage-b.monthAverage],['Starting cash',r.cash-b.cash]].map(([label,n])=>'<p>'+label+': <strong>'+(n>0?'+':n<0?'\u2212':'')+abAmount(Math.abs(n))+'<\/strong><\/p>').join(''))+((r.missing.length+r.errors.length+b.missing.length+b.errors.length)>0?'<p>Partial estimates: one or both plans contain blank or invalid entries.<\/p>':'')+'<button type=\"button\" class=\"ab-link\" data-action=\"unpin\">Clear comparison<\/button>';}\n if(abQ('dock-total'))abQ('dock-total').textContent=hasCost?abAmount(r.year)+(complete?'':' \u00b7 partial'):'No prices entered';\n}\nfunction abChanged(){abDirty=true;abQ('save-status').textContent='Unsaved changes';abQ('file-message').textContent='';abRender();}\nfunction abDiscard(){return !abDirty||window.confirm('Replace the unsaved plan on this page? Your last browser save will remain until you save again.');}\nfunction abDownload(name,text,type){const u=URL.createObjectURL(new Blob([text],{type})),a=document.createElement('a');a.href=u;a.download=name;document.body.append(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(u),30000);}\nfunction abCsv(){\n const data=[['Plan',abPlan.name||'Untitled'],['Currency',abPlan.currency],['Cats',abPlan.cats],['Example',abPlan.example],[],['Item','Timing','Status','Entered price','Scope','Counted cost','Annual amount due at start']];\n for(const [group,rows] of Object.entries(abPlan.rows))for(const row of rows){const p=abMoney(row.amount);data.push([row.label,AB_GROUPS[group],AB_STATUS[row.status],row.amount,row.scope==='cat'?'Per cat \u00d7 '+abPlan.cats:'Household',row.status==='need'&&p.value!==null&&!p.error?p.value*(row.scope==='cat'?abPlan.cats:1)\/100:'',group==='annual'&&row.due&&row.status==='need']);}\n const r=abCompute(abPlan);data.push([],['Remaining first-year spending',r.year\/100],['Monthly planning average',r.monthAverage\/100],['Starting cash plan',r.cash\/100],['Reserve enabled',abPlan.reserveEnabled],['Reserve target',abPlan.reserveTarget],['Reserve already set aside',abPlan.reserveSaved],['Reserve shortfall',r.reserveGap\/100],['Refundable deposit enabled',abPlan.depositEnabled],['Refundable deposit counted',r.deposit\/100],['Blank active entries',r.missing.length],['Invalid entries',r.errors.length],['Notes',abPlan.notes]);\n const cell=v=>{let s=String(v??'');if(typeof v!=='number'&&\/^\\s*[=+\\-@]\/.test(s))s=\"'\"+s;return '\"'+s.replace(\/\"\/g,'\"\"')+'\"';};abDownload('cat-adoption-budget.csv','\\ufeff'+data.map(row=>row.map(cell).join(',')).join('\\r\\n'),'text\/csv;charset=utf-8');\n}\nfunction abPrint(){\n const r=abCompute(abPlan);if(r.errors.length){abQ('form-message').textContent='Correct invalid amounts before printing. Blank amounts can remain marked as unknown.';abMissingTarget(r);return;}\n const pop=window.open('','_blank');if(!pop){abQ('file-message').textContent='The print window was blocked. Allow popups for this site and try again.';return;}\n const d=pop.document;d.open();d.write('<!doctype html>');d.close();d.documentElement.lang='en';d.title='Cat adoption budget | SnuggleSouls';\n const style=d.createElement('style');style.textContent='body{font:12px\/1.5 Arial,sans-serif;color:#233d37;max-width:960px;margin:28px auto;padding:0 18px}h1{font-size:27px;line-height:1.2}h2{font-size:18px;margin-top:22px}p{margin:9px 0}.notice{border:1px solid #aa8037;padding:9px}.metrics{border-block:1px solid #b8c9b7;padding:12px 0}table{width:100%;border-collapse:collapse;font-size:10px;table-layout:fixed}td,th{border:1px solid #c4d1c1;padding:7px;text-align:left;vertical-align:top;overflow-wrap:anywhere}th{background:#e7eee4}thead{display:table-header-group}tr{break-inside:avoid}.fine{font-size:10px;color:#566b62}.notes{white-space:pre-wrap}button{padding:10px 18px;margin-bottom:12px}@page{margin:15mm}@media print{button{display:none}body{margin:0;padding:0}h1,h2,thead{break-after:avoid}}';d.head.append(style);\n const add=(tag,text,cls)=>{const el=d.createElement(tag);if(text!==undefined)el.textContent=text;if(cls)el.className=cls;d.body.append(el);return el;};\n const button=add('button','Print \/ Save as PDF');button.addEventListener('click',()=>pop.print());add('p','SNUGGLESOULS \/ ADOPTION BUDGET','fine');add('h1',abPlan.name||'Cat adoption budget');add('p',abPlan.cats+' cat(s) \u00b7 '+abPlan.currency+' \u00b7 A 12-month planning period starting with adoption.');\n if(abPlan.example)add('p','FICTIONAL EXAMPLE \u2014 demonstration amounts, not local quotes or a recommended reserve.','notice');if(r.missing.length)add('p','PARTIAL ESTIMATE: '+r.missing.length+' active price \/ savings entries are blank. Totals include entered amounts only.','notice');\n add('p','Remaining first-year spending: '+abAmount(r.year)+'\\nMonthly planning average: '+abAmount(r.monthAverage)+'\\nStarting cash plan: '+abAmount(r.cash),'metrics notes');\n add('p','First year = remaining set-up + monthly costs \u00d7 12 + annual costs. Monthly average = monthly costs + annual costs \u00f7 12. Starting cash = remaining set-up + one month of monthly costs + annual amounts due at start + refundable deposit + reserve shortfall.','fine');\n for(const group of Object.keys(AB_GROUPS)){\n  add('h2',AB_GROUPS[group]);const table=add('table'),head=d.createElement('thead'),hr=d.createElement('tr');['Item','Status','Entered price \/ scope','Counted cost'].forEach(t=>{const th=d.createElement('th');th.textContent=t;hr.append(th);});head.append(hr);table.append(head);const body=d.createElement('tbody');\n  for(const row of abPlan.rows[group]){const p=abMoney(row.amount),tr=d.createElement('tr');[row.label,AB_STATUS[row.status],(p.value===null?'Unknown':abAmount(p.value))+' \/ '+(row.scope==='cat'?'each cat \u00d7 '+abPlan.cats:'household'),row.status!=='need'?'Excluded':p.value===null?'Unknown':abAmount(p.value*(row.scope==='cat'?abPlan.cats:1))+(group==='annual'&&row.due?' \u00b7 due at start':'')].forEach(v=>{const td=d.createElement('td');td.textContent=v;tr.append(td);});body.append(tr);}table.append(body);\n }\n add('h2','Cash buffer');add('p',abPlan.reserveEnabled?'Reserve target: '+(r.reserveTarget===null?'Unknown':abAmount(r.reserveTarget))+' \u00b7 Already set aside: '+(r.reserveSaved===null?'Unknown':abAmount(r.reserveSaved))+' \u00b7 Shortfall counted: '+abAmount(r.reserveGap):'Reserve excluded by user selection.');add('p','Refundable deposit: '+(abPlan.depositEnabled?(abPlan.deposit===''?'Unknown':abAmount(r.deposit)):'Excluded by user selection')+'. Reserve contributions and refundable deposits are excluded from first-year spending.');\n if(abPlan.notes){add('h2','Quote sources & questions');add('p',abPlan.notes,'notes');}\n if(abComparison){const b=abCompute(abComparison);add('h2','Pinned comparison');add('p',(abComparison.name||'Untitled plan')+' \u00b7 '+abComparison.currency+' \u00b7 First-year spending: '+abAmount(b.year,abComparison.currency)+' \u00b7 Monthly average: '+abAmount(b.monthAverage,abComparison.currency)+' \u00b7 Starting cash: '+abAmount(b.cash,abComparison.currency)+(b.missing.length?' \u00b7 Partial estimate':'')+'.');}\n add('p','Included, already paid\/owned and not-applicable rows are excluded from remaining spending. Entered quotes can change. A reserve is a savings target, not an emergency bill prediction or proof of insurance coverage. No exchange rates, interest or inflation are applied.','fine');add('p','SnuggleSouls \u00b7 https:\/\/snugglesouls.com\/cat-adoption-cost-calculator\/','fine');pop.opener=null;\n}\nabQ('plan-form').addEventListener('submit',e=>e.preventDefault());\nabQ('plan-form').addEventListener('input',e=>{\n const el=e.target,rowEl=el.closest('[data-row]');\n if(rowEl){const row=abPlan.rows[rowEl.dataset.group].find(r=>r.id===rowEl.dataset.row);row[el.dataset.rowField]=el.type==='checkbox'?el.checked:el.value;abChanged();return;}\n const key=el.dataset.field;if(!key||['currency','cats'].includes(key))return;abPlan[key]=el.type==='checkbox'?el.checked:el.value;abChanged();\n});\nabQ('plan-form').addEventListener('change',e=>{\n const key=e.target.dataset.field;\n if(key==='currency'){\n  const next=e.target.value;if(next===abPlan.currency)return;\n  if((abCompute(abPlan).known>0||abPlan.reserveTarget||abPlan.deposit)&&!window.confirm('Change the currency label to '+next+'? All entered numbers stay the same. No exchange conversion is performed.')){e.target.value=abPlan.currency;return;}\n  abPlan.currency=next;abRoot.querySelectorAll('.ab-code').forEach(el=>el.textContent=next);abQ('currency-message').textContent='Currency label changed to '+next+'. Entered amounts were not converted. Check every price in the new currency.';abChanged();\n }\n if(key==='cats'){abPlan.cats=Number(e.target.value);abChanged();}\n});\nabRoot.querySelector('.ab-tabs').addEventListener('keydown',e=>{const tabs=['setup','monthly','annual','buffer'],i=tabs.indexOf(abActiveTab);let next;if(e.key==='ArrowRight')next=tabs[(i+1)%4];if(e.key==='ArrowLeft')next=tabs[(i+3)%4];if(e.key==='Home')next=tabs[0];if(e.key==='End')next=tabs[3];if(next){e.preventDefault();abSelectTab(next,true);}});\nabRoot.addEventListener('click',e=>{\n const tab=e.target.closest('[data-tab]');if(tab){abSelectTab(tab.dataset.tab);return;}\n const button=e.target.closest('[data-action]');if(!button||!abRoot.contains(button))return;const action=button.dataset.action;\n if(action==='missing'){abMissingTarget(abCompute(abPlan));return;}\n if(action==='totals'){abRoot.querySelector('.ab-summary').scrollIntoView({behavior:'instant',block:'start'});return;}\n if(action==='inputs'){abRoot.querySelector('.ab-tabs').scrollIntoView({behavior:'instant',block:'start'});abRoot.querySelector('[data-tab=\"'+abActiveTab+'\"]').focus({preventScroll:true});return;}\n if(action==='add'){\n  const group=button.dataset.group;if(abPlan.rows[group].filter(r=>r.custom).length>=8){abQ('form-message').textContent='Up to eight additional items can be added to each category.';return;}\n  const row={id:abId(),label:'',hint:'Your additional cost.',scope:'house',status:'need',amount:'',due:false,custom:true};abPlan.rows[group].push(row);abPaintRows(group);abChanged();const target=Array.from(abRoot.querySelectorAll('[data-row]')).find(r=>r.dataset.row===row.id);target.querySelector('[data-row-field=label]').focus();return;\n }\n if(action==='remove'){const el=button.closest('[data-row]'),row=abPlan.rows[el.dataset.group].find(r=>r.id===el.dataset.row);if(!window.confirm('Remove '+(row.label||'this custom item')+' from the plan?'))return;abPlan.rows[el.dataset.group]=abPlan.rows[el.dataset.group].filter(r=>r.id!==row.id);abPaintRows(el.dataset.group);abChanged();return;}\n if(action==='new'){if(!abDiscard())return;abPlan=abFresh();abComparison=null;abActiveTab='setup';abPaintAll();abChanged();abQ('file-message').textContent='A blank plan is open. Your previous browser save is unchanged until you save this plan.';return;}\n if(action==='example'){\n  if(!abDiscard())return;abPlan=abFresh();abComparison=null;abPlan.example=true;abPlan.name='Fictional homecoming example';\n  const amounts={fee:'120',carrier:'40','litter-setup':'35',bowls:'15',scratch:'35',bedding:'25',exam:'70',food:'35',litter:'20',insurance:'15',preventive:'10',routine:'120',sitting:'180',replace:'60'};\n  for(const rows of Object.values(abPlan.rows))for(const row of rows){if(amounts[row.id])row.amount=amounts[row.id];if(['vaccines','neuter','chip'].includes(row.id))row.status='included';if(row.id==='routine')row.due=true;}\n  Object.assign(abPlan,{reserveTarget:'500',reserveSaved:'150',depositEnabled:true,deposit:'200',notes:'Fictional example only. Included care is assumed for this demonstration and must be confirmed with the actual shelter.'});abActiveTab='setup';abPaintAll();abChanged();abRoot.querySelector('#ab-planner').scrollIntoView({behavior:'instant',block:'start'});return;\n }\n if(action==='pin'){const r=abCompute(abPlan);if(r.errors.length){abQ('form-message').textContent='Correct invalid amounts before pinning a comparison.';abMissingTarget(r);return;}abComparison=JSON.parse(JSON.stringify(abPlan));abChanged();abQ('file-message').textContent='Comparison pinned. Change prices, included items or cat count to see differences. The pinned plan stays fixed.';return;}\n if(action==='unpin'){abComparison=null;abChanged();return;}\n if(action==='print'){abPrint();return;}\n if(['save','download','csv'].includes(action)){\n  const r=abCompute(abPlan);if(r.errors.length){abQ('form-message').textContent='Correct invalid amounts or unnamed custom items before saving or exporting. Unknown amounts can remain blank.';abMissingTarget(r);return;}\n  if(action==='csv'){abCsv();abQ('file-message').textContent='CSV exported. Unknown and excluded items are labeled in the file.';return;}\n  if(action==='download'){abDownload('snugglesouls-cat-adoption-budget.json',JSON.stringify(abPacket(),null,2),'application\/json');abQ('file-message').textContent='Editable plan downloaded, including the pinned comparison if present.';return;}\n  if(abStorageBlocked){abQ('file-message').textContent='Local saving is blocked to preserve unreadable data or a newer save from another tab. Download this plan, then reload before saving locally.';return;}\n  try{localStorage.setItem(AB_KEY,JSON.stringify(abPacket()));abDirty=false;abQ('save-status').textContent='Saved in this browser';abQ('file-message').textContent='Saved in this browser. Download a file for a copy you can move to another device.';}\n  catch(error){abQ('storage-message').hidden=false;abQ('storage-message').textContent='This browser could not save the plan. Download an editable file before leaving.';abQ('file-message').textContent='Browser save failed. The plan is still open here; download an editable copy.';}\n }\n});\nabRoot.querySelector('#ab-import').addEventListener('change',async e=>{\n const file=e.target.files[0];if(!file)return;\n try{if(file.size>1024*1024)throw new Error('Choose an adoption-budget file smaller than 1 MB.');const loaded=abReadPacket(JSON.parse(await file.text()));if(!abDiscard())return;abPlan=loaded.plan;abComparison=loaded.comparison;abActiveTab='setup';abPaintAll();abChanged();abQ('file-message').textContent='Plan imported on this page. Your browser save is unchanged until you choose Save in this browser.';}\n catch(error){abQ('file-message').textContent='Import stopped: '+error.message;}finally{e.target.value='';}\n});\ntry{const raw=localStorage.getItem(AB_KEY);if(raw){const loaded=abReadPacket(JSON.parse(raw));abPlan=loaded.plan;abComparison=loaded.comparison;abQ('save-status').textContent='Loaded browser save';}}\ncatch(error){abStorageBlocked=true;abQ('storage-message').hidden=false;abQ('storage-message').textContent='The existing browser save could not be read and has not been overwritten. You can make a new plan here and download it.';}\nabRoot.querySelectorAll('[data-enable]').forEach(e=>e.disabled=false);abPaintAll();\nwindow.addEventListener('beforeunload',e=>{if(abDirty){e.preventDefault();e.returnValue='';}});\nwindow.addEventListener('storage',e=>{if(e.key===AB_KEY||e.key===null){abStorageBlocked=true;abQ('storage-message').hidden=false;abQ('storage-message').textContent='Another tab changed the saved plan. Download any changes from this tab, then reload before saving locally.';}});\nif(globalThis.IntersectionObserver){let plannerVisible=false,summaryVisible=false;const dock=abQ('mobile-dock'),sync=()=>{if(dock)dock.hidden=!plannerVisible||summaryVisible;};new IntersectionObserver(entries=>{plannerVisible=entries[0].isIntersecting;sync();}).observe(abRoot.querySelector('#ab-planner'));new IntersectionObserver(entries=>{summaryVisible=entries[0].isIntersecting;sync();}).observe(abRoot.querySelector('.ab-summary'));}\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Cat Adoption Cost Calculator Build your own cat adoption budget: what you still need to buy, what care costs each month, and the cash you want to keep in reserve. Build my budget \u2197See a worked example Budget plannerWhat to budget forFirst-year costsCommon questions PRICE THE PLAN, PIECE BY PIECE Your adoption budget Not saved [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":7618,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8252","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/pages\/8252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/comments?post=8252"}],"version-history":[{"count":5,"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/pages\/8252\/revisions"}],"predecessor-version":[{"id":8334,"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/pages\/8252\/revisions\/8334"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/media\/7618"}],"wp:attachment":[{"href":"https:\/\/snugglesouls.com\/de\/wp-json\/wp\/v2\/media?parent=8252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}