Custom Financial Models That Drive Smarter Decisions

From real estate pro formas to corporate valuations and risk analysis, TILT builds robust Excel models tailored to your unique business challenges.

On-Demand Services

Expert Financial Consulting When You Need It

Whether you need ongoing support or help with a specific project, TILT integrates seamlessly with your team to deliver results.

Explore Consulting

Why Work With TILT?

Financial models built to be used, not just delivered.

01

1,000+ Hours Built Into Every Model

Each model represents years of refinement across hundreds of deals. You get battle-tested frameworks, not a blank spreadsheet.

02

All Inputs on One Page

50+ output sheets, but every input lives on a single page. Run scenarios quickly without hunting through tabs.

03

Direct Access, Fast Turnaround

Work directly with TILT. Same-day delivery on standard models, 24-hour response time, and free technical support included.

Justin Acciavatti, Founder of TILT Analytics
The Man Behind the Models

Justin Acciavatti

With 15+ years of experience architecting complex financial models, I founded TILT to bring professional-quality analysis tools to developers, investors, and operators of all sizes.

My background spans real estate, fintech, and Fortune 500 companies. I built financial models supporting the $525M Provenance Hotel Partners Fund, managed $100M of supply chain analytics at Nike, and developed credit scoring algorithms for fintech lenders. TILT models support real estate capital raises ranging from $1M to $1B+. Every model reflects that experience: battle-tested, efficient, and built for how deals actually get done.

When you work with TILT, you work directly with me. No handoffs to junior analysts, no ticket queues. Just fast, expert support when you need it.

MBA, Duke Fuqua • CFA Level I & II • CMA

Want to see more? Explore feature deep-dives, walkthroughs, and setup tutorials in the Video Library.

Browse Videos

Ready to Model It Yourself?

Get a professional-grade Excel model with free technical support.

Explore Models
or

Want Us to Handle It?

TILT can run your analysis, build custom models, or provide ongoing support.

Discuss Your Project
/* ======================================== TILT ANALYTICS - BLOG / ARTICLE TEMPLATE Loads on .single-post pages only via the body class scope. Paste this AFTER tilt-divi-global.css in Divi > Theme Options > Custom CSS. Uses the design tokens defined at the top of tilt-divi-global.css. ======================================== *//* ======================================== ARTICLE COLUMN ======================================== */ /* A reading measure, not a page-width column: at 1200px a line of body copy ran to about 130 characters against a comfortable 65-80. 760px lands near 77. This deliberately gives up the flush alignment with the logo and the last nav item that the earlier 1200px formula bought, and it also normalises the two column widths divi hands out per post (1140px on some, 912px on others). */ .single-post .et_pb_post, .single-post article.post { width: 80%; max-width: 760px; margin: 0 auto; padding: 0; }/* Divi holds both the content row and the title/meta wrapper at its default 80%, which leaves them inset from the header even after the container above is widened. !important is required; Divi's own rule wins on specificity otherwise (both verified in-browser 2026-07-21). */ .single-post .et_pb_post .et_pb_row, .single-post .et_pb_post .et_post_meta_wrapper { width: 100% !important; }.single-post .et_pb_post_content { padding: 0; }/* ======================================== FEATURED IMAGE (hero) ======================================== */ .single-post .et_featured_image { margin: 0 0 2rem; border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--border); }.single-post .et_featured_image img { width: 100%; height: auto; max-height: 460px; object-fit: cover; display: block; }/* ======================================== TITLE ======================================== */ .single-post h1.entry-title, .single-post .et_pb_title_container h1 { font-family: 'Playfair Display', 'Playfair Display Fallback', Georgia, serif; font-size: clamp(2rem, 4vw, 2.75rem); font-weight: 600; line-height: 1.15; color: var(--text-dark); letter-spacing: -0.02em; margin: 0 0 1rem; }/* ======================================== ARTICLE META (under H1) Reading time, last-updated, author ======================================== */ .single-post .tilt-article-meta { font-family: 'Open Sans', 'Open Sans Fallback', sans-serif; font-size: 0.875rem; color: var(--text-muted); display: flex; flex-wrap: wrap; gap: 0.625rem 0.875rem; align-items: center; margin: 0 0 2.5rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--border); }.single-post .tilt-article-meta a { color: var(--primary); text-decoration: none; font-weight: 500; }.single-post .tilt-article-meta a:hover { text-decoration: underline; }.single-post .tilt-article-meta .tilt-article-meta-dot { width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: 0.45; display: inline-block; }/* hide legacy divi meta when our custom meta is present */ .single-post .tilt-article-meta ~ .et_pb_post_meta, .single-post .tilt-article-meta ~ .post-meta { display: none; }/* ======================================== BODY TYPOGRAPHY Divi wraps the article body in .et_pb_text_inner and its module preset sets 19px/1.8em there, so a size set on the container alone never reaches the text: it is overridden further down the tree. The preset selector is carried here so the size the file declares is the size the page renders (in-browser 2026-07-22). ======================================== */ .single-post .entry-content, .single-post .et_pb_post_content, .single-post .entry-content .et_pb_text_inner { font-family: 'Open Sans', 'Open Sans Fallback', Georgia, serif; font-size: 1.0625rem; line-height: 1.65; color: #2d3748; }.single-post .entry-content p, .single-post .et_pb_post_content p { margin: 0 0 1.5rem; /* divi adds padding-bottom: 1em to every p, which stacked on the margin above and made the real gap 43px. margins alone own the rhythm here. */ padding-bottom: 0; /* line-height and colour restate the container's values: tilt-divi-global's .et_pb_text p is the more specific selector and wins otherwise, leaving article copy at the muted grey meant for marketing-page support text. */ line-height: 1.65; color: #2d3748; }/* ======================================== CONTENT HEADINGS ======================================== */ .single-post .entry-content h2, .single-post .et_pb_post_content h2 { font-family: 'Playfair Display', 'Playfair Display Fallback', Georgia, serif; font-size: 1.875rem; font-weight: 700; color: var(--text-dark); line-height: 1.25; margin: 1.5rem 0 1.25rem; /* the 0 bottom clears divi's blanket 10px on h1-h6; margins own the rhythm */ padding: 1.25rem 0 0; /* hairline, not an accent bar: at 11 h2s in a long article a heavy primary rule reads as decoration. the Playfair carries the weight instead. */ border-top: 1px solid var(--border); scroll-margin-top: 6rem; position: relative; }.single-post .entry-content h3, .single-post .et_pb_post_content h3 { font-family: 'Open Sans', 'Open Sans Fallback', sans-serif; font-size: 1.375rem; font-weight: 700; color: var(--text-dark); line-height: 1.35; margin: 1rem 0 1rem; padding-bottom: 0; scroll-margin-top: 6rem; }/* the   spacer paragraph the house template puts before a heading already supplies most of the gap, so the heading margins above are deliberately small. trimming the spacer's own margin before an h3 keeps h2 spaced wider than h3 and preserves the hierarchy. run-up: h2 75px, h3 67px. */ .single-post .entry-content p:has(+ h3), .single-post .et_pb_post_content p:has(+ h3) { margin-bottom: 1rem; }.single-post .entry-content h4, .single-post .et_pb_post_content h4 { font-family: 'Open Sans', 'Open Sans Fallback', sans-serif; font-size: 0.8125rem; font-weight: 700; color: var(--primary); margin: 2rem 0 0.625rem; padding-bottom: 0; text-transform: uppercase; letter-spacing: 0.1em; }/* hover anchor link (injected by tilt-divi-scripts.html) */ .single-post .entry-content h2 a.tilt-anchor, .single-post .entry-content h3 a.tilt-anchor { opacity: 0; margin-left: 0.4em; color: var(--primary); text-decoration: none; font-weight: 400; transition: opacity 0.2s ease; }.single-post .entry-content h2:hover a.tilt-anchor, .single-post .entry-content h3:hover a.tilt-anchor, .single-post .entry-content h2 a.tilt-anchor:focus, .single-post .entry-content h3 a.tilt-anchor:focus { opacity: 1; }/* ======================================== LINKS ======================================== */ .single-post .entry-content a, .single-post .et_pb_post_content a { color: var(--primary); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; transition: color 0.2s ease, text-decoration-thickness 0.2s ease; }.single-post .entry-content a:hover, .single-post .et_pb_post_content a:hover { color: var(--primary-dark); text-decoration-thickness: 2px; }/* ======================================== LISTS ======================================== */ .single-post .entry-content ul, .single-post .entry-content ol, .single-post .et_pb_post_content ul, .single-post .et_pb_post_content ol { margin: 0 0 1.5rem; /* divi pads lists 23px at the bottom and forces a 26px line-height on them, which put a bigger gap under a list than under a paragraph */ padding: 0 0 0 1.5rem; line-height: inherit; }.single-post .entry-content li, .single-post .et_pb_post_content li { margin-bottom: 0.5rem; line-height: 1.65; padding-left: 0.25rem; }.single-post .entry-content ul li::marker { color: var(--primary); }.single-post .entry-content ol li::marker { color: var(--primary); font-weight: 600; }/* ======================================== DEFAULT BLOCKQUOTE (subtle) ======================================== */ .single-post .entry-content blockquote, .single-post .et_pb_post_content blockquote { margin: 2rem 0; padding: 1.25rem 1.5rem; background: var(--bg-light); /* fill only. a callout is bordered and carries an icon, the cta is a white card with a shadow, so this stays distinguishable without an accent. */ border-radius: var(--radius-sm); font-size: 1.0625rem; line-height: 1.55; color: #4b5563; }.single-post .entry-content blockquote p { margin-bottom: 0; }/* ======================================== PULL QUOTE - .tilt-pullquote Editorial-scale quote for breaking up walls of text ======================================== */ .single-post .entry-content blockquote.tilt-pullquote, .single-post .et_pb_post_content blockquote.tilt-pullquote { margin: 3rem 0; padding: 0 0 0 3.5rem; background: transparent; border: none; border-radius: 0; position: relative; font-family: 'Playfair Display', 'Playfair Display Fallback', Georgia, serif; font-style: italic; font-size: 1.5rem; line-height: 1.4; color: var(--text-dark); font-weight: 400; }/* hanging glyph rather than a bar: this is the one element in the article that should read as editorial rather than as interface chrome */ .single-post .entry-content blockquote.tilt-pullquote::before { content: "\201C"; position: absolute; left: -0.25rem; top: -0.34em; font-family: 'Playfair Display', 'Playfair Display Fallback', Georgia, serif; font-size: 5rem; line-height: 1; color: var(--primary); opacity: 0.2; }.single-post .entry-content blockquote.tilt-pullquote p { margin-bottom: 0.75rem; }.single-post .entry-content blockquote.tilt-pullquote cite { display: block; margin-top: 1rem; font-family: 'Open Sans', sans-serif; font-style: normal; font-size: 0.8125rem; color: var(--text-muted); letter-spacing: 0.02em; }/* ======================================== KEY TAKEAWAYS - .tilt-takeaways Sits between H1+meta and the lead paragraph; doubles as TL;DR ======================================== */ .single-post .entry-content .tilt-takeaways, .single-post .et_pb_post_content .tilt-takeaways { /* ruled standfirst rather than a box, so the summary stops looking like the toc. the rules stay neutral; the uppercase label is already primary. */ background: transparent; border: none; border-top: 2px solid var(--text-dark); border-bottom: 1px solid var(--border); border-radius: 0; padding: 1.25rem 0 1.5rem; margin: 0 0 2.5rem; }.single-post .entry-content .tilt-takeaways-label { font-family: 'Open Sans', sans-serif; font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--primary); margin: 0 0 0.75rem; display: block; }.single-post .entry-content .tilt-takeaways ul { margin: 0; padding-left: 1.25rem; list-style-type: disc; }.single-post .entry-content .tilt-takeaways li { font-size: 1.0625rem; line-height: 1.55; margin-bottom: 0.5rem; color: #2d3748; }.single-post .entry-content .tilt-takeaways li:last-child { margin-bottom: 0; }/* ======================================== CALLOUTS - .tilt-callout Variants: --note, --tip, --warn, --insight ======================================== */ .single-post .entry-content .tilt-callout, .single-post .et_pb_post_content .tilt-callout { display: grid; grid-template-columns: 28px 1fr; column-gap: 0.875rem; align-items: start; margin: 2rem 0; padding: 1.125rem 1.25rem; border-radius: var(--radius-sm); background: var(--bg-light); border: 1px solid var(--border); font-size: 1.0625rem; line-height: 1.55; }.single-post .entry-content .tilt-callout::before { content: ""; grid-row: 1 / 3; width: 24px; height: 24px; margin-top: 0.125rem; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: 'Open Sans', sans-serif; font-weight: 700; font-size: 0.8125rem; color: #fff; background: #6b7280; line-height: 1; }.single-post .entry-content .tilt-callout-label { grid-column: 2; font-family: 'Open Sans', sans-serif; font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--text-dark); margin: 0.125rem 0 0.375rem; display: block; }.single-post .entry-content .tilt-callout p { grid-column: 2; margin-bottom: 0.5rem; }.single-post .entry-content .tilt-callout p:last-child { margin-bottom: 0; }.single-post .entry-content .tilt-callout--note::before { content: "i"; font-style: italic; }.single-post .entry-content .tilt-callout--tip { background: #ecfdf5; border-color: #a7f3d0; } .single-post .entry-content .tilt-callout--tip::before { content: "+"; background: #059669; } .single-post .entry-content .tilt-callout--tip .tilt-callout-label { color: #065f46; }.single-post .entry-content .tilt-callout--warn { background: #fffbeb; border-color: #fde68a; } .single-post .entry-content .tilt-callout--warn::before { content: "!"; background: #d97706; } .single-post .entry-content .tilt-callout--warn .tilt-callout-label { color: #92400e; }.single-post .entry-content .tilt-callout--insight { background: rgba(53, 74, 83, 0.04); border-color: rgba(53, 74, 83, 0.22); } .single-post .entry-content .tilt-callout--insight::before { content: "TA"; background: var(--primary); font-size: 0.625rem; letter-spacing: 0.02em; } .single-post .entry-content .tilt-callout--insight .tilt-callout-label { color: var(--primary-dark); }/* ======================================== STAT CALLOUT - .tilt-article-stat Giant number + one-line caption on primary gradient ======================================== */ .single-post .entry-content .tilt-article-stat, .single-post .et_pb_post_content .tilt-article-stat { margin: 2.5rem 0; padding: 1.75rem 2rem; background: var(--gradient-primary); border-radius: var(--radius-md); color: #fff; text-align: center; }.single-post .entry-content .tilt-article-stat-number { font-family: 'Playfair Display', 'Playfair Display Fallback', Georgia, serif; font-size: clamp(2.5rem, 6vw, 3.5rem); font-weight: 700; line-height: 1; color: #fff; margin: 0; letter-spacing: -0.02em; display: block; }.single-post .entry-content .tilt-article-stat-caption { font-family: 'Open Sans', sans-serif; font-size: 0.9375rem; line-height: 1.45; color: rgba(255, 255, 255, 0.88); margin: 0.625rem auto 0; max-width: 460px; display: block; }/* row of 2-3 stats side by side */ .single-post .entry-content .tilt-article-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin: 2.5rem 0; }.single-post .entry-content .tilt-article-stat-row .tilt-article-stat { margin: 0; padding: 1.25rem 1rem; }.single-post .entry-content .tilt-article-stat-row .tilt-article-stat-number { font-size: 2.25rem; }.single-post .entry-content .tilt-article-stat-row .tilt-article-stat-caption { font-size: 0.875rem; }/* ======================================== IN-ARTICLE CTA - .tilt-article-cta Styled card for the required end-of-article CTA section ======================================== */ .single-post .entry-content .tilt-article-cta, .single-post .et_pb_post_content .tilt-article-cta { margin: 3rem 0; padding: 2rem; background: #fff; border: 1px solid var(--border); border-top: 4px solid var(--primary); border-radius: var(--radius-md); box-shadow: var(--shadow-card); }.single-post .entry-content .tilt-article-cta-eyebrow { font-family: 'Open Sans', sans-serif; font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--primary); margin: 0 0 0.5rem; display: block; }.single-post .entry-content .tilt-article-cta-title { font-family: 'Playfair Display', 'Playfair Display Fallback', Georgia, serif; font-size: 1.5rem; font-weight: 600; color: var(--text-dark); margin: 0 0 0.75rem; line-height: 1.3; padding: 0; border: none; }.single-post .entry-content .tilt-article-cta-body { font-size: 1.0625rem; color: #4b5563; margin: 0 0 1.25rem; line-height: 1.55; }.single-post .entry-content .tilt-article-cta-btn, .single-post .entry-content a.tilt-article-cta-btn { display: inline-block; padding: 0.75rem 1.5rem; background: var(--primary); color: #fff; text-decoration: none; border-radius: var(--radius-sm); font-weight: 600; font-size: 0.9375rem; transition: background 0.2s ease, transform 0.2s ease; }.single-post .entry-content a.tilt-article-cta-btn:hover { background: var(--primary-dark); transform: translateY(-1px); color: #fff; text-decoration: none; }.single-post .entry-content a.tilt-article-cta-btn:focus-visible { outline: 2px solid var(--primary-dark); outline-offset: 3px; }/* ======================================== FAQ ACCORDION - .tilt-faq Card-style accordion matching the existing page-level faq aesthetic used on /capfall/, /fpa/, support faq, and all model faq sections. Native
markup so no JS is required inside articles. ======================================== */ .single-post .entry-content .tilt-faq, .single-post .et_pb_post_content .tilt-faq { margin: 2.5rem 0; }.single-post .entry-content .tilt-faq details { background: #fff; border: 1px solid var(--border); border-radius: 8px; margin-bottom: 1rem; overflow: hidden; }.single-post .entry-content .tilt-faq details:last-child { margin-bottom: 0; }.single-post .entry-content .tilt-faq summary { cursor: pointer; padding: 1.25rem 3rem 1.25rem 1.5rem; font-family: 'Open Sans', sans-serif; font-size: 1.0625rem; font-weight: 600; color: var(--text-dark); list-style: none; position: relative; line-height: 1.4; transition: background 0.2s ease; }.single-post .entry-content .tilt-faq summary::-webkit-details-marker { display: none; }.single-post .entry-content .tilt-faq summary:hover { background: var(--bg-light); }.single-post .entry-content .tilt-faq summary:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; border-radius: 8px; }/* css-drawn chevron, rotates when open */ .single-post .entry-content .tilt-faq summary::after { content: ''; position: absolute; right: 1.5rem; top: 50%; width: 8px; height: 8px; border-right: 2px solid var(--text-muted); border-bottom: 2px solid var(--text-muted); transform: translateY(-70%) rotate(45deg); transition: transform 0.3s ease; }.single-post .entry-content .tilt-faq details[open] summary::after { transform: translateY(-30%) rotate(-135deg); }/* if author wraps the question in an h3, neutralize the heading chrome */ .single-post .entry-content .tilt-faq summary h3 { display: inline; margin: 0; padding: 0; border: none; font-size: inherit; font-family: inherit; font-weight: inherit; color: inherit; line-height: inherit; }.single-post .entry-content .tilt-faq-answer { padding: 0 1.5rem 1.25rem; font-size: 1.0625rem; line-height: 1.65; color: #374151; }.single-post .entry-content .tilt-faq-answer p:last-child { margin-bottom: 0; }/* ======================================== AUTHOR CARD - .tilt-author ======================================== */ .single-post .entry-content .tilt-author, .single-post .et_pb_post_content .tilt-author { display: grid; grid-template-columns: 80px 1fr; column-gap: 1.25rem; align-items: center; margin: 3rem 0 0; padding: 1.5rem; background: var(--bg-light); border-radius: var(--radius-md); border: 1px solid var(--border); }.single-post .entry-content .tilt-author-avatar { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 2px solid #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08); margin: 0; }.single-post .entry-content .tilt-author-name { font-family: 'Open Sans', sans-serif; font-size: 1.125rem; font-weight: 700; color: var(--text-dark); margin: 0 0 0.125rem; line-height: 1.3; }.single-post .entry-content .tilt-author-role { font-size: 0.9375rem; color: var(--text-muted); margin: 0 0 0.5rem; line-height: 1.4; }.single-post .entry-content .tilt-author-link { font-size: 0.875rem; font-weight: 600; color: var(--primary); text-decoration: none; }.single-post .entry-content .tilt-author-link:hover { text-decoration: underline; }/* ======================================== IMAGES + FIGURES ======================================== */ .single-post .entry-content figure, .single-post .et_pb_post_content figure { margin: 2.5rem 0; }.single-post .entry-content img, .single-post .et_pb_post_content img { border-radius: var(--radius-sm); border: 1px solid var(--border); margin: 0; max-width: 100%; height: auto; }.single-post .entry-content figcaption, .single-post .entry-content .wp-caption-text { font-size: 0.875rem; color: var(--text-muted); text-align: center; margin-top: 0.625rem; font-style: italic; line-height: 1.45; }.single-post .entry-content .wp-caption { max-width: 100%; margin: 2.5rem 0; }/* avatar override (inside .tilt-author the border-radius should be circular, not radius-sm) */ .single-post .entry-content img.tilt-author-avatar { border-radius: 50%; }/* wpautop may wrap the bare in

; treat that wrapper as the grid child */ .single-post .entry-content .tilt-author > p { display: contents; margin: 0; }/* ======================================== TABLES ======================================== */ .single-post .entry-content table, .single-post .et_pb_post_content table { width: 100%; margin: 2rem 0; border-collapse: collapse; font-size: 0.9375rem; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden; }.single-post .entry-content th, .single-post .et_pb_post_content th { background: var(--primary); color: #fff; font-weight: 600; padding: 0.875rem 1rem; text-align: left; border: none; }.single-post .entry-content td, .single-post .et_pb_post_content td { padding: 0.875rem 1rem; border-bottom: 1px solid var(--border); border-left: none; border-right: none; border-top: none; }.single-post .entry-content tr:last-child td { border-bottom: none; }.single-post .entry-content tbody tr:nth-child(even) td { background: rgba(248, 249, 250, 0.6); }.single-post .entry-content tbody tr:hover td { background: var(--bg-light); }/* ======================================== CODE ======================================== */ .single-post .entry-content code, .single-post .et_pb_post_content code { font-family: 'Fira Code', 'Consolas', monospace; font-size: 0.875em; background: #f3f4f6; padding: 0.15em 0.4em; border-radius: 4px; color: var(--primary); }.single-post .entry-content pre, .single-post .et_pb_post_content pre { background: var(--text-dark); color: #e5e7eb; padding: 1.5rem; border-radius: var(--radius-sm); overflow-x: auto; margin: 2rem 0; }.single-post .entry-content pre code { background: transparent; padding: 0; color: #e5e7eb; }/* ======================================== HR ======================================== */ .single-post .entry-content hr, .single-post .et_pb_post_content hr { border: none; border-top: 1px solid var(--border); margin: 3rem 0; }/* ======================================== POST TAGS (footer) ======================================== */ .single-post .post-tags, .single-post .et_post_tags { margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--border); }.single-post .post-tags a, .single-post .et_post_tags a { display: inline-block; background: #f3f4f6; color: #374151; padding: 0.375rem 0.875rem; border-radius: 20px; font-size: 0.8125rem; margin: 0.25rem 0.25rem 0.25rem 0; text-decoration: none; transition: all 0.2s ease; }.single-post .post-tags a:hover, .single-post .et_post_tags a:hover { background: var(--primary); color: #fff; }/* ======================================== TABLE OF CONTENTS - .tilt-toc Auto-generated by tilt-divi-scripts.html (only on posts with >= 4 H2s). Inline at top of article on smaller viewports; fixed sticky sidebar on >= 1366px. ======================================== */ .single-post .tilt-toc { /* the floating panel's geometry, in px so the script can read these straight off the element and decide whether the panel clears the article column. one source of truth: change the layout here, not in the script. */ --tilt-toc-left: 24px; --tilt-toc-width: 240px; --tilt-toc-gap: 32px; margin: 0 0 2.5rem; padding: 1.25rem 1.5rem; background: var(--bg-light); /* no border: the accent bar belongs to the active item below, which is the one place on the page where it carries information */ border: none; border-radius: var(--radius-sm); font-size: 0.9375rem; line-height: 1.5; }.single-post .tilt-toc-label { font-family: 'Open Sans', sans-serif; font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--primary); margin: 0 0 0.75rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--border); display: block; }.single-post .tilt-toc ol { list-style: none !important; margin: 0; padding: 0; counter-reset: tilt-toc; }.single-post .tilt-toc li { counter-increment: tilt-toc; margin: 0; padding: 0; list-style: none !important; }.single-post .tilt-toc li::marker { content: none; }.single-post .tilt-toc a { display: block; padding: 0.375rem 0 0.375rem 1.875rem; text-decoration: none; color: var(--text-muted); position: relative; border-left: 2px solid transparent; transition: color 0.2s ease, border-color 0.2s ease; }.single-post .tilt-toc a::before { content: counter(tilt-toc, decimal-leading-zero); position: absolute; left: 0.625rem; top: 0.4rem; font-size: 0.6875rem; font-weight: 600; color: var(--text-muted); opacity: 0.55; }.single-post .tilt-toc a:hover { color: var(--text-dark); }.single-post .tilt-toc a.is-active { color: var(--primary-dark); font-weight: 600; border-left-color: var(--primary); }.single-post .tilt-toc a.is-active::before { color: var(--primary); opacity: 1; }/* Fixed sticky sidebar, applied by tilt-divi-scripts.html only when the panel actually clears the article column. A viewport breakpoint cannot decide this: the column starts at 143px on some posts and 257px on others at the same viewport, so a single width overlapped the text on one and not the other. */ .single-post .tilt-toc.tilt-toc--float { position: fixed; top: 50%; left: var(--tilt-toc-left); transform: translateY(-50%); width: var(--tilt-toc-width); max-height: 72vh; overflow-y: auto; margin: 0; background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(8px); /* without the border the floating panel loses its edge; depth replaces it */ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.10); font-size: 0.8125rem; z-index: 50; }@media (prefers-reduced-motion: reduce) { .single-post .entry-content *, .single-post .entry-content *::before, .single-post .entry-content *::after, .single-post .tilt-toc, .single-post .tilt-toc *, .single-post .tilt-toc *::before { transition: none !important; animation: none !important; } }/* ======================================== RESPONSIVE ======================================== */ @media (max-width: 768px) { /* 80% would leave too little measure on a phone; go full width with padding */ .single-post .et_pb_post, .single-post article.post { width: 100%; padding: 0 1rem; }.single-post h1.entry-title, .single-post .et_pb_title_container h1 { font-size: 1.875rem; }.single-post .entry-content h2, .single-post .et_pb_post_content h2 { font-size: 1.5rem; margin-top: 1.5rem; }.single-post .entry-content h3, .single-post .et_pb_post_content h3 { font-size: 1.1875rem; }.single-post .entry-content blockquote.tilt-pullquote { font-size: 1.25rem; margin: 2rem 0; padding-left: 2.5rem; }.single-post .entry-content blockquote.tilt-pullquote::before { font-size: 3.5rem; }.single-post .entry-content .tilt-takeaways { padding: 1.125rem 0 1.25rem; }.single-post .entry-content .tilt-article-cta { padding: 1.125rem 1.25rem; }.single-post .entry-content .tilt-callout { padding: 1rem 1.125rem; }.single-post .entry-content .tilt-article-stat { padding: 1.5rem 1.125rem; }.single-post .entry-content .tilt-author { grid-template-columns: 64px 1fr; column-gap: 1rem; padding: 1.25rem; }.single-post .entry-content .tilt-author-avatar { width: 64px; height: 64px; }.single-post .entry-content .tilt-faq summary { padding-right: 2rem; } }