image
10%
Back to all Blogs

Thornton Township Cook County Property Taxes: How They’re Calculated & When to Appeal

19

Oct

2025

Thornton Township property tax appeal deadline November 14, 2025 – review notice, gather evidence, submit appeal, await decision.

Thornton Township 2025 Cook County Property Tax Reassessment: What Homeowners Need to Know


If you own a home in Thornton Township, your 2025 Cook County property tax reassessment notice, issued on October 1, 2025, may have revealed a change in your property’s assessed value. For many residents, these changes will directly impact their annual tax bills. Understanding how Thornton Township Cook County property taxes are calculated and when to appeal is essential for keeping your housing costs manageable.

Cook County property taxes represent one of the largest ongoing expenses for homeowners in Illinois. Every three years, the Cook County Assessor’s Office reviews and updates property values to reflect current market conditions. These assessed values are then used to determine your annual property tax bill. Knowing how the system works, and when to take action, can help you avoid paying more than you owe.


You can also track township-specific deadlines on our Cook County Property Tax Appeal Deadlines page..


How Cook County Property Taxes Are Calculated


Cook County property taxes are based on a standard formula:

Assessed Value × Equalization Factor × Local Tax Rate – Exemptions = Property Tax Bill.


For residential properties, the assessed value equals 10 percent of the home’s fair market value, while commercial properties are assessed at 25 percent. The equalization factor, also known as the multiplier, is set by the Illinois Department of Revenue to ensure fairness across counties. Finally, the local tax rate is determined by the taxing bodies in your area, such as school districts, villages, and park districts.


Homeowners may also qualify for exemptions, including the Homeowner Exemption, Senior Citizen Exemption, or Senior Freeze, which reduce the taxable portion of your property’s value. Ensuring these exemptions are properly applied is one of the simplest ways to reduce your Cook County property tax bill.



Thornton Township 2025 Reassessment Summary


This year’s Thornton Township reassessment data shows modest overall changes, with an average percentage change of -0.48 percent and a median change of -1.08 percent. While many residential properties remained stable, some specific property classes experienced larger shifts.


Increases in assessed value were led by parcels categorized as “any residential area located on a parcel used for another purpose,” which rose by 28.58 percent. Residential garages also increased slightly, up 0.28 percent. Other categories, such as single-family homes greater than one story, cooperatives, and farm buildings, showed little to no change.


Meanwhile, several property classes saw decreases. Special residential improvements dropped by 17 percent, mixed-use commercial and residential buildings fell 2.67 percent, and one-story dwellings greater than 1,800 square feet declined by 2.03 percent. Smaller single-story homes and small apartment buildings with two to six units each saw decreases of approximately 1.94 percent.


Overall, Thornton Township homeowners can expect stability in residential assessments this year, but certain unique properties experienced notable increases or decreases. These variations may be due to physical condition, changes in land use, or discrepancies in the Assessor’s data.



Why Thornton Township Assessments Change


Reassessments in Cook County occur every three years, and Thornton Township is part of the 2025 triennial cycle. The Cook County Assessor’s Office uses mass appraisal models based on market data, property characteristics, and recent sales. However, this process can sometimes overlook property-specific conditions.


For example, if your home has structural issues, outdated features, or sits on a smaller lot compared to nearby properties, your actual value may be lower than the Assessor’s estimate. Conversely, neighborhoods with rising home values or recent renovations might see higher assessments. Because of these variables, it’s crucial to review your assessment notice carefully and compare your property’s details with similar homes nearby.



When to File a Thornton Township Cook County Property Tax Appeal


Homeowners in Thornton Township have until November 14, 2025, to appeal their 2025 reassessment. Filing a Cook County property tax appeal allows you to challenge your assessed value if it seems inaccurate or unfair.


You may have a strong case to appeal if:

• Your assessed value is higher than similar homes in your neighborhood.

• The Assessor’s records contain errors about your home’s size, type, or condition.

• Your property’s market value has declined due to damage or neighborhood trends.

• Comparable properties have lower assessments or recent sale prices that don’t match your valuation.


An appeal can be filed directly with the Cook County Assessor’s Office during the open period, and later with the Cook County Board of Review if needed. While you can file an appeal on your own, many homeowners choose to work with a property tax consultant who specializes in Cook County property tax appeals. These experts can analyze comparable properties, review assessment data, and present evidence that supports a fair reduction.



The Importance of Filing an Appeal


Even a small reduction in your assessed value can lead to long-term savings. For example, lowering your assessed value by 5 percent could reduce your tax bill by several hundred dollars annually. Appealing your property tax does not affect your home’s market value, credit score, or ability to sell your home. It simply ensures you are paying your fair share based on accurate data.


Many homeowners mistakenly believe that filing an appeal will create issues later, but it’s a routine and encouraged process. Cook County allows every property owner to appeal once per assessment cycle, and many successful appeals are based on simple data corrections or updated property comparisons.



Quick Takeaways for Thornton Township Homeowners


• Thornton Township was reassessed in 2025 as part of Cook County’s triennial cycle.

• The average residential change was -0.48 percent, indicating stability overall.

• Certain property types, such as parcels with mixed uses, saw sharp increases.

• The formula for Cook County property taxes depends on assessed value, equalization factor, and local tax rate.

• Exemptions like the Homeowner and Senior Exemption can significantly lower your tax bill.

• Filing a Cook County property tax appeal before November 14, 2025, can prevent overpayment.

• Consulting a local property tax expert can help you identify errors and maximize savings.



Legal and Procedural Notes


According to the Illinois Property Tax Code, residential properties in Cook County are assessed at 10 percent of fair market value. The Cook County Assessor’s Office oversees assessments, while appeals are handled by the Cook County Board of Review. Homeowners are entitled to apply for exemptions that reduce taxable value. All appeals must be filed by the township’s official deadline, which for Thornton Township is November 14, 2025.



Conclusion


The 2025 Thornton Township reassessment highlights the importance of reviewing your property tax notice closely. Even minor errors or overlooked exemptions can lead to higher bills year after year. Understanding how Cook County property taxes are calculated and when to appeal gives homeowners more control over their finances and helps ensure fairness.


If your Thornton Township assessment appears too high or inconsistent with comparable homes, you should consider filing a Cook County property tax appeal before November 14, 2025. A professional property tax consultant can review your case, identify discrepancies, and guide you through the appeal process for the best possible outcome.


For personalized help, call (708) 888-8880 or visit Cook County Tax Appeals to schedule your free consultation today.


Are You Overpaying?

Most Cook County homeowners are over-assessed. Check your potential savings in under a minute.

WHY CHOOSE US?

  • 70% higher success rate than average attorney appeal

  • Instant AI-powered property analysis

  • Licensed Illinois tax attorneys & CPAs

  • 3-tier escalation: Assessor → BOR → PTAB

About Us

Risk-Free Service

$0 Upfront cost — you only pay if we winOur fee is just 25% of the first year's savings. No hidden fees, no surprises.

View Pricing Details

Still Have Questions?

Our team is ready to help with a free consultation.

Contact Us

LatestArticles

pay_your_taxes
MAY 22, 2026

Pay Cook County Property Taxes: Options & Deadlines

Pay Cook County Property Taxes 2026: Guide & Deadlines :root{ /* Homepage palette */ --brand: 005988; --brand-mid: 0B5984; --brand-light: 0B6697; --brand-deep: 004163; --brand-ink: 014751; --brand-50: rgba(0,89,136,0.04); --brand-100: rgba(0,89,136,0.08); --brand-200: rgba(0,89,136,0.16); --ink: 191B21; --ink-2: 41474E; --ink-3: 475569; --ink-4: 64748B; --ink-5: 94A0B2; --surface: FFFFFF; --surface-2: F7F7FC; --surface-3: EEF2F6; --surface-4: E8EDF4; --surface-tint: F5F8FC; --border: D8DFEA; --border-soft: E9EEF5; --border-faint: F1F3F8; --success: 1B6D24; --success-mid: 2D8E3A; --success-light: D1FAE5; --success-bright: 4ADE80; --alert: BA1A1A; --info: 2299DD; --shadow-sm: 0 1px 2px rgba(11,89,132,0.04), 0 1px 1px rgba(11,89,132,0.04); --shadow-md: 0 8px 24px -12px rgba(11,89,132,0.18), 0 2px 6px rgba(11,89,132,0.05); --shadow-lg: 0 30px 70px -32px rgba(11,89,132,0.32), 0 4px 16px rgba(11,89,132,0.06); --font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-mono: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; } *{box-sizing:border-box;margin:0;padding:0} html{scroll-behavior:smooth} body{ font-family: var(--font-body); background: var(--surface); color: var(--ink-2); font-size: 17px; line-height: 1.65; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; position: relative; } body::before{ content:""; position: fixed; inset: 0; pointer-events: none; z-index: 1000; opacity: 0.025; background-image: url("data:image/svg+xml;utf8, "); mix-blend-mode: multiply; } .wrap{max-width: 1240px; margin: 0 auto; padding: 0 32px} @media (max-width: 700px){.wrap{padding: 0 20px}} /* ============================================================ STATUS BAR ============================================================ */ .status-bar{ background: var(--brand-deep); color: rgba(255,255,255,0.9); font-size: 11.5px; letter-spacing: 0.16em; text-transform: uppercase; padding: 11px 0; font-family: var(--font-mono); font-weight: 500; position: relative; z-index: 5; } .status-bar .row{display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap} .status-bar .left{display:flex;align-items:center;gap:10px} .live-dot{ width: 7px; height: 7px; border-radius: 50%; background: var(--success-bright); box-shadow: 0 0 0 0 rgba(74,222,128,0.6); animation: livePulse 2.4s infinite; } @keyframes livePulse{ 0%{box-shadow:0 0 0 0 rgba(74,222,128,0.6)} 70%{box-shadow:0 0 0 10px rgba(74,222,128,0)} 100%{box-shadow:0 0 0 0 rgba(74,222,128,0)} } .status-bar .right{display: flex; gap: 24px; align-items: center; opacity: 0.75; font-size: 10.5px} .status-bar .sep{opacity: 0.4} @media (max-width: 640px){.status-bar .right{display: none}} /* ============================================================ HERO ============================================================ */ header.hero{ position: relative; padding: 80px 0 100px; background: radial-gradient(ellipse at 8% 10%, rgba(0,89,136,0.08) 0%, transparent 55%), radial-gradient(ellipse at 92% 90%, rgba(0,89,136,0.06) 0%, transparent 50%), var(--surface); border-bottom: 1px solid var(--border-soft); overflow: hidden; } header.hero::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(0,89,136,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,89,136,0.03) 1px, transparent 1px); background-size: 64px 64px; background-position: -1px -1px; pointer-events: none; mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.6), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.6), transparent 80%); } .hero .wrap{position: relative; z-index: 2} .hero-grid{ display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 64px; align-items: center; } @media (max-width: 980px){ .hero-grid{grid-template-columns: 1fr; gap: 48px} header.hero{padding: 56px 0 80px} } .kicker{ display: inline-flex; align-items: center; gap: 14px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); margin-bottom: 32px; font-weight: 500; opacity: 0; transform: translateY(12px); animation: rise 0.7s 0.05s ease-out forwards; } .kicker .seg-line{width: 28px; height: 1px; background: var(--brand); opacity: 0.6} .kicker .seg-dot{width: 5px; height: 5px; background: var(--brand); border-radius: 50%; opacity: 0.6} h1.title{ font-family: var(--font-display); font-weight: 700; font-size: clamp(28px, 3.2vw, 44px); line-height: 1.0; letter-spacing: -0.022em; color: var(--ink); margin-bottom: 32px; opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.15s ease-out forwards; } h1.title em{font-style: normal; color: var(--brand-light); color: var(--brand); position: relative} h1.title em::after{ content:""; position: absolute; left: 0; bottom: 6px; width: 100%; height: 2px; background: var(--brand); transform-origin: left; animation: drawLine 1s 0.9s cubic-bezier(0.65,0,0.35,1) forwards; transform: scaleX(0); } @keyframes drawLine{to{transform: scaleX(1)}} .dek{ font-family: var(--font-display); font-size: clamp(20px, 2.1vw, 26px); line-height: 1.45; font-weight: 700; color: var(--ink-3); max-width: 600px; margin-bottom: 44px; opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.3s ease-out forwards; } .dek b{color: var(--ink); font-weight: 500; font-style: normal; color: var(--brand-light)} .meta-strip{ display: flex; gap: 36px; flex-wrap: wrap; padding-top: 28px; border-top: 1px solid var(--border-soft); opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.45s ease-out forwards; } .meta-strip .item{display:flex; flex-direction: column; gap: 4px} .meta-strip .label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .meta-strip .value{font-size: 15px; color: var(--ink); font-weight: 500} @keyframes rise{to{opacity:1; transform:translateY(0)}} /* ============================================================ HERO CLASS SMALL-MULTIPLES ============================================================ */ .hero-visual{ position: relative; opacity: 0; transform: translateY(20px) scale(0.96); animation: rise 1.1s 0.4s ease-out forwards; } .class-grid{display: grid; grid-template-columns: 1fr 1fr; gap: 12px} .class-mini{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 18px 18px 16px; position: relative; transition: all 0.25s; cursor: pointer; overflow: hidden; } .class-mini::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--brand); transition: background 0.25s; } .class-mini:hover{transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--brand)} .class-mini:hover::before{background: var(--success-bright)} .class-mini.commercial::before{background: var(--brand-light)} .class-mini .cm-tag{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 6px; } .class-mini .cm-name{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 700; line-height: 1.15; margin-bottom: 10px; letter-spacing: -0.008em; } .class-mini .cm-rate{ font-family: var(--font-display); font-size: 26px; color: var(--ink); font-weight: 700; letter-spacing: -0.018em; line-height: 1; margin-bottom: 2px; } .class-mini .cm-rate .sym{font-size: 0.55em; color: var(--brand); font-style: normal; color: var(--brand-light); vertical-align: 0.3em; margin-left: 1px} .class-mini .cm-sub{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .class-mini.featured{grid-column: span 2; background: var(--brand); color: fff} .class-mini.featured::before{background: var(--success-bright)} .class-mini.featured .cm-tag{color: var(--success-bright)} .class-mini.featured .cm-name{color: fff} .class-mini.featured .cm-rate{color: fff} .class-mini.featured .cm-rate .sym{color: var(--success-bright)} .class-mini.featured .cm-sub{color: rgba(255,255,255,0.7)} .class-mini.featured .cm-spread{ font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: 14px; color: rgba(255,255,255,0.85); margin-top: 6px; } /* ============================================================ STAT BAND ============================================================ */ .stat-band{position: relative; z-index: 4; margin-top: -52px; padding: 0 32px} @media (max-width: 700px){.stat-band{padding: 0 20px}} .stat-band-inner{ max-width: 1240px; margin: 0 auto; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; box-shadow: var(--shadow-lg); display: grid; grid-template-columns: repeat(5, 1fr); position: relative; overflow: hidden; } .stat-band-inner::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--brand) 0%, var(--brand-light) 50%, var(--brand) 100%); } .stat-cell{ padding: 28px 22px 26px; border-right: 1px solid var(--border-soft); text-align: left; position: relative; background: var(--surface); transition: background 0.3s; } .stat-cell:hover{background: var(--surface-tint)} .stat-cell:last-child{border-right: 0} .stat-cell .stat-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 12px; font-weight: 500; } .stat-cell .stat-num{ font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 28px); font-weight: 700; color: var(--ink); letter-spacing: -0.022em; line-height: 1; margin-bottom: 10px; } .stat-cell .stat-num .prefix{color: var(--brand); font-style: normal; color: var(--brand-light); margin-right: 2px} .stat-cell .stat-num .suffix{font-size: 0.5em; color: var(--brand); font-style: normal; color: var(--brand-light); margin-left: 4px; vertical-align: 0.35em} .stat-cell .stat-context{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; color: var(--ink-4); text-transform: uppercase; font-weight: 500; margin-bottom: 14px; min-height: 1.4em; } .stat-cell .stat-bar{height: 3px; background: var(--border-faint); position: relative; overflow: hidden} .stat-cell .stat-bar::after{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 0%; background: var(--brand); transition: width 1.6s 0.3s cubic-bezier(0.22, 1, 0.36, 1); } .stat-cell.go .stat-bar::after{width: var(--bar, 50%)} .stat-cell.featured{background: var(--brand)} .stat-cell.featured:hover{background: var(--brand-light)} .stat-cell.featured .stat-label{color: rgba(255,255,255,0.65)} .stat-cell.featured .stat-num{color: fff} .stat-cell.featured .stat-num .prefix, .stat-cell.featured .stat-num .suffix{color: rgba(255,255,255,0.75)} .stat-cell.featured .stat-context{color: rgba(255,255,255,0.65)} .stat-cell.featured .stat-bar{background: rgba(255,255,255,0.15)} .stat-cell.featured .stat-bar::after{background: var(--success-bright)} @media (max-width: 1000px){ .stat-band-inner{grid-template-columns: repeat(2, 1fr)} .stat-cell{border-bottom: 1px solid var(--border-soft)} .stat-cell:nth-child(2n){border-right: 0} .stat-cell:last-child{grid-column: span 2} } @media (max-width: 500px){ .stat-band-inner{grid-template-columns: 1fr} .stat-cell{border-right: 0} .stat-cell:last-child{grid-column: auto} } /* ============================================================ ARTICLE GRID ============================================================ */ article{position: relative; padding: 110px 0 60px} .article-grid{ display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 56px; align-items: start; } @media (max-width: 1100px){ .article-grid{grid-template-columns: minmax(0, 1fr) 300px; gap: 48px} } @media (max-width: 880px){ .article-grid{grid-template-columns: 1fr; gap: 48px} article{padding: 80px 0 40px} } /* ============================================================ PROSE ============================================================ */ .prose{max-width: 800px} .prose p{margin-bottom: 22px; font-size: 17.5px; line-height: 1.72; color: var(--ink-2)} .prose p.lead{ font-family: var(--font-display); font-size: clamp(22px, 2.4vw, 28px); line-height: 1.45; color: var(--ink); font-weight: 700; margin-bottom: 44px; min-height: 1.45em; } .prose a{ color: var(--brand); text-decoration: none; background-image: linear-gradient(currentColor, currentColor); background-size: 100% 1px; background-repeat: no-repeat; background-position: 0 100%; padding-bottom: 1px; transition: background-size 0.3s, color 0.25s; } .prose a:hover{color: var(--brand-light); background-size: 0% 1px} .prose strong{color: var(--ink); font-weight: 600} .prose h2{ font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 36px); font-weight: 700; line-height: 1.1; letter-spacing: -0.02em; color: var(--ink); margin: 80px 0 18px; position: relative; } .prose h2 .h2-num{ display: block; font-family: var(--font-mono); font-style: normal; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); margin-bottom: 14px; font-weight: 500; } .prose h2 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .prose h3{ font-family: var(--font-body); font-size: 20px; font-weight: 600; color: var(--ink); margin: 40px 0 14px; letter-spacing: -0.005em; } .prose ul, .prose ol{margin: 8px 0 28px 0; padding-left: 24px; color: var(--ink-2)} .prose li{margin-bottom: 10px; line-height: 1.65; padding-left: 6px} .prose li::marker{color: var(--brand); font-weight: 600} /* ============================================================ CLASS TAB INTERFACE ============================================================ */ .class-tabs-wrap{margin: 32px 0 24px} .class-tabs{ display: flex; gap: 4px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px 6px 0 0; padding: 6px; overflow-x: auto; position: relative; z-index: 2; scrollbar-width: thin; } .class-tab{ flex: 1; background: transparent; border: 0; padding: 14px 12px 12px; font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-3); cursor: pointer; border-radius: 4px; transition: all 0.2s; text-align: left; min-width: 140px; line-height: 1.25; } .class-tab:hover{background: var(--surface); color: var(--ink)} .class-tab.active{ background: var(--brand); color: fff; box-shadow: var(--shadow-sm); } .class-tab .tab-label{ display: block; font-size: 13.5px; font-weight: 600; letter-spacing: -0.008em; margin-bottom: 2px; } .class-tab .tab-hint{ display: block; font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500; opacity: 0.7; } .class-panel{display: none; animation: fadeUp 0.4s ease-out} .class-panel.active{display: block} @keyframes fadeUp{ from{opacity: 0; transform: translateY(8px)} to{opacity: 1; transform: translateY(0)} } .class-panel-header{ background: var(--surface); border: 1px solid var(--border); border-top: 0; padding: 24px 28px 22px; border-radius: 0 0 6px 6px; margin-bottom: 32px; display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 32px; align-items: center; } .class-panel-header .ph-text .ph-tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 8px; } .class-panel-header .ph-text h3{ font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 28px); font-weight: 700; color: var(--ink); letter-spacing: -0.015em; line-height: 1.1; margin: 0 0 8px; } .class-panel-header .ph-text h3 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .class-panel-header .ph-text .ph-meta{ font-size: 14px; color: var(--ink-4); line-height: 1.45; } .class-panel-header .ph-stats{ display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } .class-panel-header .ph-cell{ padding: 12px 14px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 4px; } .class-panel-header .ph-cell .ph-cl{ font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 5px; } .class-panel-header .ph-cell .ph-cv{ font-family: var(--font-display); font-size: 22px; color: var(--ink); letter-spacing: -0.012em; line-height: 1; font-weight: 700; } .class-panel-header .ph-cell .ph-cv .sm{font-size: 0.55em; color: var(--brand); font-style: normal; color: var(--brand-light); margin-left: 2px; vertical-align: 0.3em} @media (max-width: 800px){ .class-panel-header{grid-template-columns: 1fr; gap: 24px} } /* Stage cards inside class panels */ .stages-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin: 24px 0; } @media (max-width: 900px){.stages-grid{grid-template-columns: 1fr}} .stage-card{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 26px 24px; position: relative; overflow: hidden; } .stage-card::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--brand); } .stage-card.bor::before{background: var(--brand-light)} .stage-card.combined{background: var(--brand); color: fff} .stage-card.combined::before{background: var(--success-bright)} .stage-card .tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 10px; } .stage-card.bor .tag{color: var(--brand-light)} .stage-card.combined .tag{color: var(--success-bright)} .stage-card .stage-h{ font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--ink); margin: 0 0 4px; letter-spacing: -0.01em; line-height: 1.15; } .stage-card.combined .stage-h{color: fff} .stage-card .stage-desc{ font-size: 13px; color: var(--ink-4); margin-bottom: 20px; line-height: 1.45; } .stage-card.combined .stage-desc{color: rgba(255,255,255,0.7)} .stage-card .stage-big{ font-family: var(--font-display); font-size: 56px; font-weight: 700; color: var(--ink); letter-spacing: -0.025em; line-height: 0.95; margin-bottom: 6px; } .stage-card.combined .stage-big{color: fff} .stage-card .stage-big .sym{ font-size: 0.42em; color: var(--brand); font-style: normal; color: var(--brand-light); vertical-align: 0.42em; margin-left: 2px; } .stage-card.bor .stage-big .sym{color: var(--brand-light)} .stage-card.combined .stage-big .sym{color: var(--success-bright)} .stage-card .stage-sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 18px; font-weight: 500; } .stage-card.combined .stage-sub{color: rgba(255,255,255,0.65)} .stage-rows{border-top: 1px solid var(--border-soft); padding-top: 16px} .stage-card.combined .stage-rows{border-top-color: rgba(255,255,255,0.12)} .stage-rows .row{display: flex; justify-content: space-between; padding: 6px 0; font-size: 13px} .stage-rows .row .k{color: var(--ink-3)} .stage-rows .row .v{font-family: var(--font-display); font-size: 16px; color: var(--ink); letter-spacing: -0.008em} .stage-card.combined .stage-rows .row .k{color: rgba(255,255,255,0.7)} .stage-card.combined .stage-rows .row .v{color: fff} /* AV Journey */ .journey{ margin: 28px 0; padding: 36px 32px 40px; background: var(--surface-3); border: 1px solid var(--border); border-radius: 6px; position: relative; overflow: hidden; } .journey::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--brand) 0%, var(--brand-light) 50%, var(--success) 100%); } .journey .head{text-align: center; margin-bottom: 30px} .journey h4{ font-family: var(--font-display); font-size: clamp(22px, 2.6vw, 28px); color: var(--ink); margin: 0 0 6px; font-weight: 700; letter-spacing: -0.015em; } .journey h4 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .journey .sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .journey-row{ display: grid; grid-template-columns: 1fr auto 1fr auto 1fr; gap: 14px; align-items: stretch; } .j-col{ text-align: center; padding: 22px 14px 20px; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; position: relative; } .j-col .j-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 10px; font-weight: 500; } .j-col .j-num{ font-family: var(--font-display); font-size: clamp(22px, 2.8vw, 30px); font-weight: 700; color: var(--ink); letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .j-col .j-stage{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--brand); font-weight: 500; } .j-col.final{background: var(--brand)} .j-col.final::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: var(--success-bright); } .j-col.final .j-label{color: rgba(255,255,255,0.6)} .j-col.final .j-num{color: fff} .j-col.final .j-stage{color: var(--success-bright)} .j-col.middle .j-stage{color: var(--brand-light)} .j-arrow{display: flex; align-items: center; justify-content: center} .j-arrow .icn{ width: 32px; height: 32px; background: var(--surface); border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--brand); } .journey-summary{ margin-top: 22px; padding: 16px 22px; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; } .journey-summary .sum-block{display: flex; flex-direction: column; gap: 4px} .journey-summary .sum-block.right{text-align: right} .journey-summary .sum-label{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .journey-summary .sum-val{ font-family: var(--font-display); font-size: 22px; color: var(--success); letter-spacing: -0.01em; line-height: 1; } .journey-summary .sum-val em{font-style: normal; color: var(--brand-light); font-size: 0.7em; margin-left: 4px} @media (max-width: 800px){ .journey-row{grid-template-columns: 1fr; gap: 10px} .j-arrow{transform: rotate(90deg); height: 24px} } /* Class panel narrative + tax savings callout */ .class-callout{ margin: 28px 0; padding: 26px 28px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-left: 3px solid var(--brand); border-radius: 0 6px 6px 0; } .class-callout h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin: 0 0 10px; } .class-callout p{ font-size: 15.5px; line-height: 1.65; color: var(--ink-2); margin: 0; } .class-callout p strong{color: var(--ink); font-weight: 600} /* ============================================================ COMPARISON TABLE ============================================================ */ .comparison-table{ margin: 36px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .comparison-table-header{ background: var(--brand); color: fff; padding: 20px 28px; display: flex; justify-content: space-between; align-items: center; gap: 16px; position: relative; } .comparison-table-header::after{ content:""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, var(--success-bright), transparent 50%); } .comparison-table-header h4{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; font-weight: 500; margin: 0; text-transform: uppercase; color: fff; } .comparison-table-header .source{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; color: rgba(255,255,255,0.7); text-transform: uppercase; } .comparison-table table{width: 100%; border-collapse: collapse} .comparison-table th, .comparison-table td{ padding: 14px 18px; border-bottom: 1px solid var(--border-soft); font-size: 14px; } .comparison-table th{ background: var(--surface-2); text-align: left; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .comparison-table th:not(:first-child), .comparison-table td:not(:first-child){text-align: right} .comparison-table td:first-child{ color: var(--ink); font-weight: 500; font-size: 14px; } .comparison-table td:first-child .cls-hint{ display: block; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-top: 3px; } .comparison-table td.num{ font-family: var(--font-display); font-size: 19px; color: var(--ink); letter-spacing: -0.01em; font-weight: 700; } .comparison-table td.num.success{color: var(--success); font-weight: 500} .comparison-table tr:last-child td{border-bottom: 0} .comparison-table tr:hover td{background: var(--surface-tint)} @media (max-width: 800px){ .comparison-table{overflow-x: auto} .comparison-table table{min-width: 700px} } /* ============================================================ DUAL BAR CHART ============================================================ */ .chart-card{ margin: 36px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .chart-card-header{padding: 22px 28px 18px; border-bottom: 1px solid var(--border-soft)} .chart-card-header h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); font-weight: 700; margin: 0 0 4px; letter-spacing: -0.01em; } .chart-card-header p{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin: 0; font-weight: 500; } .chart-card-body{padding: 24px 28px 28px} .dual-bar-chart{display: flex; flex-direction: column; gap: 22px} .dual-bar-row{display: grid; grid-template-columns: 240px 1fr; gap: 24px; align-items: start} .dual-bar-row .class-name{font-size: 14px; color: var(--ink-2); padding-top: 4px} .dual-bar-row .class-name .code{ display: block; font-family: var(--font-mono); font-size: 10px; color: var(--ink-4); letter-spacing: 0.14em; font-weight: 500; text-transform: uppercase; margin-top: 2px; } .dual-bar-row .class-name .total{ display: block; font-family: var(--font-mono); font-size: 10px; color: var(--ink-5); margin-top: 6px; letter-spacing: 0.08em; } .bars-stack{display: flex; flex-direction: column; gap: 8px} .bar-pair{display: grid; grid-template-columns: 50px 1fr 60px; gap: 10px; align-items: center} .bar-pair .stage-lbl{ font-family: var(--font-mono); font-size: 10px; color: var(--ink-4); letter-spacing: 0.14em; text-transform: uppercase; } .bar-pair .track{ height: 14px; background: var(--surface-3); border-radius: 3px; position: relative; overflow: hidden; } .bar-pair .fill{ height: 100%; background: var(--brand); border-radius: 3px; width: 0; transition: width 1.4s cubic-bezier(0.22, 1, 0.36, 1); } .bar-pair.bor .fill{background: var(--brand-light)} .bar-pair.combined .fill{background: var(--success-mid)} .bar-pair .pct{ font-family: var(--font-display); font-size: 16px; color: var(--ink); text-align: right; letter-spacing: -0.005em; } .bar-pair.bor .pct{color: var(--brand-light)} .bar-pair.combined .pct{color: var(--success)} .chart-legend{ display: flex; gap: 18px; margin-top: 24px; padding-top: 18px; border-top: 1px solid var(--border-soft); flex-wrap: wrap; } .chart-legend .item{ display: flex; align-items: center; gap: 8px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-3); font-weight: 500; } .chart-legend .swatch{width: 12px; height: 12px; border-radius: 2px} @media (max-width: 720px){ .dual-bar-row{grid-template-columns: 1fr; gap: 12px} .bar-pair{grid-template-columns: 44px 1fr 50px} } /* ============================================================ PULL QUOTE ============================================================ */ .pull-quote{margin: 60px 0; padding: 0 0 0 24px; position: relative; max-width: 720px} .pull-quote::before{ content: "\201C"; position: absolute; left: -20px; top: -40px; font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: 180px; color: var(--brand); opacity: 0.18; line-height: 1; pointer-events: none; } .pull-quote blockquote{ font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: clamp(20px, 2.2vw, 28px); line-height: 1.32; color: var(--ink); letter-spacing: -0.012em; font-weight: 700; margin: 0 0 20px; } .pull-quote blockquote em{font-style: normal; color: var(--brand)} .pull-quote .attribution{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } /* ============================================================ TAKEAWAYS ============================================================ */ .takeaway-block{margin: 36px 0 12px; position: relative} .takeaway-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; } @media (max-width: 800px){.takeaway-grid{grid-template-columns: 1fr}} .takeaway{ padding: 30px 26px; border-right: 1px solid var(--border); position: relative; background: var(--surface-2); transition: background 0.25s; } .takeaway:hover{background: var(--surface)} .takeaway:last-child{border-right: 0} .takeaway .num{ font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: 48px; color: var(--brand); line-height: 1; margin-bottom: 14px; display: block; letter-spacing: -0.02em; } .takeaway h4{ font-family: var(--font-body); font-size: 16px; font-weight: 600; color: var(--ink); margin: 0 0 10px; letter-spacing: -0.005em; line-height: 1.3; } .takeaway p{font-size: 14px; color: var(--ink-3); line-height: 1.55; margin: 0} @media (max-width: 800px){ .takeaway{border-right: 0; border-bottom: 1px solid var(--border)} .takeaway:last-child{border-bottom: 0} } /* ============================================================ FAQ + METHODOLOGY + DIVIDER ============================================================ */ .faq{margin: 36px 0 12px; border-top: 1px solid var(--border)} .faq-item{border-bottom: 1px solid var(--border)} .faq-item summary{ list-style: none; cursor: pointer; padding: 24px 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--ink); letter-spacing: -0.008em; line-height: 1.35; transition: color 0.25s; } .faq-item summary::-webkit-details-marker{display: none} .faq-item summary:hover{color: var(--brand)} .faq-item summary .plus{ flex-shrink: 0; width: 30px; height: 30px; border: 1px solid var(--ink); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: var(--font-body); font-size: 16px; color: var(--ink); transition: all 0.3s; } .faq-item[open] summary{color: var(--brand)} .faq-item[open] summary .plus{ transform: rotate(45deg); background: var(--brand); color: fff; border-color: var(--brand); } .faq-item .answer{ padding: 0 0 26px; font-size: 16px; color: var(--ink-3); line-height: 1.65; max-width: 720px; } .faq-item .answer code{ font-family: var(--font-mono); font-size: 13px; background: var(--surface-2); padding: 1px 6px; border-radius: 3px; color: var(--ink); } .section-divider{display: flex; align-items: center; gap: 16px; margin: 60px 0 32px; color: var(--ink-4)} .section-divider .line{flex: 1; height: 1px; background: var(--border)} .section-divider .dot{width: 7px; height: 7px; border: 1px solid var(--brand); transform: rotate(45deg); background: fff} .methodology{ margin: 48px 0 12px; padding: 28px 32px; background: var(--surface-2); border: 1px solid var(--border-soft); border-left: 3px solid var(--brand); border-radius: 0 4px 4px 0; font-size: 14px; line-height: 1.65; color: var(--ink-3); } .methodology h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 12px; } .methodology a{color: var(--brand); text-decoration: underline} .methodology code{ font-family: var(--font-mono); font-size: 12.5px; background: var(--surface); padding: 1px 6px; border-radius: 3px; color: var(--ink); } .methodology strong{display: block; margin-bottom: 6px; color: var(--ink); font-weight: 600; margin-top: 16px} .methodology strong:first-child{margin-top: 0} /* ============================================================ SIDEBAR ============================================================ */ aside{position: sticky; top: 32px} @media (max-width: 1100px){aside{position: static}} .side-card{ background: var(--brand); color: fff; padding: 34px 28px; border-radius: 6px; position: relative; overflow: hidden; margin-bottom: 18px; } .side-card::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; } .side-card::after{ content:""; position: absolute; width: 180px; height: 180px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.06), transparent 65%); top: -60px; right: -60px; pointer-events: none; } .side-card .inner{position: relative; z-index: 2} .side-card .pill{ display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; background: rgba(255,255,255,0.14); color: fff; padding: 6px 12px; border-radius: 100px; margin-bottom: 20px; font-weight: 500; } .side-card .pill::before{ content:""; width: 6px; height: 6px; background: var(--success-bright); border-radius: 50%; box-shadow: 0 0 0 0 rgba(74,222,128,0.5); animation: livePulse 2.4s infinite; } .side-card h4{ font-family: var(--font-display); font-size: 28px; font-weight: 700; color: fff; margin: 0 0 14px; line-height: 1.15; letter-spacing: -0.018em; } .side-card h4 em{font-style: normal; color: var(--brand-light); color: B7E1F5} .side-card p{ font-size: 14px; color: rgba(255,255,255,0.78); line-height: 1.6; margin-bottom: 22px; } .cta-btn{ display: inline-flex; align-items: center; gap: 8px; background: fff; color: var(--brand); padding: 13px 22px; font-family: var(--font-body); font-weight: 600; font-size: 13px; letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none; border-radius: 4px; transition: all 0.25s; border: none; cursor: pointer; } .cta-btn:hover{background: var(--surface-3); transform: translateX(3px)} .cta-btn .arrow{width: 14px; height: 14px} .side-list{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 24px 22px; margin-bottom: 18px; } .side-list h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 16px; font-weight: 500; } .side-list ul{list-style: none; padding: 0; margin: 0} .side-list li{ padding: 12px 0; border-bottom: 1px solid var(--border-soft); font-size: 14px; color: var(--ink-2); display: flex; gap: 12px; align-items: flex-start; line-height: 1.5; } .side-list li:last-child{border-bottom: 0} .side-list li svg{ flex-shrink: 0; width: 18px; height: 18px; color: var(--success); margin-top: 2px; padding: 2px; background: var(--success-light); border-radius: 50%; } /* ============================================================ .cta-card — merged risk-free + verified differentiator card Dual-stat hero: 71% credibility + 25% economic, equal billing Supporting differentiators below, primary CTA at bottom ============================================================ */ .cta-card{ position: relative; background: linear-gradient(155deg, var(--brand-deep) 0%, var(--brand) 60%, var(--brand-mid) 100%); color: fff; border-radius: 8px; overflow: hidden; margin-bottom: 18px; box-shadow: 0 30px 70px -32px rgba(0,30,55,0.55), 0 4px 16px rgba(0,30,55,0.18); } .cta-card::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px); background-size: 44px 44px; pointer-events: none; } .cta-card::after{ content:""; position: absolute; width: 320px; height: 320px; border-radius: 50%; background: radial-gradient(circle, rgba(125,211,232,0.16), transparent 65%); top: -100px; right: -120px; pointer-events: none; filter: blur(8px); } .cta-card .cta-inner{position: relative; z-index: 2; padding: 28px 24px 26px} /* Top pill */ .cta-card .verified-pill{ display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.22em; text-transform: uppercase; background: rgba(125,211,232,0.14); color: B7E1F5; border: 1px solid rgba(125,211,232,0.28); padding: 5px 11px; border-radius: 100px; margin-bottom: 18px; font-weight: 600; } .cta-card .verified-pill::before{ content:""; width: 5px; height: 5px; background: 4ADE80; border-radius: 50%; box-shadow: 0 0 8px rgba(74,222,128,0.7); } /* DUAL-STAT HERO — twin headliners */ .cta-card .cta-stats-grid{ display: grid; grid-template-columns: 1fr 1px 1fr; gap: 18px; align-items: start; margin-bottom: 22px; } .cta-card .cta-stat{ position: relative; } .cta-card .cta-stat-divider{ height: 100%; min-height: 90px; background: linear-gradient(180deg, transparent, rgba(255,255,255,0.18), transparent); } .cta-card .cta-stat-num{ display: flex; align-items: baseline; gap: 2px; font-family: var(--font-display); font-size: 56px; font-weight: 800; line-height: 0.92; letter-spacing: -0.045em; color: B7E1F5; margin-bottom: 8px; } .cta-card .cta-stat-num .plus, .cta-card .cta-stat-num .pct{ font-size: 32px; font-weight: 700; color: B7E1F5; opacity: 0.85; letter-spacing: -0.01em; align-self: flex-start; margin-top: 8px; } .cta-card .cta-stat-num .plus{margin-right: 1px} .cta-card .cta-stat-label{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.18em; text-transform: uppercase; color: B7E1F5; font-weight: 600; margin-bottom: 6px; } .cta-card .cta-stat-caption{ font-size: 12.5px; line-height: 1.4; color: rgba(255,255,255,0.88); font-weight: 500; } .cta-card .cta-stat-caption strong{ color: fff; font-weight: 600; } /* Footnote source line — just the citation, no counts */ .cta-card .source-line{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.02em; color: rgba(183,225,245,0.58); line-height: 1.5; margin-bottom: 22px; padding-bottom: 22px; border-bottom: 1px solid rgba(255,255,255,0.08); } .cta-card .source-line sup{ font-size: 8.5px; color: B7E1F5; margin-right: 4px; letter-spacing: 0; } /* Hire bar headline + body */ .cta-card .vp-headline{ font-family: var(--font-display); font-size: 22px; font-weight: 700; color: fff; margin: 0 0 10px; line-height: 1.2; letter-spacing: -0.018em; } .cta-card .vp-headline em{ font-style: normal; color: B7E1F5; } .cta-card .vp-body{ font-size: 13px; color: rgba(255,255,255,0.78); line-height: 1.55; margin: 0 0 22px; } /* Differentiator list — supporting */ .cta-card .diff-list{ list-style: none; padding: 0; margin: 0 0 24px; } .cta-card .diff-list li{ display: flex; align-items: flex-start; gap: 11px; padding: 9px 0; font-size: 13px; line-height: 1.45; color: rgba(255,255,255,0.92); border-bottom: 1px solid rgba(255,255,255,0.06); } .cta-card .diff-list li:last-child{border-bottom: none; padding-bottom: 0} .cta-card .diff-list li:first-child{padding-top: 0} .cta-card .diff-list .check{ flex-shrink: 0; width: 18px; height: 18px; border-radius: 50%; background: rgba(125,211,232,0.18); border: 1px solid rgba(125,211,232,0.42); display: inline-flex; align-items: center; justify-content: center; margin-top: 1px; } .cta-card .diff-list .check svg{ width: 10px; height: 10px; color: B7E1F5; } .cta-card .diff-list strong{ color: fff; font-weight: 600; } /* Primary CTA */ .cta-card .cta-btn-primary{ display: flex; align-items: center; justify-content: center; gap: 9px; width: 100%; background: fff; color: var(--brand-deep); padding: 15px 22px; font-family: var(--font-body); font-weight: 700; font-size: 13.5px; letter-spacing: 0.06em; text-transform: uppercase; text-decoration: none; border-radius: 5px; transition: all 0.25s ease; border: none; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.12); box-sizing: border-box; } .cta-card .cta-btn-primary:hover{ background: var(--surface-3); transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0,0,0,0.18); } .cta-card .cta-btn-primary .arrow{width: 15px; height: 15px} /* Reassurance line under CTA */ .cta-card .reassurance{ margin-top: 14px; text-align: center; font-size: 11.5px; line-height: 1.5; color: rgba(183,225,245,0.78); } .cta-card .reassurance svg{ display: inline-block; vertical-align: -2px; margin-right: 5px; width: 12px; height: 12px; color: rgba(125,211,232,0.78); } /* ============================================================ RESPONSIVE — tablet (≤768px) and mobile (≤480px) ============================================================ */ @media (max-width: 768px){ .cta-card .cta-inner{padding: 26px 22px 24px} .cta-card .cta-stat-num{font-size: 50px} .cta-card .cta-stat-num .plus, .cta-card .cta-stat-num .pct{font-size: 28px; margin-top: 7px} } @media (max-width: 480px){ .cta-card .cta-inner{padding: 24px 20px 22px} /* Stack the two stats vertically so neither shrinks to illegibility */ .cta-card .cta-stats-grid{ grid-template-columns: 1fr; gap: 16px; margin-bottom: 20px; } .cta-card .cta-stat-divider{ height: 1px; min-height: 0; width: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.18), transparent); } .cta-card .cta-stat-num{ font-size: 54px; margin-bottom: 6px; } .cta-card .cta-stat-num .plus, .cta-card .cta-stat-num .pct{ font-size: 30px; margin-top: 8px; } .cta-card .vp-headline{font-size: 20px} .cta-card .vp-body{font-size: 12.5px} .cta-card .diff-list li{font-size: 12.5px} .cta-card .cta-btn-primary{ font-size: 13px; padding: 14px 18px; letter-spacing: 0.05em; } } .side-spread{ background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; padding: 24px; position: relative; } .side-spread::before{ content:""; position: absolute; left: 0; top: 24px; bottom: 24px; width: 2px; background: var(--brand); } .side-spread .label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); margin-bottom: 8px; font-weight: 500; } .side-spread h6{ font-family: var(--font-display); font-size: 19px; color: var(--ink); font-weight: 700; line-height: 1.25; margin: 0 0 16px; letter-spacing: -0.008em; } .side-spread .spread-row{ display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 8px; align-items: baseline; padding: 8px 0; border-top: 1px solid var(--border-soft); font-size: 12.5px; color: var(--ink-3); } .side-spread .spread-row:first-of-type{border-top: 0} .side-spread .spread-row .sk{line-height: 1.3} .side-spread .spread-row .sv{ font-family: var(--font-display); font-size: 17px; color: var(--brand); font-weight: 700; letter-spacing: -0.008em; } .side-spread .spread-row.commercial .sv{color: var(--success)} /* ============================================================ FINAL CTA ============================================================ */ .final-cta-wrap{padding: 0 32px; margin-top: 36px} @media (max-width: 700px){.final-cta-wrap{padding: 0 20px}} .final-cta{ max-width: 1240px; margin: 0 auto; position: relative; background: linear-gradient(135deg, var(--brand-deep) 0%, var(--brand) 60%, var(--brand-mid) 100%); color: fff; overflow: hidden; border-radius: 6px; padding: 72px 64px; } .final-cta::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 56px 56px; pointer-events: none; mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); } .final-cta::after{ content:""; position: absolute; bottom: -160px; right: -160px; width: 440px; height: 440px; background: radial-gradient(circle, rgba(255,255,255,0.1), transparent 65%); border-radius: 50%; pointer-events: none; } .final-cta-inner{ position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 56px; align-items: center; } @media (max-width: 920px){ .final-cta-inner{grid-template-columns: 1fr; gap: 40px} .final-cta{padding: 48px 32px} } .final-cta .cta-kicker{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(255,255,255,0.7); font-weight: 500; margin-bottom: 22px; display: inline-flex; align-items: center; gap: 12px; } .final-cta .cta-kicker::before{content:""; width: 28px; height: 1px; background: rgba(255,255,255,0.4)} .final-cta h2{ font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 36px); font-weight: 700; line-height: 1.04; color: fff; margin-bottom: 22px; letter-spacing: -0.022em; } .final-cta h2 em{font-style: normal; color: var(--brand-light); color: B7E1F5} .final-cta p{ font-size: 17px; color: rgba(255,255,255,0.82); line-height: 1.6; margin-bottom: 32px; max-width: 540px; } .cta-row{display: flex; gap: 14px; flex-wrap: wrap} .cta-btn.ghost{ background: transparent; color: fff; border: 1px solid rgba(255,255,255,0.3); } .cta-btn.ghost:hover{background: rgba(255,255,255,0.08); color: fff; transform: translateX(3px)} .cta-spread{ background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); border-radius: 6px; padding: 28px 26px; position: relative; } .cta-spread::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--success-bright); border-radius: 6px 0 0 6px; } .cta-spread .cta-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.65); margin-bottom: 16px; font-weight: 500; } .cta-spread .cta-row-stat{ display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: baseline; padding: 7px 0; border-top: 1px solid rgba(255,255,255,0.1); font-size: 12.5px; color: rgba(255,255,255,0.75); } .cta-spread .cta-row-stat:first-of-type{border-top: 0} .cta-spread .cta-row-stat .v{ font-family: var(--font-display); font-size: 18px; color: fff; font-weight: 700; letter-spacing: -0.008em; } .cta-spread .cta-row-stat .v em{color: var(--success-bright); font-style: normal; color: var(--brand-light)} /* ============================================================ FOOTER ============================================================ */ footer{ background: var(--brand-deep); color: rgba(255,255,255,0.6); padding: 40px 0 36px; font-size: 13px; margin-top: 60px; } footer .row{ display: flex; justify-content: space-between; flex-wrap: wrap; gap: 16px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; } footer .row a{color: fff; text-decoration: none; opacity: 0.7; transition: opacity 0.25s} footer .row a:hover{opacity: 1} /* ============================================================ ARTICLE BYLINE / META ============================================================ */ .article-byline{ display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--border-soft); font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .article-byline .by-item{display: flex; align-items: center; gap: 8px} .article-byline .by-item svg{width: 14px; height: 14px; color: var(--brand)} .article-byline .by-item .by-strong{color: var(--ink-2); font-weight: 600} .article-byline .by-sep{width: 4px; height: 4px; background: var(--ink-5); border-radius: 50%; opacity: 0.5} /* ============================================================ STICKY HIRE-US BAR (top of article) ============================================================ */ .hire-bar{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 14px 20px; margin: 0 0 48px; display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; box-shadow: var(--shadow-sm); position: relative; } .hire-bar::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--success); border-radius: 6px 0 0 6px; } .hire-bar .hb-text{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 700; line-height: 1.35; letter-spacing: -0.005em; } .hire-bar .hb-text em{font-style: normal; color: var(--brand-light); color: var(--brand)} .hire-bar .hb-actions{display: flex; gap: 10px; align-items: center; flex-wrap: wrap} .hire-bar .hb-note{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } @media (max-width: 720px){ .hire-bar{padding: 16px 18px} .hire-bar .hb-text{font-size: 16px} } /* ============================================================ INLINE CTA BLOCK (mid-article) ============================================================ */ .inline-cta{ margin: 48px 0; padding: 32px 36px; background: linear-gradient(135deg, var(--brand) 0%, var(--brand-light) 100%); color: fff; border-radius: 6px; position: relative; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 32px; align-items: center; } .inline-cta::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; mask-image: radial-gradient(ellipse at top right, rgba(0,0,0,0.5), transparent 75%); -webkit-mask-image: radial-gradient(ellipse at top right, rgba(0,0,0,0.5), transparent 75%); } .inline-cta::after{ content:""; position: absolute; top: -80px; right: -80px; width: 240px; height: 240px; background: radial-gradient(circle, rgba(255,255,255,0.1), transparent 65%); border-radius: 50%; pointer-events: none; } .inline-cta .ic-content{position: relative; z-index: 2} .inline-cta .ic-kicker{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--success-bright); font-weight: 500; margin-bottom: 10px; } .inline-cta h3{ font-family: var(--font-display); font-size: clamp(22px, 2.4vw, 28px); color: fff; margin: 0 0 8px; font-weight: 700; letter-spacing: -0.012em; line-height: 1.2; } .inline-cta h3 em{font-style: normal; color: var(--brand-light); color: B7E1F5} .inline-cta p{ font-size: 14.5px; color: rgba(255,255,255,0.82); margin: 0; line-height: 1.55; max-width: 540px; } .inline-cta .ic-actions{ display: flex; gap: 10px; flex-wrap: wrap; position: relative; z-index: 2; } @media (max-width: 760px){ .inline-cta{grid-template-columns: 1fr; gap: 22px; padding: 28px 26px} } /* ============================================================ CLASS PANEL CTA (inside each tab) ============================================================ */ .panel-cta{ margin: 22px 0 0; padding: 20px 24px; background: var(--surface); border: 1px solid var(--border); border-left: 3px solid var(--success); border-radius: 0 4px 4px 0; display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; } .panel-cta .pc-text{ font-size: 14.5px; color: var(--ink-2); line-height: 1.5; max-width: 540px; } .panel-cta .pc-text strong{color: var(--ink); font-weight: 600} .panel-cta .cta-btn{ background: var(--brand); color: fff; padding: 12px 20px; font-size: 12.5px; } .panel-cta .cta-btn:hover{background: var(--brand-light); color: fff} /* ============================================================ SERVICE AREA SIDEBAR BLOCK ============================================================ */ .side-service{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 22px 22px 20px; margin-bottom: 18px; } .side-service h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 8px; font-weight: 500; } .side-service h6{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 700; line-height: 1.25; margin: 0 0 14px; letter-spacing: -0.008em; } .side-service .muni-list{ display: flex; flex-wrap: wrap; gap: 6px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; } .side-service .muni{ padding: 4px 9px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 3px; color: var(--ink-3); transition: all 0.2s; } .side-service .muni:hover{ background: var(--brand-100); color: var(--brand); border-color: var(--brand-200); cursor: default; } .side-service .muni-note{ margin-top: 12px; font-size: 12px; color: var(--ink-4); line-height: 1.5; } /* ============================================================ CONCLUSION CTA STRIP ============================================================ */ .conclusion-cta{ margin: 32px 0 8px; padding: 22px 26px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 6px; display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; } .conclusion-cta .cc-text{ font-family: var(--font-display); font-size: 19px; color: var(--ink); font-weight: 700; line-height: 1.4; letter-spacing: -0.008em; max-width: 560px; } .conclusion-cta .cc-text em{font-style: normal; color: var(--brand-light); color: var(--brand)} .conclusion-cta .cta-btn{background: var(--brand); color: fff} .conclusion-cta .cta-btn:hover{background: var(--brand-light); color: fff} /* ============================================================ TRUST BANNER (below status bar) ============================================================ */ .trust-banner{ background: var(--surface-2); border-bottom: 1px solid var(--border-soft); padding: 14px 0; } .trust-items{ display: flex; flex-wrap: wrap; gap: 28px; justify-content: center; font-size: 13px; color: var(--ink-3); } .trust-item{ display: flex; align-items: center; gap: 8px; } .trust-item svg{ width: 16px; height: 16px; color: var(--success); flex-shrink: 0; } .trust-item strong{color: var(--ink); font-weight: 600} @media (max-width: 720px){ .trust-items{gap: 14px; font-size: 12px} .trust-item svg{width: 14px; height: 14px} } /* ============================================================ "OFFICIAL SOURCE" callout (different from biz CTA) ============================================================ */ .gov-source{ margin: 24px 0; padding: 18px 22px; background: F0F7FC; border: 1px solid C4DAEA; border-left: 3px solid var(--info); border-radius: 0 6px 6px 0; } .gov-source .gs-label{ display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--info); font-weight: 500; margin-bottom: 8px; } .gov-source .gs-label svg{width: 14px; height: 14px} .gov-source p{ font-size: 14.5px; line-height: 1.6; color: var(--ink-2); margin: 0; } .gov-source a{ color: var(--info); text-decoration: none; border-bottom: 1px solid currentColor; font-weight: 500; } .gov-source a:hover{color: var(--brand)} /* ============================================================ AUTHOR BIO (E-E-A-T) ============================================================ */ .author-bio{ margin: 48px 0 0; padding: 28px 32px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; display: grid; grid-template-columns: 60px minmax(0, 1fr); gap: 22px; align-items: start; } .author-bio .author-avatar{ width: 60px; height: 60px; border-radius: 50%; background: var(--brand); display: flex; align-items: center; justify-content: center; color: fff; font-family: var(--font-display); font-size: 28px; } .author-bio .author-info .author-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 4px; } .author-bio .author-info h5{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 6px; font-weight: 700; letter-spacing: -0.01em; } .author-bio .author-info p{ font-size: 14px; color: var(--ink-3); line-height: 1.55; margin: 0 0 8px; } .author-bio .author-credentials{ display: flex; flex-wrap: wrap; gap: 6px; } .author-bio .author-credentials .cred{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.08em; padding: 3px 9px; background: var(--surface); border: 1px solid var(--border-soft); border-radius: 3px; color: var(--ink-3); } @media (max-width: 600px){ .author-bio{grid-template-columns: 1fr; gap: 14px} } /* ============================================================ TL;DR (top of article) ============================================================ */ .tldr{ margin: 0 0 36px; padding: 24px 28px; background: linear-gradient(135deg, var(--surface-tint) 0%, var(--surface-2) 100%); border: 1px solid var(--border); border-radius: 6px; position: relative; } .tldr::before{ content:""; position: absolute; top: 0; bottom: 0; left: 0; width: 4px; background: var(--brand); border-radius: 6px 0 0 6px; } .tldr .tldr-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 12px; } .tldr h2{ font-family: var(--font-display); font-size: 20px; color: var(--ink); margin: 0 0 14px; font-weight: 700; border: 0; padding: 0; } .tldr ul{ margin: 0; padding-left: 20px; font-size: 15px; line-height: 1.6; color: var(--ink-2); } .tldr ul li{ margin-bottom: 6px; padding-left: 4px; } .tldr ul li strong{color: var(--ink)} /* Citation tag style */ .cite{ font-size: 0.85em; vertical-align: super; line-height: 1; color: var(--brand); text-decoration: none; font-family: var(--font-mono); padding: 1px 4px; background: var(--brand-100); border-radius: 2px; margin-left: 2px; font-weight: 500; } .cite:hover{background: var(--brand-200); color: var(--brand-deep)} /* Sources block at end */ .sources-block{ margin: 60px 0 0; padding: 32px 36px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; } .sources-block h3{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 18px; font-weight: 700; } .sources-block ol{ margin: 0; padding-left: 22px; font-size: 13.5px; line-height: 1.7; color: var(--ink-3); } .sources-block ol li{ margin-bottom: 8px; padding-left: 4px; } .sources-block ol li a{ color: var(--brand); text-decoration: none; border-bottom: 1px solid var(--border); } .sources-block ol li a:hover{ border-bottom-color: var(--brand); color: var(--brand-light); } /* Improved late fee calculator */ .fee-calc{ margin: 28px 0; padding: 28px 32px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; box-shadow: var(--shadow-md); } .fee-calc h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 6px; font-weight: 700; letter-spacing: -0.01em; } .fee-calc h4 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .fee-calc .calc-sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 22px; font-weight: 500; } .fee-calc .calc-controls{ display: grid; grid-template-columns: 1fr 1fr; gap: 22px; margin-bottom: 24px; } .fee-calc .calc-field label{ display: block; font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 8px; font-weight: 500; } .fee-calc .calc-field input, .fee-calc .calc-field select{ width: 100%; padding: 12px 14px; border: 1px solid var(--border); border-radius: 4px; font-family: var(--font-body); font-size: 15px; color: var(--ink); background: var(--surface); transition: border 0.2s; } .fee-calc .calc-field input:focus, .fee-calc .calc-field select:focus{ outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-100); } .fee-calc .calc-result{ padding: 20px 24px; background: var(--brand); color: fff; border-radius: 4px; text-align: center; } .fee-calc .calc-result .calc-r-label{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.7); margin-bottom: 8px; font-weight: 500; } .fee-calc .calc-result .calc-r-amount{ font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 36px); font-weight: 700; line-height: 1; letter-spacing: -0.025em; } .fee-calc .calc-result .calc-r-breakdown{ margin-top: 10px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em; color: rgba(255,255,255,0.65); } @media (max-width: 600px){ .fee-calc .calc-controls{grid-template-columns: 1fr; gap: 14px} } /* Bottom-dock section navigation */ body{padding-bottom: 80px} .bottom-dock{ position: fixed; bottom: 16px; left: 16px; right: 16px; z-index: 100; max-width: 1100px; margin: 0 auto; background: var(--brand-deep, 004163); border-radius: 8px; box-shadow: 0 8px 28px rgba(0,0,0,0.18), 0 2px 6px rgba(0,0,0,0.08); opacity: 0; transform: translateY(12px); transition: opacity 0.25s, transform 0.25s; pointer-events: none; overflow: hidden; } .bottom-dock.visible{ opacity: 1; transform: translateY(0); pointer-events: auto; } .bottom-dock .dock-progress{ height: 2px; background: rgba(255,255,255,0.1); } .bottom-dock .dock-progress-fill{ height: 100%; width: 0%; background: linear-gradient(90deg, var(--brand-light, 0B6697), B7E1F5); transition: width 0.15s linear; } .bottom-dock .dock-inner{ display: flex; align-items: center; gap: 10px; padding: 10px 14px; } .bottom-dock .dock-list{ display: flex; gap: 4px; flex: 1; overflow-x: auto; scrollbar-width: none; } .bottom-dock .dock-list::-webkit-scrollbar{display: none} .bottom-dock .dock-item{ display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 99px; background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.75); text-decoration: none; font-family: var(--font-body); font-size: 12px; font-weight: 500; white-space: nowrap; transition: all 0.15s; border: 1px solid transparent; } .bottom-dock .dock-item:hover{ background: rgba(255,255,255,0.12); color: fff; } .bottom-dock .dock-item.active{ background: var(--brand-light, 0B6697); color: fff; } .bottom-dock .dock-item .dn{ font-size: 9.5px; letter-spacing: 0.14em; font-weight: 700; opacity: 0.7; } .bottom-dock .dock-item.active .dn{opacity: 0.9} .bottom-dock .dock-cta{ flex-shrink: 0; display: inline-flex; align-items: center; gap: 4px; padding: 8px 14px; border-radius: 99px; background: fff; color: var(--brand-deep, 004163); text-decoration: none; font-family: var(--font-body); font-size: 12px; font-weight: 700; white-space: nowrap; transition: all 0.15s; } .bottom-dock .dock-cta:hover{ background: B7E1F5; transform: translateX(2px); } @media (max-width: 720px){ .bottom-dock{bottom: 8px; left: 8px; right: 8px} .bottom-dock .dock-inner{padding: 8px 10px} .bottom-dock .dock-item{padding: 5px 10px; font-size: 11px} .bottom-dock .dock-item .dl{display: none} .bottom-dock .dock-item.active .dl{display: inline} .bottom-dock .dock-cta{padding: 7px 12px; font-size: 11.5px} } /* ============================================================ PAYMENT-METHOD GRID (replaces class-tabs from Leyden) ============================================================ */ .method-tabs-wrap{margin: 32px 0 24px} .method-tabs{ display: flex; gap: 4px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px 6px 0 0; padding: 6px; overflow-x: auto; position: relative; z-index: 2; scrollbar-width: thin; } .method-tab{ flex: 1; background: transparent; border: 0; padding: 14px 12px 12px; font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-3); cursor: pointer; border-radius: 4px; transition: all 0.2s; text-align: left; min-width: 130px; line-height: 1.25; } .method-tab:hover{background: var(--surface); color: var(--ink)} .method-tab.active{ background: var(--brand); color: fff; box-shadow: var(--shadow-sm); } .method-tab .mt-label{ display: block; font-size: 13.5px; font-weight: 600; letter-spacing: -0.008em; margin-bottom: 2px; } .method-tab .mt-hint{ display: block; font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500; opacity: 0.7; } .method-panel{display: none; animation: fadeUp 0.4s ease-out} .method-panel.active{display: block} .method-panel-header{ background: var(--surface); border: 1px solid var(--border); border-top: 0; padding: 24px 28px 22px; border-radius: 0 0 6px 6px; margin-bottom: 24px; display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 32px; align-items: center; } .method-panel-header .mph-text .mph-tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 8px; } .method-panel-header .mph-text h3{ font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 28px); font-weight: 400; color: var(--ink); letter-spacing: -0.015em; line-height: 1.1; margin: 0 0 8px; } .method-panel-header .mph-text h3 em{font-style: normal; color: var(--brand-light); font-weight: 600} .method-panel-header .mph-text .mph-meta{ font-size: 14px; color: var(--ink-4); line-height: 1.45; } .method-panel-header .mph-stats{ display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } .method-panel-header .mph-cell{ padding: 12px 14px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 4px; } .method-panel-header .mph-cell .mph-cl{ font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 5px; } .method-panel-header .mph-cell .mph-cv{ font-family: var(--font-display); font-size: 18px; color: var(--ink); letter-spacing: -0.012em; line-height: 1.2; font-weight: 400; } .method-panel-header .mph-cell .mph-cv.success{color: var(--success)} .method-panel-header .mph-cell .mph-cv.alert{color: var(--alert)} @media (max-width: 800px){ .method-panel-header{grid-template-columns: 1fr; gap: 24px} } /* Step-by-step inside method panels */ .method-steps{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 32px 36px; margin-bottom: 16px; } .method-steps h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 22px; font-weight: 400; letter-spacing: -0.01em; } .method-steps h4 em{font-style: normal; color: var(--brand-light); font-weight: 600} .step-row{ display: grid; grid-template-columns: 44px 1fr; gap: 18px; padding: 16px 0; border-top: 1px solid var(--border-soft); } .step-row:first-of-type{border-top: 0; padding-top: 0} .step-row .step-num{ font-family: var(--font-display); color: var(--brand-light); font-size: 32px; color: var(--brand); line-height: 1; letter-spacing: -0.02em; } .step-row .step-content h5{ font-family: var(--font-body); font-size: 16px; font-weight: 600; color: var(--ink); margin: 0 0 4px; letter-spacing: -0.005em; } .step-row .step-content p{ font-size: 14.5px; color: var(--ink-3); line-height: 1.55; margin: 0; } .step-row .step-content p code{ font-family: var(--font-mono); font-size: 12.5px; background: var(--surface-2); padding: 1px 6px; border-radius: 3px; color: var(--ink); } /* Deadline / fact strip (replaces stat-band content but reuses the look) */ /* Warning panel */ .warning-panel{ margin: 28px 0; padding: 22px 26px 24px; background: FEF7F0; border: 1px solid F4D5BA; border-left: 3px solid var(--alert); border-radius: 0 6px 6px 0; } .warning-panel h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--alert); font-weight: 500; margin: 0 0 10px; display: flex; align-items: center; gap: 8px; } .warning-panel h5 .icn{ width: 14px; height: 14px; } .warning-panel p{ font-size: 15px; line-height: 1.6; color: var(--ink-2); margin: 0 0 10px; } .warning-panel p:last-child{margin: 0} .warning-panel strong{color: var(--ink); font-weight: 600} /* Big "key deadline" block (replaces the journey block) */ .deadline-block{ margin: 28px 0; padding: 36px 32px 40px; background: var(--brand); color: fff; border-radius: 6px; position: relative; overflow: hidden; } .deadline-block::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); } .deadline-block::after{ content:""; position: absolute; top: -100px; right: -100px; width: 260px; height: 260px; background: radial-gradient(circle, rgba(255,255,255,0.08), transparent 65%); border-radius: 50%; pointer-events: none; } .deadline-block .head{position: relative; z-index: 2; text-align: center; margin-bottom: 30px} .deadline-block h4{ font-family: var(--font-display); font-size: clamp(22px, 2.6vw, 28px); color: fff; margin: 0 0 6px; font-weight: 400; letter-spacing: -0.015em; } .deadline-block h4 em{font-style: normal; color: B7E1F5; font-weight: 600} .deadline-block .sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.65); font-weight: 500; } .deadline-row{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; position: relative; z-index: 2; } .deadline-col{ text-align: center; padding: 22px 14px 20px; background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); border-radius: 4px; } .deadline-col.featured{ background: rgba(255,255,255,0.16); border-color: var(--success-bright); } .deadline-col .dc-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.65); margin-bottom: 10px; font-weight: 500; } .deadline-col .dc-num{ font-family: var(--font-display); font-size: clamp(22px, 2.8vw, 30px); font-weight: 400; color: fff; letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .deadline-col .dc-stage{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--success-bright); font-weight: 500; } @media (max-width: 700px){ .deadline-row{grid-template-columns: 1fr; gap: 10px} } /* Fee comparison table (compact version of comparison-table for fees) */ .fee-table{ margin: 28px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .fee-table-header{ background: var(--brand); color: fff; padding: 18px 28px; display: flex; justify-content: space-between; align-items: center; gap: 16px; position: relative; } .fee-table-header::after{ content:""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, var(--success-bright), transparent 50%); } .fee-table-header h4{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; font-weight: 500; margin: 0; text-transform: uppercase; color: fff; } .fee-table-header .source{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; color: rgba(255,255,255,0.7); text-transform: uppercase; } .fee-table table{width: 100%; border-collapse: collapse} .fee-table th, .fee-table td{ padding: 14px 18px; border-bottom: 1px solid var(--border-soft); font-size: 14px; vertical-align: top; } .fee-table th{ background: var(--surface-2); text-align: left; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .fee-table th:not(:first-child), .fee-table td:not(:first-child){text-align: right} .fee-table td:first-child{ color: var(--ink); font-weight: 500; font-size: 14px; } .fee-table td:first-child .fee-hint{ display: block; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-top: 3px; } .fee-table td.num{ font-family: var(--font-display); font-size: 17px; color: var(--ink); letter-spacing: -0.01em; font-weight: 400; } .fee-table td.num.success{color: var(--success); font-weight: 500} .fee-table td.num.alert{color: var(--alert); font-weight: 500} .fee-table tr:last-child td{border-bottom: 0} .fee-table tr:hover td{background: var(--surface-tint)} @media (max-width: 800px){ .fee-table{overflow-x: auto} .fee-table table{min-width: 600px} } /* ============================================================ PIN FINDER LIST (Find Your PIN section) ============================================================ */ .pin-finder-list{ list-style: none; padding: 0; margin: 16px 0 24px; } .pin-finder-list li{ margin-bottom: 12px; font-size: 16px; line-height: 1.6; color: var(--ink-2); padding-left: 0; } .pin-finder-list li:not(.pin-finder-fast){ padding-left: 24px; position: relative; } .pin-finder-list li:not(.pin-finder-fast)::before{ content: '•'; position: absolute; left: 8px; color: var(--brand); font-weight: 600; } .pin-finder-fast{ background: linear-gradient(135deg, F0FDF4 0%, FAFFFC 100%); border: 1px solid BBEFCB; border-left: 3px solid var(--success); border-radius: 0 6px 6px 0; padding: 16px 20px 18px; margin-bottom: 16px; } .pin-finder-tag{ display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--success); font-weight: 600; margin-bottom: 8px; } .pin-finder-tag svg{ width: 12px; height: 12px; } .pin-finder-content strong{ color: var(--ink); font-weight: 600; } .pin-finder-content a{ color: var(--success); font-weight: 500; text-decoration: none; border-bottom: 1px solid currentColor; } .pin-finder-content a:hover{ color: var(--brand); } System online · Tax bills available now Cook County · 2025 Tax Year · First Installment · Due April 1, 2026 Sourced from Cook County Treasurer, Assessor & IL Dept. of Revenue Last reviewed May 2026 Reviewed by Cook County Tax Appeals attorneys & CPAs 2026 Payment Guide Tax Year 2025 First Installment Pay your Cook County property taxes — without paying more than you have to. For the 2025 tax year, the First Installment is due Wednesday, April 1, 2026 . There are six official ways to pay — and one is completely free. This guide walks through each method, what to bring, the fees that apply, and how a Cook County property tax appeal can lower next year's bill. Due date April 1, 2026 First Installment 55% of 2024 total Late charge 0.75%/mo Free option Online ACH Cook County Tax Appeals Updated May 21, 2026 10 min read Option 1 · Fastest & free Online (ACH) $0 fee Posts in 2–3 business days Option 2 · Convenience cost Credit / debit card 2.10 % Third-party · non-refundable Option 3 · USPS postmark counts By mail $0 fee Allow up to 2 weeks to post Option 4 · ~400 IL Chase branches Chase or community bank $0 fee Coupon required Late after April 1, 2026 Late charge 0.75 %/mo 9% per year (cut from 18% in 2024) Partial payments accepted — interest still accrues on the unpaid balance. Bills mailed ~ 0 By March 2, 2026 First Installment is 0 % Of 2024's total tax Days until April 1 — Pay early to avoid risk Late charge per month 0.75 % Down from 1.5% (2024 reform) Treasurer phone 312-443-5100 Mon–Fri 8:30am–4:30pm Paying your bill is one part. Lowering next year's is the other. Get a property-specific savings estimate in 60 seconds. $0 upfront · 25% of savings only Calculate my savings ★ TL;DR — The 30-Second Version For homeowners short on time Due date: Wednesday, April 1, 2026 (Tax Year 2025 First Installment) [1] Cheapest way to pay: Online ACH from your bank account at cookcountytreasurer.com — $0 fee [2] If you're late: 0.75% per month interest applies to the unpaid balance — mandated by Illinois law [3] Bills mailed: By March 2, 2026 (~1.8 million bills sent) [1] Want to pay less next year? File a Cook County property tax appeal — data shows appeals lower property tax bills for every property class If you searched "pay Cook County property taxes," you almost certainly want two things — to pay your bill on time, and to avoid paying more than you legally owe. This guide answers both, using only official sources from the Cook County Treasurer, Cook County Assessor, and Illinois Department of Revenue. The 2025 Tax Year First Installment is due Wednesday, April 1, 2026 . 01 · The basics How Cook County property taxes actually work Four separate Cook County offices each handle a different piece of your tax bill, and confusing them is the most common reason owners overpay. The brief version: Cook County Assessor — sets your property's value. The Assessor does not collect payments and does not set tax rates. Most successful property tax appeals start here. Cook County Board of Review — an independent three-member panel that hears appeals after the Assessor closes. Often the higher-yield stage for residential owners. Cook County Clerk — calculates the tax rate for your specific area based on local taxing district budgets (schools, parks, the city, the county). Also handles delinquent tax redemption. Cook County Treasurer — prints, mails, and collects the bill. This is the office you actually pay. The Treasurer also handles refunds and the annual tax sale. Two installments, two different rules Cook County bills property taxes in two installments each year. They behave very differently. The First Installment is an estimate. It's set at exactly 55% of the previous year's total tax, regardless of what's happened to your property since. Importantly, your exemptions don't apply to the First Installment — they're applied to the Second Installment later in the year. So even seniors and homeowners with active exemptions pay the unreduced 55% in the spring. The Second Installment is the true reconciliation. It uses your current assessed value, the latest local tax rates, and all of your applicable exemptions to produce the actual total — minus whatever you already paid in the spring. It typically arrives in late summer or fall. Current 2025 tax year deadlines Cook County Treasurer · Tax year 2025 (billed and paid in 2026) Bills mailed March 2, 2026 ~1.8M bills First Installment due April 1, 2026 By 11:59 PM Second Installment Summer/Fall 2026 Date TBD Why April 1 instead of the usual March 1? The Cook County government secured a one-month legislative extension for the 2025 cycle because the prior installment (Tax Year 2024 Second Installment, due December 15, 2025) ran late due to billing-service issues. The extension is one-time only — the standard March deadline returns next year unless something changes again. 02 · Find your PIN Find your Property Index Number and bill Every Cook County property has a unique 14-digit Property Index Number (PIN) . You need it to pay, to look up your bill, and to file any appeal. PINs look like this: 12-34-567-890-1234 Four ways to find yours: Fastest Cook County Tax Appeals search — enter your address at cookcountytaxappeal.com for one-click access to your PIN, current tax bill, exemption history, and an instant savings estimate. Aggregates data from the Treasurer, Assessor, and Property Tax Portal so you don't need to visit multiple government sites. Cook County Treasurer: cookcountytreasurer.com — search by property address or PIN. Shows current bill, payment history, exemptions, and refund status [2] . Cook County Property Tax Portal: cookcountypropertyinfo.com — the inter-agency portal showing data from the Assessor, Treasurer, Clerk, and Board of Review in one place. Cook County Assessor: cookcountyassessor.com — search by address for assessed value, exemption history, and property characteristics [4] . Official source The Cook County Treasurer's payment portal at cookcountytreasurer.com is the only payment system officially accepted by Cook County. Avoid any third-party site that asks for payment. Once you have your PIN, you can view: current and prior tax bill amounts, payment history, property classification, recorded exemptions, refund status, and direct links to the Treasurer's payment system. If you plan to file an appeal Save your 14-digit PIN somewhere accessible. Every official filing with the Assessor, the Board of Review, or the Illinois Property Tax Appeal Board (PTAB) requires it. The same number opens your records across all three agencies. 03 · How to pay Six ways to pay your Cook County property tax bill The Treasurer's Office accepts six official payment methods. Most owners use online ACH because it's free and posts within a few business days. But there are good reasons to use the others — partial payments, prior-year balances, or simply not having a bank account that supports ACH. Use the tabs below to compare each option side by side. Online (ACH) Free · 2–3 days Credit / debit 2.10% fee By mail USPS postmark Chase Bank ~400 IL branches Community bank 100+ partners In person Treasurer's Office Recommended · most owners Online from your bank account Pay directly via ACH from a checking or savings account on the official Cook County Treasurer website. This is the only online payment method the Treasurer endorses — and it's free. Fee $0 Posts in 2–3 business days Pay online step by step 1 Find your PIN The fastest way is the Cook County Tax Appeals search — enter your address for one-click PIN lookup. Alternatively, use cookcountytreasurer.com (Treasurer) or cookcountypropertyinfo.com (Property Tax Portal). 2 Open the Treasurer's payment portal Go to cookcountytreasurer.com and select the blue "Pay Online for Free" box. A photo of your property should appear when you enter your PIN or address — confirm it's the correct parcel before proceeding. 3 Enter your bank routing & account number The portal uses ACH debit. Have your check or bank account info ready. There is no fee from the Treasurer or from your bank for this method. 4 Verify the payment posted Within 2–3 business days, your payment status on the Treasurer's portal should update to "Paid." Save the confirmation page or email. If the status hasn't changed after 5 business days, call 312-443-5100 . Avoid third-party sites Several websites charge fees to forward payments to the Treasurer. None of these are official. Always start from cookcountytreasurer.com directly — anywhere else, you're paying extra to a middleman. Convenient · costs extra Online with a credit or debit card The Treasurer accepts credit and debit cards online, but a third-party processor — not the county — charges a 2.10% convenience fee. The fee is non-refundable, even if you file a successful appeal. Fee 2.10% On a $5,000 bill $105 extra When card payment makes sense For most owners, the 2.10% fee on a property tax payment is far more than any rewards card cashback rate (which top out around 2%). But if you're earning a one-time signup bonus, hitting a minimum-spend threshold, or you genuinely need the float between charge date and statement due date, the math can work — just calculate the full cost before you charge. The card fee is non-refundable If your appeal is later successful and the Treasurer issues you a refund, you'll get back the tax overpayment — but not the 2.10% processing fee. The fee is collected by an outside vendor and the county can't return it. Free · USPS postmark counts By mail Mail a check with your tax bill payment coupon to the Treasurer's lockbox. The USPS postmark date is your payment date, so a check mailed on April 1 and received April 7 still counts as on time. Fee $0 Allow to post ~2 weeks What to include in your mailed payment 1 The original payment coupon Detach the bottom of your tax bill. Don't send a photocopy or a printed image from a screen — the Treasurer's lockbox processes by scanning the coupon. 2 A check with all the right info written on it Write your 14-digit PIN, taxpayer name, property address (including unit number), mailing address, phone number, email, and tax year/installment on the check itself. If anything's unclear, the lockbox will reach out — which delays posting. 3 Send to the correct PO box Cook County Treasurer PO Box 805438 Chicago, IL 60680-4116 4 Save your canceled check Your canceled check is your receipt. Verify the payment posted on the Treasurer's portal within two weeks of mailing. Private carriers don't count the same way USPS uses the postmark date as your payment date — so a check stamped April 1 is on time even if it arrives April 7. But FedEx, UPS, and other private carriers count the receipt date , which means a package sent April 1 that arrives April 2 is one day late. Stick with USPS if you're mailing close to the deadline. ~400 Illinois Chase branches At any Chase Bank location You can pay at any of the nearly 400 Chase Bank branches in Illinois — including locations outside Cook County. You don't need to bank with Chase. They accept partial payments and provide a dated receipt. Fee $0 Partial payments Accepted What to bring to Chase 1 Your original tax bill payment coupon Or a printed copy from the Treasurer's portal. One coupon per PIN, per installment. 2 A check with full account info written on it Same requirements as mailing a check: PIN, taxpayer name, property address with unit, mailing address, phone, email, and tax year/installment all written on the check itself. 3 Check branch hours Branches vary. Some close mid-afternoon. If you're cutting close to the deadline, confirm hours before driving over. The Cook County Tax Appeals search tool links to the Chase branch finder. 100+ partner banks At a community bank More than 100 community banks in Cook County accept property tax payments — but only from their own account holders. If you already bank locally, this is often the most convenient in-person option. Fee $0 Requirement Active account Where to find the participating-bank list The complete list of community banks accepting Cook County tax payments is on the Treasurer's website — search "Ways to Pay." If your bank isn't on the list, your fallback options are online, by mail, or at a Chase branch. Downtown Chicago · Loop In person at the Treasurer's Office For owners who want a receipt directly from the Treasurer's Office — or who have prior-year, redemption, or open-item balances that can't be paid elsewhere — the office at 118 N. Clark Street accepts payments in Room 112. Office hours Mon–Fri 8:30am–4:30pm Phone 312-443-5100 Required for delinquent balances Open Item and Forfeiture Redemption bills (Tax Year 2022 and prior delinquencies) can only be paid by mail or in person at the Treasurer's Office — not at Chase, not at community banks, and not online. If you have a prior-year balance, start with the Cook County Clerk's Office (118 N. Clark Street, Room 434) to get the redemption bill first. Cook County Treasurer's Office 118 North Clark Street, Room 112 Chicago, Illinois 60602 312-443-5100 All six payment methods — at a glance Cook County Treasurer · 2026 cycle Method Fee Speed to post Partial OK? Online — ACH From a bank account $0 2–3 days Yes Online — card Credit or debit 2.10% 2–3 days Yes By mail Check + coupon $0 ~2 weeks Yes Chase Bank ~400 IL branches $0 ~1 week Yes Community bank If you have an account $0 ~1 week Bank-dependent In person 118 N. Clark Street $0 Same day Yes If you own 10 or more properties (bulk & TPA program) Commercial portfolios and large landlords face two specific rules: The 10+ PIN bulk fee — if you submit online payments for 10 or more PINs in a single session, the Treasurer applies a $2.00 enhanced processing fee per PIN, per installment . On a 100-PIN portfolio that's $200 per installment, $400 per year. Third Party Agent (TPA) program — for high-volume managers (typically hundreds of parcels), the Treasurer offers a TPA program that delivers tax data electronically and streamlines bulk payment. Contact the Treasurer's Office to apply. For portfolio owners — the math compounds If you own multiple properties, appeals scale fast . A 10% reduction on a single $5,000 commercial bill saves $500. Across a 25-PIN portfolio averaging that bill, that's $12,500 a year. We handle every parcel across all three appeal tiers (CCAO, BOR, PTAB) under one engagement. No upfront cost — 25% of first-year savings only. Calculate savings for my portfolio If your mortgage company pays through escrow Most homeowners with a mortgage have their property taxes paid automatically through an escrow account. The lender adds a portion of your annual tax bill to each monthly mortgage payment, holds it in escrow, and remits the lump sum to the Treasurer when it's due. Three things to know: You are still ultimately responsible. The Treasurer is explicit: if your escrow agent fails to pay on time, the late charge accrues against you, not the lender. Don't assume — verify. Check the payment posted. A few business days after the deadline, look up your PIN on the Treasurer's portal. Status should say "Paid." If it doesn't, contact your lender immediately. Don't double-pay. If your escrow is active, don't also pay yourself — you'll create a refund situation that can take months to resolve. 04 · If you're late What happens if you miss the deadline The First Installment late charge is 0.75% per month [3] of any unpaid balance. That's a state-mandated interest rate, set by Illinois law and applied uniformly across all 102 Illinois counties. One piece of good news: this rate was cut in half in 2024 . Until February 2024, the late charge was 1.5% per month (18% per year). A reform law signed by Governor Pritzker — promoted by the Cook County Treasurer and the Chicago Community Trust — reduced the rate to 0.75% per month (9% per year). For owners who fall behind, that saves about $90 per year on every $1,000 of overdue tax. What the late charge actually costs 0.75% per month on unpaid balance Unpaid balance 1 month late 3 months late 6 months late 12 months late $1,000 Modest single-family $7.50 $22.50 $45 $90 $3,000 Typical residential $22.50 $67.50 $135 $270 $5,000 Higher residential / small commercial $37.50 $112.50 $225 $450 $15,000 Commercial / multi-family $112.50 $337.50 $675 $1,350 Interactive late-fee calculator Estimate the cost of being late on your bill Unpaid balance ($) Months late 1 month 3 months 6 months 9 months 12 months Estimated interest charge $67.50 $3,000 × 0.75%/mo × 3 months Partial payments — almost always cheaper than carrying credit-card debt The Treasurer accepts partial payments at any of the six methods. Interest still accrues on the remaining unpaid balance, but the math usually works strongly in your favor: 0.75% monthly is roughly 9% annually, far below the 20–29% APR most credit cards charge. If paying in full means putting the balance on a credit card, partial payments to the Treasurer are almost always the cheaper option. The Payment Plan Calculator For overdue balances of $100 or more, the Treasurer's Payment Plan Calculator lets you set up a monthly or twice-monthly payment schedule to catch up over time. It's a free tool available on the Treasurer's website. A payment plan does NOT stop the annual tax sale This is critical and frequently misunderstood. The Treasurer is explicit: setting up a payment plan keeps you on a schedule, but it does not prevent your delinquent taxes from being sold at the annual tax sale to a third-party buyer. To prevent a tax sale, the full overdue balance must be paid before the sale begins. The payment plan is a budgeting tool, not a tax-sale shield. If you're approaching a tax sale, contact the Treasurer's Office or a property tax attorney immediately — don't rely on a payment plan to save the property. Beyond the standard 0.75% monthly rate, there are additional interest tiers that kick in if a property goes through the tax sale process and into redemption. Those rates can be materially higher. If you're more than 13 months overdue, get professional help — the math gets ugly quickly. If you missed an exemption: Certificate of Error If you qualified for the Homeowner, Senior, Senior Freeze, Persons with Disabilities, or Veterans exemption in a past year but it wasn't applied to your bill, the Cook County Assessor's Office can process a Certificate of Error . This is a refund or corrected-bill mechanism that lets you redeem missing exemptions for the current tax year plus the prior four years (2025, 2024, 2023, 2022, and 2021) [4] . To apply, file a Certificate of Error application with the Assessor's Office at cookcountyassessor.com/exemptions . Most exemptions auto-renew once initially applied — but if you sold a property, moved, hold the property in trust, or own multiple properties, exemptions may not roll over automatically. From the Assessor's Office Per the Cook County Assessor, the Senior Exemption alone is worth approximately $300/year on average, and combined with the Homeowner Exemption can reach $750/year. The Homeowner Exemption itself can be worth up to $2,000 depending on local tax rates [4] . Returned checks & bounced payments If a payment is returned by your bank for any reason (insufficient funds, closed account, stop-payment), the Treasurer treats the original payment as void. The unpaid balance accrues interest from the original due date, and the Treasurer may also assess a returned-check fee. Contact the Treasurer's Office at 312-443-5100 immediately if you discover a returned check, before the next interest accrual date. Prior-year delinquencies (Open Item & Forfeiture Redemption) If you have unpaid taxes from Tax Year 2022 or earlier , those balances are no longer with the Treasurer — they've moved to the Cook County Clerk's Office for redemption. These are called "Open Item" or "Forfeiture Redemption" bills, and they can only be paid by mail or in person at the Treasurer's Office once the Clerk has issued the redemption bill [5] . To get a redemption bill, visit the Cook County Clerk's Office at 118 N. Clark Street, Room 434, Chicago, IL 60602, or call 312-603-2107 . 05 · Lower next year's bill How a Cook County property tax appeal lowers next year's bill Paying on time avoids the late charge. But the only way to actually reduce what you owe is to lower your assessed value . That happens through a property tax appeal — and Cook County's data shows appeals work, especially when you escalate beyond the Assessor's initial decision. The Cook County system has three appeal tiers: Cook County Assessor (CCAO) — files first, when the Assessor opens your township's appeal window. Most successful but moderate reductions happen here. Cook County Board of Review (BOR) — an independent agency that hears appeals after the Assessor closes. Often the higher-yield stage for residential owners — success rates run 40-60% on most residential classes vs 17-26% at the Assessor. Illinois Property Tax Appeal Board (PTAB) — the state-level appeal, if BOR doesn't produce enough relief. Each tier applies a different review standard, so a "No change" at one stage doesn't prevent success at the next. The data consistently shows that filing at both the CCAO and BOR produces larger reductions than filing at either one alone. One key thing about appeals and your current bill An appeal lowers your future tax bills — not the one due April 1, 2026. The First Installment is locked in at 55% of 2024's total. If you appeal successfully now, the benefit shows up on the Second Installment this fall and on all bills going forward. So the safest strategy is: pay your current bill on time, and file an appeal in parallel. Don't wait — every township has a 30-day appeal window Pre-register your property and we'll file the moment your window opens . Cook County appeal deadlines shift constantly. Each of the 38 townships gets a brief window each year — usually 30 days. We track every deadline automatically. Pre-register once, and the day your township opens, our team files a data-driven appeal on your behalf. $0 upfront. 25% of first-year savings only — paid only if we win. Pre-register my property Frequently asked questions When are Cook County property taxes due in 2026? + The Tax Year 2025 First Installment is due Wednesday, April 1, 2026 . Bills were mailed by March 2, 2026 and have been viewable online at cookcountytreasurer.com since February 20, 2026. The Second Installment for tax year 2025 is expected later in 2026 — the exact date is set by the Treasurer once assessments and rates are finalized. Can I pay Cook County property taxes online for free? + Yes. Online payments via ACH (directly from a checking or savings account) are free on the official Cook County Treasurer website at cookcountytreasurer.com. The 2.10% processing fee only applies to credit and debit card payments, which are also accepted but charged by a third-party processor. Always start from the official Treasurer site to avoid unofficial third-party services that may add fees. How much is the late charge if I miss the April 1 deadline? + The late charge is 0.75% per month of any unpaid balance, mandated by Illinois law. That's about 9% per year. This rate was cut in half in 2024 from the previous 1.5%/month (18%/year). The Treasurer accepts partial payments, but interest still accrues on whatever balance remains unpaid after the deadline. Why is the First Installment 55% of last year's bill? + By Illinois law, the First Installment is an estimate set at exactly 55% of the previous year's total tax. The remaining 45% (plus or minus any changes from your current assessment, the current tax rates, and your exemptions) gets billed in the Second Installment. The 55% structure makes the First Installment predictable — you can calculate it from your prior year's bill — and your exemptions are applied only to the Second Installment. Do exemptions reduce the First Installment? + No. Exemptions only apply to the Second Installment . So even seniors, homeowners with active homestead exemptions, and disabled veterans pay the full unreduced 55% of last year's bill in April. The Second Installment is where the math gets reconciled — your exemptions, your current assessed value, and the current tax rates all get applied together. If you're missing an exemption you qualify for, the Assessor's Office can process a Certificate of Error to apply it retroactively. What if my mortgage company pays my taxes through escrow? + Most homeowners with a mortgage have escrow accounts that pay property taxes automatically. You are still ultimately responsible — if the lender pays late, the late charge accrues against your property, not the bank. A few business days after the deadline, look up your PIN on the Treasurer's portal to confirm the payment posted. If it didn't, contact your lender immediately. And if you have escrow, don't also pay yourself — you'll create a refund situation that takes months to resolve. Where can I pay in person? + Four in-person options. (1) Any of the nearly 400 Chase Bank branches in Illinois — you don't need to bank with Chase, just bring your tax bill coupon. (2) Any of the 100+ community banks participating in the program, if you have an active account there. (3) The Cook County Treasurer's Office at 118 N. Clark Street, Room 112, Chicago, IL 60602. (4) For prior-year delinquencies, the Cook County Clerk's Office (Room 434, same building) to get the redemption bill first. Can I appeal my property taxes and still pay on time? + Yes — and this is the recommended strategy. Pay your bill on time and in full to avoid the late charge, then file an appeal in parallel. The appeal process can take several months. If your appeal succeeds and reduces your assessment, the Treasurer's Office will issue a refund for any overpayment. Skipping the payment to "wait and see" doesn't pause the late charge — it just adds 0.75%/month on top of whatever you eventually owe. What is the 10+ PIN bulk fee for online payments? + If you submit online payments for 10 or more PINs in a single session , the Treasurer applies a $2.00 enhanced processing fee per PIN, per installment. This affects commercial portfolios and landlords with multiple properties. For high-volume users (typically hundreds of parcels), the Treasurer offers a Third Party Agent (TPA) program with electronic tax data delivery — apply through the Treasurer's Office. How do I lower my Cook County property tax bill? + The only way to actually reduce what you owe — beyond making sure your exemptions are applied — is to lower your property's assessed value . That happens through a Cook County property tax appeal . Cook County operates a three-tier appeal system: the Cook County Assessor (CCAO), the Cook County Board of Review (BOR), and the Illinois Property Tax Appeal Board (PTAB). Each township opens a 30-day appeal window once a year; missing your window means waiting another full year. Filing at both the CCAO and BOR consistently produces larger reductions than filing at either one alone. What's the difference between paying my Cook County property tax and appealing it? + Paying satisfies your current obligation and avoids the 0.75% monthly late charge — you owe what you owe under Illinois law. Appealing challenges whether the County's assessment of your property's value is correct, which determines how much you owe going forward. The two are separate and run in parallel: you should always pay your current bill on time, and you can file a Cook County property tax appeal at the same time. An appeal lowers your future bills, not the current one. Pay this year's bill — then lower next year's with a Cook County property tax appeal Paying on time avoids the 0.75% monthly late charge. But the only proven way to lower your tax bill is a strategic property tax appeal — and Cook County's published data shows appeals work for every property class, especially when escalated across both the Assessor and the Board of Review. Cook County Tax Appeals files appeals across all three tiers (CCAO, BOR, PTAB), monitors your township's deadline so you never miss the 30-day filing window, and charges nothing upfront. Our fee is 25% of first-year savings — paid only if we successfully reduce your bill. Sources & verification Every claim in this guide is verified against official Cook County and Illinois state government sources. Last reviewed May 2026. Cook County Treasurer's Office. "Pappas says property tax bills now online at cookcountytreasurer.com." Press release, February 20, 2026. cookcountytreasurer.com Cook County Treasurer's Office. "Pay Online with Your Bank Account." cookcountytreasurer.com/payonlinewithyourbankaccount Public Act 103-0007 (2023), reducing Illinois property tax interest rate from 1.5% to 0.75% per month, effective for tax year 2023 forward. Confirmed by Cook County Treasurer reform statement. Cook County Assessor's Office. "Property Tax Exemptions." cookcountyassessor.com/exemptions Cook County Treasurer's Office. "Ways to Pay." cookcountytreasurer.com/waystopay Cook County Treasurer's Office. "Making Cook County Property Tax Payments at Chase Bank." cookcountytreasurer.com/makingpaymentsatchasebank Illinois Department of Revenue. "Penalties and Interest for Illinois Taxes." Publication 103, September 2025. tax.illinois.gov Cook County Property Tax Portal. cookcountypropertyinfo.com CC Reviewed by Cook County Tax Appeals Editorial Team This guide is reviewed by licensed Illinois tax attorneys and CPAs who specialize in Cook County property tax appeals across all 38 townships. Every fact is verified against current Cook County Treasurer, Assessor, and Illinois Department of Revenue publications. IL Bar IL CPA PTAB-Certified Updated May 2026 Pay your current bill on time. Then pre-register your property so we can fight to lower next year's. 60 seconds, $0 upfront. Calculate my savings Verified · Cook County 2025 + 71 % 1 Higher Win Rate than the average attorney appeal at the Cook County Assessor 25 % Contingency Fee Only $0 upfront. You only pay if we win — and only on first-year savings 1 Source: Cook County Assessor Appeals Dataset (2025), publicly available at datacatalog.cookcountyil.gov. The risk is ours. The savings are yours. We handle your case across all three appeal tiers — Assessor, Board of Review, and PTAB — and escalate strategically wherever it produces the largest reduction. No win, no fee. Instant AI-powered property analysis — see your savings in 60 seconds Licensed Illinois tax attorneys & CPAs Full 3-tier representation: Assessor, Board of Review, and PTAB Calculate my savings Free, takes 60 seconds. No signup to see your estimate. Key 2026 dates 2025 tax year cycle Bills mailed Mar 2, 2026 Online payments open Feb 20, 2026 1st Installment due Apr 1, 2026 2nd Installment TBD 2026 Payment methods Cost & speed by method Online ACH $0 Mail $0 Chase $0 Community bank $0 In person $0 Credit/debit card 2.10% Related guides Cook County property tax appeal deadlines Free Cook County property tax savings calculator Cook County property tax exemptions Residential Cook County property tax appeals Commercial Cook County property tax appeals Hire Cook County Tax Appeals Paying on time is half the battle. Paying less is the other half. For the 2025 tax year, the First Installment is due April 1, 2026. Pay it on time to avoid the 0.75% monthly late charge — then let us file an appeal in parallel. Cook County Tax Appeals handles all three appeal tiers (CCAO, BOR, PTAB) under one engagement. $0 upfront. 25% of first-year savings only — paid only if we win. Calculate my savings Free consultation 2025 tax year · key facts 1st Installment due Apr 1, 2026 First Installment 55% of 2024 Online ACH fee $0 Card fee 2.10% Late charge 0.75%/mo © Cook County Tax Appeals LLC cookcountytaxappeal.com · (708) 888-8880 (function(){ // Counter animation function format(v, fmt, decimals){ if (fmt === 'currency') return '$' + Math.floor(v).toLocaleString('en-US'); if (fmt === 'number') return Math.floor(v).toLocaleString('en-US'); if (decimals > 0) return v.toFixed(decimals); return Math.floor(v).toLocaleString('en-US'); } function animateCounter(el){ var raw = parseFloat(el.dataset.count); var decimals = parseInt(el.dataset.decimals || 0); var fmt = el.dataset.format || 'plain'; var duration = 1700; var start = performance.now(); function setText(text){ for (var i = 0; i 0){ deadlineEl.textContent = diff; } else { deadlineEl.textContent = 'Past due'; deadlineEl.style.fontSize = '24px'; } } // Stat band bar fills var statObs = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if (e.isIntersecting){ e.target.classList.add('go'); statObs.unobserve(e.target); } }); }, { threshold: 0.3 }); document.querySelectorAll('.stat-cell').forEach(function(el){ statObs.observe(el); }); // Section counter highlighting var sections = document.querySelectorAll('h2[id]'); var counterItems = document.querySelectorAll('.section-counter .count-item'); if (sections.length && counterItems.length){ var secObs = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if (e.isIntersecting){ var id = e.target.id; counterItems.forEach(function(item){ item.classList.toggle('active', item.dataset.target === id); }); } }); }, { rootMargin: '-30% 0px -60% 0px', threshold: 0 }); sections.forEach(function(s){ secObs.observe(s); }); counterItems.forEach(function(item){ item.addEventListener('click', function(){ var target = document.getElementById(item.dataset.target); if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' }); }); }); } // Method tab switching function switchMethod(targetMethod){ document.querySelectorAll('.method-tab').forEach(function(tab){ tab.classList.toggle('active', tab.dataset.method === targetMethod); }); document.querySelectorAll('.method-panel').forEach(function(panel){ panel.classList.toggle('active', panel.dataset.panel === targetMethod); }); } document.querySelectorAll('.method-tab').forEach(function(tab){ tab.addEventListener('click', function(){ switchMethod(tab.dataset.method); }); }); // Hero method-mini cards link to the tabs document.querySelectorAll('.class-mini[data-tab-target]').forEach(function(card){ card.addEventListener('click', function(){ var target = card.dataset.tabTarget; // Map late -> the section, others -> the tab if (target === 'late'){ var lateSection = document.getElementById('s4'); if (lateSection) lateSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); return; } // Map online, card, mail, bank to method tabs var methodMap = { 'online': 'online', 'card': 'card', 'mail': 'mail', 'bank': 'chase' }; var method = methodMap[target] || 'online'; switchMethod(method); var tabsSection = document.querySelector('.method-tabs-wrap'); if (tabsSection){ tabsSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // Late-fee calculator var calcAmount = document.getElementById('calc-amount'); var calcMonths = document.getElementById('calc-months'); var calcResult = document.getElementById('calc-result-amount'); var calcBreakdown = document.getElementById('calc-result-breakdown'); function updateCalc(){ if (!calcAmount || !calcMonths || !calcResult) return; var amt = parseFloat(calcAmount.value) || 0; var mo = parseInt(calcMonths.value) || 1; var fee = amt * 0.0075 * mo; calcResult.textContent = '$' + fee.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}); calcBreakdown.textContent = '$' + amt.toLocaleString('en-US') + ' × 0.75%/mo × ' + mo + ' month' + (mo > 1 ? 's' : ''); } if (calcAmount) calcAmount.addEventListener('input', updateCalc); if (calcMonths) calcMonths.addEventListener('change', updateCalc); // Bottom-dock section navigation var iDock = document.getElementById('bottom-dock'); var iFill = document.getElementById('dock-fill'); var iArticle = document.querySelector('article'); var iItems = document.querySelectorAll('.bottom-dock .dock-item'); var iSections = ['s1','s2','s3','s4','s5']; if (iDock && iArticle){ function updateDock(){ var rect = iArticle.getBoundingClientRect(); var total = iArticle.offsetHeight - window.innerHeight; var scrolled = Math.max(0, -rect.top); var pct = total > 0 ? Math.min(100, (scrolled / total) * 100) : 0; if (iFill) iFill.style.width = pct + '%'; var heroEl = document.querySelector('header.hero'); var heroBottom = heroEl ? heroEl.offsetHeight : 600; if (window.scrollY > heroBottom - 60){ iDock.classList.add('visible'); } else { iDock.classList.remove('visible'); } var curIdx = 0; for (var i = 0; i { "@context": "https://schema.org", "@graph": [ { "@type": "Article", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesarticle", "isPartOf": { "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes" }, "mainEntityOfPage": { "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes" }, "headline": "How to Pay Cook County Property Taxes 2026 — Bill & Deadlines", "description": "Pay your Cook County property taxes online, by mail, or in person. 2026 deadlines, payment portal, fees, and how to lower next year's bill with an appeal.", "image": { "@type": "ImageObject", "url": "https://www.cookcountytaxappeal.com/blog/pay-cook-county-property-taxes-featured.png", "width": 1200, "height": 630 }, "datePublished": "2026-03-24T09:00:00-05:00", "dateModified": "2026-05-21T09:00:00-05:00", "author": { "@id": "https://www.cookcountytaxappeal.com/organization" }, "publisher": { "@id": "https://www.cookcountytaxappeal.com/organization" }, "articleSection": "Property Tax Payments", "keywords": "pay cook county property taxes, pay cook county taxes online, cook county property tax deadline, cook county property tax appeal, lower cook county property tax", "about": [ { "@type": "Place", "name": "Cook County, Illinois" }, { "@type": "Thing", "name": "Cook County property tax payment" }, { "@type": "Thing", "name": "Cook County Treasurer" } ], "citation": [ { "@type": "CreativeWork", "name": "Cook County Treasurer Ways to Pay", "url": "https://www.cookcountytreasurer.com/waystopay.aspx" }, { "@type": "CreativeWork", "name": "Cook County Assessor Property Tax Exemptions", "url": "https://www.cookcountyassessor.com/exemptions" }, { "@type": "CreativeWork", "name": "Illinois Department of Revenue Publication 103", "url": "https://tax.illinois.gov/research/publications/pubs/penalties-and-interest-for-illinois-taxes.html" } ], "isBasedOn": [ "https://www.cookcountytreasurer.com", "https://www.cookcountyassessor.com", "https://tax.illinois.gov" ] }, { "@type": "WebPage", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes", "url": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes", "name": "How to Pay Cook County Property Taxes 2026", "isPartOf": { "@id": "https://www.cookcountytaxappeal.com/website" }, "inLanguage": "en-US", "breadcrumb": { "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesbreadcrumbs" } }, { "@type": "BreadcrumbList", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesbreadcrumbs", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.cookcountytaxappeal.com/" }, { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs" }, { "@type": "ListItem", "position": 3, "name": "How to Pay Cook County Property Taxes" } ] }, { "@type": "WebSite", "@id": "https://www.cookcountytaxappeal.com/website", "url": "https://www.cookcountytaxappeal.com/", "name": "Cook County Tax Appeals", "publisher": { "@id": "https://www.cookcountytaxappeal.com/organization" } }, { "@type": ["Organization", "LegalService"], "@id": "https://www.cookcountytaxappeal.com/organization", "name": "Cook County Tax Appeals", "url": "https://www.cookcountytaxappeal.com/", "telephone": "+1-708-888-8880", "address": { "@type": "PostalAddress", "streetAddress": "6600 College Drive, Suite 207", "addressLocality": "Palos Heights", "addressRegion": "IL", "postalCode": "60463", "addressCountry": "US" }, "areaServed": { "@type": "AdministrativeArea", "name": "Cook County, Illinois" }, "serviceType": [ "Property Tax Appeal", "Cook County Assessor Appeal", "Cook County Board of Review Appeal", "Illinois Property Tax Appeal Board (PTAB) Appeal" ], "priceRange": "Contingency · 25% of first-year savings" }, { "@type": "HowTo", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxeshowto", "name": "How to Pay Cook County Property Taxes", "description": "Step-by-step instructions for paying Cook County property taxes online, by mail, or in person for the 2025 tax year First Installment due April 1, 2026.", "totalTime": "PT10M", "step": [ { "@type": "HowToStep", "position": 1, "name": "Find your 14-digit Property Index Number (PIN)", "text": "Look up your PIN by entering your property address on the Cook County Tax Appeals search tool or the official Cook County Treasurer website." }, { "@type": "HowToStep", "position": 2, "name": "Choose your payment method", "text": "Pay online via ACH for free (recommended), online by credit or debit card with a 2.10% third-party processing fee, by mail with check and original payment coupon, in person at any of nearly 400 Chase Bank locations in Illinois, at a participating community bank where you have an account, or in person at the Treasurer's Office at 118 N. Clark Street, Room 112, Chicago." }, { "@type": "HowToStep", "position": 3, "name": "Pay by 11:59 PM April 1, 2026", "text": "The 2025 Tax Year First Installment is due Wednesday, April 1, 2026. Late payments incur a state-mandated 0.75% per month late charge on the unpaid balance." }, { "@type": "HowToStep", "position": 4, "name": "Verify the payment posted", "text": "Within 2-3 business days for online payments, or up to 2 weeks for mailed checks, confirm the payment status updated to 'Paid' on the Treasurer's portal. Save your receipt or confirmation email." } ] }, { "@type": "FAQPage", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesfaq", "mainEntity": [ { "@type": "Question", "name": "When are Cook County property taxes due in 2026?", "acceptedAnswer": { "@type": "Answer", "text": "The Tax Year 2025 First Installment is due Wednesday, April 1, 2026. Bills were mailed by March 2, 2026 and have been viewable online at cookcountytreasurer.com since February 20, 2026. The Second Installment for tax year 2025 is expected later in 2026; the exact date is set by the Treasurer once assessments and rates are finalized." } }, { "@type": "Question", "name": "Can I pay Cook County property taxes online for free?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Online payments via ACH directly from a checking or savings account are free on the official Cook County Treasurer website at cookcountytreasurer.com. The 2.10% processing fee only applies to credit and debit card payments, which are also accepted but charged by a third-party processor." } }, { "@type": "Question", "name": "How much is the late charge if I miss the April 1 deadline?", "acceptedAnswer": { "@type": "Answer", "text": "The late charge is 0.75% per month of any unpaid balance, mandated by Illinois law. That works out to about 9% per year. This rate was cut in half in 2024 from the previous 1.5% per month (18% per year). The Treasurer accepts partial payments, but interest still accrues on whatever balance remains unpaid after the deadline." } }, { "@type": "Question", "name": "Why is the First Installment 55% of last year's bill?", "acceptedAnswer": { "@type": "Answer", "text": "By Illinois law, the First Installment is an estimate set at exactly 55% of the previous year's total tax. The remaining balance gets billed in the Second Installment, which uses your current assessed value, current tax rates, and any applicable exemptions. The 55% structure makes the First Installment predictable and your exemptions are applied only to the Second Installment." } }, { "@type": "Question", "name": "Do exemptions reduce the First Installment?", "acceptedAnswer": { "@type": "Answer", "text": "No. Exemptions only apply to the Second Installment. Seniors, homeowners with active homestead exemptions, and disabled veterans all pay the full unreduced 55% of last year's bill in April. The Second Installment is where exemptions and the current assessed value get applied together. If you are missing an exemption you qualify for, the Assessor's Office can process a Certificate of Error to apply it retroactively." } }, { "@type": "Question", "name": "What if my mortgage company pays my taxes through escrow?", "acceptedAnswer": { "@type": "Answer", "text": "Most homeowners with a mortgage have escrow accounts that pay property taxes automatically. The Cook County Treasurer is explicit that property owners are still ultimately responsible. If the lender pays late, the late charge accrues against the property, not the bank. A few business days after the deadline, look up your PIN on the Treasurer's portal to confirm the payment posted. If you have active escrow, do not also pay yourself to avoid creating a refund situation." } }, { "@type": "Question", "name": "Can I appeal my property taxes and still pay on time?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, and this is the recommended strategy. Pay your bill on time and in full to avoid the late charge, then file an appeal in parallel. The appeal process can take several months. If your appeal succeeds and reduces your assessment, the Treasurer's Office will issue a refund for any overpayment. Skipping the payment to wait does not pause the late charge." } }, { "@type": "Question", "name": "What is the 10+ PIN bulk fee for Cook County property tax online payments?", "acceptedAnswer": { "@type": "Answer", "text": "If you submit online payments for 10 or more PINs in a single session, the Treasurer applies a 2 dollar enhanced processing fee per PIN per installment. This affects commercial portfolios and landlords with multiple properties. For high-volume users typically managing hundreds of parcels, the Treasurer offers a Third Party Agent program with electronic tax data delivery." } }, { "@type": "Question", "name": "How do I lower my Cook County property tax bill?", "acceptedAnswer": { "@type": "Answer", "text": "The only way to actually reduce what you owe — beyond making sure your exemptions are applied — is to lower your property's assessed value. That happens through a Cook County property tax appeal. Cook County operates a three-tier appeal system: the Cook County Assessor (CCAO), the Cook County Board of Review (BOR), and the Illinois Property Tax Appeal Board (PTAB). Each township opens a 30-day appeal window once a year. Filing at both the CCAO and BOR consistently produces larger reductions than filing at either one alone." } }, { "@type": "Question", "name": "What is the difference between paying my Cook County property tax and appealing it?", "acceptedAnswer": { "@type": "Answer", "text": "Paying satisfies your current obligation and avoids the 0.75 percent monthly late charge. Appealing challenges whether the County's assessment of your property's value is correct, which determines how much you owe going forward. The two are separate and run in parallel: you should always pay your current bill on time, and you can file a Cook County property tax appeal at the same time. An appeal lowers your future bills, not the current one." } } ] } ] } 01 The basics 02 Find your PIN 03 How to pay 04 If you're late 05 Lower next year's bill Consult →
CCTA TeamRead More
Cook County Board of Review Appeals A Clear Guide for Property Owners
MAY 21, 2026

Cook County Board of Review Appeals Guide

Pay Cook County Property Taxes 2026: Complete Guide & Deadlines :root{ /* Homepage palette */ --brand: 005988; --brand-mid: 0B5984; --brand-light: 0B6697; --brand-deep: 004163; --brand-ink: 014751; --brand-50: rgba(0,89,136,0.04); --brand-100: rgba(0,89,136,0.08); --brand-200: rgba(0,89,136,0.16); --ink: 191B21; --ink-2: 41474E; --ink-3: 475569; --ink-4: 64748B; --ink-5: 94A0B2; --surface: FFFFFF; --surface-2: F7F7FC; --surface-3: EEF2F6; --surface-4: E8EDF4; --surface-tint: F5F8FC; --border: D8DFEA; --border-soft: E9EEF5; --border-faint: F1F3F8; --success: 1B6D24; --success-mid: 2D8E3A; --success-light: D1FAE5; --success-bright: 4ADE80; --alert: BA1A1A; --info: 2299DD; --shadow-sm: 0 1px 2px rgba(11,89,132,0.04), 0 1px 1px rgba(11,89,132,0.04); --shadow-md: 0 8px 24px -12px rgba(11,89,132,0.18), 0 2px 6px rgba(11,89,132,0.05); --shadow-lg: 0 30px 70px -32px rgba(11,89,132,0.32), 0 4px 16px rgba(11,89,132,0.06); --font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-mono: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; } *{box-sizing:border-box;margin:0;padding:0} html{scroll-behavior:smooth} body{ font-family: var(--font-body); background: var(--surface); color: var(--ink-2); font-size: 17px; line-height: 1.65; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; position: relative; } body::before{ content:""; position: fixed; inset: 0; pointer-events: none; z-index: 1000; opacity: 0.025; background-image: url("data:image/svg+xml;utf8, "); mix-blend-mode: multiply; } .wrap{max-width: 1240px; margin: 0 auto; padding: 0 32px} @media (max-width: 700px){.wrap{padding: 0 20px}} /* ============================================================ STATUS BAR ============================================================ */ .status-bar{ background: var(--brand-deep); color: rgba(255,255,255,0.9); font-size: 11.5px; letter-spacing: 0.16em; text-transform: uppercase; padding: 11px 0; font-family: var(--font-mono); font-weight: 500; position: relative; z-index: 5; } .status-bar .row{display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap} .status-bar .left{display:flex;align-items:center;gap:10px} .live-dot{ width: 7px; height: 7px; border-radius: 50%; background: var(--success-bright); box-shadow: 0 0 0 0 rgba(74,222,128,0.6); animation: livePulse 2.4s infinite; } @keyframes livePulse{ 0%{box-shadow:0 0 0 0 rgba(74,222,128,0.6)} 70%{box-shadow:0 0 0 10px rgba(74,222,128,0)} 100%{box-shadow:0 0 0 0 rgba(74,222,128,0)} } .status-bar .right{display: flex; gap: 24px; align-items: center; opacity: 0.75; font-size: 10.5px} .status-bar .sep{opacity: 0.4} @media (max-width: 640px){.status-bar .right{display: none}} /* ============================================================ HERO ============================================================ */ header.hero{ position: relative; padding: 80px 0 100px; background: radial-gradient(ellipse at 8% 10%, rgba(0,89,136,0.08) 0%, transparent 55%), radial-gradient(ellipse at 92% 90%, rgba(0,89,136,0.06) 0%, transparent 50%), var(--surface); border-bottom: 1px solid var(--border-soft); overflow: hidden; } header.hero::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(0,89,136,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,89,136,0.03) 1px, transparent 1px); background-size: 64px 64px; background-position: -1px -1px; pointer-events: none; mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.6), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.6), transparent 80%); } .hero .wrap{position: relative; z-index: 2} .hero-grid{ display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 64px; align-items: center; } @media (max-width: 980px){ .hero-grid{grid-template-columns: 1fr; gap: 48px} header.hero{padding: 56px 0 80px} } .kicker{ display: inline-flex; align-items: center; gap: 14px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); margin-bottom: 32px; font-weight: 500; opacity: 0; transform: translateY(12px); animation: rise 0.7s 0.05s ease-out forwards; } .kicker .seg-line{width: 28px; height: 1px; background: var(--brand); opacity: 0.6} .kicker .seg-dot{width: 5px; height: 5px; background: var(--brand); border-radius: 50%; opacity: 0.6} h1.title{ font-family: var(--font-display); font-weight: 700; font-size: clamp(28px, 3.2vw, 44px); line-height: 1.0; letter-spacing: -0.022em; color: var(--ink); margin-bottom: 32px; opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.15s ease-out forwards; } h1.title em{font-style: normal; color: var(--brand-light); color: var(--brand); position: relative} h1.title em::after{ content:""; position: absolute; left: 0; bottom: 6px; width: 100%; height: 2px; background: var(--brand); transform-origin: left; animation: drawLine 1s 0.9s cubic-bezier(0.65,0,0.35,1) forwards; transform: scaleX(0); } @keyframes drawLine{to{transform: scaleX(1)}} .dek{ font-family: var(--font-display); font-size: clamp(20px, 2.1vw, 26px); line-height: 1.45; font-weight: 700; color: var(--ink-3); max-width: 600px; margin-bottom: 44px; opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.3s ease-out forwards; } .dek b{color: var(--ink); font-weight: 500; font-style: normal; color: var(--brand-light)} .meta-strip{ display: flex; gap: 36px; flex-wrap: wrap; padding-top: 28px; border-top: 1px solid var(--border-soft); opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.45s ease-out forwards; } .meta-strip .item{display:flex; flex-direction: column; gap: 4px} .meta-strip .label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .meta-strip .value{font-size: 15px; color: var(--ink); font-weight: 500} @keyframes rise{to{opacity:1; transform:translateY(0)}} /* ============================================================ HERO CLASS SMALL-MULTIPLES ============================================================ */ .hero-visual{ position: relative; opacity: 0; transform: translateY(20px) scale(0.96); animation: rise 1.1s 0.4s ease-out forwards; } .class-grid{display: grid; grid-template-columns: 1fr 1fr; gap: 12px} .class-mini{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 18px 18px 16px; position: relative; transition: all 0.25s; cursor: pointer; overflow: hidden; } .class-mini::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--brand); transition: background 0.25s; } .class-mini:hover{transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--brand)} .class-mini:hover::before{background: var(--success-bright)} .class-mini.commercial::before{background: var(--brand-light)} .class-mini .cm-tag{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 6px; } .class-mini .cm-name{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 700; line-height: 1.15; margin-bottom: 10px; letter-spacing: -0.008em; } .class-mini .cm-rate{ font-family: var(--font-display); font-size: 26px; color: var(--ink); font-weight: 700; letter-spacing: -0.018em; line-height: 1; margin-bottom: 2px; } .class-mini .cm-rate .sym{font-size: 0.55em; color: var(--brand); font-style: normal; color: var(--brand-light); vertical-align: 0.3em; margin-left: 1px} .class-mini .cm-sub{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .class-mini.featured{grid-column: span 2; background: var(--brand); color: fff} .class-mini.featured::before{background: var(--success-bright)} .class-mini.featured .cm-tag{color: var(--success-bright)} .class-mini.featured .cm-name{color: fff} .class-mini.featured .cm-rate{color: fff} .class-mini.featured .cm-rate .sym{color: var(--success-bright)} .class-mini.featured .cm-sub{color: rgba(255,255,255,0.7)} .class-mini.featured .cm-spread{ font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: 14px; color: rgba(255,255,255,0.85); margin-top: 6px; } /* ============================================================ STAT BAND ============================================================ */ .stat-band{position: relative; z-index: 4; margin-top: -52px; padding: 0 32px} @media (max-width: 700px){.stat-band{padding: 0 20px}} .stat-band-inner{ max-width: 1240px; margin: 0 auto; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; box-shadow: var(--shadow-lg); display: grid; grid-template-columns: repeat(5, 1fr); position: relative; overflow: hidden; } .stat-band-inner::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--brand) 0%, var(--brand-light) 50%, var(--brand) 100%); } .stat-cell{ padding: 28px 22px 26px; border-right: 1px solid var(--border-soft); text-align: left; position: relative; background: var(--surface); transition: background 0.3s; } .stat-cell:hover{background: var(--surface-tint)} .stat-cell:last-child{border-right: 0} .stat-cell .stat-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 12px; font-weight: 500; } .stat-cell .stat-num{ font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 28px); font-weight: 700; color: var(--ink); letter-spacing: -0.022em; line-height: 1; margin-bottom: 10px; } .stat-cell .stat-num .prefix{color: var(--brand); font-style: normal; color: var(--brand-light); margin-right: 2px} .stat-cell .stat-num .suffix{font-size: 0.5em; color: var(--brand); font-style: normal; color: var(--brand-light); margin-left: 4px; vertical-align: 0.35em} .stat-cell .stat-context{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; color: var(--ink-4); text-transform: uppercase; font-weight: 500; margin-bottom: 14px; min-height: 1.4em; } .stat-cell .stat-bar{height: 3px; background: var(--border-faint); position: relative; overflow: hidden} .stat-cell .stat-bar::after{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 0%; background: var(--brand); transition: width 1.6s 0.3s cubic-bezier(0.22, 1, 0.36, 1); } .stat-cell.go .stat-bar::after{width: var(--bar, 50%)} .stat-cell.featured{background: var(--brand)} .stat-cell.featured:hover{background: var(--brand-light)} .stat-cell.featured .stat-label{color: rgba(255,255,255,0.65)} .stat-cell.featured .stat-num{color: fff} .stat-cell.featured .stat-num .prefix, .stat-cell.featured .stat-num .suffix{color: rgba(255,255,255,0.75)} .stat-cell.featured .stat-context{color: rgba(255,255,255,0.65)} .stat-cell.featured .stat-bar{background: rgba(255,255,255,0.15)} .stat-cell.featured .stat-bar::after{background: var(--success-bright)} @media (max-width: 1000px){ .stat-band-inner{grid-template-columns: repeat(2, 1fr)} .stat-cell{border-bottom: 1px solid var(--border-soft)} .stat-cell:nth-child(2n){border-right: 0} .stat-cell:last-child{grid-column: span 2} } @media (max-width: 500px){ .stat-band-inner{grid-template-columns: 1fr} .stat-cell{border-right: 0} .stat-cell:last-child{grid-column: auto} } /* ============================================================ ARTICLE GRID ============================================================ */ article{position: relative; padding: 110px 0 60px} .article-grid{ display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 56px; align-items: start; } @media (max-width: 1100px){ .article-grid{grid-template-columns: minmax(0, 1fr) 300px; gap: 48px} } @media (max-width: 880px){ .article-grid{grid-template-columns: 1fr; gap: 48px} article{padding: 80px 0 40px} } /* ============================================================ PROSE ============================================================ */ .prose{max-width: 800px} .prose p{margin-bottom: 22px; font-size: 17.5px; line-height: 1.72; color: var(--ink-2)} .prose p.lead{ font-family: var(--font-display); font-size: clamp(22px, 2.4vw, 28px); line-height: 1.45; color: var(--ink); font-weight: 700; margin-bottom: 44px; min-height: 1.45em; } .prose a{ color: var(--brand); text-decoration: none; background-image: linear-gradient(currentColor, currentColor); background-size: 100% 1px; background-repeat: no-repeat; background-position: 0 100%; padding-bottom: 1px; transition: background-size 0.3s, color 0.25s; } .prose a:hover{color: var(--brand-light); background-size: 0% 1px} .prose strong{color: var(--ink); font-weight: 600} .prose h2{ font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 36px); font-weight: 700; line-height: 1.1; letter-spacing: -0.02em; color: var(--ink); margin: 80px 0 18px; position: relative; } .prose h2 .h2-num{ display: block; font-family: var(--font-mono); font-style: normal; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); margin-bottom: 14px; font-weight: 500; } .prose h2 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .prose h3{ font-family: var(--font-body); font-size: 20px; font-weight: 600; color: var(--ink); margin: 40px 0 14px; letter-spacing: -0.005em; } .prose ul, .prose ol{margin: 8px 0 28px 0; padding-left: 24px; color: var(--ink-2)} .prose li{margin-bottom: 10px; line-height: 1.65; padding-left: 6px} .prose li::marker{color: var(--brand); font-weight: 600} /* ============================================================ CLASS TAB INTERFACE ============================================================ */ .class-tabs-wrap{margin: 32px 0 24px} .class-tabs{ display: flex; gap: 4px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px 6px 0 0; padding: 6px; overflow-x: auto; position: relative; z-index: 2; scrollbar-width: thin; } .class-tab{ flex: 1; background: transparent; border: 0; padding: 14px 12px 12px; font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-3); cursor: pointer; border-radius: 4px; transition: all 0.2s; text-align: left; min-width: 140px; line-height: 1.25; } .class-tab:hover{background: var(--surface); color: var(--ink)} .class-tab.active{ background: var(--brand); color: fff; box-shadow: var(--shadow-sm); } .class-tab .tab-label{ display: block; font-size: 13.5px; font-weight: 600; letter-spacing: -0.008em; margin-bottom: 2px; } .class-tab .tab-hint{ display: block; font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500; opacity: 0.7; } .class-panel{display: none; animation: fadeUp 0.4s ease-out} .class-panel.active{display: block} @keyframes fadeUp{ from{opacity: 0; transform: translateY(8px)} to{opacity: 1; transform: translateY(0)} } .class-panel-header{ background: var(--surface); border: 1px solid var(--border); border-top: 0; padding: 24px 28px 22px; border-radius: 0 0 6px 6px; margin-bottom: 32px; display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 32px; align-items: center; } .class-panel-header .ph-text .ph-tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 8px; } .class-panel-header .ph-text h3{ font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 28px); font-weight: 700; color: var(--ink); letter-spacing: -0.015em; line-height: 1.1; margin: 0 0 8px; } .class-panel-header .ph-text h3 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .class-panel-header .ph-text .ph-meta{ font-size: 14px; color: var(--ink-4); line-height: 1.45; } .class-panel-header .ph-stats{ display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } .class-panel-header .ph-cell{ padding: 12px 14px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 4px; } .class-panel-header .ph-cell .ph-cl{ font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 5px; } .class-panel-header .ph-cell .ph-cv{ font-family: var(--font-display); font-size: 22px; color: var(--ink); letter-spacing: -0.012em; line-height: 1; font-weight: 700; } .class-panel-header .ph-cell .ph-cv .sm{font-size: 0.55em; color: var(--brand); font-style: normal; color: var(--brand-light); margin-left: 2px; vertical-align: 0.3em} @media (max-width: 800px){ .class-panel-header{grid-template-columns: 1fr; gap: 24px} } /* Stage cards inside class panels */ .stages-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin: 24px 0; } @media (max-width: 900px){.stages-grid{grid-template-columns: 1fr}} .stage-card{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 26px 24px; position: relative; overflow: hidden; } .stage-card::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--brand); } .stage-card.bor::before{background: var(--brand-light)} .stage-card.combined{background: var(--brand); color: fff} .stage-card.combined::before{background: var(--success-bright)} .stage-card .tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 10px; } .stage-card.bor .tag{color: var(--brand-light)} .stage-card.combined .tag{color: var(--success-bright)} .stage-card .stage-h{ font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--ink); margin: 0 0 4px; letter-spacing: -0.01em; line-height: 1.15; } .stage-card.combined .stage-h{color: fff} .stage-card .stage-desc{ font-size: 13px; color: var(--ink-4); margin-bottom: 20px; line-height: 1.45; } .stage-card.combined .stage-desc{color: rgba(255,255,255,0.7)} .stage-card .stage-big{ font-family: var(--font-display); font-size: 56px; font-weight: 700; color: var(--ink); letter-spacing: -0.025em; line-height: 0.95; margin-bottom: 6px; } .stage-card.combined .stage-big{color: fff} .stage-card .stage-big .sym{ font-size: 0.42em; color: var(--brand); font-style: normal; color: var(--brand-light); vertical-align: 0.42em; margin-left: 2px; } .stage-card.bor .stage-big .sym{color: var(--brand-light)} .stage-card.combined .stage-big .sym{color: var(--success-bright)} .stage-card .stage-sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 18px; font-weight: 500; } .stage-card.combined .stage-sub{color: rgba(255,255,255,0.65)} .stage-rows{border-top: 1px solid var(--border-soft); padding-top: 16px} .stage-card.combined .stage-rows{border-top-color: rgba(255,255,255,0.12)} .stage-rows .row{display: flex; justify-content: space-between; padding: 6px 0; font-size: 13px} .stage-rows .row .k{color: var(--ink-3)} .stage-rows .row .v{font-family: var(--font-display); font-size: 16px; color: var(--ink); letter-spacing: -0.008em} .stage-card.combined .stage-rows .row .k{color: rgba(255,255,255,0.7)} .stage-card.combined .stage-rows .row .v{color: fff} /* AV Journey */ .journey{ margin: 28px 0; padding: 36px 32px 40px; background: var(--surface-3); border: 1px solid var(--border); border-radius: 6px; position: relative; overflow: hidden; } .journey::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--brand) 0%, var(--brand-light) 50%, var(--success) 100%); } .journey .head{text-align: center; margin-bottom: 30px} .journey h4{ font-family: var(--font-display); font-size: clamp(22px, 2.6vw, 28px); color: var(--ink); margin: 0 0 6px; font-weight: 700; letter-spacing: -0.015em; } .journey h4 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .journey .sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .journey-row{ display: grid; grid-template-columns: 1fr auto 1fr auto 1fr; gap: 14px; align-items: stretch; } .j-col{ text-align: center; padding: 22px 14px 20px; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; position: relative; } .j-col .j-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 10px; font-weight: 500; } .j-col .j-num{ font-family: var(--font-display); font-size: clamp(22px, 2.8vw, 30px); font-weight: 700; color: var(--ink); letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .j-col .j-stage{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--brand); font-weight: 500; } .j-col.final{background: var(--brand)} .j-col.final::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: var(--success-bright); } .j-col.final .j-label{color: rgba(255,255,255,0.6)} .j-col.final .j-num{color: fff} .j-col.final .j-stage{color: var(--success-bright)} .j-col.middle .j-stage{color: var(--brand-light)} .j-arrow{display: flex; align-items: center; justify-content: center} .j-arrow .icn{ width: 32px; height: 32px; background: var(--surface); border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--brand); } .journey-summary{ margin-top: 22px; padding: 16px 22px; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; } .journey-summary .sum-block{display: flex; flex-direction: column; gap: 4px} .journey-summary .sum-block.right{text-align: right} .journey-summary .sum-label{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .journey-summary .sum-val{ font-family: var(--font-display); font-size: 22px; color: var(--success); letter-spacing: -0.01em; line-height: 1; } .journey-summary .sum-val em{font-style: normal; color: var(--brand-light); font-size: 0.7em; margin-left: 4px} @media (max-width: 800px){ .journey-row{grid-template-columns: 1fr; gap: 10px} .j-arrow{transform: rotate(90deg); height: 24px} } /* Class panel narrative + tax savings callout */ .class-callout{ margin: 28px 0; padding: 26px 28px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-left: 3px solid var(--brand); border-radius: 0 6px 6px 0; } .class-callout h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin: 0 0 10px; } .class-callout p{ font-size: 15.5px; line-height: 1.65; color: var(--ink-2); margin: 0; } .class-callout p strong{color: var(--ink); font-weight: 600} /* ============================================================ COMPARISON TABLE ============================================================ */ .comparison-table{ margin: 36px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .comparison-table-header{ background: var(--brand); color: fff; padding: 20px 28px; display: flex; justify-content: space-between; align-items: center; gap: 16px; position: relative; } .comparison-table-header::after{ content:""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, var(--success-bright), transparent 50%); } .comparison-table-header h4{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; font-weight: 500; margin: 0; text-transform: uppercase; color: fff; } .comparison-table-header .source{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; color: rgba(255,255,255,0.7); text-transform: uppercase; } .comparison-table table{width: 100%; border-collapse: collapse} .comparison-table th, .comparison-table td{ padding: 14px 18px; border-bottom: 1px solid var(--border-soft); font-size: 14px; } .comparison-table th{ background: var(--surface-2); text-align: left; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .comparison-table th:not(:first-child), .comparison-table td:not(:first-child){text-align: right} .comparison-table td:first-child{ color: var(--ink); font-weight: 500; font-size: 14px; } .comparison-table td:first-child .cls-hint{ display: block; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-top: 3px; } .comparison-table td.num{ font-family: var(--font-display); font-size: 19px; color: var(--ink); letter-spacing: -0.01em; font-weight: 700; } .comparison-table td.num.success{color: var(--success); font-weight: 500} .comparison-table tr:last-child td{border-bottom: 0} .comparison-table tr:hover td{background: var(--surface-tint)} @media (max-width: 800px){ .comparison-table{overflow-x: auto} .comparison-table table{min-width: 700px} } /* ============================================================ DUAL BAR CHART ============================================================ */ .chart-card{ margin: 36px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .chart-card-header{padding: 22px 28px 18px; border-bottom: 1px solid var(--border-soft)} .chart-card-header h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); font-weight: 700; margin: 0 0 4px; letter-spacing: -0.01em; } .chart-card-header p{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin: 0; font-weight: 500; } .chart-card-body{padding: 24px 28px 28px} .dual-bar-chart{display: flex; flex-direction: column; gap: 22px} .dual-bar-row{display: grid; grid-template-columns: 240px 1fr; gap: 24px; align-items: start} .dual-bar-row .class-name{font-size: 14px; color: var(--ink-2); padding-top: 4px} .dual-bar-row .class-name .code{ display: block; font-family: var(--font-mono); font-size: 10px; color: var(--ink-4); letter-spacing: 0.14em; font-weight: 500; text-transform: uppercase; margin-top: 2px; } .dual-bar-row .class-name .total{ display: block; font-family: var(--font-mono); font-size: 10px; color: var(--ink-5); margin-top: 6px; letter-spacing: 0.08em; } .bars-stack{display: flex; flex-direction: column; gap: 8px} .bar-pair{display: grid; grid-template-columns: 50px 1fr 60px; gap: 10px; align-items: center} .bar-pair .stage-lbl{ font-family: var(--font-mono); font-size: 10px; color: var(--ink-4); letter-spacing: 0.14em; text-transform: uppercase; } .bar-pair .track{ height: 14px; background: var(--surface-3); border-radius: 3px; position: relative; overflow: hidden; } .bar-pair .fill{ height: 100%; background: var(--brand); border-radius: 3px; width: 0; transition: width 1.4s cubic-bezier(0.22, 1, 0.36, 1); } .bar-pair.bor .fill{background: var(--brand-light)} .bar-pair.combined .fill{background: var(--success-mid)} .bar-pair .pct{ font-family: var(--font-display); font-size: 16px; color: var(--ink); text-align: right; letter-spacing: -0.005em; } .bar-pair.bor .pct{color: var(--brand-light)} .bar-pair.combined .pct{color: var(--success)} .chart-legend{ display: flex; gap: 18px; margin-top: 24px; padding-top: 18px; border-top: 1px solid var(--border-soft); flex-wrap: wrap; } .chart-legend .item{ display: flex; align-items: center; gap: 8px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-3); font-weight: 500; } .chart-legend .swatch{width: 12px; height: 12px; border-radius: 2px} @media (max-width: 720px){ .dual-bar-row{grid-template-columns: 1fr; gap: 12px} .bar-pair{grid-template-columns: 44px 1fr 50px} } /* ============================================================ PULL QUOTE ============================================================ */ .pull-quote{margin: 60px 0; padding: 0 0 0 24px; position: relative; max-width: 720px} .pull-quote::before{ content: "\201C"; position: absolute; left: -20px; top: -40px; font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: 180px; color: var(--brand); opacity: 0.18; line-height: 1; pointer-events: none; } .pull-quote blockquote{ font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: clamp(20px, 2.2vw, 28px); line-height: 1.32; color: var(--ink); letter-spacing: -0.012em; font-weight: 700; margin: 0 0 20px; } .pull-quote blockquote em{font-style: normal; color: var(--brand)} .pull-quote .attribution{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } /* ============================================================ TAKEAWAYS ============================================================ */ .takeaway-block{margin: 36px 0 12px; position: relative} .takeaway-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; } @media (max-width: 800px){.takeaway-grid{grid-template-columns: 1fr}} .takeaway{ padding: 30px 26px; border-right: 1px solid var(--border); position: relative; background: var(--surface-2); transition: background 0.25s; } .takeaway:hover{background: var(--surface)} .takeaway:last-child{border-right: 0} .takeaway .num{ font-family: var(--font-display); font-style: normal; color: var(--brand-light); font-size: 48px; color: var(--brand); line-height: 1; margin-bottom: 14px; display: block; letter-spacing: -0.02em; } .takeaway h4{ font-family: var(--font-body); font-size: 16px; font-weight: 600; color: var(--ink); margin: 0 0 10px; letter-spacing: -0.005em; line-height: 1.3; } .takeaway p{font-size: 14px; color: var(--ink-3); line-height: 1.55; margin: 0} @media (max-width: 800px){ .takeaway{border-right: 0; border-bottom: 1px solid var(--border)} .takeaway:last-child{border-bottom: 0} } /* ============================================================ FAQ + METHODOLOGY + DIVIDER ============================================================ */ .faq{margin: 36px 0 12px; border-top: 1px solid var(--border)} .faq-item{border-bottom: 1px solid var(--border)} .faq-item summary{ list-style: none; cursor: pointer; padding: 24px 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--ink); letter-spacing: -0.008em; line-height: 1.35; transition: color 0.25s; } .faq-item summary::-webkit-details-marker{display: none} .faq-item summary:hover{color: var(--brand)} .faq-item summary .plus{ flex-shrink: 0; width: 30px; height: 30px; border: 1px solid var(--ink); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: var(--font-body); font-size: 16px; color: var(--ink); transition: all 0.3s; } .faq-item[open] summary{color: var(--brand)} .faq-item[open] summary .plus{ transform: rotate(45deg); background: var(--brand); color: fff; border-color: var(--brand); } .faq-item .answer{ padding: 0 0 26px; font-size: 16px; color: var(--ink-3); line-height: 1.65; max-width: 720px; } .faq-item .answer code{ font-family: var(--font-mono); font-size: 13px; background: var(--surface-2); padding: 1px 6px; border-radius: 3px; color: var(--ink); } .section-divider{display: flex; align-items: center; gap: 16px; margin: 60px 0 32px; color: var(--ink-4)} .section-divider .line{flex: 1; height: 1px; background: var(--border)} .section-divider .dot{width: 7px; height: 7px; border: 1px solid var(--brand); transform: rotate(45deg); background: fff} .methodology{ margin: 48px 0 12px; padding: 28px 32px; background: var(--surface-2); border: 1px solid var(--border-soft); border-left: 3px solid var(--brand); border-radius: 0 4px 4px 0; font-size: 14px; line-height: 1.65; color: var(--ink-3); } .methodology h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 12px; } .methodology a{color: var(--brand); text-decoration: underline} .methodology code{ font-family: var(--font-mono); font-size: 12.5px; background: var(--surface); padding: 1px 6px; border-radius: 3px; color: var(--ink); } .methodology strong{display: block; margin-bottom: 6px; color: var(--ink); font-weight: 600; margin-top: 16px} .methodology strong:first-child{margin-top: 0} /* ============================================================ SIDEBAR ============================================================ */ aside{position: sticky; top: 32px} @media (max-width: 1100px){aside{position: static}} .side-card{ background: var(--brand); color: fff; padding: 34px 28px; border-radius: 6px; position: relative; overflow: hidden; margin-bottom: 18px; } .side-card::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; } .side-card::after{ content:""; position: absolute; width: 180px; height: 180px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.06), transparent 65%); top: -60px; right: -60px; pointer-events: none; } .side-card .inner{position: relative; z-index: 2} .side-card .pill{ display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; background: rgba(255,255,255,0.14); color: fff; padding: 6px 12px; border-radius: 100px; margin-bottom: 20px; font-weight: 500; } .side-card .pill::before{ content:""; width: 6px; height: 6px; background: var(--success-bright); border-radius: 50%; box-shadow: 0 0 0 0 rgba(74,222,128,0.5); animation: livePulse 2.4s infinite; } .side-card h4{ font-family: var(--font-display); font-size: 28px; font-weight: 700; color: fff; margin: 0 0 14px; line-height: 1.15; letter-spacing: -0.018em; } .side-card h4 em{font-style: normal; color: var(--brand-light); color: B7E1F5} .side-card p{ font-size: 14px; color: rgba(255,255,255,0.78); line-height: 1.6; margin-bottom: 22px; } .cta-btn{ display: inline-flex; align-items: center; gap: 8px; background: fff; color: var(--brand); padding: 13px 22px; font-family: var(--font-body); font-weight: 600; font-size: 13px; letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none; border-radius: 4px; transition: all 0.25s; border: none; cursor: pointer; } .cta-btn:hover{background: var(--surface-3); transform: translateX(3px)} .cta-btn .arrow{width: 14px; height: 14px} .side-list{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 24px 22px; margin-bottom: 18px; } .side-list h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 16px; font-weight: 500; } .side-list ul{list-style: none; padding: 0; margin: 0} .side-list li{ padding: 12px 0; border-bottom: 1px solid var(--border-soft); font-size: 14px; color: var(--ink-2); display: flex; gap: 12px; align-items: flex-start; line-height: 1.5; } .side-list li:last-child{border-bottom: 0} .side-list li svg{ flex-shrink: 0; width: 18px; height: 18px; color: var(--success); margin-top: 2px; padding: 2px; background: var(--success-light); border-radius: 50%; } .side-spread{ background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; padding: 24px; position: relative; } .side-spread::before{ content:""; position: absolute; left: 0; top: 24px; bottom: 24px; width: 2px; background: var(--brand); } .side-spread .label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); margin-bottom: 8px; font-weight: 500; } .side-spread h6{ font-family: var(--font-display); font-size: 19px; color: var(--ink); font-weight: 700; line-height: 1.25; margin: 0 0 16px; letter-spacing: -0.008em; } .side-spread .spread-row{ display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 8px; align-items: baseline; padding: 8px 0; border-top: 1px solid var(--border-soft); font-size: 12.5px; color: var(--ink-3); } .side-spread .spread-row:first-of-type{border-top: 0} .side-spread .spread-row .sk{line-height: 1.3} .side-spread .spread-row .sv{ font-family: var(--font-display); font-size: 17px; color: var(--brand); font-weight: 700; letter-spacing: -0.008em; } .side-spread .spread-row.commercial .sv{color: var(--success)} /* ============================================================ FINAL CTA ============================================================ */ .final-cta-wrap{padding: 0 32px; margin-top: 36px} @media (max-width: 700px){.final-cta-wrap{padding: 0 20px}} .final-cta{ max-width: 1240px; margin: 0 auto; position: relative; background: linear-gradient(135deg, var(--brand-deep) 0%, var(--brand) 60%, var(--brand-mid) 100%); color: fff; overflow: hidden; border-radius: 6px; padding: 72px 64px; } .final-cta::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 56px 56px; pointer-events: none; mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); } .final-cta::after{ content:""; position: absolute; bottom: -160px; right: -160px; width: 440px; height: 440px; background: radial-gradient(circle, rgba(255,255,255,0.1), transparent 65%); border-radius: 50%; pointer-events: none; } .final-cta-inner{ position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 56px; align-items: center; } @media (max-width: 920px){ .final-cta-inner{grid-template-columns: 1fr; gap: 40px} .final-cta{padding: 48px 32px} } .final-cta .cta-kicker{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(255,255,255,0.7); font-weight: 500; margin-bottom: 22px; display: inline-flex; align-items: center; gap: 12px; } .final-cta .cta-kicker::before{content:""; width: 28px; height: 1px; background: rgba(255,255,255,0.4)} .final-cta h2{ font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 36px); font-weight: 700; line-height: 1.04; color: fff; margin-bottom: 22px; letter-spacing: -0.022em; } .final-cta h2 em{font-style: normal; color: var(--brand-light); color: B7E1F5} .final-cta p{ font-size: 17px; color: rgba(255,255,255,0.82); line-height: 1.6; margin-bottom: 32px; max-width: 540px; } .cta-row{display: flex; gap: 14px; flex-wrap: wrap} .cta-btn.ghost{ background: transparent; color: fff; border: 1px solid rgba(255,255,255,0.3); } .cta-btn.ghost:hover{background: rgba(255,255,255,0.08); color: fff; transform: translateX(3px)} .cta-spread{ background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); border-radius: 6px; padding: 28px 26px; position: relative; } .cta-spread::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--success-bright); border-radius: 6px 0 0 6px; } .cta-spread .cta-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.65); margin-bottom: 16px; font-weight: 500; } .cta-spread .cta-row-stat{ display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: baseline; padding: 7px 0; border-top: 1px solid rgba(255,255,255,0.1); font-size: 12.5px; color: rgba(255,255,255,0.75); } .cta-spread .cta-row-stat:first-of-type{border-top: 0} .cta-spread .cta-row-stat .v{ font-family: var(--font-display); font-size: 18px; color: fff; font-weight: 700; letter-spacing: -0.008em; } .cta-spread .cta-row-stat .v em{color: var(--success-bright); font-style: normal; color: var(--brand-light)} /* ============================================================ FOOTER ============================================================ */ footer{ background: var(--brand-deep); color: rgba(255,255,255,0.6); padding: 40px 0 36px; font-size: 13px; margin-top: 60px; } footer .row{ display: flex; justify-content: space-between; flex-wrap: wrap; gap: 16px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; } footer .row a{color: fff; text-decoration: none; opacity: 0.7; transition: opacity 0.25s} footer .row a:hover{opacity: 1} /* ============================================================ ARTICLE BYLINE / META ============================================================ */ .article-byline{ display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--border-soft); font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .article-byline .by-item{display: flex; align-items: center; gap: 8px} .article-byline .by-item svg{width: 14px; height: 14px; color: var(--brand)} .article-byline .by-item .by-strong{color: var(--ink-2); font-weight: 600} .article-byline .by-sep{width: 4px; height: 4px; background: var(--ink-5); border-radius: 50%; opacity: 0.5} /* ============================================================ STICKY HIRE-US BAR (top of article) ============================================================ */ .hire-bar{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 14px 20px; margin: 0 0 48px; display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; box-shadow: var(--shadow-sm); position: relative; } .hire-bar::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--success); border-radius: 6px 0 0 6px; } .hire-bar .hb-text{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 700; line-height: 1.35; letter-spacing: -0.005em; } .hire-bar .hb-text em{font-style: normal; color: var(--brand-light); color: var(--brand)} .hire-bar .hb-actions{display: flex; gap: 10px; align-items: center; flex-wrap: wrap} .hire-bar .hb-note{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } @media (max-width: 720px){ .hire-bar{padding: 16px 18px} .hire-bar .hb-text{font-size: 16px} } /* ============================================================ INLINE CTA BLOCK (mid-article) ============================================================ */ .inline-cta{ margin: 48px 0; padding: 32px 36px; background: linear-gradient(135deg, var(--brand) 0%, var(--brand-light) 100%); color: fff; border-radius: 6px; position: relative; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 32px; align-items: center; } .inline-cta::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; mask-image: radial-gradient(ellipse at top right, rgba(0,0,0,0.5), transparent 75%); -webkit-mask-image: radial-gradient(ellipse at top right, rgba(0,0,0,0.5), transparent 75%); } .inline-cta::after{ content:""; position: absolute; top: -80px; right: -80px; width: 240px; height: 240px; background: radial-gradient(circle, rgba(255,255,255,0.1), transparent 65%); border-radius: 50%; pointer-events: none; } .inline-cta .ic-content{position: relative; z-index: 2} .inline-cta .ic-kicker{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--success-bright); font-weight: 500; margin-bottom: 10px; } .inline-cta h3{ font-family: var(--font-display); font-size: clamp(22px, 2.4vw, 28px); color: fff; margin: 0 0 8px; font-weight: 700; letter-spacing: -0.012em; line-height: 1.2; } .inline-cta h3 em{font-style: normal; color: var(--brand-light); color: B7E1F5} .inline-cta p{ font-size: 14.5px; color: rgba(255,255,255,0.82); margin: 0; line-height: 1.55; max-width: 540px; } .inline-cta .ic-actions{ display: flex; gap: 10px; flex-wrap: wrap; position: relative; z-index: 2; } @media (max-width: 760px){ .inline-cta{grid-template-columns: 1fr; gap: 22px; padding: 28px 26px} } /* ============================================================ CLASS PANEL CTA (inside each tab) ============================================================ */ .panel-cta{ margin: 22px 0 0; padding: 20px 24px; background: var(--surface); border: 1px solid var(--border); border-left: 3px solid var(--success); border-radius: 0 4px 4px 0; display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; } .panel-cta .pc-text{ font-size: 14.5px; color: var(--ink-2); line-height: 1.5; max-width: 540px; } .panel-cta .pc-text strong{color: var(--ink); font-weight: 600} .panel-cta .cta-btn{ background: var(--brand); color: fff; padding: 12px 20px; font-size: 12.5px; } .panel-cta .cta-btn:hover{background: var(--brand-light); color: fff} /* ============================================================ SERVICE AREA SIDEBAR BLOCK ============================================================ */ .side-service{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 22px 22px 20px; margin-bottom: 18px; } .side-service h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 8px; font-weight: 500; } .side-service h6{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 700; line-height: 1.25; margin: 0 0 14px; letter-spacing: -0.008em; } .side-service .muni-list{ display: flex; flex-wrap: wrap; gap: 6px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; } .side-service .muni{ padding: 4px 9px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 3px; color: var(--ink-3); transition: all 0.2s; } .side-service .muni:hover{ background: var(--brand-100); color: var(--brand); border-color: var(--brand-200); cursor: default; } .side-service .muni-note{ margin-top: 12px; font-size: 12px; color: var(--ink-4); line-height: 1.5; } /* ============================================================ CONCLUSION CTA STRIP ============================================================ */ .conclusion-cta{ margin: 32px 0 8px; padding: 22px 26px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 6px; display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; } .conclusion-cta .cc-text{ font-family: var(--font-display); font-size: 19px; color: var(--ink); font-weight: 700; line-height: 1.4; letter-spacing: -0.008em; max-width: 560px; } .conclusion-cta .cc-text em{font-style: normal; color: var(--brand-light); color: var(--brand)} .conclusion-cta .cta-btn{background: var(--brand); color: fff} .conclusion-cta .cta-btn:hover{background: var(--brand-light); color: fff} /* ============================================================ TRUST BANNER (below status bar) ============================================================ */ .trust-banner{ background: var(--surface-2); border-bottom: 1px solid var(--border-soft); padding: 14px 0; } .trust-items{ display: flex; flex-wrap: wrap; gap: 28px; justify-content: center; font-size: 13px; color: var(--ink-3); } .trust-item{ display: flex; align-items: center; gap: 8px; } .trust-item svg{ width: 16px; height: 16px; color: var(--success); flex-shrink: 0; } .trust-item strong{color: var(--ink); font-weight: 600} @media (max-width: 720px){ .trust-items{gap: 14px; font-size: 12px} .trust-item svg{width: 14px; height: 14px} } /* ============================================================ "OFFICIAL SOURCE" callout (different from biz CTA) ============================================================ */ .gov-source{ margin: 24px 0; padding: 18px 22px; background: F0F7FC; border: 1px solid C4DAEA; border-left: 3px solid var(--info); border-radius: 0 6px 6px 0; } .gov-source .gs-label{ display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--info); font-weight: 500; margin-bottom: 8px; } .gov-source .gs-label svg{width: 14px; height: 14px} .gov-source p{ font-size: 14.5px; line-height: 1.6; color: var(--ink-2); margin: 0; } .gov-source a{ color: var(--info); text-decoration: none; border-bottom: 1px solid currentColor; font-weight: 500; } .gov-source a:hover{color: var(--brand)} /* ============================================================ AUTHOR BIO (E-E-A-T) ============================================================ */ .author-bio{ margin: 48px 0 0; padding: 28px 32px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; display: grid; grid-template-columns: 60px minmax(0, 1fr); gap: 22px; align-items: start; } .author-bio .author-avatar{ width: 60px; height: 60px; border-radius: 50%; background: var(--brand); display: flex; align-items: center; justify-content: center; color: fff; font-family: var(--font-display); font-size: 28px; } .author-bio .author-info .author-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 4px; } .author-bio .author-info h5{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 6px; font-weight: 700; letter-spacing: -0.01em; } .author-bio .author-info p{ font-size: 14px; color: var(--ink-3); line-height: 1.55; margin: 0 0 8px; } .author-bio .author-credentials{ display: flex; flex-wrap: wrap; gap: 6px; } .author-bio .author-credentials .cred{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.08em; padding: 3px 9px; background: var(--surface); border: 1px solid var(--border-soft); border-radius: 3px; color: var(--ink-3); } @media (max-width: 600px){ .author-bio{grid-template-columns: 1fr; gap: 14px} } /* ============================================================ TL;DR (top of article) ============================================================ */ .tldr{ margin: 0 0 36px; padding: 24px 28px; background: linear-gradient(135deg, var(--surface-tint) 0%, var(--surface-2) 100%); border: 1px solid var(--border); border-radius: 6px; position: relative; } .tldr::before{ content:""; position: absolute; top: 0; bottom: 0; left: 0; width: 4px; background: var(--brand); border-radius: 6px 0 0 6px; } .tldr .tldr-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 12px; } .tldr h2{ font-family: var(--font-display); font-size: 20px; color: var(--ink); margin: 0 0 14px; font-weight: 700; border: 0; padding: 0; } .tldr ul{ margin: 0; padding-left: 20px; font-size: 15px; line-height: 1.6; color: var(--ink-2); } .tldr ul li{ margin-bottom: 6px; padding-left: 4px; } .tldr ul li strong{color: var(--ink)} /* Citation tag style */ .cite{ font-size: 0.85em; vertical-align: super; line-height: 1; color: var(--brand); text-decoration: none; font-family: var(--font-mono); padding: 1px 4px; background: var(--brand-100); border-radius: 2px; margin-left: 2px; font-weight: 500; } .cite:hover{background: var(--brand-200); color: var(--brand-deep)} /* Sources block at end */ .sources-block{ margin: 60px 0 0; padding: 32px 36px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; } .sources-block h3{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 18px; font-weight: 700; } .sources-block ol{ margin: 0; padding-left: 22px; font-size: 13.5px; line-height: 1.7; color: var(--ink-3); } .sources-block ol li{ margin-bottom: 8px; padding-left: 4px; } .sources-block ol li a{ color: var(--brand); text-decoration: none; border-bottom: 1px solid var(--border); } .sources-block ol li a:hover{ border-bottom-color: var(--brand); color: var(--brand-light); } /* Improved late fee calculator */ .fee-calc{ margin: 28px 0; padding: 28px 32px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; box-shadow: var(--shadow-md); } .fee-calc h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 6px; font-weight: 700; letter-spacing: -0.01em; } .fee-calc h4 em{font-style: normal; color: var(--brand-light); color: var(--brand)} .fee-calc .calc-sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 22px; font-weight: 500; } .fee-calc .calc-controls{ display: grid; grid-template-columns: 1fr 1fr; gap: 22px; margin-bottom: 24px; } .fee-calc .calc-field label{ display: block; font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 8px; font-weight: 500; } .fee-calc .calc-field input, .fee-calc .calc-field select{ width: 100%; padding: 12px 14px; border: 1px solid var(--border); border-radius: 4px; font-family: var(--font-body); font-size: 15px; color: var(--ink); background: var(--surface); transition: border 0.2s; } .fee-calc .calc-field input:focus, .fee-calc .calc-field select:focus{ outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-100); } .fee-calc .calc-result{ padding: 20px 24px; background: var(--brand); color: fff; border-radius: 4px; text-align: center; } .fee-calc .calc-result .calc-r-label{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.7); margin-bottom: 8px; font-weight: 500; } .fee-calc .calc-result .calc-r-amount{ font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 36px); font-weight: 700; line-height: 1; letter-spacing: -0.025em; } .fee-calc .calc-result .calc-r-breakdown{ margin-top: 10px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em; color: rgba(255,255,255,0.65); } @media (max-width: 600px){ .fee-calc .calc-controls{grid-template-columns: 1fr; gap: 14px} } /* Bottom-dock section navigation */ body{padding-bottom: 80px} .bottom-dock{ position: fixed; bottom: 16px; left: 16px; right: 16px; z-index: 100; max-width: 1100px; margin: 0 auto; background: var(--brand-deep, 004163); border-radius: 8px; box-shadow: 0 8px 28px rgba(0,0,0,0.18), 0 2px 6px rgba(0,0,0,0.08); opacity: 0; transform: translateY(12px); transition: opacity 0.25s, transform 0.25s; pointer-events: none; overflow: hidden; } .bottom-dock.visible{ opacity: 1; transform: translateY(0); pointer-events: auto; } .bottom-dock .dock-progress{ height: 2px; background: rgba(255,255,255,0.1); } .bottom-dock .dock-progress-fill{ height: 100%; width: 0%; background: linear-gradient(90deg, var(--brand-light, 0B6697), B7E1F5); transition: width 0.15s linear; } .bottom-dock .dock-inner{ display: flex; align-items: center; gap: 10px; padding: 10px 14px; } .bottom-dock .dock-list{ display: flex; gap: 4px; flex: 1; overflow-x: auto; scrollbar-width: none; } .bottom-dock .dock-list::-webkit-scrollbar{display: none} .bottom-dock .dock-item{ display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 99px; background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.75); text-decoration: none; font-family: var(--font-body); font-size: 12px; font-weight: 500; white-space: nowrap; transition: all 0.15s; border: 1px solid transparent; } .bottom-dock .dock-item:hover{ background: rgba(255,255,255,0.12); color: fff; } .bottom-dock .dock-item.active{ background: var(--brand-light, 0B6697); color: fff; } .bottom-dock .dock-item .dn{ font-size: 9.5px; letter-spacing: 0.14em; font-weight: 700; opacity: 0.7; } .bottom-dock .dock-item.active .dn{opacity: 0.9} .bottom-dock .dock-cta{ flex-shrink: 0; display: inline-flex; align-items: center; gap: 4px; padding: 8px 14px; border-radius: 99px; background: fff; color: var(--brand-deep, 004163); text-decoration: none; font-family: var(--font-body); font-size: 12px; font-weight: 700; white-space: nowrap; transition: all 0.15s; } .bottom-dock .dock-cta:hover{ background: B7E1F5; transform: translateX(2px); } @media (max-width: 720px){ .bottom-dock{bottom: 8px; left: 8px; right: 8px} .bottom-dock .dock-inner{padding: 8px 10px} .bottom-dock .dock-item{padding: 5px 10px; font-size: 11px} .bottom-dock .dock-item .dl{display: none} .bottom-dock .dock-item.active .dl{display: inline} .bottom-dock .dock-cta{padding: 7px 12px; font-size: 11.5px} } /* ============================================================ PAYMENT-METHOD GRID (replaces class-tabs from Leyden) ============================================================ */ .method-tabs-wrap{margin: 32px 0 24px} .method-tabs{ display: flex; gap: 4px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px 6px 0 0; padding: 6px; overflow-x: auto; position: relative; z-index: 2; scrollbar-width: thin; } .method-tab{ flex: 1; background: transparent; border: 0; padding: 14px 12px 12px; font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-3); cursor: pointer; border-radius: 4px; transition: all 0.2s; text-align: left; min-width: 130px; line-height: 1.25; } .method-tab:hover{background: var(--surface); color: var(--ink)} .method-tab.active{ background: var(--brand); color: fff; box-shadow: var(--shadow-sm); } .method-tab .mt-label{ display: block; font-size: 13.5px; font-weight: 600; letter-spacing: -0.008em; margin-bottom: 2px; } .method-tab .mt-hint{ display: block; font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500; opacity: 0.7; } .method-panel{display: none; animation: fadeUp 0.4s ease-out} .method-panel.active{display: block} .method-panel-header{ background: var(--surface); border: 1px solid var(--border); border-top: 0; padding: 24px 28px 22px; border-radius: 0 0 6px 6px; margin-bottom: 24px; display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 32px; align-items: center; } .method-panel-header .mph-text .mph-tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 8px; } .method-panel-header .mph-text h3{ font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 28px); font-weight: 400; color: var(--ink); letter-spacing: -0.015em; line-height: 1.1; margin: 0 0 8px; } .method-panel-header .mph-text h3 em{font-style: normal; color: var(--brand-light); font-weight: 600} .method-panel-header .mph-text .mph-meta{ font-size: 14px; color: var(--ink-4); line-height: 1.45; } .method-panel-header .mph-stats{ display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } .method-panel-header .mph-cell{ padding: 12px 14px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 4px; } .method-panel-header .mph-cell .mph-cl{ font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 5px; } .method-panel-header .mph-cell .mph-cv{ font-family: var(--font-display); font-size: 18px; color: var(--ink); letter-spacing: -0.012em; line-height: 1.2; font-weight: 400; } .method-panel-header .mph-cell .mph-cv.success{color: var(--success)} .method-panel-header .mph-cell .mph-cv.alert{color: var(--alert)} @media (max-width: 800px){ .method-panel-header{grid-template-columns: 1fr; gap: 24px} } /* Step-by-step inside method panels */ .method-steps{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 32px 36px; margin-bottom: 16px; } .method-steps h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); margin: 0 0 22px; font-weight: 400; letter-spacing: -0.01em; } .method-steps h4 em{font-style: normal; color: var(--brand-light); font-weight: 600} .step-row{ display: grid; grid-template-columns: 44px 1fr; gap: 18px; padding: 16px 0; border-top: 1px solid var(--border-soft); } .step-row:first-of-type{border-top: 0; padding-top: 0} .step-row .step-num{ font-family: var(--font-display); color: var(--brand-light); font-size: 32px; color: var(--brand); line-height: 1; letter-spacing: -0.02em; } .step-row .step-content h5{ font-family: var(--font-body); font-size: 16px; font-weight: 600; color: var(--ink); margin: 0 0 4px; letter-spacing: -0.005em; } .step-row .step-content p{ font-size: 14.5px; color: var(--ink-3); line-height: 1.55; margin: 0; } .step-row .step-content p code{ font-family: var(--font-mono); font-size: 12.5px; background: var(--surface-2); padding: 1px 6px; border-radius: 3px; color: var(--ink); } /* Deadline / fact strip (replaces stat-band content but reuses the look) */ /* Warning panel */ .warning-panel{ margin: 28px 0; padding: 22px 26px 24px; background: FEF7F0; border: 1px solid F4D5BA; border-left: 3px solid var(--alert); border-radius: 0 6px 6px 0; } .warning-panel h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--alert); font-weight: 500; margin: 0 0 10px; display: flex; align-items: center; gap: 8px; } .warning-panel h5 .icn{ width: 14px; height: 14px; } .warning-panel p{ font-size: 15px; line-height: 1.6; color: var(--ink-2); margin: 0 0 10px; } .warning-panel p:last-child{margin: 0} .warning-panel strong{color: var(--ink); font-weight: 600} /* Big "key deadline" block (replaces the journey block) */ .deadline-block{ margin: 28px 0; padding: 36px 32px 40px; background: var(--brand); color: fff; border-radius: 6px; position: relative; overflow: hidden; } .deadline-block::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); } .deadline-block::after{ content:""; position: absolute; top: -100px; right: -100px; width: 260px; height: 260px; background: radial-gradient(circle, rgba(255,255,255,0.08), transparent 65%); border-radius: 50%; pointer-events: none; } .deadline-block .head{position: relative; z-index: 2; text-align: center; margin-bottom: 30px} .deadline-block h4{ font-family: var(--font-display); font-size: clamp(22px, 2.6vw, 28px); color: fff; margin: 0 0 6px; font-weight: 400; letter-spacing: -0.015em; } .deadline-block h4 em{font-style: normal; color: B7E1F5; font-weight: 600} .deadline-block .sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.65); font-weight: 500; } .deadline-row{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; position: relative; z-index: 2; } .deadline-col{ text-align: center; padding: 22px 14px 20px; background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); border-radius: 4px; } .deadline-col.featured{ background: rgba(255,255,255,0.16); border-color: var(--success-bright); } .deadline-col .dc-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.65); margin-bottom: 10px; font-weight: 500; } .deadline-col .dc-num{ font-family: var(--font-display); font-size: clamp(22px, 2.8vw, 30px); font-weight: 400; color: fff; letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .deadline-col .dc-stage{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--success-bright); font-weight: 500; } @media (max-width: 700px){ .deadline-row{grid-template-columns: 1fr; gap: 10px} } /* Fee comparison table (compact version of comparison-table for fees) */ .fee-table{ margin: 28px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .fee-table-header{ background: var(--brand); color: fff; padding: 18px 28px; display: flex; justify-content: space-between; align-items: center; gap: 16px; position: relative; } .fee-table-header::after{ content:""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, var(--success-bright), transparent 50%); } .fee-table-header h4{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; font-weight: 500; margin: 0; text-transform: uppercase; color: fff; } .fee-table-header .source{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; color: rgba(255,255,255,0.7); text-transform: uppercase; } .fee-table table{width: 100%; border-collapse: collapse} .fee-table th, .fee-table td{ padding: 14px 18px; border-bottom: 1px solid var(--border-soft); font-size: 14px; vertical-align: top; } .fee-table th{ background: var(--surface-2); text-align: left; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .fee-table th:not(:first-child), .fee-table td:not(:first-child){text-align: right} .fee-table td:first-child{ color: var(--ink); font-weight: 500; font-size: 14px; } .fee-table td:first-child .fee-hint{ display: block; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-top: 3px; } .fee-table td.num{ font-family: var(--font-display); font-size: 17px; color: var(--ink); letter-spacing: -0.01em; font-weight: 400; } .fee-table td.num.success{color: var(--success); font-weight: 500} .fee-table td.num.alert{color: var(--alert); font-weight: 500} .fee-table tr:last-child td{border-bottom: 0} .fee-table tr:hover td{background: var(--surface-tint)} @media (max-width: 800px){ .fee-table{overflow-x: auto} .fee-table table{min-width: 600px} } /* ============================================================ PIN FINDER LIST (Find Your PIN section) ============================================================ */ .pin-finder-list{ list-style: none; padding: 0; margin: 16px 0 24px; } .pin-finder-list li{ margin-bottom: 12px; font-size: 16px; line-height: 1.6; color: var(--ink-2); padding-left: 0; } .pin-finder-list li:not(.pin-finder-fast){ padding-left: 24px; position: relative; } .pin-finder-list li:not(.pin-finder-fast)::before{ content: '•'; position: absolute; left: 8px; color: var(--brand); font-weight: 600; } .pin-finder-fast{ background: linear-gradient(135deg, F0FDF4 0%, FAFFFC 100%); border: 1px solid BBEFCB; border-left: 3px solid var(--success); border-radius: 0 6px 6px 0; padding: 16px 20px 18px; margin-bottom: 16px; } .pin-finder-tag{ display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--success); font-weight: 600; margin-bottom: 8px; } .pin-finder-tag svg{ width: 12px; height: 12px; } .pin-finder-content strong{ color: var(--ink); font-weight: 600; } .pin-finder-content a{ color: var(--success); font-weight: 500; text-decoration: none; border-bottom: 1px solid currentColor; } .pin-finder-content a:hover{ color: var(--brand); } System online · Tax bills available now Cook County · 2025 Tax Year · First Installment · Due April 1, 2026 Sourced from Cook County Treasurer, Assessor & IL Dept. of Revenue Last reviewed May 2026 Reviewed by Cook County Tax Appeals attorneys & CPAs 2026 Payment Guide Tax Year 2025 First Installment Pay your Cook County property taxes — without paying more than you have to. For the 2025 tax year, the First Installment is due Wednesday, April 1, 2026 . There are six official ways to pay — and one is completely free. This guide walks through each method, what to bring, the fees that apply, and how to make sure next year's bill is lower. Due date April 1, 2026 First Installment 55% of 2024 total Late charge 0.75%/mo Free option Online ACH Cook County Tax Appeals Updated May 21, 2026 10 min read Option 1 · Fastest & free Online (ACH) $0 fee Posts in 2–3 business days Option 2 · Convenience cost Credit / debit card 2.10 % Third-party · non-refundable Option 3 · USPS postmark counts By mail $0 fee Allow up to 2 weeks to post Option 4 · ~400 IL Chase branches Chase or community bank $0 fee Coupon required Late after April 1, 2026 Late charge 0.75 %/mo 9% per year (cut from 18% in 2024) Partial payments accepted — interest still accrues on the unpaid balance. Bills mailed ~ 0 By March 2, 2026 First Installment is 0 % Of 2024's total tax Days until April 1 — Pay early to avoid risk Late charge per month 0.75 % Down from 1.5% (2024 reform) Treasurer phone 312-443-5100 Mon–Fri 8:30am–4:30pm Paying your bill is one part. Lowering next year's is the other. Get a property-specific savings estimate in 60 seconds. $0 upfront · 25% of savings only Calculate my savings ★ TL;DR — The 30-Second Version For homeowners short on time Due date: Wednesday, April 1, 2026 (Tax Year 2025 First Installment) [1] Cheapest way to pay: Online ACH from your bank account at cookcountytreasurer.com — $0 fee [2] If you're late: 0.75% per month interest applies to the unpaid balance — mandated by Illinois law [3] Bills mailed: By March 2, 2026 (~1.8 million bills sent) [1] Want to pay less next year? File a property tax appeal — Cook County's data shows appeals work for every property class If you searched "pay Cook County property taxes," you almost certainly want two things — to pay your bill on time, and to avoid paying more than you legally owe. This guide answers both, using only official sources from the Cook County Treasurer, Cook County Assessor, and Illinois Department of Revenue. The 2025 Tax Year First Installment is due Wednesday, April 1, 2026 . 01 · The basics How Cook County property taxes actually work Four separate Cook County offices each handle a different piece of your tax bill, and confusing them is the most common reason owners overpay. The brief version: Cook County Assessor — sets your property's value. The Assessor does not collect payments and does not set tax rates. Most successful property tax appeals start here. Cook County Board of Review — an independent three-member panel that hears appeals after the Assessor closes. Often the higher-yield stage for residential owners. Cook County Clerk — calculates the tax rate for your specific area based on local taxing district budgets (schools, parks, the city, the county). Also handles delinquent tax redemption. Cook County Treasurer — prints, mails, and collects the bill. This is the office you actually pay. The Treasurer also handles refunds and the annual tax sale. Two installments, two different rules Cook County bills property taxes in two installments each year. They behave very differently. The First Installment is an estimate. It's set at exactly 55% of the previous year's total tax, regardless of what's happened to your property since. Importantly, your exemptions don't apply to the First Installment — they're applied to the Second Installment later in the year. So even seniors and homeowners with active exemptions pay the unreduced 55% in the spring. The Second Installment is the true reconciliation. It uses your current assessed value, the latest local tax rates, and all of your applicable exemptions to produce the actual total — minus whatever you already paid in the spring. It typically arrives in late summer or fall. Current 2025 tax year deadlines Cook County Treasurer · Tax year 2025 (billed and paid in 2026) Bills mailed March 2, 2026 ~1.8M bills First Installment due April 1, 2026 By 11:59 PM Second Installment Summer/Fall 2026 Date TBD Why April 1 instead of the usual March 1? The Cook County government secured a one-month legislative extension for the 2025 cycle because the prior installment (Tax Year 2024 Second Installment, due December 15, 2025) ran late due to billing-service issues. The extension is one-time only — the standard March deadline returns next year unless something changes again. 02 · Find your PIN Find your Property Index Number and bill Every Cook County property has a unique 14-digit Property Index Number (PIN) . You need it to pay, to look up your bill, and to file any appeal. PINs look like this: 12-34-567-890-1234 Four ways to find yours: Fastest Cook County Tax Appeals search — enter your address at cookcountytaxappeal.com for one-click access to your PIN, current tax bill, exemption history, and an instant savings estimate. Aggregates data from the Treasurer, Assessor, and Property Tax Portal so you don't need to visit multiple government sites. Cook County Treasurer: cookcountytreasurer.com — search by property address or PIN. Shows current bill, payment history, exemptions, and refund status [2] . Cook County Property Tax Portal: cookcountypropertyinfo.com — the inter-agency portal showing data from the Assessor, Treasurer, Clerk, and Board of Review in one place. Cook County Assessor: cookcountyassessor.com — search by address for assessed value, exemption history, and property characteristics [4] . Official source The Cook County Treasurer's payment portal at cookcountytreasurer.com is the only payment system officially accepted by Cook County. Avoid any third-party site that asks for payment. Once you have your PIN, you can view: current and prior tax bill amounts, payment history, property classification, recorded exemptions, refund status, and direct links to the Treasurer's payment system. If you plan to file an appeal Save your 14-digit PIN somewhere accessible. Every official filing with the Assessor, the Board of Review, or the Illinois Property Tax Appeal Board (PTAB) requires it. The same number opens your records across all three agencies. 03 · How to pay Six ways to pay your Cook County property tax bill The Treasurer's Office accepts six official payment methods. Most owners use online ACH because it's free and posts within a few business days. But there are good reasons to use the others — partial payments, prior-year balances, or simply not having a bank account that supports ACH. Use the tabs below to compare each option side by side. Online (ACH) Free · 2–3 days Credit / debit 2.10% fee By mail USPS postmark Chase Bank ~400 IL branches Community bank 100+ partners In person Treasurer's Office Recommended · most owners Online from your bank account Pay directly via ACH from a checking or savings account on the official Cook County Treasurer website. This is the only online payment method the Treasurer endorses — and it's free. Fee $0 Posts in 2–3 business days Pay online step by step 1 Find your PIN The fastest way is the Cook County Tax Appeals search — enter your address for one-click PIN lookup. Alternatively, use cookcountytreasurer.com (Treasurer) or cookcountypropertyinfo.com (Property Tax Portal). 2 Open the Treasurer's payment portal Go to cookcountytreasurer.com and select the blue "Pay Online for Free" box. A photo of your property should appear when you enter your PIN or address — confirm it's the correct parcel before proceeding. 3 Enter your bank routing & account number The portal uses ACH debit. Have your check or bank account info ready. There is no fee from the Treasurer or from your bank for this method. 4 Verify the payment posted Within 2–3 business days, your payment status on the Treasurer's portal should update to "Paid." Save the confirmation page or email. If the status hasn't changed after 5 business days, call 312-443-5100 . Avoid third-party sites Several websites charge fees to forward payments to the Treasurer. None of these are official. Always start from cookcountytreasurer.com directly — anywhere else, you're paying extra to a middleman. Convenient · costs extra Online with a credit or debit card The Treasurer accepts credit and debit cards online, but a third-party processor — not the county — charges a 2.10% convenience fee. The fee is non-refundable, even if you file a successful appeal. Fee 2.10% On a $5,000 bill $105 extra When card payment makes sense For most owners, the 2.10% fee on a property tax payment is far more than any rewards card cashback rate (which top out around 2%). But if you're earning a one-time signup bonus, hitting a minimum-spend threshold, or you genuinely need the float between charge date and statement due date, the math can work — just calculate the full cost before you charge. The card fee is non-refundable If your appeal is later successful and the Treasurer issues you a refund, you'll get back the tax overpayment — but not the 2.10% processing fee. The fee is collected by an outside vendor and the county can't return it. Free · USPS postmark counts By mail Mail a check with your tax bill payment coupon to the Treasurer's lockbox. The USPS postmark date is your payment date, so a check mailed on April 1 and received April 7 still counts as on time. Fee $0 Allow to post ~2 weeks What to include in your mailed payment 1 The original payment coupon Detach the bottom of your tax bill. Don't send a photocopy or a printed image from a screen — the Treasurer's lockbox processes by scanning the coupon. 2 A check with all the right info written on it Write your 14-digit PIN, taxpayer name, property address (including unit number), mailing address, phone number, email, and tax year/installment on the check itself. If anything's unclear, the lockbox will reach out — which delays posting. 3 Send to the correct PO box Cook County Treasurer PO Box 805438 Chicago, IL 60680-4116 4 Save your canceled check Your canceled check is your receipt. Verify the payment posted on the Treasurer's portal within two weeks of mailing. Private carriers don't count the same way USPS uses the postmark date as your payment date — so a check stamped April 1 is on time even if it arrives April 7. But FedEx, UPS, and other private carriers count the receipt date , which means a package sent April 1 that arrives April 2 is one day late. Stick with USPS if you're mailing close to the deadline. ~400 Illinois Chase branches At any Chase Bank location You can pay at any of the nearly 400 Chase Bank branches in Illinois — including locations outside Cook County. You don't need to bank with Chase. They accept partial payments and provide a dated receipt. Fee $0 Partial payments Accepted What to bring to Chase 1 Your original tax bill payment coupon Or a printed copy from the Treasurer's portal. One coupon per PIN, per installment. 2 A check with full account info written on it Same requirements as mailing a check: PIN, taxpayer name, property address with unit, mailing address, phone, email, and tax year/installment all written on the check itself. 3 Check branch hours Branches vary. Some close mid-afternoon. If you're cutting close to the deadline, confirm hours before driving over. The Cook County Tax Appeals search tool links to the Chase branch finder. 100+ partner banks At a community bank More than 100 community banks in Cook County accept property tax payments — but only from their own account holders. If you already bank locally, this is often the most convenient in-person option. Fee $0 Requirement Active account Where to find the participating-bank list The complete list of community banks accepting Cook County tax payments is on the Treasurer's website — search "Ways to Pay." If your bank isn't on the list, your fallback options are online, by mail, or at a Chase branch. Downtown Chicago · Loop In person at the Treasurer's Office For owners who want a receipt directly from the Treasurer's Office — or who have prior-year, redemption, or open-item balances that can't be paid elsewhere — the office at 118 N. Clark Street accepts payments in Room 112. Office hours Mon–Fri 8:30am–4:30pm Phone 312-443-5100 Required for delinquent balances Open Item and Forfeiture Redemption bills (Tax Year 2022 and prior delinquencies) can only be paid by mail or in person at the Treasurer's Office — not at Chase, not at community banks, and not online. If you have a prior-year balance, start with the Cook County Clerk's Office (118 N. Clark Street, Room 434) to get the redemption bill first. Cook County Treasurer's Office 118 North Clark Street, Room 112 Chicago, Illinois 60602 312-443-5100 All six payment methods — at a glance Cook County Treasurer · 2026 cycle Method Fee Speed to post Partial OK? Online — ACH From a bank account $0 2–3 days Yes Online — card Credit or debit 2.10% 2–3 days Yes By mail Check + coupon $0 ~2 weeks Yes Chase Bank ~400 IL branches $0 ~1 week Yes Community bank If you have an account $0 ~1 week Bank-dependent In person 118 N. Clark Street $0 Same day Yes If you own 10 or more properties (bulk & TPA program) Commercial portfolios and large landlords face two specific rules: The 10+ PIN bulk fee — if you submit online payments for 10 or more PINs in a single session, the Treasurer applies a $2.00 enhanced processing fee per PIN, per installment . On a 100-PIN portfolio that's $200 per installment, $400 per year. Third Party Agent (TPA) program — for high-volume managers (typically hundreds of parcels), the Treasurer offers a TPA program that delivers tax data electronically and streamlines bulk payment. Contact the Treasurer's Office to apply. For portfolio owners — the math compounds If you own multiple properties, appeals scale fast . A 10% reduction on a single $5,000 commercial bill saves $500. Across a 25-PIN portfolio averaging that bill, that's $12,500 a year. We handle every parcel across all three appeal tiers (CCAO, BOR, PTAB) under one engagement. No upfront cost — 25% of first-year savings only. Calculate savings for my portfolio If your mortgage company pays through escrow Most homeowners with a mortgage have their property taxes paid automatically through an escrow account. The lender adds a portion of your annual tax bill to each monthly mortgage payment, holds it in escrow, and remits the lump sum to the Treasurer when it's due. Three things to know: You are still ultimately responsible. The Treasurer is explicit: if your escrow agent fails to pay on time, the late charge accrues against you, not the lender. Don't assume — verify. Check the payment posted. A few business days after the deadline, look up your PIN on the Treasurer's portal. Status should say "Paid." If it doesn't, contact your lender immediately. Don't double-pay. If your escrow is active, don't also pay yourself — you'll create a refund situation that can take months to resolve. 04 · If you're late What happens if you miss the deadline The First Installment late charge is 0.75% per month [3] of any unpaid balance. That's a state-mandated interest rate, set by Illinois law and applied uniformly across all 102 Illinois counties. One piece of good news: this rate was cut in half in 2024 . Until February 2024, the late charge was 1.5% per month (18% per year). A reform law signed by Governor Pritzker — promoted by the Cook County Treasurer and the Chicago Community Trust — reduced the rate to 0.75% per month (9% per year). For owners who fall behind, that saves about $90 per year on every $1,000 of overdue tax. What the late charge actually costs 0.75% per month on unpaid balance Unpaid balance 1 month late 3 months late 6 months late 12 months late $1,000 Modest single-family $7.50 $22.50 $45 $90 $3,000 Typical residential $22.50 $67.50 $135 $270 $5,000 Higher residential / small commercial $37.50 $112.50 $225 $450 $15,000 Commercial / multi-family $112.50 $337.50 $675 $1,350 Interactive late-fee calculator Estimate the cost of being late on your bill Unpaid balance ($) Months late 1 month 3 months 6 months 9 months 12 months Estimated interest charge $67.50 $3,000 × 0.75%/mo × 3 months Partial payments — almost always cheaper than carrying credit-card debt The Treasurer accepts partial payments at any of the six methods. Interest still accrues on the remaining unpaid balance, but the math usually works strongly in your favor: 0.75% monthly is roughly 9% annually, far below the 20–29% APR most credit cards charge. If paying in full means putting the balance on a credit card, partial payments to the Treasurer are almost always the cheaper option. The Payment Plan Calculator For overdue balances of $100 or more, the Treasurer's Payment Plan Calculator lets you set up a monthly or twice-monthly payment schedule to catch up over time. It's a free tool available on the Treasurer's website. A payment plan does NOT stop the annual tax sale This is critical and frequently misunderstood. The Treasurer is explicit: setting up a payment plan keeps you on a schedule, but it does not prevent your delinquent taxes from being sold at the annual tax sale to a third-party buyer. To prevent a tax sale, the full overdue balance must be paid before the sale begins. The payment plan is a budgeting tool, not a tax-sale shield. If you're approaching a tax sale, contact the Treasurer's Office or a property tax attorney immediately — don't rely on a payment plan to save the property. Beyond the standard 0.75% monthly rate, there are additional interest tiers that kick in if a property goes through the tax sale process and into redemption. Those rates can be materially higher. If you're more than 13 months overdue, get professional help — the math gets ugly quickly. If you missed an exemption: Certificate of Error If you qualified for the Homeowner, Senior, Senior Freeze, Persons with Disabilities, or Veterans exemption in a past year but it wasn't applied to your bill, the Cook County Assessor's Office can process a Certificate of Error . This is a refund or corrected-bill mechanism that lets you redeem missing exemptions for the current tax year plus the prior four years (2025, 2024, 2023, 2022, and 2021) [4] . To apply, file a Certificate of Error application with the Assessor's Office at cookcountyassessor.com/exemptions . Most exemptions auto-renew once initially applied — but if you sold a property, moved, hold the property in trust, or own multiple properties, exemptions may not roll over automatically. From the Assessor's Office Per the Cook County Assessor, the Senior Exemption alone is worth approximately $300/year on average, and combined with the Homeowner Exemption can reach $750/year. The Homeowner Exemption itself can be worth up to $2,000 depending on local tax rates [4] . Returned checks & bounced payments If a payment is returned by your bank for any reason (insufficient funds, closed account, stop-payment), the Treasurer treats the original payment as void. The unpaid balance accrues interest from the original due date, and the Treasurer may also assess a returned-check fee. Contact the Treasurer's Office at 312-443-5100 immediately if you discover a returned check, before the next interest accrual date. Prior-year delinquencies (Open Item & Forfeiture Redemption) If you have unpaid taxes from Tax Year 2022 or earlier , those balances are no longer with the Treasurer — they've moved to the Cook County Clerk's Office for redemption. These are called "Open Item" or "Forfeiture Redemption" bills, and they can only be paid by mail or in person at the Treasurer's Office once the Clerk has issued the redemption bill [5] . To get a redemption bill, visit the Cook County Clerk's Office at 118 N. Clark Street, Room 434, Chicago, IL 60602, or call 312-603-2107 . 05 · Lower next year's bill The real way to cut your Cook County property tax bill Paying on time avoids the late charge. But the only way to actually reduce what you owe is to lower your assessed value . That happens through a property tax appeal — and Cook County's data shows appeals work, especially when you escalate beyond the Assessor's initial decision. The Cook County system has three appeal tiers: Cook County Assessor (CCAO) — files first, when the Assessor opens your township's appeal window. Most successful but moderate reductions happen here. Cook County Board of Review (BOR) — an independent agency that hears appeals after the Assessor closes. Often the higher-yield stage for residential owners — success rates run 40-60% on most residential classes vs 17-26% at the Assessor. Illinois Property Tax Appeal Board (PTAB) — the state-level appeal, if BOR doesn't produce enough relief. Each tier applies a different review standard, so a "No change" at one stage doesn't prevent success at the next. The data consistently shows that filing at both the CCAO and BOR produces larger reductions than filing at either one alone. One key thing about appeals and your current bill An appeal lowers your future tax bills — not the one due April 1, 2026. The First Installment is locked in at 55% of 2024's total. If you appeal successfully now, the benefit shows up on the Second Installment this fall and on all bills going forward. So the safest strategy is: pay your current bill on time, and file an appeal in parallel. Don't wait — every township has a 30-day appeal window Pre-register your property and we'll file the moment your window opens . Cook County appeal deadlines shift constantly. Each of the 38 townships gets a brief window each year — usually 30 days. We track every deadline automatically. Pre-register once, and the day your township opens, our team files a data-driven appeal on your behalf. $0 upfront. 25% of first-year savings only — paid only if we win. Pre-register my property Frequently asked questions When are Cook County property taxes due in 2026? + The Tax Year 2025 First Installment is due Wednesday, April 1, 2026 . Bills were mailed by March 2, 2026 and have been viewable online at cookcountytreasurer.com since February 20, 2026. The Second Installment for tax year 2025 is expected later in 2026 — the exact date is set by the Treasurer once assessments and rates are finalized. Can I pay Cook County property taxes online for free? + Yes. Online payments via ACH (directly from a checking or savings account) are free on the official Cook County Treasurer website at cookcountytreasurer.com. The 2.10% processing fee only applies to credit and debit card payments, which are also accepted but charged by a third-party processor. Always start from the official Treasurer site to avoid unofficial third-party services that may add fees. How much is the late charge if I miss the April 1 deadline? + The late charge is 0.75% per month of any unpaid balance, mandated by Illinois law. That's about 9% per year. This rate was cut in half in 2024 from the previous 1.5%/month (18%/year). The Treasurer accepts partial payments, but interest still accrues on whatever balance remains unpaid after the deadline. Why is the First Installment 55% of last year's bill? + By Illinois law, the First Installment is an estimate set at exactly 55% of the previous year's total tax. The remaining 45% (plus or minus any changes from your current assessment, the current tax rates, and your exemptions) gets billed in the Second Installment. The 55% structure makes the First Installment predictable — you can calculate it from your prior year's bill — and your exemptions are applied only to the Second Installment. Do exemptions reduce the First Installment? + No. Exemptions only apply to the Second Installment . So even seniors, homeowners with active homestead exemptions, and disabled veterans pay the full unreduced 55% of last year's bill in April. The Second Installment is where the math gets reconciled — your exemptions, your current assessed value, and the current tax rates all get applied together. If you're missing an exemption you qualify for, the Assessor's Office can process a Certificate of Error to apply it retroactively. What if my mortgage company pays my taxes through escrow? + Most homeowners with a mortgage have escrow accounts that pay property taxes automatically. You are still ultimately responsible — if the lender pays late, the late charge accrues against your property, not the bank. A few business days after the deadline, look up your PIN on the Treasurer's portal to confirm the payment posted. If it didn't, contact your lender immediately. And if you have escrow, don't also pay yourself — you'll create a refund situation that takes months to resolve. Where can I pay in person? + Four in-person options. (1) Any of the nearly 400 Chase Bank branches in Illinois — you don't need to bank with Chase, just bring your tax bill coupon. (2) Any of the 100+ community banks participating in the program, if you have an active account there. (3) The Cook County Treasurer's Office at 118 N. Clark Street, Room 112, Chicago, IL 60602. (4) For prior-year delinquencies, the Cook County Clerk's Office (Room 434, same building) to get the redemption bill first. Can I appeal my property taxes and still pay on time? + Yes — and this is the recommended strategy. Pay your bill on time and in full to avoid the late charge, then file an appeal in parallel. The appeal process can take several months. If your appeal succeeds and reduces your assessment, the Treasurer's Office will issue a refund for any overpayment. Skipping the payment to "wait and see" doesn't pause the late charge — it just adds 0.75%/month on top of whatever you eventually owe. What is the 10+ PIN bulk fee for online payments? + If you submit online payments for 10 or more PINs in a single session , the Treasurer applies a $2.00 enhanced processing fee per PIN, per installment. This affects commercial portfolios and landlords with multiple properties. For high-volume users (typically hundreds of parcels), the Treasurer offers a Third Party Agent (TPA) program with electronic tax data delivery — apply through the Treasurer's Office. Take control of your Cook County property tax bill Paying on time avoids the 0.75% monthly late charge. But the only proven way to lower your tax bill is a strategic property tax appeal — and Cook County's published data shows appeals work for every property class, especially when escalated across both the Assessor and the Board of Review. Cook County Tax Appeals files appeals across all three tiers (CCAO, BOR, PTAB), monitors your township's deadline so you never miss the 30-day filing window, and charges nothing upfront. Our fee is 25% of first-year savings — paid only if we successfully reduce your bill. Sources & verification Every claim in this guide is verified against official Cook County and Illinois state government sources. Last reviewed May 2026. Cook County Treasurer's Office. "Pappas says property tax bills now online at cookcountytreasurer.com." Press release, February 20, 2026. cookcountytreasurer.com Cook County Treasurer's Office. "Pay Online with Your Bank Account." cookcountytreasurer.com/payonlinewithyourbankaccount Public Act 103-0007 (2023), reducing Illinois property tax interest rate from 1.5% to 0.75% per month, effective for tax year 2023 forward. Confirmed by Cook County Treasurer reform statement. Cook County Assessor's Office. "Property Tax Exemptions." cookcountyassessor.com/exemptions Cook County Treasurer's Office. "Ways to Pay." cookcountytreasurer.com/waystopay Cook County Treasurer's Office. "Making Cook County Property Tax Payments at Chase Bank." cookcountytreasurer.com/makingpaymentsatchasebank Illinois Department of Revenue. "Penalties and Interest for Illinois Taxes." Publication 103, September 2025. tax.illinois.gov Cook County Property Tax Portal. cookcountypropertyinfo.com CC Reviewed by Cook County Tax Appeals Editorial Team This guide is reviewed by licensed Illinois tax attorneys and CPAs who specialize in Cook County property tax appeals across all 38 townships. Every fact is verified against current Cook County Treasurer, Assessor, and Illinois Department of Revenue publications. IL Bar IL CPA PTAB-Certified Updated May 2026 Pay your current bill on time. Then pre-register your property so we can fight to lower next year's. 60 seconds, $0 upfront. Calculate my savings Risk-free service $0 upfront. You only pay if we win. Our fee is 25% of your first year's tax savings. We escalate every case across all three appeal tiers — Assessor, BOR, and PTAB — so you capture the full reduction. Calculate my savings Why choose us 70% higher success rate than the average attorney appeal Instant AI-powered property analysis Licensed Illinois tax attorneys & CPAs 3-tier escalation: Assessor → BOR → PTAB Fee is just 25% of first-year savings Key 2026 dates 2025 tax year cycle Bills mailed Mar 2, 2026 Online payments open Feb 20, 2026 1st Installment due Apr 1, 2026 2nd Installment TBD 2026 Payment methods Cost & speed by method Online ACH $0 Mail $0 Chase $0 Community bank $0 In person $0 Credit/debit card 2.10% Related guides Cook County appeal deadlines Property tax calculator Cook County exemptions Residential appeals Commercial appeals Hire Cook County Tax Appeals Paying on time is half the battle. Paying less is the other half. For the 2025 tax year, the First Installment is due April 1, 2026. Pay it on time to avoid the 0.75% monthly late charge — then let us file an appeal in parallel. Cook County Tax Appeals handles all three appeal tiers (CCAO, BOR, PTAB) under one engagement. $0 upfront. 25% of first-year savings only — paid only if we win. Calculate my savings Free consultation 2025 tax year · key facts 1st Installment due Apr 1, 2026 First Installment 55% of 2024 Online ACH fee $0 Card fee 2.10% Late charge 0.75%/mo © Cook County Tax Appeals LLC cookcountytaxappeal.com · (708) 888-8880 (function(){ // Counter animation function format(v, fmt, decimals){ if (fmt === 'currency') return '$' + Math.floor(v).toLocaleString('en-US'); if (fmt === 'number') return Math.floor(v).toLocaleString('en-US'); if (decimals > 0) return v.toFixed(decimals); return Math.floor(v).toLocaleString('en-US'); } function animateCounter(el){ var raw = parseFloat(el.dataset.count); var decimals = parseInt(el.dataset.decimals || 0); var fmt = el.dataset.format || 'plain'; var duration = 1700; var start = performance.now(); function setText(text){ for (var i = 0; i 0){ deadlineEl.textContent = diff; } else { deadlineEl.textContent = 'Past due'; deadlineEl.style.fontSize = '24px'; } } // Stat band bar fills var statObs = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if (e.isIntersecting){ e.target.classList.add('go'); statObs.unobserve(e.target); } }); }, { threshold: 0.3 }); document.querySelectorAll('.stat-cell').forEach(function(el){ statObs.observe(el); }); // Section counter highlighting var sections = document.querySelectorAll('h2[id]'); var counterItems = document.querySelectorAll('.section-counter .count-item'); if (sections.length && counterItems.length){ var secObs = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if (e.isIntersecting){ var id = e.target.id; counterItems.forEach(function(item){ item.classList.toggle('active', item.dataset.target === id); }); } }); }, { rootMargin: '-30% 0px -60% 0px', threshold: 0 }); sections.forEach(function(s){ secObs.observe(s); }); counterItems.forEach(function(item){ item.addEventListener('click', function(){ var target = document.getElementById(item.dataset.target); if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' }); }); }); } // Method tab switching function switchMethod(targetMethod){ document.querySelectorAll('.method-tab').forEach(function(tab){ tab.classList.toggle('active', tab.dataset.method === targetMethod); }); document.querySelectorAll('.method-panel').forEach(function(panel){ panel.classList.toggle('active', panel.dataset.panel === targetMethod); }); } document.querySelectorAll('.method-tab').forEach(function(tab){ tab.addEventListener('click', function(){ switchMethod(tab.dataset.method); }); }); // Hero method-mini cards link to the tabs document.querySelectorAll('.class-mini[data-tab-target]').forEach(function(card){ card.addEventListener('click', function(){ var target = card.dataset.tabTarget; // Map late -> the section, others -> the tab if (target === 'late'){ var lateSection = document.getElementById('s4'); if (lateSection) lateSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); return; } // Map online, card, mail, bank to method tabs var methodMap = { 'online': 'online', 'card': 'card', 'mail': 'mail', 'bank': 'chase' }; var method = methodMap[target] || 'online'; switchMethod(method); var tabsSection = document.querySelector('.method-tabs-wrap'); if (tabsSection){ tabsSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // Late-fee calculator var calcAmount = document.getElementById('calc-amount'); var calcMonths = document.getElementById('calc-months'); var calcResult = document.getElementById('calc-result-amount'); var calcBreakdown = document.getElementById('calc-result-breakdown'); function updateCalc(){ if (!calcAmount || !calcMonths || !calcResult) return; var amt = parseFloat(calcAmount.value) || 0; var mo = parseInt(calcMonths.value) || 1; var fee = amt * 0.0075 * mo; calcResult.textContent = '$' + fee.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}); calcBreakdown.textContent = '$' + amt.toLocaleString('en-US') + ' × 0.75%/mo × ' + mo + ' month' + (mo > 1 ? 's' : ''); } if (calcAmount) calcAmount.addEventListener('input', updateCalc); if (calcMonths) calcMonths.addEventListener('change', updateCalc); // Bottom-dock section navigation var iDock = document.getElementById('bottom-dock'); var iFill = document.getElementById('dock-fill'); var iArticle = document.querySelector('article'); var iItems = document.querySelectorAll('.bottom-dock .dock-item'); var iSections = ['s1','s2','s3','s4','s5']; if (iDock && iArticle){ function updateDock(){ var rect = iArticle.getBoundingClientRect(); var total = iArticle.offsetHeight - window.innerHeight; var scrolled = Math.max(0, -rect.top); var pct = total > 0 ? Math.min(100, (scrolled / total) * 100) : 0; if (iFill) iFill.style.width = pct + '%'; var heroEl = document.querySelector('header.hero'); var heroBottom = heroEl ? heroEl.offsetHeight : 600; if (window.scrollY > heroBottom - 60){ iDock.classList.add('visible'); } else { iDock.classList.remove('visible'); } var curIdx = 0; for (var i = 0; i { "@context": "https://schema.org", "@graph": [ { "@type": "Article", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesarticle", "isPartOf": { "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes" }, "mainEntityOfPage": { "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes" }, "headline": "How to Pay Cook County Property Taxes 2026 — Bill & Deadlines", "description": "Pay your Cook County property taxes online, by mail, or in person. 2026 deadlines, payment portal, fees, and how to lower next year's bill with an appeal.", "image": { "@type": "ImageObject", "url": "https://www.cookcountytaxappeal.com/blog/pay-cook-county-property-taxes-featured.png", "width": 1200, "height": 630 }, "datePublished": "2026-03-24T09:00:00-05:00", "dateModified": "2026-05-21T09:00:00-05:00", "author": { "@id": "https://www.cookcountytaxappeal.com/organization" }, "publisher": { "@id": "https://www.cookcountytaxappeal.com/organization" }, "articleSection": "Property Tax Payments", "keywords": "pay cook county property taxes, cook county tax portal, cook county property tax bill, cook county tax assessor tax bill, cook county property tax due dates", "about": [ { "@type": "Place", "name": "Cook County, Illinois" }, { "@type": "Thing", "name": "Cook County property tax payment" }, { "@type": "Thing", "name": "Cook County Treasurer" } ], "citation": [ { "@type": "CreativeWork", "name": "Cook County Treasurer Ways to Pay", "url": "https://www.cookcountytreasurer.com/waystopay.aspx" }, { "@type": "CreativeWork", "name": "Cook County Assessor Property Tax Exemptions", "url": "https://www.cookcountyassessor.com/exemptions" }, { "@type": "CreativeWork", "name": "Illinois Department of Revenue Publication 103", "url": "https://tax.illinois.gov/research/publications/pubs/penalties-and-interest-for-illinois-taxes.html" } ], "isBasedOn": [ "https://www.cookcountytreasurer.com", "https://www.cookcountyassessor.com", "https://tax.illinois.gov" ] }, { "@type": "WebPage", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes", "url": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxes", "name": "How to Pay Cook County Property Taxes 2026", "isPartOf": { "@id": "https://www.cookcountytaxappeal.com/website" }, "inLanguage": "en-US", "breadcrumb": { "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesbreadcrumbs" } }, { "@type": "BreadcrumbList", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesbreadcrumbs", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.cookcountytaxappeal.com/" }, { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs" }, { "@type": "ListItem", "position": 3, "name": "How to Pay Cook County Property Taxes" } ] }, { "@type": "WebSite", "@id": "https://www.cookcountytaxappeal.com/website", "url": "https://www.cookcountytaxappeal.com/", "name": "Cook County Tax Appeals", "publisher": { "@id": "https://www.cookcountytaxappeal.com/organization" } }, { "@type": ["Organization", "LegalService"], "@id": "https://www.cookcountytaxappeal.com/organization", "name": "Cook County Tax Appeals", "url": "https://www.cookcountytaxappeal.com/", "telephone": "+1-708-888-8880", "address": { "@type": "PostalAddress", "streetAddress": "6600 College Drive, Suite 207", "addressLocality": "Palos Heights", "addressRegion": "IL", "postalCode": "60463", "addressCountry": "US" }, "areaServed": { "@type": "AdministrativeArea", "name": "Cook County, Illinois" }, "serviceType": [ "Property Tax Appeal", "Cook County Assessor Appeal", "Cook County Board of Review Appeal", "Illinois Property Tax Appeal Board (PTAB) Appeal" ], "priceRange": "Contingency · 25% of first-year savings" }, { "@type": "HowTo", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxeshowto", "name": "How to Pay Cook County Property Taxes", "description": "Step-by-step instructions for paying Cook County property taxes online, by mail, or in person for the 2025 tax year First Installment due April 1, 2026.", "totalTime": "PT10M", "step": [ { "@type": "HowToStep", "position": 1, "name": "Find your 14-digit Property Index Number (PIN)", "text": "Look up your PIN by entering your property address on the Cook County Tax Appeals search tool or the official Cook County Treasurer website." }, { "@type": "HowToStep", "position": 2, "name": "Choose your payment method", "text": "Pay online via ACH for free (recommended), online by credit or debit card with a 2.10% third-party processing fee, by mail with check and original payment coupon, in person at any of nearly 400 Chase Bank locations in Illinois, at a participating community bank where you have an account, or in person at the Treasurer's Office at 118 N. Clark Street, Room 112, Chicago." }, { "@type": "HowToStep", "position": 3, "name": "Pay by 11:59 PM April 1, 2026", "text": "The 2025 Tax Year First Installment is due Wednesday, April 1, 2026. Late payments incur a state-mandated 0.75% per month late charge on the unpaid balance." }, { "@type": "HowToStep", "position": 4, "name": "Verify the payment posted", "text": "Within 2-3 business days for online payments, or up to 2 weeks for mailed checks, confirm the payment status updated to 'Paid' on the Treasurer's portal. Save your receipt or confirmation email." } ] }, { "@type": "FAQPage", "@id": "https://www.cookcountytaxappeal.com/property-tax-appeal-blogs/pay-cook-county-property-taxesfaq", "mainEntity": [ { "@type": "Question", "name": "When are Cook County property taxes due in 2026?", "acceptedAnswer": { "@type": "Answer", "text": "The Tax Year 2025 First Installment is due Wednesday, April 1, 2026. Bills were mailed by March 2, 2026 and have been viewable online at cookcountytreasurer.com since February 20, 2026. The Second Installment for tax year 2025 is expected later in 2026; the exact date is set by the Treasurer once assessments and rates are finalized." } }, { "@type": "Question", "name": "Can I pay Cook County property taxes online for free?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Online payments via ACH directly from a checking or savings account are free on the official Cook County Treasurer website at cookcountytreasurer.com. The 2.10% processing fee only applies to credit and debit card payments, which are also accepted but charged by a third-party processor." } }, { "@type": "Question", "name": "How much is the late charge if I miss the April 1 deadline?", "acceptedAnswer": { "@type": "Answer", "text": "The late charge is 0.75% per month of any unpaid balance, mandated by Illinois law. That works out to about 9% per year. This rate was cut in half in 2024 from the previous 1.5% per month (18% per year). The Treasurer accepts partial payments, but interest still accrues on whatever balance remains unpaid after the deadline." } }, { "@type": "Question", "name": "Why is the First Installment 55% of last year's bill?", "acceptedAnswer": { "@type": "Answer", "text": "By Illinois law, the First Installment is an estimate set at exactly 55% of the previous year's total tax. The remaining balance gets billed in the Second Installment, which uses your current assessed value, current tax rates, and any applicable exemptions. The 55% structure makes the First Installment predictable and your exemptions are applied only to the Second Installment." } }, { "@type": "Question", "name": "Do exemptions reduce the First Installment?", "acceptedAnswer": { "@type": "Answer", "text": "No. Exemptions only apply to the Second Installment. Seniors, homeowners with active homestead exemptions, and disabled veterans all pay the full unreduced 55% of last year's bill in April. The Second Installment is where exemptions and the current assessed value get applied together. If you are missing an exemption you qualify for, the Assessor's Office can process a Certificate of Error to apply it retroactively." } }, { "@type": "Question", "name": "What if my mortgage company pays my taxes through escrow?", "acceptedAnswer": { "@type": "Answer", "text": "Most homeowners with a mortgage have escrow accounts that pay property taxes automatically. The Cook County Treasurer is explicit that property owners are still ultimately responsible. If the lender pays late, the late charge accrues against the property, not the bank. A few business days after the deadline, look up your PIN on the Treasurer's portal to confirm the payment posted. If you have active escrow, do not also pay yourself to avoid creating a refund situation." } }, { "@type": "Question", "name": "Can I appeal my property taxes and still pay on time?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, and this is the recommended strategy. Pay your bill on time and in full to avoid the late charge, then file an appeal in parallel. The appeal process can take several months. If your appeal succeeds and reduces your assessment, the Treasurer's Office will issue a refund for any overpayment. Skipping the payment to wait does not pause the late charge." } }, { "@type": "Question", "name": "What is the 10+ PIN bulk fee for Cook County property tax online payments?", "acceptedAnswer": { "@type": "Answer", "text": "If you submit online payments for 10 or more PINs in a single session, the Treasurer applies a 2 dollar enhanced processing fee per PIN per installment. This affects commercial portfolios and landlords with multiple properties. For high-volume users typically managing hundreds of parcels, the Treasurer offers a Third Party Agent program with electronic tax data delivery." } } ] } ] } 01 The basics 02 Find your PIN 03 How to pay 04 If you're late 05 Lower next year's bill Consult →
CCTA TeamRead More
leyden-featured-v6-D-contrarian
MAY 20, 2026

Leyden Township Property Tax Appeal Results (Cook County): Success Rates by Class and Assessed Value Changes

Leyden Township Property Tax Appeal Results 2025: Class-by-Class Data & Savings | Cook County Tax Appeals :root{ /* Homepage palette */ --brand: 005988; --brand-mid: 0B5984; --brand-light: 0B6697; --brand-deep: 004163; --brand-ink: 014751; --brand-50: rgba(0,89,136,0.04); --brand-100: rgba(0,89,136,0.08); --brand-200: rgba(0,89,136,0.16); --ink: 191B21; --ink-2: 41474E; --ink-3: 475569; --ink-4: 64748B; --ink-5: 94A0B2; --surface: FFFFFF; --surface-2: F7F7FC; --surface-3: EEF2F6; --surface-4: E8EDF4; --surface-tint: F5F8FC; --border: D8DFEA; --border-soft: E9EEF5; --border-faint: F1F3F8; --success: 1B6D24; --success-mid: 2D8E3A; --success-light: D1FAE5; --success-bright: 4ADE80; --alert: BA1A1A; --info: 2299DD; --shadow-sm: 0 1px 2px rgba(11,89,132,0.04), 0 1px 1px rgba(11,89,132,0.04); --shadow-md: 0 8px 24px -12px rgba(11,89,132,0.18), 0 2px 6px rgba(11,89,132,0.05); --shadow-lg: 0 30px 70px -32px rgba(11,89,132,0.32), 0 4px 16px rgba(11,89,132,0.06); --font-display: 'Instrument Serif', Georgia, 'Times New Roman', serif; --font-body: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; } *{box-sizing:border-box;margin:0;padding:0} html{scroll-behavior:smooth} body{ font-family: var(--font-body); background: var(--surface); color: var(--ink-2); font-size: 17px; line-height: 1.65; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; position: relative; } body::before{ content:""; position: fixed; inset: 0; pointer-events: none; z-index: 1000; opacity: 0.025; background-image: url("data:image/svg+xml;utf8, "); mix-blend-mode: multiply; } .wrap{max-width: 1240px; margin: 0 auto; padding: 0 32px} @media (max-width: 700px){.wrap{padding: 0 20px}} /* ============================================================ STATUS BAR ============================================================ */ .status-bar{ background: var(--brand-deep); color: rgba(255,255,255,0.9); font-size: 11.5px; letter-spacing: 0.16em; text-transform: uppercase; padding: 11px 0; font-family: var(--font-mono); font-weight: 500; position: relative; z-index: 5; } .status-bar .row{display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap} .status-bar .left{display:flex;align-items:center;gap:10px} .live-dot{ width: 7px; height: 7px; border-radius: 50%; background: var(--success-bright); box-shadow: 0 0 0 0 rgba(74,222,128,0.6); animation: livePulse 2.4s infinite; } @keyframes livePulse{ 0%{box-shadow:0 0 0 0 rgba(74,222,128,0.6)} 70%{box-shadow:0 0 0 10px rgba(74,222,128,0)} 100%{box-shadow:0 0 0 0 rgba(74,222,128,0)} } .status-bar .right{display: flex; gap: 24px; align-items: center; opacity: 0.75; font-size: 10.5px} .status-bar .sep{opacity: 0.4} @media (max-width: 640px){.status-bar .right{display: none}} /* ============================================================ HERO ============================================================ */ header.hero{ position: relative; padding: 80px 0 100px; background: radial-gradient(ellipse at 8% 10%, rgba(0,89,136,0.08) 0%, transparent 55%), radial-gradient(ellipse at 92% 90%, rgba(0,89,136,0.06) 0%, transparent 50%), var(--surface); border-bottom: 1px solid var(--border-soft); overflow: hidden; } header.hero::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(0,89,136,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0,89,136,0.03) 1px, transparent 1px); background-size: 64px 64px; background-position: -1px -1px; pointer-events: none; mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.6), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at center, rgba(0,0,0,0.6), transparent 80%); } .hero .wrap{position: relative; z-index: 2} .hero-grid{ display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 64px; align-items: center; } @media (max-width: 980px){ .hero-grid{grid-template-columns: 1fr; gap: 48px} header.hero{padding: 56px 0 80px} } .kicker{ display: inline-flex; align-items: center; gap: 14px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); margin-bottom: 32px; font-weight: 500; opacity: 0; transform: translateY(12px); animation: rise 0.7s 0.05s ease-out forwards; } .kicker .seg-line{width: 28px; height: 1px; background: var(--brand); opacity: 0.6} .kicker .seg-dot{width: 5px; height: 5px; background: var(--brand); border-radius: 50%; opacity: 0.6} h1.title{ font-family: var(--font-display); font-weight: 400; font-size: clamp(40px, 6vw, 76px); line-height: 1.0; letter-spacing: -0.022em; color: var(--ink); margin-bottom: 32px; opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.15s ease-out forwards; } h1.title em{font-style: italic; color: var(--brand); position: relative} h1.title em::after{ content:""; position: absolute; left: 0; bottom: 6px; width: 100%; height: 2px; background: var(--brand); transform-origin: left; animation: drawLine 1s 0.9s cubic-bezier(0.65,0,0.35,1) forwards; transform: scaleX(0); } @keyframes drawLine{to{transform: scaleX(1)}} .dek{ font-family: var(--font-display); font-size: clamp(20px, 2.1vw, 26px); line-height: 1.45; font-weight: 400; color: var(--ink-3); max-width: 600px; margin-bottom: 44px; opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.3s ease-out forwards; } .dek b{color: var(--ink); font-weight: 500; font-style: italic} .meta-strip{ display: flex; gap: 36px; flex-wrap: wrap; padding-top: 28px; border-top: 1px solid var(--border-soft); opacity: 0; transform: translateY(20px); animation: rise 0.9s 0.45s ease-out forwards; } .meta-strip .item{display:flex; flex-direction: column; gap: 4px} .meta-strip .label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .meta-strip .value{font-size: 15px; color: var(--ink); font-weight: 500} @keyframes rise{to{opacity:1; transform:translateY(0)}} /* ============================================================ HERO CLASS SMALL-MULTIPLES ============================================================ */ .hero-visual{ position: relative; opacity: 0; transform: translateY(20px) scale(0.96); animation: rise 1.1s 0.4s ease-out forwards; } .class-grid{display: grid; grid-template-columns: 1fr 1fr; gap: 12px} .class-mini{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 18px 18px 16px; position: relative; transition: all 0.25s; cursor: pointer; overflow: hidden; } .class-mini::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--brand); transition: background 0.25s; } .class-mini:hover{transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--brand)} .class-mini:hover::before{background: var(--success-bright)} .class-mini.commercial::before{background: var(--brand-light)} .class-mini .cm-tag{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 6px; } .class-mini .cm-name{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 400; line-height: 1.15; margin-bottom: 10px; letter-spacing: -0.008em; } .class-mini .cm-rate{ font-family: var(--font-display); font-size: 26px; color: var(--ink); font-weight: 400; letter-spacing: -0.018em; line-height: 1; margin-bottom: 2px; } .class-mini .cm-rate .sym{font-size: 0.55em; color: var(--brand); font-style: italic; vertical-align: 0.3em; margin-left: 1px} .class-mini .cm-sub{ font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .class-mini.featured{grid-column: span 2; background: var(--brand); color: fff} .class-mini.featured::before{background: var(--success-bright)} .class-mini.featured .cm-tag{color: var(--success-bright)} .class-mini.featured .cm-name{color: fff} .class-mini.featured .cm-rate{color: fff} .class-mini.featured .cm-rate .sym{color: var(--success-bright)} .class-mini.featured .cm-sub{color: rgba(255,255,255,0.7)} .class-mini.featured .cm-spread{ font-family: var(--font-display); font-style: italic; font-size: 14px; color: rgba(255,255,255,0.85); margin-top: 6px; } /* ============================================================ STAT BAND ============================================================ */ .stat-band{position: relative; z-index: 4; margin-top: -52px; padding: 0 32px} @media (max-width: 700px){.stat-band{padding: 0 20px}} .stat-band-inner{ max-width: 1240px; margin: 0 auto; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; box-shadow: var(--shadow-lg); display: grid; grid-template-columns: repeat(5, 1fr); position: relative; overflow: hidden; } .stat-band-inner::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--brand) 0%, var(--brand-light) 50%, var(--brand) 100%); } .stat-cell{ padding: 28px 22px 26px; border-right: 1px solid var(--border-soft); text-align: left; position: relative; background: var(--surface); transition: background 0.3s; } .stat-cell:hover{background: var(--surface-tint)} .stat-cell:last-child{border-right: 0} .stat-cell .stat-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 12px; font-weight: 500; } .stat-cell .stat-num{ font-family: var(--font-display); font-size: clamp(24px, 2.9vw, 38px); font-weight: 400; color: var(--ink); letter-spacing: -0.022em; line-height: 1; margin-bottom: 10px; } .stat-cell .stat-num .prefix{color: var(--brand); font-style: italic; margin-right: 2px} .stat-cell .stat-num .suffix{font-size: 0.5em; color: var(--brand); font-style: italic; margin-left: 4px; vertical-align: 0.35em} .stat-cell .stat-context{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; color: var(--ink-4); text-transform: uppercase; font-weight: 500; margin-bottom: 14px; min-height: 1.4em; } .stat-cell .stat-bar{height: 3px; background: var(--border-faint); position: relative; overflow: hidden} .stat-cell .stat-bar::after{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 0%; background: var(--brand); transition: width 1.6s 0.3s cubic-bezier(0.22, 1, 0.36, 1); } .stat-cell.go .stat-bar::after{width: var(--bar, 50%)} .stat-cell.featured{background: var(--brand)} .stat-cell.featured:hover{background: var(--brand-light)} .stat-cell.featured .stat-label{color: rgba(255,255,255,0.65)} .stat-cell.featured .stat-num{color: fff} .stat-cell.featured .stat-num .prefix, .stat-cell.featured .stat-num .suffix{color: rgba(255,255,255,0.75)} .stat-cell.featured .stat-context{color: rgba(255,255,255,0.65)} .stat-cell.featured .stat-bar{background: rgba(255,255,255,0.15)} .stat-cell.featured .stat-bar::after{background: var(--success-bright)} @media (max-width: 1000px){ .stat-band-inner{grid-template-columns: repeat(2, 1fr)} .stat-cell{border-bottom: 1px solid var(--border-soft)} .stat-cell:nth-child(2n){border-right: 0} .stat-cell:last-child{grid-column: span 2} } @media (max-width: 500px){ .stat-band-inner{grid-template-columns: 1fr} .stat-cell{border-right: 0} .stat-cell:last-child{grid-column: auto} } /* ============================================================ ARTICLE GRID ============================================================ */ article{position: relative; padding: 110px 0 60px} .article-grid{ display: grid; grid-template-columns: 56px minmax(0, 1fr) 320px; gap: 56px; align-items: start; } @media (max-width: 1100px){ .article-grid{grid-template-columns: minmax(0, 1fr) 300px; gap: 48px} .section-counter{display: none} } @media (max-width: 880px){ .article-grid{grid-template-columns: 1fr; gap: 48px} article{padding: 80px 0 40px} } .section-counter{position: sticky; top: 32px; align-self: start} .section-counter .count-list{display: flex; flex-direction: column; gap: 18px; list-style: none} .section-counter .count-item{ font-family: var(--font-display); font-style: italic; font-size: 18px; color: var(--ink-5); padding-left: 14px; border-left: 1px solid var(--border); transition: all 0.3s; cursor: pointer; } .section-counter .count-item.active{ color: var(--brand); border-left-color: var(--brand); border-left-width: 2px; padding-left: 13px; } .section-counter .count-item .num{ display: block; font-family: var(--font-mono); font-style: normal; font-size: 9.5px; letter-spacing: 0.18em; color: inherit; opacity: 0.7; margin-bottom: 2px; } /* ============================================================ PROSE ============================================================ */ .prose{max-width: 800px} .prose p{margin-bottom: 22px; font-size: 17.5px; line-height: 1.72; color: var(--ink-2)} .prose p.lead{ font-family: var(--font-display); font-size: clamp(22px, 2.4vw, 28px); line-height: 1.45; color: var(--ink); font-weight: 400; margin-bottom: 44px; min-height: 1.45em; } .prose p.lead::first-letter{ font-family: var(--font-display); font-size: clamp(96px, 11vw, 140px); line-height: 0.82; float: left; padding: 8px 18px 0 0; color: var(--brand); font-style: italic; font-weight: 400; } .prose a{ color: var(--brand); text-decoration: none; background-image: linear-gradient(currentColor, currentColor); background-size: 100% 1px; background-repeat: no-repeat; background-position: 0 100%; padding-bottom: 1px; transition: background-size 0.3s, color 0.25s; } .prose a:hover{color: var(--brand-light); background-size: 0% 1px} .prose strong{color: var(--ink); font-weight: 600} .prose h2{ font-family: var(--font-display); font-size: clamp(32px, 3.8vw, 48px); font-weight: 400; line-height: 1.1; letter-spacing: -0.02em; color: var(--ink); margin: 80px 0 18px; position: relative; } .prose h2 .h2-num{ display: block; font-family: var(--font-mono); font-style: normal; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--brand); margin-bottom: 14px; font-weight: 500; } .prose h2 em{font-style: italic; color: var(--brand)} .prose h3{ font-family: var(--font-body); font-size: 20px; font-weight: 600; color: var(--ink); margin: 40px 0 14px; letter-spacing: -0.005em; } .prose ul, .prose ol{margin: 8px 0 28px 0; padding-left: 24px; color: var(--ink-2)} .prose li{margin-bottom: 10px; line-height: 1.65; padding-left: 6px} .prose li::marker{color: var(--brand); font-weight: 600} /* ============================================================ CLASS TAB INTERFACE ============================================================ */ .class-tabs-wrap{margin: 32px 0 24px} .class-tabs{ display: flex; gap: 4px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px 6px 0 0; padding: 6px; overflow-x: auto; position: relative; z-index: 2; scrollbar-width: thin; } .class-tab{ flex: 1; background: transparent; border: 0; padding: 14px 12px 12px; font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-3); cursor: pointer; border-radius: 4px; transition: all 0.2s; text-align: left; min-width: 140px; line-height: 1.25; } .class-tab:hover{background: var(--surface); color: var(--ink)} .class-tab.active{ background: var(--brand); color: fff; box-shadow: var(--shadow-sm); } .class-tab .tab-label{ display: block; font-size: 13.5px; font-weight: 600; letter-spacing: -0.008em; margin-bottom: 2px; } .class-tab .tab-hint{ display: block; font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500; opacity: 0.7; } .class-panel{display: none; animation: fadeUp 0.4s ease-out} .class-panel.active{display: block} @keyframes fadeUp{ from{opacity: 0; transform: translateY(8px)} to{opacity: 1; transform: translateY(0)} } .class-panel-header{ background: var(--surface); border: 1px solid var(--border); border-top: 0; padding: 24px 28px 22px; border-radius: 0 0 6px 6px; margin-bottom: 32px; display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 32px; align-items: center; } .class-panel-header .ph-text .ph-tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 8px; } .class-panel-header .ph-text h3{ font-family: var(--font-display); font-size: clamp(26px, 3.2vw, 36px); font-weight: 400; color: var(--ink); letter-spacing: -0.015em; line-height: 1.1; margin: 0 0 8px; } .class-panel-header .ph-text h3 em{font-style: italic; color: var(--brand)} .class-panel-header .ph-text .ph-meta{ font-size: 14px; color: var(--ink-4); line-height: 1.45; } .class-panel-header .ph-stats{ display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } .class-panel-header .ph-cell{ padding: 12px 14px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 4px; } .class-panel-header .ph-cell .ph-cl{ font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-bottom: 5px; } .class-panel-header .ph-cell .ph-cv{ font-family: var(--font-display); font-size: 22px; color: var(--ink); letter-spacing: -0.012em; line-height: 1; font-weight: 400; } .class-panel-header .ph-cell .ph-cv .sm{font-size: 0.55em; color: var(--brand); font-style: italic; margin-left: 2px; vertical-align: 0.3em} @media (max-width: 800px){ .class-panel-header{grid-template-columns: 1fr; gap: 24px} } /* Stage cards inside class panels */ .stages-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin: 24px 0; } @media (max-width: 900px){.stages-grid{grid-template-columns: 1fr}} .stage-card{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 26px 24px; position: relative; overflow: hidden; } .stage-card::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--brand); } .stage-card.bor::before{background: var(--brand-light)} .stage-card.combined{background: var(--brand); color: fff} .stage-card.combined::before{background: var(--success-bright)} .stage-card .tag{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 10px; } .stage-card.bor .tag{color: var(--brand-light)} .stage-card.combined .tag{color: var(--success-bright)} .stage-card .stage-h{ font-family: var(--font-display); font-size: 22px; font-weight: 400; color: var(--ink); margin: 0 0 4px; letter-spacing: -0.01em; line-height: 1.15; } .stage-card.combined .stage-h{color: fff} .stage-card .stage-desc{ font-size: 13px; color: var(--ink-4); margin-bottom: 20px; line-height: 1.45; } .stage-card.combined .stage-desc{color: rgba(255,255,255,0.7)} .stage-card .stage-big{ font-family: var(--font-display); font-size: 56px; font-weight: 400; color: var(--ink); letter-spacing: -0.025em; line-height: 0.95; margin-bottom: 6px; } .stage-card.combined .stage-big{color: fff} .stage-card .stage-big .sym{ font-size: 0.42em; color: var(--brand); font-style: italic; vertical-align: 0.42em; margin-left: 2px; } .stage-card.bor .stage-big .sym{color: var(--brand-light)} .stage-card.combined .stage-big .sym{color: var(--success-bright)} .stage-card .stage-sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 18px; font-weight: 500; } .stage-card.combined .stage-sub{color: rgba(255,255,255,0.65)} .stage-rows{border-top: 1px solid var(--border-soft); padding-top: 16px} .stage-card.combined .stage-rows{border-top-color: rgba(255,255,255,0.12)} .stage-rows .row{display: flex; justify-content: space-between; padding: 6px 0; font-size: 13px} .stage-rows .row .k{color: var(--ink-3)} .stage-rows .row .v{font-family: var(--font-display); font-size: 16px; color: var(--ink); letter-spacing: -0.008em} .stage-card.combined .stage-rows .row .k{color: rgba(255,255,255,0.7)} .stage-card.combined .stage-rows .row .v{color: fff} /* AV Journey */ .journey{ margin: 28px 0; padding: 36px 32px 40px; background: var(--surface-3); border: 1px solid var(--border); border-radius: 6px; position: relative; overflow: hidden; } .journey::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--brand) 0%, var(--brand-light) 50%, var(--success) 100%); } .journey .head{text-align: center; margin-bottom: 30px} .journey h4{ font-family: var(--font-display); font-size: clamp(22px, 2.6vw, 28px); color: var(--ink); margin: 0 0 6px; font-weight: 400; letter-spacing: -0.015em; } .journey h4 em{font-style: italic; color: var(--brand)} .journey .sub{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .journey-row{ display: grid; grid-template-columns: 1fr auto 1fr auto 1fr; gap: 14px; align-items: stretch; } .j-col{ text-align: center; padding: 22px 14px 20px; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; position: relative; } .j-col .j-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 10px; font-weight: 500; } .j-col .j-num{ font-family: var(--font-display); font-size: clamp(22px, 2.8vw, 30px); font-weight: 400; color: var(--ink); letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .j-col .j-stage{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--brand); font-weight: 500; } .j-col.final{background: var(--brand)} .j-col.final::before{ content:""; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: var(--success-bright); } .j-col.final .j-label{color: rgba(255,255,255,0.6)} .j-col.final .j-num{color: fff} .j-col.final .j-stage{color: var(--success-bright)} .j-col.middle .j-stage{color: var(--brand-light)} .j-arrow{display: flex; align-items: center; justify-content: center} .j-arrow .icn{ width: 32px; height: 32px; background: var(--surface); border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--brand); } .journey-summary{ margin-top: 22px; padding: 16px 22px; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; } .journey-summary .sum-block{display: flex; flex-direction: column; gap: 4px} .journey-summary .sum-block.right{text-align: right} .journey-summary .sum-label{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .journey-summary .sum-val{ font-family: var(--font-display); font-size: 22px; color: var(--success); letter-spacing: -0.01em; line-height: 1; } .journey-summary .sum-val em{font-style: italic; font-size: 0.7em; margin-left: 4px} @media (max-width: 800px){ .journey-row{grid-template-columns: 1fr; gap: 10px} .j-arrow{transform: rotate(90deg); height: 24px} } /* Class panel narrative + tax savings callout */ .class-callout{ margin: 28px 0; padding: 26px 28px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-left: 3px solid var(--brand); border-radius: 0 6px 6px 0; } .class-callout h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin: 0 0 10px; } .class-callout p{ font-size: 15.5px; line-height: 1.65; color: var(--ink-2); margin: 0; } .class-callout p strong{color: var(--ink); font-weight: 600} /* ============================================================ COMPARISON TABLE ============================================================ */ .comparison-table{ margin: 36px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .comparison-table-header{ background: var(--brand); color: fff; padding: 20px 28px; display: flex; justify-content: space-between; align-items: center; gap: 16px; position: relative; } .comparison-table-header::after{ content:""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, var(--success-bright), transparent 50%); } .comparison-table-header h4{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; font-weight: 500; margin: 0; text-transform: uppercase; color: fff; } .comparison-table-header .source{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; color: rgba(255,255,255,0.7); text-transform: uppercase; } .comparison-table table{width: 100%; border-collapse: collapse} .comparison-table th, .comparison-table td{ padding: 14px 18px; border-bottom: 1px solid var(--border-soft); font-size: 14px; } .comparison-table th{ background: var(--surface-2); text-align: left; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .comparison-table th:not(:first-child), .comparison-table td:not(:first-child){text-align: right} .comparison-table td:first-child{ color: var(--ink); font-weight: 500; font-size: 14px; } .comparison-table td:first-child .cls-hint{ display: block; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; margin-top: 3px; } .comparison-table td.num{ font-family: var(--font-display); font-size: 19px; color: var(--ink); letter-spacing: -0.01em; font-weight: 400; } .comparison-table td.num.success{color: var(--success); font-weight: 500} .comparison-table tr:last-child td{border-bottom: 0} .comparison-table tr:hover td{background: var(--surface-tint)} @media (max-width: 800px){ .comparison-table{overflow-x: auto} .comparison-table table{min-width: 700px} } /* ============================================================ DUAL BAR CHART ============================================================ */ .chart-card{ margin: 36px 0 24px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; box-shadow: var(--shadow-md); } .chart-card-header{padding: 22px 28px 18px; border-bottom: 1px solid var(--border-soft)} .chart-card-header h4{ font-family: var(--font-display); font-size: 22px; color: var(--ink); font-weight: 400; margin: 0 0 4px; letter-spacing: -0.01em; } .chart-card-header p{ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); margin: 0; font-weight: 500; } .chart-card-body{padding: 24px 28px 28px} .dual-bar-chart{display: flex; flex-direction: column; gap: 22px} .dual-bar-row{display: grid; grid-template-columns: 240px 1fr; gap: 24px; align-items: start} .dual-bar-row .class-name{font-size: 14px; color: var(--ink-2); padding-top: 4px} .dual-bar-row .class-name .code{ display: block; font-family: var(--font-mono); font-size: 10px; color: var(--ink-4); letter-spacing: 0.14em; font-weight: 500; text-transform: uppercase; margin-top: 2px; } .dual-bar-row .class-name .total{ display: block; font-family: var(--font-mono); font-size: 10px; color: var(--ink-5); margin-top: 6px; letter-spacing: 0.08em; } .bars-stack{display: flex; flex-direction: column; gap: 8px} .bar-pair{display: grid; grid-template-columns: 50px 1fr 60px; gap: 10px; align-items: center} .bar-pair .stage-lbl{ font-family: var(--font-mono); font-size: 10px; color: var(--ink-4); letter-spacing: 0.14em; text-transform: uppercase; } .bar-pair .track{ height: 14px; background: var(--surface-3); border-radius: 3px; position: relative; overflow: hidden; } .bar-pair .fill{ height: 100%; background: var(--brand); border-radius: 3px; width: 0; transition: width 1.4s cubic-bezier(0.22, 1, 0.36, 1); } .bar-pair.bor .fill{background: var(--brand-light)} .bar-pair.combined .fill{background: var(--success-mid)} .bar-pair .pct{ font-family: var(--font-display); font-size: 16px; color: var(--ink); text-align: right; letter-spacing: -0.005em; } .bar-pair.bor .pct{color: var(--brand-light)} .bar-pair.combined .pct{color: var(--success)} .chart-legend{ display: flex; gap: 18px; margin-top: 24px; padding-top: 18px; border-top: 1px solid var(--border-soft); flex-wrap: wrap; } .chart-legend .item{ display: flex; align-items: center; gap: 8px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-3); font-weight: 500; } .chart-legend .swatch{width: 12px; height: 12px; border-radius: 2px} @media (max-width: 720px){ .dual-bar-row{grid-template-columns: 1fr; gap: 12px} .bar-pair{grid-template-columns: 44px 1fr 50px} } /* ============================================================ PULL QUOTE ============================================================ */ .pull-quote{margin: 60px 0; padding: 0 0 0 24px; position: relative; max-width: 720px} .pull-quote::before{ content: "\201C"; position: absolute; left: -20px; top: -40px; font-family: var(--font-display); font-style: italic; font-size: 180px; color: var(--brand); opacity: 0.18; line-height: 1; pointer-events: none; } .pull-quote blockquote{ font-family: var(--font-display); font-style: italic; font-size: clamp(24px, 2.8vw, 34px); line-height: 1.32; color: var(--ink); letter-spacing: -0.012em; font-weight: 400; margin: 0 0 20px; } .pull-quote blockquote em{font-style: normal; color: var(--brand)} .pull-quote .attribution{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } /* ============================================================ TAKEAWAYS ============================================================ */ .takeaway-block{margin: 36px 0 12px; position: relative} .takeaway-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; } @media (max-width: 800px){.takeaway-grid{grid-template-columns: 1fr}} .takeaway{ padding: 30px 26px; border-right: 1px solid var(--border); position: relative; background: var(--surface-2); transition: background 0.25s; } .takeaway:hover{background: var(--surface)} .takeaway:last-child{border-right: 0} .takeaway .num{ font-family: var(--font-display); font-style: italic; font-size: 48px; color: var(--brand); line-height: 1; margin-bottom: 14px; display: block; letter-spacing: -0.02em; } .takeaway h4{ font-family: var(--font-body); font-size: 16px; font-weight: 600; color: var(--ink); margin: 0 0 10px; letter-spacing: -0.005em; line-height: 1.3; } .takeaway p{font-size: 14px; color: var(--ink-3); line-height: 1.55; margin: 0} @media (max-width: 800px){ .takeaway{border-right: 0; border-bottom: 1px solid var(--border)} .takeaway:last-child{border-bottom: 0} } /* ============================================================ FAQ + METHODOLOGY + DIVIDER ============================================================ */ .faq{margin: 36px 0 12px; border-top: 1px solid var(--border)} .faq-item{border-bottom: 1px solid var(--border)} .faq-item summary{ list-style: none; cursor: pointer; padding: 24px 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; font-family: var(--font-display); font-size: 22px; font-weight: 400; color: var(--ink); letter-spacing: -0.008em; line-height: 1.35; transition: color 0.25s; } .faq-item summary::-webkit-details-marker{display: none} .faq-item summary:hover{color: var(--brand)} .faq-item summary .plus{ flex-shrink: 0; width: 30px; height: 30px; border: 1px solid var(--ink); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: var(--font-body); font-size: 16px; color: var(--ink); transition: all 0.3s; } .faq-item[open] summary{color: var(--brand)} .faq-item[open] summary .plus{ transform: rotate(45deg); background: var(--brand); color: fff; border-color: var(--brand); } .faq-item .answer{ padding: 0 0 26px; font-size: 16px; color: var(--ink-3); line-height: 1.65; max-width: 720px; } .faq-item .answer code{ font-family: var(--font-mono); font-size: 13px; background: var(--surface-2); padding: 1px 6px; border-radius: 3px; color: var(--ink); } .section-divider{display: flex; align-items: center; gap: 16px; margin: 60px 0 32px; color: var(--ink-4)} .section-divider .line{flex: 1; height: 1px; background: var(--border)} .section-divider .dot{width: 7px; height: 7px; border: 1px solid var(--brand); transform: rotate(45deg); background: fff} .methodology{ margin: 48px 0 12px; padding: 28px 32px; background: var(--surface-2); border: 1px solid var(--border-soft); border-left: 3px solid var(--brand); border-radius: 0 4px 4px 0; font-size: 14px; line-height: 1.65; color: var(--ink-3); } .methodology h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); font-weight: 500; margin-bottom: 12px; } .methodology a{color: var(--brand); text-decoration: underline} .methodology code{ font-family: var(--font-mono); font-size: 12.5px; background: var(--surface); padding: 1px 6px; border-radius: 3px; color: var(--ink); } .methodology strong{display: block; margin-bottom: 6px; color: var(--ink); font-weight: 600; margin-top: 16px} .methodology strong:first-child{margin-top: 0} /* ============================================================ SIDEBAR ============================================================ */ aside{position: sticky; top: 32px} @media (max-width: 1100px){aside{position: static}} .side-card{ background: var(--brand); color: fff; padding: 34px 28px; border-radius: 6px; position: relative; overflow: hidden; margin-bottom: 18px; } .side-card::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; } .side-card::after{ content:""; position: absolute; width: 180px; height: 180px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.06), transparent 65%); top: -60px; right: -60px; pointer-events: none; } .side-card .inner{position: relative; z-index: 2} .side-card .pill{ display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; background: rgba(255,255,255,0.14); color: fff; padding: 6px 12px; border-radius: 100px; margin-bottom: 20px; font-weight: 500; } .side-card .pill::before{ content:""; width: 6px; height: 6px; background: var(--success-bright); border-radius: 50%; box-shadow: 0 0 0 0 rgba(74,222,128,0.5); animation: livePulse 2.4s infinite; } .side-card h4{ font-family: var(--font-display); font-size: 28px; font-weight: 400; color: fff; margin: 0 0 14px; line-height: 1.15; letter-spacing: -0.018em; } .side-card h4 em{font-style: italic; color: B7E1F5} .side-card p{ font-size: 14px; color: rgba(255,255,255,0.78); line-height: 1.6; margin-bottom: 22px; } .cta-btn{ display: inline-flex; align-items: center; gap: 8px; background: fff; color: var(--brand); padding: 13px 22px; font-family: var(--font-body); font-weight: 600; font-size: 13px; letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none; border-radius: 4px; transition: all 0.25s; border: none; cursor: pointer; } .cta-btn:hover{background: var(--surface-3); transform: translateX(3px)} .cta-btn .arrow{width: 14px; height: 14px} .side-list{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 24px 22px; margin-bottom: 18px; } .side-list h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 16px; font-weight: 500; } .side-list ul{list-style: none; padding: 0; margin: 0} .side-list li{ padding: 12px 0; border-bottom: 1px solid var(--border-soft); font-size: 14px; color: var(--ink-2); display: flex; gap: 12px; align-items: flex-start; line-height: 1.5; } .side-list li:last-child{border-bottom: 0} .side-list li svg{ flex-shrink: 0; width: 18px; height: 18px; color: var(--success); margin-top: 2px; padding: 2px; background: var(--success-light); border-radius: 50%; } .side-spread{ background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 6px; padding: 24px; position: relative; } .side-spread::before{ content:""; position: absolute; left: 0; top: 24px; bottom: 24px; width: 2px; background: var(--brand); } .side-spread .label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--brand); margin-bottom: 8px; font-weight: 500; } .side-spread h6{ font-family: var(--font-display); font-size: 19px; color: var(--ink); font-weight: 400; line-height: 1.25; margin: 0 0 16px; letter-spacing: -0.008em; } .side-spread .spread-row{ display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 8px; align-items: baseline; padding: 8px 0; border-top: 1px solid var(--border-soft); font-size: 12.5px; color: var(--ink-3); } .side-spread .spread-row:first-of-type{border-top: 0} .side-spread .spread-row .sk{line-height: 1.3} .side-spread .spread-row .sv{ font-family: var(--font-display); font-size: 17px; color: var(--brand); font-weight: 400; letter-spacing: -0.008em; } .side-spread .spread-row.commercial .sv{color: var(--success)} /* ============================================================ FINAL CTA ============================================================ */ .final-cta-wrap{padding: 0 32px; margin-top: 36px} @media (max-width: 700px){.final-cta-wrap{padding: 0 20px}} .final-cta{ max-width: 1240px; margin: 0 auto; position: relative; background: linear-gradient(135deg, var(--brand-deep) 0%, var(--brand) 60%, var(--brand-mid) 100%); color: fff; overflow: hidden; border-radius: 6px; padding: 72px 64px; } .final-cta::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 56px 56px; pointer-events: none; mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); -webkit-mask-image: radial-gradient(ellipse at top left, rgba(0,0,0,0.7), transparent 80%); } .final-cta::after{ content:""; position: absolute; bottom: -160px; right: -160px; width: 440px; height: 440px; background: radial-gradient(circle, rgba(255,255,255,0.1), transparent 65%); border-radius: 50%; pointer-events: none; } .final-cta-inner{ position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 56px; align-items: center; } @media (max-width: 920px){ .final-cta-inner{grid-template-columns: 1fr; gap: 40px} .final-cta{padding: 48px 32px} } .final-cta .cta-kicker{ font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(255,255,255,0.7); font-weight: 500; margin-bottom: 22px; display: inline-flex; align-items: center; gap: 12px; } .final-cta .cta-kicker::before{content:""; width: 28px; height: 1px; background: rgba(255,255,255,0.4)} .final-cta h2{ font-family: var(--font-display); font-size: clamp(36px, 5vw, 58px); font-weight: 400; line-height: 1.04; color: fff; margin-bottom: 22px; letter-spacing: -0.022em; } .final-cta h2 em{font-style: italic; color: B7E1F5} .final-cta p{ font-size: 17px; color: rgba(255,255,255,0.82); line-height: 1.6; margin-bottom: 32px; max-width: 540px; } .cta-row{display: flex; gap: 14px; flex-wrap: wrap} .cta-btn.ghost{ background: transparent; color: fff; border: 1px solid rgba(255,255,255,0.3); } .cta-btn.ghost:hover{background: rgba(255,255,255,0.08); color: fff; transform: translateX(3px)} .cta-spread{ background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); border-radius: 6px; padding: 28px 26px; position: relative; } .cta-spread::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--success-bright); border-radius: 6px 0 0 6px; } .cta-spread .cta-label{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.65); margin-bottom: 16px; font-weight: 500; } .cta-spread .cta-row-stat{ display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: baseline; padding: 7px 0; border-top: 1px solid rgba(255,255,255,0.1); font-size: 12.5px; color: rgba(255,255,255,0.75); } .cta-spread .cta-row-stat:first-of-type{border-top: 0} .cta-spread .cta-row-stat .v{ font-family: var(--font-display); font-size: 18px; color: fff; font-weight: 400; letter-spacing: -0.008em; } .cta-spread .cta-row-stat .v em{color: var(--success-bright); font-style: italic} /* ============================================================ FOOTER ============================================================ */ footer{ background: var(--brand-deep); color: rgba(255,255,255,0.6); padding: 40px 0 36px; font-size: 13px; margin-top: 60px; } footer .row{ display: flex; justify-content: space-between; flex-wrap: wrap; gap: 16px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; } footer .row a{color: fff; text-decoration: none; opacity: 0.7; transition: opacity 0.25s} footer .row a:hover{opacity: 1} /* ============================================================ ARTICLE BYLINE / META ============================================================ */ .article-byline{ display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--border-soft); font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } .article-byline .by-item{display: flex; align-items: center; gap: 8px} .article-byline .by-item svg{width: 14px; height: 14px; color: var(--brand)} .article-byline .by-item .by-strong{color: var(--ink-2); font-weight: 600} .article-byline .by-sep{width: 4px; height: 4px; background: var(--ink-5); border-radius: 50%; opacity: 0.5} /* ============================================================ STICKY HIRE-US BAR (top of article) ============================================================ */ .hire-bar{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 14px 20px; margin: 0 0 48px; display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; box-shadow: var(--shadow-sm); position: relative; } .hire-bar::before{ content:""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--success); border-radius: 6px 0 0 6px; } .hire-bar .hb-text{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 400; line-height: 1.35; letter-spacing: -0.005em; } .hire-bar .hb-text em{font-style: italic; color: var(--brand)} .hire-bar .hb-actions{display: flex; gap: 10px; align-items: center; flex-wrap: wrap} .hire-bar .hb-note{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-4); font-weight: 500; } @media (max-width: 720px){ .hire-bar{padding: 16px 18px} .hire-bar .hb-text{font-size: 16px} } /* ============================================================ INLINE CTA BLOCK (mid-article) ============================================================ */ .inline-cta{ margin: 48px 0; padding: 32px 36px; background: linear-gradient(135deg, var(--brand) 0%, var(--brand-light) 100%); color: fff; border-radius: 6px; position: relative; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 32px; align-items: center; } .inline-cta::before{ content:""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; mask-image: radial-gradient(ellipse at top right, rgba(0,0,0,0.5), transparent 75%); -webkit-mask-image: radial-gradient(ellipse at top right, rgba(0,0,0,0.5), transparent 75%); } .inline-cta::after{ content:""; position: absolute; top: -80px; right: -80px; width: 240px; height: 240px; background: radial-gradient(circle, rgba(255,255,255,0.1), transparent 65%); border-radius: 50%; pointer-events: none; } .inline-cta .ic-content{position: relative; z-index: 2} .inline-cta .ic-kicker{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--success-bright); font-weight: 500; margin-bottom: 10px; } .inline-cta h3{ font-family: var(--font-display); font-size: clamp(22px, 2.4vw, 28px); color: fff; margin: 0 0 8px; font-weight: 400; letter-spacing: -0.012em; line-height: 1.2; } .inline-cta h3 em{font-style: italic; color: B7E1F5} .inline-cta p{ font-size: 14.5px; color: rgba(255,255,255,0.82); margin: 0; line-height: 1.55; max-width: 540px; } .inline-cta .ic-actions{ display: flex; gap: 10px; flex-wrap: wrap; position: relative; z-index: 2; } @media (max-width: 760px){ .inline-cta{grid-template-columns: 1fr; gap: 22px; padding: 28px 26px} } /* ============================================================ CLASS PANEL CTA (inside each tab) ============================================================ */ .panel-cta{ margin: 22px 0 0; padding: 20px 24px; background: var(--surface); border: 1px solid var(--border); border-left: 3px solid var(--success); border-radius: 0 4px 4px 0; display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; } .panel-cta .pc-text{ font-size: 14.5px; color: var(--ink-2); line-height: 1.5; max-width: 540px; } .panel-cta .pc-text strong{color: var(--ink); font-weight: 600} .panel-cta .cta-btn{ background: var(--brand); color: fff; padding: 12px 20px; font-size: 12.5px; } .panel-cta .cta-btn:hover{background: var(--brand-light); color: fff} /* ============================================================ SERVICE AREA SIDEBAR BLOCK ============================================================ */ .side-service{ background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 22px 22px 20px; margin-bottom: 18px; } .side-service h5{ font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-4); margin-bottom: 8px; font-weight: 500; } .side-service h6{ font-family: var(--font-display); font-size: 18px; color: var(--ink); font-weight: 400; line-height: 1.25; margin: 0 0 14px; letter-spacing: -0.008em; } .side-service .muni-list{ display: flex; flex-wrap: wrap; gap: 6px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; } .side-service .muni{ padding: 4px 9px; background: var(--surface-2); border: 1px solid var(--border-soft); border-radius: 3px; color: var(--ink-3); transition: all 0.2s; } .side-service .muni:hover{ background: var(--brand-100); color: var(--brand); border-color: var(--brand-200); cursor: default; } .side-service .muni-note{ margin-top: 12px; font-size: 12px; color: var(--ink-4); line-height: 1.5; } /* ============================================================ CONCLUSION CTA STRIP ============================================================ */ .conclusion-cta{ margin: 32px 0 8px; padding: 22px 26px; background: var(--surface-tint); border: 1px solid var(--border-soft); border-radius: 6px; display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; } .conclusion-cta .cc-text{ font-family: var(--font-display); font-size: 19px; color: var(--ink); font-weight: 400; line-height: 1.4; letter-spacing: -0.008em; max-width: 560px; } .conclusion-cta .cc-text em{font-style: italic; color: var(--brand)} .conclusion-cta .cta-btn{background: var(--brand); color: fff} .conclusion-cta .cta-btn:hover{background: var(--brand-light); color: fff} System online · Township appeals open Cook County · 2025 Tax Year · Leyden Township · By class Township appeals Stratified by property class Your appeal outcome depends on what you own . In Leyden Township's 2025 cycle, a single-family homeowner who appealed at both stages saved an estimated $673 a year . A commercial owner who did the same saved $34,895 . Same process. Same township. Same year. The honest read of Cook County appeal data starts with your property class. Tax year 2025 Total appeals 22,963 Property classes 5 Source Cook County official records Cook County Tax Appeals Published November 15, 2025 9 min read Class 2 · LOA 10% Single-family 55.1 % Combined · ~$673/yr Class 2-99 · LOA 10% Condos 53.9 % Combined · ~$196/yr Class 2-11 · LOA 10% Small apts 52.5 % Combined · ~$1,134/yr Class 3 · LOA 10% Multi-family 77.4 % Combined · ~$9,630/yr Class 5 · LOA 25% Commercial & industrial 74.0 % Combined · ~$34,895/yr est. savings The spread across classes is real — and large. Unique parcels appealed 0 Across all 5 classes Lowest est. tax savings ~$ 0 /yr Condos · end-to-end Spread across classes 0 × Highest is 178× the lowest Highest est. tax savings ~$ 0 /yr Commercial · end-to-end Highest combined rate 0 % Multi-family (7+ units) 01 Two stages 02 Find your class 03 All classes 04 Takeaways Ready to file your Leyden Township appeal? Skip the analysis and get started in 60 seconds. $0 upfront · 25% of savings only Hire us — start free A single appeal-success-rate number for Leyden Township doesn't exist — at least, not one that tells anyone the truth. The Cook County data is unambiguous: your property class shapes everything. The success rate, the size of the AV reduction, and most importantly the dollar savings on your tax bill all depend on whether you own a condo, a single-family home, a small apartment building, a larger multi-family property, or a commercial parcel. This post breaks down the complete 2025 Leyden Township appeal record by property class, joining each parcel's Assessor and Board of Review history by 14-digit PIN. Nothing below is a township average; everything is class-specific. 01 · How appeals work The two-stage Cook County property tax appeal process Cook County runs appeals through two independent bodies. Stage one is the Cook County Assessor's Office (CCAO), which mails an assessment and then opens an appeal window for each township. Stage two is the Board of Review (BOR), a separate quasi-judicial agency that reviews assessments after the Assessor closes. Owners can file at either stage; many file at both. The two stages aren't redundant — they apply different standards. The CCAO checks internal consistency with mass-appraisal models; the BOR conducts evidence-based hearings. Looking at only one stage hides the full story, so for every class below we report all three perspectives: the CCAO alone, the BOR alone, and a "combined" view that joins both datasets by PIN — so each parcel is counted once with success defined as a change at either level. 02 · Find your property class Leyden Township 2025 appeal results, by property class Use the tabs below to see the Leyden 2025 data for your property class. Numbers swap based on your selection — success rates at each stage, the average assessed-value journey, and the estimated annual tax-bill savings for that class. Commercial sits separately from residential because of its different level of assessment (25% vs 10%), and within the Class 2 residential bucket, condos and small apartments are split out because their outcomes differ from single-family homes. Single-family Class 2 · home Condo Class 2-99 Small apt (2–6) Class 2-11 Multi-family Class 3 · 7+ units Commercial Class 5 Class 2 (excl. 2-99 & 2-11) · LOA 10% Single-family homes The biggest residential category in Leyden by volume — typical single-family houses, town­homes, and most older multi-story residences. 7,405 unique parcels filed an appeal in 2025. Combined rate 55.1 % Est. tax savings ~$673 /yr Stage 01 · CCAO Assessor First chance — mailed assessment review. 19.0 % Success rate Appeals 5,894 Changed 1,121 Avg. AV cut $441 Est. savings/yr ~$147 Stage 02 · BOR Board of Review Independent quasi-judicial body. 59.9 % Success rate Appeals 5,654 Decreased 3,388 Avg. AV cut $1,822 Est. savings/yr ~$608 Combined · by PIN Both stages End-to-end appeal journey. 55.1 % Combined rate Unique PINs 7,405 Filed at both 4,140 Avg. AV cut $2,015 Est. savings/yr ~$673 The AV journey for single-family homes 4,140 single-family parcels that appealed at both stages Starting point $35,090 CCAO mailed After Stage 1 ~$34k CCAO certified Ending point $33,075 BOR final Avg. end-to-end AV cut −$2,015 (5.7%) Est. annual tax savings ~$673 /yr What this means for single-family owners Single-family is the largest residential bucket by volume but has the smallest CCAO success rate (19.0%) of any residential subclass. The BOR triples that to 59.9% — and parcels that escalate end-to-end average $673 in annual tax-bill relief , with the typical assessed value moving from $35,090 to $33,075. Over a 3-year reassessment cycle, that's roughly $2,000 in cumulative savings before the next reassessment resets. Hire us to file your single-family appeal across all three tiers (CCAO → BOR → PTAB). We capture the full reduction the data shows is possible. No upfront cost — 25% of first-year savings only. Start my single-family appeal Class 2-99 · LOA 10% Condo miniums Cook County's Class 2-99 includes individual condominium units. 2,973 unique condo parcels in Leyden filed an appeal in 2025. Lower AVs mean smaller dollar reductions and the smallest tax-bill savings of any class. Combined rate 53.9 % Est. tax savings ~$196 /yr Stage 01 · CCAO Assessor First chance — mailed assessment review. 26.2 % Success rate Appeals 2,675 Changed 702 Avg. AV cut $362 Est. savings/yr ~$121 Stage 02 · BOR Board of Review Independent quasi-judicial body. 40.0 % Success rate Appeals 2,856 Decreased 1,143 Avg. AV cut $241 Est. savings/yr ~$81 Combined · by PIN Both stages End-to-end appeal journey. 53.9 % Combined rate Unique PINs 2,973 Filed at both 2,538 Avg. AV cut $587 Est. savings/yr ~$196 The AV journey for condos 2,538 condo parcels that appealed at both stages Starting point $15,251 CCAO mailed After Stage 1 ~$14.9k CCAO certified Ending point $14,664 BOR final Avg. end-to-end AV cut −$587 (3.8%) Est. annual tax savings ~$196 /yr What this means for condo owners Condos have a surprisingly counter-intuitive pattern: the CCAO's average AV cut ($362) is actually larger than the BOR's ($241). That's because by the time most condos arrive at the BOR, the Assessor has already done much of the work — the BOR is making smaller marginal adjustments on top. The combined effect is still real: 53.9% of condo parcels won a change at one of the two stages, and end-to-end savings average about $196 per year . The dollar figure is small because condo AVs are small, but the percentage reduction (3.8%) is the meaningful comparison. Hire us to file your condo appeal across all three tiers. Condo savings are smaller per unit but they compound across building owners and reassessment cycles. No upfront cost — 25% of first-year savings only. Start my condo appeal Class 2-11 · LOA 10% Small apartment buildings 2- to 6-unit apartment buildings. Assessed at the Class 2 residential rate (10% LOA) but with higher per-parcel AVs than single-family. 906 unique parcels filed in Leyden in 2025. Combined rate 52.5 % Est. tax savings ~$1,134 /yr Stage 01 · CCAO Assessor First chance — mailed assessment review. 16.9 % Success rate Appeals 698 Changed 118 Avg. AV cut $1,264 Est. savings/yr ~$422 Stage 02 · BOR Board of Review Independent quasi-judicial body. 48.7 % Success rate Appeals 832 Decreased 405 Avg. AV cut $2,085 Est. savings/yr ~$696 Combined · by PIN Both stages End-to-end appeal journey. 52.5 % Combined rate Unique PINs 906 Filed at both 623 Avg. AV cut $3,395 Est. savings/yr ~$1,134 The AV journey for small apartments 623 small-apt parcels that appealed at both stages Starting point $65,003 CCAO mailed After Stage 1 ~$63.5k CCAO certified Ending point $61,608 BOR final Avg. end-to-end AV cut −$3,395 (5.2%) Est. annual tax savings ~$1,134 /yr What this means for small-apartment owners 2-to-6-unit buildings sit in a distinctive spot — assessed at the Class 2 residential rate but with materially higher AVs than single-family or condos. CCAO success rate is the lowest of any residential subclass at 16.9%, but the BOR jumps to 48.7%. Owners who escalate to both stages average $1,134 in annual tax-bill relief on a 5.2% AV reduction. Hire us to file your small-apartment appeal . Investment owners benefit most when the appeal escalates beyond the Assessor's initial review. No upfront cost — 25% of first-year savings only. Start my small-apt appeal Class 3 · LOA 10% Multi-family (7+ units) Larger residential apartment buildings — 7 or more units. The highest combined success rate of any class in Leyden at 77.4%. Only 265 unique parcels but the strongest outcomes per parcel. Combined rate 77.4 % Est. tax savings ~$9,630 /yr Stage 01 · CCAO Assessor First chance — mailed assessment review. 63.5 % Success rate Appeals 200 Changed 127 Avg. AV cut $12,793 Est. savings/yr ~$4,272 Stage 02 · BOR Board of Review Independent quasi-judicial body. 69.7 % Success rate Appeals 261 Decreased 182 Avg. AV cut $14,523 Est. savings/yr ~$4,849 Combined · by PIN Both stages End-to-end appeal journey. 77.4 % Combined rate Unique PINs 265 Filed at both 196 Avg. AV cut $28,839 Est. savings/yr ~$9,630 The AV journey for multi-family 196 multi-family parcels that appealed at both stages Starting point $142,992 CCAO mailed After Stage 1 ~$130k CCAO certified Ending point $114,152 BOR final Avg. end-to-end AV cut −$28,839 (20.2%) Est. annual tax savings ~$9,630 /yr What this means for multi-family owners Multi-family (Class 3) is the strongest-performing class in Leyden. The CCAO already approves 63.5% of these appeals — far higher than residential — and the BOR pushes that to 69.7%. The combined success rate of 77.4% is the highest of any class. Owners who file at both stages see an average $9,630 in annual tax savings on a 20.2% AV reduction. This is also the class where filing only at the BOR leaves the most on the table, since the CCAO success rate is so unusually high. Hire us to file your multi-family appeal across CCAO, BOR, and PTAB. The data shows your class has the highest success rate of any in Leyden — let us capture it for you. No upfront cost. Start my multi-family appeal Class 5 · LOA 25% Commercial & industrial All Class 5 properties — retail, office, industrial, warehouse. Assessed at 25% of market value (vs 10% for residential), so AVs and dollar reductions are correspondingly larger. 2,068 unique parcels in Leyden 2025. Combined rate 74.0 % Est. tax savings ~$34,895 /yr Stage 01 · CCAO Assessor First chance — mailed assessment review. 46.7 % Success rate Appeals 1,371 Changed 640 Avg. AV cut $37,634 Est. savings/yr ~$12,566 Stage 02 · BOR Board of Review Independent quasi-judicial body. 66.4 % Success rate Appeals 2,036 Decreased 1,352 Avg. AV cut $67,486 Est. savings/yr ~$22,534 Combined · by PIN Both stages End-to-end appeal journey. 74.0 % Combined rate Unique PINs 2,068 Filed at both 1,339 Avg. AV cut $104,505 Est. savings/yr ~$34,895 The AV journey for commercial 1,339 commercial parcels that appealed at both stages Starting point $424,486 CCAO mailed After Stage 1 ~$385k CCAO certified Ending point $319,980 BOR final Avg. end-to-end AV cut −$104,505 (24.6%) Est. annual tax savings ~$34,895 /yr What this means for commercial owners Commercial owners get the largest dollar reductions, but it's mostly because their starting AVs are 4× higher than residential at the same market value (25% LOA vs 10%). On a percentage basis, the 24.6% end-to-end AV cut for commercial is comparable to multi-family's 20.2%. CCAO success rate of 46.7% is significantly higher than residential — the Assessor's office treats commercial appeals with more scrutiny because of the larger sums involved. Owners who escalate to both stages average $34,895 in annual tax-bill relief . Hire us to file your commercial property appeal . The largest dollar opportunities in Leyden's data are here — our team of licensed Illinois tax attorneys and CPAs handles all three appeal tiers end-to-end. No upfront cost. Start my commercial appeal A condo owner reading "Leyden's average tax savings is $9,488/year" would be wildly misled. The real figure for their class is closer to $196 — 48× smaller. That's why every number above is class-specific. Per-class analysis · 13,938 parcels · 5 classes Stop guessing — get a property-specific estimate Hire Cook County Tax Appeals to file your Leyden Township appeal. Enter your PIN and we'll calculate your specific savings opportunity based on your property class, tax code, and current AV. We escalate every case across all three appeal tiers — CCAO, BOR, and PTAB — and you only pay if we save you money. 25% of first-year savings. Nothing upfront. Calculate my savings 03 · All classes All Leyden Township property classes compared Here is the same data above arranged for direct comparison across classes. The success-rate chart shows how the CCAO, BOR, and combined rates vary; the data table below shows every per-class number in one matrix. Success rate by class — CCAO, BOR, and Combined Leyden Township · 2025 · % of appeals (or parcels) that produced a change Single-family Class 2 (excl. 2-99, 2-11) 5,894 CCAO · 5,654 BOR · 7,405 PINs CCAO 19.0% BOR 59.9% Both 55.1% Condos Class 2-99 2,675 CCAO · 2,856 BOR · 2,973 PINs CCAO 26.2% BOR 40.0% Both 53.9% Small apartments Class 2-11 · 2–6 units 698 CCAO · 832 BOR · 906 PINs CCAO 16.9% BOR 48.7% Both 52.5% Multi-family Class 3 · 7+ units 200 CCAO · 261 BOR · 265 PINs CCAO 63.5% BOR 69.7% Both 77.4% Commercial & industrial Class 5 · LOA 25% 1,371 CCAO · 2,036 BOR · 2,068 PINs CCAO 46.7% BOR 66.4% Both 74.0% CCAO (Assessor) BOR (Board of Review) Combined (by PIN) Per-class summary · CCAO + BOR + Combined Leyden Township · 2025 Class CCAO rate BOR rate Combined rate Avg AV cut (end-to-end) Est. savings/yr Single-family homes Class 2 · LOA 10% 19.0% 59.9% 55.1% $2,015 ~$673 Condominiums Class 2-99 · LOA 10% 26.2% 40.0% 53.9% $587 ~$196 Small apts (2–6 units) Class 2-11 · LOA 10% 16.9% 48.7% 52.5% $3,395 ~$1,134 Multi-family (7+ units) Class 3 · LOA 10% 63.5% 69.7% 77.4% $28,839 ~$9,630 Commercial & industrial Class 5 · LOA 25% 46.7% 66.4% 74.0% $104,505 ~$34,895 04 · Takeaways Three takeaways for Leyden Township property owners 01 Your class is the most important variable Commercial parcels saved 178× more per year than condos on average. Township-wide "averages" hide this and mislead almost every reader. 02 The BOR is where most residential appeals win Residential CCAO rates run 17–26%. BOR rates run 40–60%. The Board of Review is the higher-yield stage for owners of homes, condos, and small apartments. 03 Escalating still matters — for every class The combined "filed at both" success rate is higher than either single stage for every class. The right strategy is the same regardless of property type: appeal at both stages. Methodology · data sources & calculations Source Official Cook County Assessor and Board of Review appeal records for tax year 2025, filtered to Leyden Township (township code 20). Class buckets Property classes are bucketed by Cook County's 3-digit class code: Class 2 excluding sub-codes 99 and 11 → single-family; Class 2-99 → condos; Class 2-11 → small apartments (2–6 units); Class 3 → multi-family (7+ units); Class 5 → commercial & industrial. Vacant land, incentive classes, and not-for-profit are omitted from the per-class analysis because of low volume. Success definitions A CCAO "success" is any record with change = "change" . A BOR "success" is any record with result = "Decrease" . The combined success rate counts each parcel once with success defined as a change at either stage; where a parcel has multiple CCAO records, the most favorable certified value is used. Tax-savings conversion Tax-bill savings are calculated from AV reductions using AV × state equalizer × composite tax rate . We use the 2024 final Cook County equalizer of 3.0355 (Illinois Department of Revenue, May 28, 2025; the 2025 equalizer is not yet published) and an illustrative 11% composite tax rate based on Leyden's weighted municipal average — actual rates by tax code in Leyden range from ~7% (Rosemont) to ~13% (Northlake/Melrose Park). The resulting multiplier is ~0.334, meaning roughly 33¢ of annual tax savings per $1 of AV reduction. The multiplier is class-invariant because the equalizer and tax rate apply uniformly to AV — Cook County's class LOA differences are already baked into the AV before this calculation. Actual savings depend on a parcel's specific tax code, applicable exemptions (homeowner, senior, etc.), and the eventual 2025 equalizer. Frequently asked questions Why doesn't this post have a single headline success rate? + Because there isn't one. A condo owner, a single-family homeowner, and a commercial property owner each appealed under the same Cook County process and walked away with very different outcomes. The combined success rate across all classes in Leyden was 57.7%, but that figure averages a condo owner's experience with a commercial owner's experience — and they look almost nothing alike. The honest read for any individual owner is their class-specific number. Why are commercial reductions so much larger than residential? + Commercial properties (Class 5) are assessed at 25% of market value, while residential (Class 2 and 3) is assessed at 10%. So at the same market value, a commercial parcel has an AV that's 2.5× higher than residential. When the BOR reduces a commercial AV by 24.6% (the average end-to-end percentage in our data), the dollar reduction is naturally much larger than the same percentage cut on a residential AV. The percentage figures are class-comparable in a way the dollar figures aren't. Should I file at both stages? + For every class in our data, the "combined" success rate is higher than either the CCAO or BOR alone, and the end-to-end AV reduction is larger than either single-stage average. The two stages are independent and apply different review standards, so a "No change" at the CCAO doesn't prevent a successful appeal at the BOR. Filing at both is the strategy associated with the largest savings, regardless of class. How does an AV reduction become a tax-bill savings? + Cook County tax bills follow the formula (AV × state equalizer − exemptions) × composite rate . Your AV is already adjusted for your property class (10% LOA for Class 2/3, 25% for Class 5), so the savings calculation works the same regardless of class. Applying the 2024 final state equalizer of 3.0355 and an illustrative ~11% composite tax rate gives a multiplier of about 0.334 — roughly 33¢ of annual tax savings per $1 of AV reduction. Your actual multiplier depends on your specific tax code; rates vary across Leyden's municipalities. How were the combined-by-PIN figures calculated? + We pulled every 2025 Leyden record from both the Cook County Assessor and Board of Review, then joined them on the 14-digit Property Index Number (PIN). For each class, we computed the number of unique parcels, the count with a change at either stage, and the end-to-end average AV journey for parcels with records at both stages. The class bucket is assigned from the CCAO record when present, falling back to the BOR record otherwise — these are virtually always the same since a parcel's class doesn't typically change between stages. Conclusion: file your Leyden Township appeal — for your class The 2025 Leyden Township property tax appeal data tells five different stories — one for each property class. A condo owner saved an estimated $196/year on average; a multi-family owner saved $9,630; a commercial owner saved $34,895. Reporting an "average" across these five buckets isn't analysis, it's smearing. What every Leyden property owner — whether you're in Franklin Park, Elmwood Park, Schiller Park, River Grove, Northlake, Melrose Park, Rosemont, Norridge, or Park Ridge — should remember: appeals work, escalating to both the Cook County Assessor and the Board of Review is the right strategy, and the dollar figures that matter are the ones for your class, not the ones for the township. Ready to file? Get a property-specific estimate for your Leyden Township appeal in 60 seconds. Risk-free. Hire us — start free Risk-free service $0 upfront. You only pay if we win. Our fee is 25% of your first year's tax savings. We escalate every case across all three appeal tiers — Assessor, BOR, and PTAB — so you capture the full reduction the data shows is possible for your class. Calculate my savings Why choose us 70% higher success rate than the average attorney appeal Instant AI-powered property analysis Licensed Illinois tax attorneys & CPAs 3-tier escalation: Assessor → BOR → PTAB Fee is just 25% of first-year savings Leyden Township · service area We file appeals in every Leyden municipality Franklin Park Elmwood Park Schiller Park River Grove Northlake Melrose Park Rosemont Norridge Park Ridge Bensenville Township code 20 · Northwest suburban triennial reassessment Leyden 2025 · by class Est. tax savings (end-to-end) Condos ~$196/yr Single-family ~$673/yr Small apts (2–6) ~$1,134/yr Multi-family (7+) ~$9,630/yr Commercial ~$34,895/yr Hire Cook County Tax Appeals — Leyden Township Five property classes. Five different answers. The data shows what you own determines what you can save. Hire us to file your Leyden Township property tax appeal — across the Cook County Assessor, Board of Review, and (if needed) the Illinois Property Tax Appeal Board. Get a property-specific estimate in under 60 seconds, with no upfront cost. We only get paid — 25% of your first-year savings — if we save you money. Calculate my savings Free consultation 2025 est. annual savings by class Condos ~$196 Single-family ~$673 Small apts ~$1,134 Multi-family ~$9,630 Commercial ~$34,895 © Cook County Tax Appeals LLC cookcountytaxappeal.com · (708) 888-8880 (function(){ // ----- Counter animation ----- function format(v, fmt, decimals){ if (fmt === 'currency') return '$' + Math.floor(v).toLocaleString('en-US'); if (fmt === 'number') return Math.floor(v).toLocaleString('en-US'); if (decimals > 0) return v.toFixed(decimals); return Math.floor(v).toLocaleString('en-US'); } function animateCounter(el){ var raw = parseFloat(el.dataset.count); var decimals = parseInt(el.dataset.decimals || 0); var fmt = el.dataset.format || 'plain'; var duration = 1700; var start = performance.now(); function setText(text){ for (var i = 0; i { "@context": "https://schema.org", "@graph": [ { "@type": "Article", "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-classarticle", "isPartOf": { "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-class" }, "mainEntityOfPage": { "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-class" }, "headline": "Leyden Township Property Tax Appeal Results 2025: Class-by-Class Data & Savings", "description": "Real 2025 Leyden Township property tax appeal data from Cook County, broken out by property class — single-family, condo, small apartment, multi-family, and commercial. Success rates, average AV reductions, and estimated annual tax-bill savings for each class.", "image": { "@type": "ImageObject", "url": "https://www.cookcountytaxappeal.com/blog/leyden-featured-image.png", "width": 1200, "height": 630 }, "datePublished": "2025-11-15T09:00:00-06:00", "dateModified": "2025-11-15T09:00:00-06:00", "author": { "@id": "https://www.cookcountytaxappeal.com/organization" }, "publisher": { "@id": "https://www.cookcountytaxappeal.com/organization" }, "articleSection": "Property Tax Appeals", "keywords": "Leyden Township property tax appeal, Cook County property tax appeal, property tax appeal Franklin Park, property tax appeal Elmwood Park, CCAO appeal, Cook County Board of Review, commercial property tax appeal Cook County", "about": [ { "@type": "Place", "name": "Leyden Township, Cook County, Illinois" }, { "@type": "Thing", "name": "Cook County property tax appeal" }, { "@type": "Thing", "name": "Property tax assessment" } ] }, { "@type": "WebPage", "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-class", "url": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-class", "name": "Leyden Township Property Tax Appeal Results 2025 by Property Class", "isPartOf": { "@id": "https://www.cookcountytaxappeal.com/website" }, "inLanguage": "en-US", "breadcrumb": { "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-classbreadcrumbs" } }, { "@type": "BreadcrumbList", "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-classbreadcrumbs", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.cookcountytaxappeal.com/" }, { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.cookcountytaxappeal.com/blog" }, { "@type": "ListItem", "position": 3, "name": "Leyden Township 2025 Appeal Results by Class" } ] }, { "@type": "WebSite", "@id": "https://www.cookcountytaxappeal.com/website", "url": "https://www.cookcountytaxappeal.com/", "name": "Cook County Tax Appeals", "publisher": { "@id": "https://www.cookcountytaxappeal.com/organization" } }, { "@type": ["Organization", "LegalService"], "@id": "https://www.cookcountytaxappeal.com/organization", "name": "Cook County Tax Appeals", "url": "https://www.cookcountytaxappeal.com/", "description": "Cook County property tax appeal firm representing residential, commercial, multi-family, and condo owners across all Cook County townships. Risk-free contingency fee — clients only pay if we reduce their property tax bill.", "priceRange": "Contingency · 25% of first-year savings", "areaServed": [ { "@type": "AdministrativeArea", "name": "Cook County, Illinois" }, { "@type": "Place", "name": "Leyden Township, Cook County, Illinois" }, { "@type": "City", "name": "Franklin Park, Illinois" }, { "@type": "City", "name": "Elmwood Park, Illinois" }, { "@type": "City", "name": "Schiller Park, Illinois" }, { "@type": "City", "name": "River Grove, Illinois" }, { "@type": "City", "name": "Northlake, Illinois" }, { "@type": "City", "name": "Melrose Park, Illinois" }, { "@type": "City", "name": "Rosemont, Illinois" }, { "@type": "City", "name": "Norridge, Illinois" }, { "@type": "City", "name": "Park Ridge, Illinois" } ], "serviceType": [ "Property Tax Appeal", "Cook County Assessor Appeal", "Cook County Board of Review Appeal", "Illinois Property Tax Appeal Board (PTAB) Appeal" ] }, { "@type": "FAQPage", "@id": "https://www.cookcountytaxappeal.com/blog/leyden-township-2025-appeal-results-by-classfaq", "mainEntity": [ { "@type": "Question", "name": "Why doesn't this post have a single headline success rate for Leyden Township?", "acceptedAnswer": { "@type": "Answer", "text": "Because there isn't one. A condo owner, a single-family homeowner, and a commercial property owner each appealed under the same Cook County process and walked away with very different outcomes. The combined success rate across all classes in Leyden was 57.7%, but that figure averages a condo owner's experience with a commercial owner's experience — and they look almost nothing alike. The honest read for any individual owner is their class-specific number." } }, { "@type": "Question", "name": "Why are commercial property tax appeal reductions so much larger than residential?", "acceptedAnswer": { "@type": "Answer", "text": "Commercial properties (Class 5) are assessed at 25% of market value, while residential (Class 2 and 3) is assessed at 10%. So at the same market value, a commercial parcel has an AV that is 2.5x higher than residential. When the Board of Review reduces a commercial AV by 24.6% (the average end-to-end percentage in our data), the dollar reduction is naturally much larger than the same percentage cut on a residential AV. The percentage figures are class-comparable in a way the dollar figures aren't." } }, { "@type": "Question", "name": "Should I file a Cook County property tax appeal at both stages?", "acceptedAnswer": { "@type": "Answer", "text": "For every class in our data, the combined success rate is higher than either the CCAO or BOR alone, and the end-to-end AV reduction is larger than either single-stage average. The two stages are independent and apply different review standards, so a 'No change' at the CCAO doesn't prevent a successful appeal at the BOR. Filing at both is the strategy associated with the largest savings, regardless of class." } }, { "@type": "Question", "name": "How does an AV reduction become a tax-bill savings in Cook County?", "acceptedAnswer": { "@type": "Answer", "text": "Cook County tax bills follow the formula: (AV × state equalizer − exemptions) × composite rate. Your AV is already adjusted for your property class (10% LOA for Class 2/3, 25% for Class 5), so the savings calculation works the same regardless of class. Applying the 2024 final state equalizer of 3.0355 and an illustrative ~11% composite tax rate gives a multiplier of about 0.334 — roughly 33¢ of annual tax savings per $1 of AV reduction. Your actual multiplier depends on your specific tax code; rates vary across Leyden's municipalities." } }, { "@type": "Question", "name": "How were the Leyden Township combined-by-PIN figures calculated?", "acceptedAnswer": { "@type": "Answer", "text": "We pulled every 2025 Leyden record from both the Cook County Assessor and Board of Review, then joined them on the 14-digit Property Index Number (PIN). For each class, we computed the number of unique parcels, the count with a change at either stage, and the end-to-end average AV journey for parcels with records at both stages. The class bucket is assigned from the CCAO record when present, falling back to the BOR record otherwise — these are virtually always the same since a parcel's class doesn't typically change between stages." } } ] } ] }
CCTA TeamRead More
Riverside Township Cook county property tax appeal results
MAY 06, 2026

Riverside Township Cook County Property Tax Appeal Success Rates for 2026

Riverside Township Cook County Property Tax Appeal Success Rates for 2026 Property tax appeals in Riverside Township showed strong results during the latest Cook County assessment cycle. A large percentage of appealed properties received assessed value reductions after review. Residential properties, condominiums, apartment buildings, and commercial properties all showed meaningful appeal activity. The average final assessed value was lower than the original proposed assessed value, which may help reduce future property tax burdens for many owners. Cook County Tax Appeals regularly analyzes Cook County property tax appeal trends to help property owners better understand assessment changes. Understanding Property Tax Appeal Results in Riverside Township Riverside Township Appeal Data Overview and Key Metrics Metric Result Total Appeals Analyzed 6,466 Successful Appeals 5,606 Overall Appeal Success Rate 86.7% Average Proposed Assessed Value $49,473 Average Final Assessed Value $38,454 *Analysis prepared by Cook County Tax Appeals .* Riverside Township Appeal Results Overview Property tax appeals allow property owners to challenge their assessed values if they believe their property was overassessed. The results in Riverside Township show that many property owners were able to reduce their assessed values through the appeal process. Cook County property taxes are heavily influenced by assessed values. Even modest reductions may create meaningful long-term tax savings. Cook County Tax Appeals regularly reviews Cook County assessment trends to help explain how appeal outcomes vary across different property types. Overall Appeal Success Rate in Riverside Township The overall appeal success rate in Riverside Township was 86.7%. For this analysis, a successful appeal means the final assessed value was reduced below the originally proposed assessed value. This high success rate highlights how important it can be for property owners to carefully review their assessments during reassessment years. Many homeowners and commercial property owners may not realize that assessment changes can often be challenged successfully when strong supporting evidence is provided. Appeal Success Rate by Property Class in Riverside Township Different property classes experienced different appeal outcomes across the township. Residential single-family homes, condominiums, apartment buildings, and commercial properties all showed varying success rates depending on property type and assessment characteristics. Single-family homes generally represented the largest share of appeals in the township. Condominiums and smaller apartment properties also showed strong appeal activity. Commercial and mixed-use properties often experienced larger assessed value swings due to income, market, and comparable property factors. The chart below highlights the appeal success rate by property class. Cook County Tax Appeals regularly studies these Cook County property tax appeal trends to help property owners better understand assessment patterns. Assessed Value Changes Explained in Riverside Township The average proposed assessed value across analyzed properties was approximately $49,473. After appeals were reviewed, the average final assessed value decreased to about $38,454. These reductions matter because assessed values are one of the primary drivers of future property tax bills. When assessed values decline, property owners may benefit from lower tax burdens depending on local taxing district rates and equalization factors. Cook County Tax Appeals helps Cook County property owners understand how assessment changes may impact future taxes and whether an appeal may be worthwhile. What These Results Mean for Property Owners in Riverside Township The appeal results in Riverside Township suggest that many property owners may benefit from reviewing their assessments closely during reassessment years. Even small assessment reductions can create savings over time. Property owners should compare their assessed values against nearby comparable properties, recent sale prices, and current market conditions whenever possible. Appeal outcomes may vary based on property class, valuation evidence, and local market activity. Cook County Tax Appeals provides ongoing Cook County appeal analysis and assessment insights that help property owners better understand their property tax situations. Frequently Asked Questions About Riverside Township Property Tax Appeals How do I appeal my property taxes in Riverside Township? Property owners can file appeals through the Cook County Assessor or Cook County Board of Review during the township appeal filing period. What is considered a successful Cook County property tax appeal? A successful appeal usually means the final assessed value is reduced after review. Do homeowners in Riverside Township often win property tax appeals? Many homeowners receive reductions when strong comparable sales, valuation evidence, or assessment inconsistencies are presented. Can commercial properties appeal assessments in Cook County? Yes. Commercial, industrial, mixed-use, condominium, apartment, and residential properties may all qualify for appeals. Where can I learn more about Cook County property tax appeals? Cook County Tax Appeals provides Cook County appeal insights, assessment analysis, and educational resources for property owners. Conclusion The latest appeal results in Riverside Township show that many property owners were able to reduce assessed values through the Cook County appeal process. The difference between proposed and final assessed values demonstrates why reviewing assessments carefully remains important for both residential and commercial property owners. Understanding local appeal trends can help property owners make more informed decisions during reassessment periods. Cook County Tax Appeals remains a trusted resource for property owners seeking clear information about Cook County property tax appeals and assessment trends. Check Your Potential Property Tax Savings Visit Cook County Tax Appeals to review your Cook County property tax assessment and see whether you may qualify for potential savings. Property owners can register with no upfront cost, and clients only pay if they save money on their property taxes.
CCTA TeamRead More
Average Savings and Success Rates for Cook County Property Tax Appeals in 2024 and 2025
MAY 04, 2026

Cook County Property Tax Appeal Results: Average Savings, Reduction Rates, and Success Trends for 2025

Cook County Property Tax Appeal Results: Savings, Reduction Rates, and Success Trends Property tax appeals in Cook County continue to deliver meaningful savings for both homeowners and commercial property owners. In 2025, success rates remain strong, typically ranging from 45 percent to 65 percent. Many successful appeals result in lower assessed values, leading to reduced annual tax bills and long-term financial relief. How Much Can You Save With a Cook County Property Tax Appeal Property owners often wonder if filing an appeal is worth the effort. The answer depends on how much the property is over-assessed, but many owners see real financial benefits. For residential properties, average savings typically range from a few hundred to several thousand dollars per year. These savings often come from correcting assessments that are higher than comparable homes in the same neighborhood. Commercial property owners usually see even larger savings. Because commercial assessments are high, even a small reduction can mean thousands of dollars in yearly tax savings. Average Property Tax Reduction and Percentage Decreases A successful appeal reduces your property’s assessed value, which directly lowers your tax bill. In most cases, property owners see reduction percentages between 10 percent and 20 percent. Significantly over-assessed properties may achieve even greater reductions. Even a small percentage decrease can result in substantial long-term savings, especially for higher-value properties. Cook County Property Tax Appeal Success Rates in 2025 Recent data shows that property tax appeals in Cook County remain effective. Overall success rates typically fall between 45 percent and 65 percent. Residential properties often have higher success rates, usually between 50 and 65 percent. This is most common when strong comparable sales data support the claim. Commercial properties generally see success rates between 40 percent and 55 percent, particularly when income and expense documentation clearly supports a lower valuation. What to Expect From Property Tax Appeals Moving Forward Early trends indicate that success rates will remain steady as reassessments continue across Cook County. Market shifts, rising property values, and inconsistencies in assessments create ongoing opportunities for appeals. Property owners who review their assessments annually are more likely to identify overvaluation and reduce their tax burden. Why Appealing Your Property Taxes Makes Sense With strong success rates and consistent savings, filing an appeal is a practical step for many property owners. Failing to review your assessment could mean overpaying year after year. Taking action ensures your property is fairly assessed based on current market conditions. If you own property in Cook County, now is the time to take control of your tax bill. Visit Cook County Tax Appeals to review your assessment, explore your options, and start your appeal today.
CCTA TeamRead More
CCTA Assessor appeals blog image
APR 30, 2026

Cook County Assessor Appeals Process Guide

Cook County Assessor Appeals Process Explained Understanding the Cook County Assessor's Appeals Process Property taxes in Cook County are based on the assessed value of your property. If you believe your assessment is too high, the Cook County Assessor appeals process gives you a chance to challenge that value. This process is the first step for most property owners seeking relief. It applies to both residential and commercial properties and is handled directly through the Cook County Assessor’s Office. Appeals are not automatic. You must file during your township’s open appeal window and provide evidence supporting your claim. When You Can File an Appeal The Assessor opens appeals by township on a rotating schedule throughout the year. Each township typically has a 30 day window to submit an appeal. You can only file during your township’s open period. Missing this window means you will need to wait for the next opportunity or file with the Board of Review later. It is important to monitor township deadlines closely. Many property owners prepare in advance so they are ready to file as soon as their township opens. Who Can File an Appeal Any property owner in Cook County can file an appeal with the Assessor. This includes: Homeowners Commercial property owners Property managers or agents acting on behalf of owners You do not need an attorney to file, but you must present clear and relevant evidence to support your position. Common Reasons for Filing an Appeal Most appeals focus on whether the assessed value reflects fair market value. Common reasons include: Incorrect Property Characteristics Errors in the property record can lead to higher assessments. These may include incorrect square footage, extra bathrooms, or outdated building details. Lack of Uniformity Your property may be assessed higher than similar properties in your neighborhood. Comparing recent assessments of comparable properties can support your case. Decline in Market Value If market conditions have changed or comparable sales show lower values, your assessment may no longer be accurate. Step by Step: How the Assessor Appeals Process Works Step 1: Review Your Assessment Notice Your assessment notice provides the value assigned to your property. Review it carefully for errors and compare it to similar properties in your area. Step 2: Gather Supporting Evidence Strong appeals rely on documentation. Common evidence includes: Recent comparable property sales Photos showing property condition Appraisals, if available Property record corrections The more specific and relevant your evidence, the stronger your appeal. Step 3: File Your Appeal Online The Cook County Assessor requires appeals to be submitted online through their official portal. You will need your Property Index Number (PIN) to begin. During submission, you will select a reason for appeal and upload your supporting documents. Step 4: Assessor Review After submission, the Assessor reviews your appeal and supporting evidence. They may adjust your assessed value if the evidence supports a change. Decisions are typically released after the township appeal window closes and all submissions are reviewed. What Happens After the Assessor Decision If your appeal is successful, your assessed value will be reduced, which may lower your property tax bill. If your appeal is denied or only partially adjusted, you still have options. You can file a second appeal with the Cook County Board of Review, which is a separate and independent body. Many property owners pursue both levels to ensure their property is fairly assessed. Tips for a Stronger Appeal Focus on Comparable Properties Use properties that are similar in size, location, age, and condition. Strong comparables are one of the most effective tools in an appeal. Be Clear and Concise Straightforwardly present your argument. Avoid unnecessary information and focus on facts that support a lower valuation. Check for Record Errors Even small inaccuracies in property records can impact your assessment. Correcting these can strengthen your case. File Early in the Appeal Window Submitting early gives you more time to gather documents and address any issues before the deadline. Why the Assessor Appeal Matters The Cook County Assessor's appeals process is often the most efficient opportunity to correct an overassessment. Addressing issues at this stage may reduce the need for further appeals. For both homeowners and commercial property owners, taking action during this window can help ensure property taxes are based on accurate and fair values. Using Local Resources to Navigate the Process Understanding the Cook County system can be complex, especially with changing deadlines and valuation methods. Accessing reliable, local information can make the process more manageable. Resources like Cook County Tax Appeals provide guidance on deadlines, filing procedures, and what to expect throughout the appeals process. Staying informed can help property owners make timely and well-supported decisions. Final Thoughts The Cook County Assessor's appeals process is a key step in managing your property tax liability. By filing on time, gathering strong evidence, and understanding how the system works, you can present a well supported appeal. Whether you own a home or commercial property, reviewing your assessment each year is an important part of protecting your investment. If you are preparing to file an appeal, visit Cook County Tax Appeals for up to date guidance, filing tips, and local insights to help you navigate the process with confidence.
CCTA TeamRead More
Cook County property tax help to lower assessments and save money
APR 08, 2026

Cook County Property Tax Reduction Strategies

Cook County Property Tax Reduction Strategies for Homeowners and Businesses Understanding Property Taxes in Cook County Property taxes in Cook County are based on your property’s assessed value and local tax rates. If your assessed value is too high, you may end up paying more than your fair share. The good news is that there are several legal and effective ways to reduce your property tax burden. These strategies apply to both residential and commercial property owners. By understanding how the system works, you can take steps to lower your assessed value and reduce your tax bill over time. Why Property Tax Reduction Matters High property taxes can impact your finances year after year. Even small reductions in assessed value can lead to meaningful savings. For homeowners, this can improve affordability. For commercial property owners, it can improve cash flow and investment returns. The key is to act early and use the right strategies. File a Property Tax Appeal Appeal With the Assessor The first step is to file an appeal with the Cook County Assessor. This is your initial opportunity to challenge your assessed value. You can appeal if: Your property is overvalued Comparable properties are assessed lower rate Property details are incorrect Appeal to the Board of Review If your Assessor appeal is denied or you missed the deadline, you can file with the Board of Review. This is a second chance to present stronger evidence and improve your case. You can track filing deadlines and township openings using Cook County Property Tax Appeal Deadlines page.. . Use Accurate Comparable Sales Comparable sales are one of the most effective tools in reducing your property taxes. What Makes a Good Comparable Your comps should be: Located near your property Similar in size, age, and features Sold within the past year Strong comparables help prove that your property is overassessed. Check for Property Record Errors Many properties are overassessed due to incorrect data. Common Errors to Look For Incorrect square footage Wrong number of rooms or units Misclassified property type Outdated building details Review your property record card carefully. Fixing errors can lead to immediate reductions. Take Advantage of Property Tax Exemptions Exemptions are one of the easiest ways to reduce your tax bill. Common Cook County Exemptions Homeowner Exemption Senior Exemption Senior Freeze Exemption Disabled Persons Exemption Veterans Exemptions Make sure you apply for all exemptions you qualify for. Missing an exemption can cost you money every year. Document Property Condition Issues Your property’s condition plays a major role in its value. When Condition Matters If your property has: Structural damage Needed repairs Outdated interiors Deferred maintenance You should document these issues. Use photos, contractor estimates, and reports to support your claim. This can strengthen your appeal. Analyze Local Market Trends Property values can change based on local market conditions. Why This Matters If property values in your area are declining or stable, but your assessment increases, this may be grounds for an appeal. Understanding local trends helps you build a stronger argument. Websites like Cook County Tax Appeals provide insights into local appeal patterns and valuation changes. Consider Professional Appeal Support While many property owners file appeals on their own, professional support can help in complex cases. When to Seek Help Commercial properties with income data Large assessment increases Limited time to prepare evidence Difficulty finding comparable sales Experienced professionals understand local trends and appeal strategies. Stay Aware of Appeal Deadlines Missing a deadline means losing your chance to reduce your taxes for that year. How to Stay on Track Monitor township reassessment cycles Check filing windows regularly Prepare documents in advance Using a reliable local resource like Cook County Tax Appeals can help you stay informed. Combine Strategies for Better Results The most effective approach is to combine multiple strategies. For example: File an appeal with strong comparable sales Correct property record errors Apply for all eligible exemptions Using these strategies together can increase your chances of a reduction. Long-Term Approach to Property Tax Reduction Property tax reduction is not a one-time effort. Assessments change over time, especially during reassessment years. Review your property value regularly and be prepared to appeal when necessary. Staying proactive can help you avoid overpaying in the future. Reducing your Cook County property taxes is possible with the right approach. By understanding your assessment, using strong evidence, and taking advantage of available exemptions, you can lower your tax burden. Both homeowners and commercial property owners can benefit from these strategies. The key is to stay informed, act on time, and build a strong case. Take the Next Step To track deadlines, review your property, and use proven tax-saving strategies, visit Cook County Tax Appeals . It provides trusted local guidance for Cook County property owners.  
CCTA TeamRead More
Cook County 2026 property tax appeal map highlighting South and West Suburbs townships with open appeals.
APR 06, 2026

2026 Cook County Tax Appeal Deadlines by Township | Key Dates & Filing Guide

2026 Cook County Tax Appeal Dates & Deadlines – Open Townships Property tax appeals in Cook County follow a strict township schedule. Knowing these deadlines is key if you want lower property taxes in 2026. Unlike many other counties, Cook County does not have a single appeal deadline. Instead, filing periods open and close throughout the year depending on your township.   To stay current with filing windows, visit our Cook County Property Tax Appeal Deadlines page . We track all open townships and upcoming deadlines there. Whether you own residential or commercial property, missing your deadline could mean waiting years for another opportunity to appeal. This guide breaks down the 2026 Cook County property tax appeal deadlines, township schedule, and filing process so you can stay ahead. How Cook County Property Tax Appeal Deadlines Work Cook County uses a rolling appeal system by township . Each township has its own deadline to file an appeal with the Assessor’s Office. Key points for 2026: Appeal windows typically remain open for about 30 days Deadlines are based on your township, not your city or ZIP code You must file within your assigned window or lose your right to appeal for that cycle The schedule follows the Cook County triennial reassessment cycle In 2026, many southern and suburban townships are being reassessed, so it is a key year for property owners there. 2026 Cook County Open Townships & Deadlines Below are representative 2026 Assessor appeal filing windows across Cook County. These dates are based on the official Assessor calendar and show how deadlines are staggered throughout the year. Early 2026 Deadlines (March – April) Norwood Park: March 24 – May 5 River Forest / Riverside: March 7 – April 18 Rogers Park: March 13 – April 23 These early openings are often the first opportunity of the year to file an appeal. Property owners should act quickly once notices are issued. Spring 2026 Deadlines (April – June) Evanston: April 9 – May 21 Oak Park: April 8 – May 20 Cicero: April 24 – June 6 Spring is one of the busiest appeal periods, especially for both residential and mixed-use properties. Summer 2026 Deadlines (June – August) Lyons: June 2 – July 16 Maine: June 4 – July 18 Bremen: July 10 – August 21 Lemont: July 21 – September 2 If your township is in this group, prepare early because summer deadlines can overlap with vacations and cause delays. Late 2026 Deadlines (August – November) Worth: August 11 – September 23 Orland: September 10 – October 23 Palatine: September 9 – October 22 Schaumburg: October 2 – November 17 Late-year deadlines are common in larger suburban townships and often mark the final chance to appeal that year. Why Township Deadlines Matter So Much Cook County’s system is unique. Many property owners miss their appeal. They often assume there is one universal deadline. If you miss your township window: You cannot file with the Assessor for that year You may need to wait until the next reassessment cycle Overassessed property values remain unchanged You may pay higher taxes for multiple years For commercial property owners, this can translate into a significant long-term financial impact . Understanding the Two Levels of Appeal In Cook County, property owners typically have two opportunities to challenge their assessment . 1. Assessor Appeal (First Opportunity) Filed with the Cook County Assessor Opens shortly after reassessment notices are mailed Usually lasts around 30 days Focuses on correcting valuation errors early This is often the best opportunity to reduce your assessed value quickly . 2. Board of Review Appeal (Second Opportunity) If your Assessor appeal is denied or only partially reduced, you may file with the Cook County Board of Review . Opens after Assessor decisions are released Provides a second level of review Allows submission of additional evidence Many successful appeals happen at this stage, especially when supported by strong comparable data. How to Find Your 2026 Deadline To determine your exact filing window, follow these steps: Identify your township (this is critical) Review the Cook County Assessor calendar Check your reassessment notice for your deadline Confirm whether your township is currently open by visiting our Cook County property tax appeal deadlines page Your official appeal deadline is always listed on your reassessment notice , which is mailed before your filing window opens. What You Need to File a Strong Appeal Meeting the deadline is only part of the process. A successful appeal also requires supporting evidence . Common documentation includes: Comparable property sales (comps) Income and expense data (for commercial properties) Vacancy or condition issues Appraisal reports (if available) The goal is to show that your property is overassessed compared to similar properties in your area. 2026 Strategy Tips for Property Owners To maximize your chances of success in 2026: Start Early Do not wait until your township opens. Begin gathering comps and reviewing your assessment ahead of time. Monitor Your Township Because deadlines vary, staying aware of your township’s schedule is critical. File Before the Deadline Last-minute filings increase the risk of errors or missed submissions. Consider Both Appeal Levels If the Assessor does not provide relief, the Board of Review offers another opportunity. Common Mistakes to Avoid Many property owners unknowingly weaken their appeal by: Filing after the deadline Using outdated or irrelevant comparable sales Failing to include supporting documentation Assuming their tax bill automatically reflects market value Avoiding these mistakes can significantly improve your outcome. Why 2026 Is an Important Year to Appeal Because of the reassessment cycle, 2026 is especially important for: Suburban property owners Commercial real estate investors Properties with rising market values If your property value increased significantly, your tax bill may follow unless you challenge the assessment. Stay Updated on Cook County Appeal Deadlines Tracking Cook County’s appeal deadlines can be overwhelming due to: Dozens of townships Different filing windows Multiple levels of appeal At CookCountyTaxAppeal.com , we help property owners stay informed about current filing windows, township deadlines, and appeal strategies . Our goal is to provide clear, accurate guidance so you never miss an opportunity to reduce your property taxes. Final Thoughts The 2026 Cook County property tax appeal process is entirely driven by timing and preparation . Knowing when your township opens and acting fast can be the difference between a lower tax bill and overpaying for years. If you own property in Cook County, the most important step you can take today is simple: Find your township deadline and prepare your appeal before the window opens.  
CCTA TeamRead More
Cook County Illinois property tax assessment market value compared to assessed value
MAR 27, 2026

Assessed Value vs Market Value: Why Cook County Homes Are Often Over assessed

Property taxes in Cook County are based on the assessed value of your home , not always the real market value. Many homeowners assume these numbers are the same, but they are often very different. When the assessed value is too high, you may end up paying more property tax than you should. Understanding the difference between tax assessed value vs market value can help you spot an unfair assessment and decide whether you should file a property tax appeal. What Is a Tax Assessed Value? The tax assessed value is the value assigned to your property by the Cook County Assessor’s Office. This value is used to calculate your property taxes. In simple terms, it is the number the county uses to determine how much tax you owe. The assessor estimates your home's value based on several factors such as: Location of the property Size of the home Property type Recent sales data in the neighborhood Property characteristics like age or improvements However, this value is not always equal to the real market value . If the estimate is too high, your property may be overassessed , which means you are paying higher taxes than necessary. Learn more about the appeal process on our page about Cook County property tax appeals . Market Value vs Assessed Value Many homeowners confuse market value vs assessed value , but they serve different purposes. Market Value The market value is what your home would likely sell for in the current real estate market. It depends on: Buyer demand Location Property condition Comparable home sales Assessed Value The assessed value of a house is the value determined by the county for tax purposes. Because assessments rely on mass data models rather than individual inspections, they often do not reflect the true market value. This is why the property tax assessed value vs market value can differ significantly. Is Assessed Value the Same as Market Value? No. Assessed value is not the same as market value . In Cook County, residential property is generally assessed at 10% of the estimated market value , but errors in the estimation process can still occur. For example: Your home may have outdated or incorrect property records Comparable sales used by the assessor may not match your home Your property may have condition issues that lower its value When these mistakes happen, your property tax bill may increase unfairly. Common Reasons Homes Are Overassessed Many homeowners are surprised to learn that overassessment is common. Here are some of the most frequent reasons. 1. Incorrect Property Data Assessor records sometimes include incorrect information such as: Extra square footage Additional bathrooms Finished basements that do not exist Even small errors can increase your tax assessed value . 2. Outdated Comparable Sales The assessor often relies on comparable home sales . If those homes are larger, renovated, or newer than yours, your value may be inflated. This is a common reason for differences between tax appraisal vs market value . 3. Declining Neighborhood Property Values If home prices drop but assessments are not updated quickly, your property may be taxed based on outdated values. This creates a gap between house assessment vs market value . 4. Property Condition Issues If your home has issues such as: Structural problems Roof damage Outdated interiors Water damage The market value could be lower than the assessed value. Unless these issues are reported during an appeal, the assessor may not account for them. How Overassessment Affects Your Property Taxes When the assessed value is too high, your property tax bill increases. Even a small difference between assessor value vs market value can result in hundreds or thousands of dollars in extra taxes each year. Over time, these costs add up. That is why many Cook County homeowners file appeals when they suspect an inaccurate assessment. You can learn more about the process by visiting our guide on how Cook County tax appeals work . How to Tell If Your Home Is Overassessed You may want to review your assessment if: Your assessed value is higher than nearby homes Your home would sell for less than the assessed value The assessor's property record contains incorrect information Your tax bill increased significantly Comparing assessed value vs asking price for homes in your area can also reveal potential issues. How to Appeal a Cook County Property Tax Assessment If you believe your property is overassessed, you have the right to file a Cook County property tax appeal . The appeal process typically involves: Reviewing your assessment notice Gathering comparable sales data Identifying property record errors Submitting evidence to the assessor Because the process requires supporting documentation and strong valuation arguments, many homeowners work with professionals to maximize their chances of success. Learn more about filing a residential property tax appeal in cook county . Final Thoughts Understanding the difference between assessed value and market value is key to ensuring you are not paying more property tax than necessary. If your tax-assessed value is higher than your home's true market value , you may have a strong case for a property tax appeal. Thousands of Cook County homeowners successfully reduce their tax bills each year by correcting overassessments. If you suspect your property may be overvalued, reviewing your assessment and exploring your appeal options could lead to significant savings. Need help with your Cook County property tax appeal? Visit Cook County Tax Appeals to learn how you can review your assessment and potentially reduce your property taxes.
CCTA TeamRead More
Are you overpaying property taxes in Cook County learn how to check before appealing
MAR 25, 2026

Cook County Property Overassessed Signs

5 Signs Your Cook County Property Is Overassessed Property taxes in Cook County are based on your property’s assessed value. When that value is higher than it should be, you may end up paying more than your fair share. Many homeowners and commercial property owners do not realize their property is overassessed until they review their assessment notice closely. Understanding the warning signs can help you decide whether to file a Cook County property tax appeal. Below are five clear indicators that your property may be overassessed and worth reviewing. What Does Overassessed Mean in Cook County In Cook County, the Assessor estimates your property’s market value and then applies an assessment level to determine your assessed value. This value is used to calculate your property tax bill. An overassessment happens when the assessed value does not accurately reflect your property’s true market value or characteristics. This can occur due to outdated data, incorrect property details, or shifting market conditions. Sign 1: Your Assessed Value Is Higher Than Recent Sale Prices One of the most common signs of an overassessed property is a mismatch between your assessed value and recent sale prices. Compare With Nearby Sales If similar homes or commercial properties in your area have sold for less than your estimated market value, your assessment may be too high. The Cook County Assessor relies on mass appraisal models, which may not fully capture specific property conditions or local trends. Review recent comparable sales in your neighborhood. Focus on properties with similar size, age, and location. If your assessed value is noticeably higher, it may be time to consider an appeal. Sign 2: Your Property Details Are Incorrect Assessment errors often come from inaccurate property data. Common Errors to Look For Incorrect square footage Wrong number of bedrooms or bathrooms Misclassified property type Outdated building improvements Even small inaccuracies can increase your assessed value. Property owners can verify details through the Cook County Assessor’s website. If you find discrepancies, correcting them during an appeal can make a meaningful difference. Sign 3: Your Property Taxes Increased Without Market Support A rising tax bill does not always mean your property value increased at the same rate. Understand the Difference Between Value and Taxes Cook County property taxes are influenced by multiple factors, including tax rates and local budgets. However, if your assessed value rises significantly while local property values remain stable, it may indicate an overassessment. Review your assessment notice alongside market trends in your township. If there is no clear justification for the increase, it may be worth challenging the assessment. Sign 4: Similar Properties Have Lower Assessments Uniformity is an important principle in property taxation. Properties with similar characteristics should have similar assessed values. Check Assessment Comparisons If comparable properties nearby are assessed at lower values, your property may not be assessed fairly. This is especially relevant for: Condominium units in the same building Single family homes on the same block Commercial properties with similar use Assessment data is publicly available in Cook County, making it possible to compare your property with others. Identifying inconsistencies can strengthen your appeal. Sign 5: Your Property Has Unique Issues Not Reflected in the Assessment Mass appraisal systems do not always account for property-specific problems. Examples of Overlooked Issues Structural damage or deferred maintenance Location disadvantages such as noise or limited access Obsolescence in commercial buildings Vacancy or reduced income potential If your property has factors that reduce its value but are not reflected in the assessment, your valuation may be too high. Providing documentation of these conditions can support your case during the appeal process. How to File a Cook County Property Tax Appeal If you recognize one or more of these signs, you may be eligible to file an appeal. Step 1: Check Your Appeal Deadline Appeals must be filed during your township’s open filing period with the Cook County Assessor. If that window has passed, you may still be able to appeal with the Cook County Board of Review. Step 2: Gather Supporting Evidence Strong appeals are based on clear evidence, such as: Recent comparable sales Photos of the property condition Corrected property details Income and expense data for commercial properties Step 3: Submit Your Appeal You can file online through the Assessor or Board of Review portals. Each requires supporting documentation and a clear explanation of why your assessment should be reduced. Why Reviewing Your Assessment Matters Property tax assessments directly impact your annual tax bill. Even a modest reduction in assessed value can lower your taxes over time. Because Cook County reassesses properties on a regular cycle, it is important to review your assessment each year. Staying proactive helps ensure your property is assessed fairly based on current data. Cook County property owners who take the time to review and challenge incorrect assessments are better positioned to manage their tax burden effectively. Final Thoughts Recognizing the signs of an overassessed property is the first step toward taking action. Whether the issue is incorrect data, market mismatch, or unequal treatment, Cook County provides a structured process to challenge assessments through the Assessor and Board of Review. Understanding how the system works can make the process more manageable and improve your chances of a fair outcome. If you believe your property may be overassessed, Cook County Tax Appeals offers clear guidance and local insight to help you better understand your appeal options.  
CCTA TeamRead More
Cook County Hyde Park Township tax appeal results with housing and financial analysis image
MAR 17, 2026

Hyde Park Township Cook County Property Tax Appeal Results

In Hyde Park Township, 961 of 4,963 appeals ended with a change, for an overall success rate of 19.4%. Residential classes made up most appeals, but several commercial property classes posted much higher win rates. On average, final assessed values came in lower than proposed values, showing that appeals can matter when an assessment looks too high. Hyde Park Township Cook County Property Tax Appeal Results Hyde Park Township data overview and key metrics Metric Hyde Park Township result Total appeals analyzed 4,963 Successful appeals 961 Overall appeal success rate 19.4% Average proposed assessed value $71,501 Average final assessed value $66,455 Hyde Park Township appeal results overview This review looks at how property tax appeals turned out across Hyde Park Township in 2025. It covers residential, multifamily, vacant land, commercial, industrial, and incentive property classes. In Cook County, different property classes follow different assessment rules and appeal patterns, which is why township-level results can vary significantly by property type. Official Cook County guidance explains that appeals can apply across vacant land, residential, apartment, not-for-profit, and commercial or industrial property categories, with class codes used to further define property types. For Hyde Park Township, the overall picture was mixed. Most appeals did not lead to a change, but nearly 1 in 5 did. Residential classes drove most of the volume, while some commercial classes had much stronger success rates. Overall appeal success rate in Hyde Park Township A successful appeal here means the outcome was marked “Change.” Using that rule, 961 of 4,963 appeals were successful, resulting in a 19.4% success rate. Most appeals did not produce a change, but a meaningful share did. Even with a moderate success rate, a successful appeal can reduce assessed value enough to impact future tax bills. This makes it important to review assessments carefully before deciding whether to file. Appeal success rate by property class in Hyde Park Township Cook County property classes represent different property types: Class 1: Vacant land Class 2: Residential property Class 3: Larger apartment and multifamily property Class 5: Commercial and industrial property Key patterns in Hyde Park Township: Class 2-99 (residential condominiums): 1,365 appeals, 14.0% success rate Class 2-11 (2–6 unit apartments): 948 appeals, 17.3% success rate Class 3-15 (multifamily apartments): 307 appeals, 18.2% success rate Class 5-17 (one-story commercial): 180 appeals, 58.3% success rate Class 5-90 (commercial minor improvements): 104 appeals, 47.1% success rate Most common property classes Property class What it represents Appeals Success rate 2-99 Residential condominium 1,365 14.0% 2-11 Apartment building, 2–6 units 948 17.3% 2-03 One-story residence (1,000–1,800 sq ft) 361 13.6% 3-15 Multifamily apartments 307 18.2% 2-06 Larger older residential homes 189 18.0% 5-17 One-story commercial buildings 180 58.3% 2-10 Row house or townhome 173 16.8% 1-00 Vacant land 141 15.6% 5-90 Commercial minor improvement 104 47.1% 2-95 Individual townhomes 97 18.6% The chart focuses on property classes with at least 10 appeals to ensure meaningful comparisons. Assessed value changes explained in Hyde Park Township Average proposed assessed value: $71,501 Average final assessed value: $66,455 This represents: Average reduction: $5,046 Percentage decrease: ~7.1% Total reduction across dataset: ~$25.0 million Since property taxes are tied to assessed value, reductions can directly impact tax liability. While not every appeal succeeds, successful ones can result in meaningful savings. What these results mean for property owners Three key takeaways: 1. Appeals are not guaranteed wins Most appeals did not result in changes. 2. Property class matters Commercial properties saw significantly higher success rates than residential classes. 3. Value reductions can still be meaningful Even with a modest success rate, successful appeals can lower tax burdens. FAQ about Hyde Park Township property tax appeals What is the success rate? 19.4% of appeals resulted in a change. Which property class performed best? Class 5-17 (one-story commercial buildings) at 58.3% among high-volume categories. Do condo appeals succeed often? Class 2-99 had a 14.0% success rate, below the township average. When can I file an appeal? Appeal windows vary each year. Check with the Cook County Assessor or Board of Review. Where can I learn more? Visit Cook County Tax Appeals for insights and appeal guidance. Conclusion Hyde Park Township recorded 4,963 appeals, with 961 successful outcomes and a 19.4% success rate. Final assessed values were lower than proposed values on average, and commercial properties significantly outperformed residential ones in appeal success. The key takeaway is that results depend heavily on property class and supporting evidence. A careful review of your assessment can make a meaningful difference. If you want to see whether your property may be overassessed, visit: Cook County Tax Appeals You can review your options, register with no upfront cost, and only pay if you save.
CCTA TeamRead More
2025 Lyons Township Cook County property tax appeal results and success rate
MAR 16, 2026

Lyons Township Cook County Property Tax Appeal Results (2025):

Lyons Township had 5,085 Cook County property tax appeals in 2025, and 566 were marked Change, for an 11.13% success rate. The average proposed assessed value was $64,117, and the average final assessed value was $60,219, about 6.1% lower. Most filings were residential, but results varied a lot by property class, especially between single-family homes, condos, and smaller commercial classes. Cook County Tax Appeals tracks these assessed value s , comparable property, and Board of Review trends to help owners understand their appeal options. Lyons Township Property Tax Appeal Results: Cook County Success Rates by Class in 2025 Lyons Township Data Overview and Key Metrics Metric Result Total appeals analyzed 5,085 Successful appeals (“Change”) 566 Overall appeal success rate 11.13% Average proposed assessed value $64,117 Average final assessed value $60,219 Lyons Township Appeal Results Overview These results show how property tax appeals in Lyons Township ended after review. Each appeal includes the property class, the proposed assessed value before the decision, the final assessed value after the decision, and whether the result was “Change” or “No Change.” Cook County updates property values on a repeating reassessment cycle, and property owners can appeal during their township’s open filing window, which is generally about 30 days after notices are issued. That timing matters because missing the window can delay relief for another tax year. In simple terms, this gives property owners a clear look at where reductions happened, where they did not, and which property types saw better outcomes. Cook County Tax Appeals regularly reviews this kind of Cook County appeal data to help owners understand local patterns in plain language. Lyons Township Overall Appeal Success Rate Out of 5,085 appeals in Lyons Township, 566 were successful. That puts the overall appeal success rate at 11.13% . For this analysis, a successful appeal means the result was marked “Change.” That means the assessed value was adjusted in some way. It does not always mean a huge drop, but it does mean the appeal led to a different final value. Another simple way to say it: about 1 out of every 9 appeals in Lyons Township ended with a change. That is why it helps to review your assessed value, your property details, and nearby comparable properties before filing. Appeal Success Rate by Property Class in Lyons Township Property classes matter because they group similar properties together. In Lyons Township, many of the biggest classes were homes and condos. For example, Class 2-03 is a one-story residence from 1,000 to 1,800 square feet, Class 2-78 is a two-or-more story residence up to 62 years old from 2,001 to 3,800 square feet, Class 2-99 is a residential condominium, Class 2-11 is an apartment building with 2 to 6 units, Class 5-17 is a one-story commercial building or area, and Class 5-93 is an industrial building. The chart below shows how success rates changed by property class in Lyons Township. Here are the main classes with the most appealing activity: Property Class What it represents Appeals Success Rate 2-03 One-story residence, 1,000 to 1,800 sq. ft. 1,001 10.39% 2-78 Two-or-more story residence, up to 62 years, 2,001 to 3,800 sq. ft. 640 12.19% 2-99 Residential condominium 589 0.51% 2-34 Split-level residence 545 8.07% 2-06 Older two-or-more story residence, 2,201 to 4,999 sq. ft. 420 15.00% 2-11 Apartment building with 2 to 6 units 221 7.69% 2-09 Two-or-more story residence, 5,000+ sq. ft. 117 20.51% 5-17 One-story commercial building or area 46 41.30% A few patterns stand out. First, the highest-volume classes were mostly residential. Second, condo appeals in Class 2-99 had a very low success rate in this township. Third, some smaller commercial and industrial classes posted much higher success rates, but those classes had far fewer appeals, so they can move more sharply from year to year. Assessed Value Changes Explained in Lyons Township The average proposed assessed value in Lyons Township was $64,117 . The average final assessed value was $60,219 . That means the average final value came in about $3,898 lower than the average proposed value. In percentage terms, that is about a 6.1% drop . Across all appeals in this township, the total assessed value reduction was about $19.82 million . Why does that matter? Your appeal is about your assessed value , and that assessed value helps determine your share of the local property tax burden. A lower assessed value does not automatically rewrite the whole bill, but it can reduce the portion tied to your property. That is why understanding the starting value, the final value, and the reason for the change matters so much. cookcountytaxappeal.com helps property owners make sense of those numbers before and after an appeal. What These Results Mean for Property Owners in Lyons Township The Lyons Township numbers show that appealing can matter, but results are not evenly spread across every property type. Some classes had much better outcomes than others. That means a careful review is worth it, especially if your property looks high compared with similar nearby properties. For homeowners, this data is a reminder to check the basics: property class, square footage, age, and whether nearby comparable properties seem lower. For condo owners, the low success rate in Class 2-99 shows why strong support matters. For commercial owners, the smaller number of cases can still produce meaningful changes when the facts are strong. In short, the opportunity is real, but the facts on the property still matter. cookcountytaxappeal.com is a helpful resource for owners who want to better understand local appeal patterns before they decide what to do next. Lyons Township Property Tax Appeal FAQ What counts as a successful property tax appeal in Lyons Township? For this analysis, a successful appeal is any case marked “Change.” That means the assessed value was adjusted after review. Can I appeal my Lyons Township assessed value every year? You usually have about 30 calendar days to file after your notice is issued. You can also appeal in years between reassessments when your township is open for appeals. Do I need comparable properties for a Cook County property tax appeal? Comparable properties can help a lot, especially in a lack-of-uniformity case. The Assessor says comparable properties should have similar characteristics, and staff can review comparable properties even if you do not submit your own list. What happens if my Cook County Assessor appeal is denied? You can still appeal to the Cook County Board of Review . That gives property owners another chance to challenge an assessed value. Conclusion Lyons Township’s 2025 appeal results show a clear but uneven path for property owners. The township posted an 11.13% success rate, and the average final assessed value finished below the average proposed value. The biggest lesson is that property class matters, and some classes clearly performed better than others. That is why it is worth reviewing your assessment every year. Even when many appeals end in no change, the cases that do succeed can still reduce assessed value and create room for real tax savings. For owners who want help understanding the local numbers, Cook County Tax Appeals is a trusted Cook County resource. Check Your Potential Property Tax Savings Visit Cook County Tax Appeals to see how much you may be able to save on your property taxes. You can register with no upfront cost , and you only pay if you save . It is a simple way to check whether your Lyons Township assessment deserves a closer look.  
CCTA TeamRead More
WorthTownship_Appeal_Success_Rate__
MAR 13, 2026

Worth Township Cook County Property Tax Appeal Results

Worth Township property tax appeals had a 13.1% success rate in this set of Cook County appeal results. A successful appeal means the final outcome showed a change in assessed value. On average, the final assessed value came in lower than the proposed assessed value , which can matter for future tax bills. Cook County Tax Appeals tracks these Cook County property tax appeal trends to help property owners understand what local results may mean. Worth Township Cook County Property Tax Appeal Results and Assessed Value Trends Worth Township Data Overview and Key Metrics Metric Value Total appeals analyzed 5,391 Successful appeals 707 Overall appeal success rate 13.1% Average proposed assessed value $35,157 Average final assessed value $33,148 Data analysis prepared by Cook County Tax Appeals . Worth Township Appeal Results Overview Property tax appeals in Worth Township give property owners a closer look at whether their assessed value may be too high. In this set of Cook County appeal results, most appeals did not end in a change, but a meaningful share did. That matters because even a modest reduction in assessed value can help reduce a property owner’s tax burden over time. The results also show that appeal outcomes can vary a lot by property class. Some classes had more consistent success than others, and some smaller classes had only a handful of appeals. Cook County Tax Appeals regularly reviews this kind of Cook County appeal activity to spot trends that are useful for homeowners, investors, and business owners. Overall Appeal Success Rate in Worth Township The overall appeal success rate in Worth Township was 13.1% . Out of 5,391 appeals analyzed, 707 ended with a Change , which is counted here as a successful appeal. In simple terms, a successful appeal means the original proposed assessed value did not stay the same. Instead, the final result changed after review. That does not guarantee a certain tax bill reduction, but it does show that some properties had room for correction. For property owners, this is a reminder that assessed values are worth reviewing carefully. A lower final assessed value can create a better tax position, especially when the original assessment seems out of line with the property or nearby comparable properties. Worth Township Appeal Success Rate by Property Class Appeal results in Worth Township were not the same across every property class. In Cook County, property classes describe the type of property involved. For example, many Class 2 properties are residential homes or condos, Class 3 often covers larger multi-family or mixed-use buildings, and Class 5 commonly includes commercial properties such as stores, gas stations, and other business buildings. Official Cook County classification materials show that these codes are used to identify whether a property is residential, multi-family, commercial, industrial, incentive, vacant land, or exempt. Worth Township appeal activity was dominated by residential classes. The biggest groups by volume were: Property Class What it generally represents Appeals Success Rate 2-03 One-story residence, 1,000 to 1,800 sq. ft. 1,954 12.4% 2-34 Split-level residence 936 11.3% 2-99 Residential condominium 431 13.2% 2-78 Two-or-more story residence, 2,001 to 3,800 sq. ft. 318 11.3% 2-02 One-story residence, up to 999 sq. ft. 289 13.5% 2-04 One-story residence, 1,801+ sq. ft. 284 13.4% 2-05 Older two-or-more-story residence, up to 2,200 sq. ft. 264 16.3% 2-11 Apartment building with 2 to 6 units 189 7.4% 2-06 Older two-or-more story residence, 2,201 to 4,999 sq. ft. 135 15.6% 2-10 Older row house or townhome 117 8.5% A few smaller classes posted very high success rates, including some at 100%, but those results came from very few appeals and should not be read as a broad township pattern. Among classes with more meaningful volume, Class 5-17 one-story commercial buildings stood out with a 45.8% success rate. That suggests some commercial properties in Worth Township may have had stronger grounds for review than many of the higher-volume residential classes. You can place the chart here to help readers scan these class-by-class differences. Cook County Tax Appeals regularly analyzes these patterns across Cook County so property owners can better understand how local appeal outcomes differ by property type. Assessed Value Changes Explained in Worth Township In Worth Township, the average proposed assessed value was $35,157 , while the average final assessed value was $33,148 . That means the final figure came in about $2,009 lower on average , or roughly 5.7% below the proposed value . Why does this matter? Assessed value is one of the core pieces used to calculate a property tax bill. A lower final assessed value does not always translate into the same percentage drop in taxes, but it can still move a property owner into a better position. This is why property owners should pay attention when a notice arrives. Even when an appeal does not succeed, comparing the proposed and final values can help show how the review process is working in a township. cookcountytaxappeal.com helps property owners make sense of these numbers so they can better understand whether an assessment looks fair. What These Results Mean for Worth Township Property Owners These Worth Township results show two important things. First, not every appeal leads to a change. Second, some property types appear to have stronger appeal outcomes than others. For homeowners, this means a careful review of assessed value still matters, especially if the property characteristics, condition, size, or comparable properties suggest the assessment may be too high. For commercial property owners, the stronger success seen in some commercial classes is a reminder that there may be real opportunities to challenge an assessment when the facts support it. The main takeaway is simple: property taxes are too important to ignore. Local results like these help show where appeal opportunities may exist and why township-level trends can be useful when reviewing an assessment. Worth Township Property Tax Appeal FAQ What is the Worth Township property tax appeal success rate? The appeal success rate in this analysis was 13.1% . That means 707 out of 5,391 appeals resulted in a change. What counts as a successful Cook County property tax appeal? For this analysis, a successful appeal means the result was marked “Change.” In other words, the final assessed value did not remain the same. Which Worth Township property classes had the most appeals? The largest groups were residential classes such as 2-03 , 2-34 , 2-99 , and 2-78 . These generally cover one-story homes, split-level homes, condos, and larger two-story residences. Why does a lower final assessed value matter? A lower final assessed value can help reduce the taxable value tied to a property. That can create a chance for lower property taxes, depending on the rest of the local tax calculation. Where can Worth Township property owners learn more about Cook County appeals? Property owners can review local appeal trends and learn more about how the process works through cookcountytaxappeal.com , along with current public guidance from the Cook County Assessor and Board of Review. Conclusion Worth Township’s appeal data shows a 13.1% overall success rate , with clear differences across property classes. The data also shows that the average final assessed value was lower than the average proposed assessed value , which helps explain why reviewing an assessment can be worthwhile. For property owners, the lesson is clear: even when appeal success rates are not high across the board, there can still be meaningful opportunities to correct an assessed value. cookcountytaxappeal.com is a trusted resource for understanding Cook County appeal patterns and what they may mean at the township level. See What You Could Save on Your Property Taxes If you own property in Worth Township, now is a good time to review whether your assessment looks fair. Visit Cook County Tax Appeals to see how much you could save on your property taxes, learn about your appeal options, and register with no upfront costs . You only pay if you save. If you want, I can also turn this into a fully formatted Word document or publish-ready HTML version.  
CCTA TeamRead More
Illinois tax changes 2026 summary for Cook County residents and homeowners
MAR 09, 2026

2026 Illinois Tax Changes: What Cook County Residents Need to Know

What Are the Tax Changes for 2026 in Illinois? A Guide for Cook County Residents If you live or run a business in Cook County, several Illinois tax changes in 2026 may affect your household budget, business operations, or investment decisions. Some updates apply statewide, while others may feel more noticeable in areas like Chicago and surrounding suburbs. Here is what you need to know. 1. State Income Tax Rules Remain the Same, But Some Details Changed Illinois still has a flat individual income tax rate of 4.95 percent. That rate did not change for 2026. However, some technical rules affecting businesses did change, especially for: Partnerships S corporations Multi-state businesses If you own a business in Cook County that operates outside Illinois, new income sourcing rules may affect how much of your income is taxed here. Business owners should review their structure and talk with a tax professional to avoid surprises. For employees and wage earners, withholding tables and state forms have been updated for 2026. Most people will not notice a major difference, but it is always smart to check your first few pay stubs of the year. 2. Grocery Tax Eliminated at the State Level One of the most talked about changes is the elimination of the 1 percent Illinois state grocery tax in 2026. However, this does not automatically mean groceries are tax-free everywhere in Cook County. Local governments have the option to keep a local grocery tax in place. Many municipalities have chosen to do so. That means your grocery bill may still include local tax, depending on where you shop. Chicago residents, in particular, should watch for updates from the city regarding local grocery taxes. 3. Remote Seller Sales Tax Changes If you operate an online business in Cook County, the rules for collecting Illinois sales tax have been simplified. Beginning in 2026, remote sellers must collect Illinois sales tax if they have at least $100,000 in sales to Illinois customers over a 12 month period. The old 200 transaction rule no longer applies. This change makes compliance easier to understand, but more online sellers may now meet the threshold. If you sell products online, review your annual Illinois sales totals carefully. 4. Tobacco and Nicotine Taxes Increased Illinois increased taxes on tobacco products and expanded taxation to certain nicotine products, including nicotine pouches. Cook County already has some of the highest tobacco-related taxes in the country. These additional increases may further raise retail prices across Chicago and nearby suburbs. 5. Gas Tax Adjustments Gasoline and diesel taxes saw modest increases heading into 2026. For Cook County commuters who drive daily, especially into downtown Chicago, fuel costs may continue to feel elevated. These increases are tied to statewide transportation funding. 6. Tax Credits and Income Limits Certain Illinois tax credits remain available in 2026, including: Education expense credits Property tax credits Earned Income Credit However, some credits phase out at higher income levels. Higher-earning households in Cook County should review eligibility before assuming a credit still applies. 7. Proposed Millionaire Surtax Lawmakers are discussing a potential surtax on income above $1,000,000. If approved and placed on the ballot, voters would decide whether to add a 3 percent surcharge on income over that threshold. This would mainly affect high-income earners, business owners, and investors in areas such as Chicago’s North Side, downtown, and certain suburbs. It is still a proposal, not current law. What Should Cook County Residents Do? Here are a few practical steps for 2026: Review your first paycheck of the year for correct withholding Confirm whether your municipality kept a local grocery tax Track online sales carefully if you run a business Check your eligibility for Illinois tax credits Consult a tax advisor if your income is complex or crosses state lines Illinois tax laws can change quickly, especially in high-revenue areas like Cook County. Staying informed early in the year can help you avoid unexpected tax bills and plan with confidence.  
CCTA TeamRead More
Cook County Lake Township tax appeal results and property assessment analysis
MAR 06, 2026

Lake Township Cook County Property Tax Appeal Results

Lake Township property tax appeals had a 17.3% success rate based on the appeals reviewed. A successful appeal means the outcome showed “Change,” which signals the assessed value was adjusted. On average, the final assessed value was lower than the proposed assessed value . This can help reduce future tax bills. This breakdown highlights where results were strongest by property class , using the same types of patterns Cook County Tax Appeals tracks for Cook County owners. Lake Township Cook County property tax appeal results: what the numbers show Data overview and key metrics for Lake Township Metric Result Total appeals analyzed 5,723 Successful appeals (“Change”) 992 Overall appeal success rate 17.3% Average proposed assessed value 59,004 Average final assessed value 55,840 Data analysis prepared by Cook County Tax Appeals . Township appeal results overview for Lake Township This report summarizes how often appeals led to a change in assessed value in Lake Township, Cook County . Think of it as a scoreboard for outcomes: how many owners saw a change, and which property types tended to do better. Cook County appeal results can vary a lot by property type and the details of the case. That is why Cook County Tax Appeals regularly reviews township-level trends like these to help owners understand what the data is really saying. Overall appeal success rate in Lake Township Out of 5,723 appeals reviewed in Lake Township, 992 were successful. That puts the overall success rate at 17.3% . In this analysis, a successful appeal means the result was marked “Change.” A “Change” result typically means the Assessor’s value was adjusted after review. (A “No Change” result means the value stayed the same.) Even when the overall success rate is not high, the upside can still matter, because a value change can impact what you pay. The key is filing a strong appeal with the right support for your property’s situation. Appeal success rate by property class in Lake Township Property class codes group properties by type. In Cook County, many Lake Township appeals fall into: Class 2 : residential homes and small residential properties (many codes are based on building style and size) Class 3 : larger multi-family apartment properties (7 or more units and other multi-family categories) Class 5 : commercial and industrial properties Here are the largest groups in the data, plus what the class code represents: Property class What it represents (plain-English) Appeals Success rate 2-03 One-story residence, 1,000 to 1,800 sq ft 1,347 12.0% 2-11 Apartment building with 2 to 6 units 796 15.3% 2-02 One-story residence, up to 999 sq ft 572 13.3% 2-05 Two-or-more story residence, over 62 years, up to 2,200 sq ft 405 8.4% 5-17 One-story commercial building or area 400 36.8% 5-90 Commercial minor improvement 267 28.8% 2-06 Two-or-more story residence, over 62 years, 2,201 to 4,999 sq ft 246 9.3% 5-93 Industrial building 172 28.5% 5-80 Industrial minor improvement 147 25.2% 2-34 Split-level residence with a lower level below grade 132 12.9% 2-12 Mixed-use with 6 units or fewer and under 20,000 sq ft 117 34.2% 3-15 Two-or three-story, non-fireproof corridor apartments (interior entrance) 116 16.4% Other All other classes combined 1,006 18.9% You can see these same patterns in the chart (insert your chart here later). Cook County Tax Appeals tracks class-by-class performance like this because it helps owners set realistic expectations and focus on what matters most in the appeal. Assessed value changes explained for Lake Township In Lake Township, the average Proposed AV was 59,004 , and the average Final AV was 55,840 . That is an average drop of about 3,164 AV , or roughly 5.4% . Why this matters: Your assessed value is a big input in how your property tax bill is calculated. When the assessed value goes down, your share of the tax burden can go down too (even though tax rates and local budgets also affect the final bill). Cook County Tax Appeals helps property owners make sense of assessed value changes and understand what is worth challenging, especially after reassessment cycles and notice mailings. What these results mean for property owners in Lake Township If you own property in Lake Township, these results point to a few practical takeaways: Not every appeal leads to a change , so the strength of your evidence matters. Commercial and certain mixed-use categories showed higher success rates in this set, which may reflect how values are reviewed for those property types. A value reduction does not need to be huge to matter. Over time, even moderate reductions can help protect cash flow. The smartest next step is to check whether your current assessed value looks high compared to similar properties, and whether your property details are correct, before you file. FAQ for Lake Township property tax appeals 1) What is a “successful” property tax appeal in Lake Township? In this report, a successful appeal means the outcome was “Change,” which indicates the assessed value was adjusted. 2) Where do I file a Cook County Assessor appeal for Lake Township? You can file through the Cook County Assessor’s online appeals system when your township is open. 3) Do I also need to appeal to the Cook County Board of Review? Sometimes, yes. The Board of Review is a separate step with its own deadlines and process. 4) What evidence usually helps in a Cook County property tax appeal? Common evidence includes comparable sales, income and expense information for income properties, and correcting property characteristics when they are wrong. 5) Why do appeal results vary by property class? Property classes group properties by type, size, and use, and the Assessor’s review can look different depending on the category. Conclusion Lake Township’s appeal data shows an overall success rate of 17.3% , with different results by property class and an average decrease from proposed to final assessed values. For property owners, the big lesson is that outcomes vary, but the potential impact can still be meaningful when a value change is won. For more Cook County township insights and clear, practical appeal guidance, Cook County Tax Appeals is a reliable local resource that breaks down these trends in plain English. Ready to check your potential savings? Visit Cook County Tax Appeals to see how much you could save on Cook County property taxes. You can register with no upfront costs , and you only pay if you save .  
CCTA TeamRead More
Cook County property tax bill second installment search and payment guidance
MAR 04, 2026

Cook County Property Tax Bills Now Online | 2025 First Installment Due April 1, 2026

Cook County property tax bills for the tax year 2025 are available online at the Cook County Treasurer’s official site. Nearly 1.8 million bills will be mailed by March 2 and must be paid by April 1, 2026. Online payments are free from your bank account when made at cook county treasurer . Find out about exemptions, refunds, payment plans, and how Cook County Tax Appeals can help with appeals. Cook County Property Tax Bills Available Online With April 1 Due Date Cook County property owners now have online access to their 2025 first installment property tax bills at Cook County Tax Appeals , the official site of the Cook County Treasurer’s Office. Nearly 1.8 million bills are scheduled to be mailed by March 2, and payments must be made by April 1, 2026, to avoid late charges under Illinois law. Important Tax Dates and Deadlines Mailing of 2025 Tax Year First Installment Bills : by March 2, 2026. Due Date for First Installment Payments : April 1, 2026. This due date is about one month later than usual because of state legislative changes and previous delays in billing cycles. Pay Online for Free at cook county treasurer Property owners can now pay their first installment tax bills online starting in late February. Online payments through the official Treasurer’s website are free when paid directly from your bank account.   To make a payment online: Visit cook county treasurer . Select the option to Pay Online for Free . Enter your address or 14-digit Property Index Number (PIN). A picture of the property will confirm that you are paying the correct bill. The online system also lets you check for refunds or exemptions that might lower your property tax bill. Why These Bills Matter The first installment payment is typically 55% of the previous year’s total tax bill . Exemptions are applied to the second installment due later in the year.   Missing the April 1 deadline can trigger a 0.75 percent monthly late charge as required by Illinois law. Additional Tools on Cook County Treasurer The Treasurer’s official site lets property owners: Search for *property tax refunds**. Check for *available property tax exemptions** that reduce your bill. Use a *payment plan calculator** if you need to spread payments over time. These tools help taxpayers understand their bills and payments in one place. How Cook County Tax Appeals Can Help At Cook County Tax Appeals , we specialize in helping Cook County property owners with property tax appeals and assessments. If you believe your assessed value is too high , an appeal can lower your bill and save money. Appeals are especially important if your home’s assessed value has increased significantly compared to similar properties.   Our services include: Professional assessment review Appeal filing and representation Strategy to maximize savings Guidance on exemption applications Appeals can directly impact how much you pay next year and help ensure you are not overpaying property taxes. Final Notes Paying your Cook County property taxes on time and exploring exemptions and refunds can make a big difference in your household budget. Visit cook county treasurer to pay your bill and use the tools available. And if your property assessment seems high, contact Cook County Tax Appeals for expert support to reduce your tax burden.  
CCTA TeamRead More
Cook County appeal success rate in Hanover Township showing 13 percent result
MAR 03, 2026

Hanover Township Property Tax Appeal Results (Cook County): Success Rate by Property Class + Assessed Value Changes

Hanover Township property tax appeals had a 13% success rate , based on appeals marked “Change.” Results differed by property class , meaning some property types saw better outcomes than others. On average, the final assessed value came in lower than the proposed assessed value , which can affect future tax bills. For owners who want clearer appeal insights, Cook County Tax Appeals reviews Cook County appeal trends and what they mean in plain language. Hanover Township Cook County Property Tax Appeal Data: Success Rate, Class Trends, and Assessed Values Data Overview and Key Metrics (Hanover Township) Metric Result Total number of appeals analyzed 11,438 Number of successful appeals (Change) 1,483 Overall appeal success rate 13.0% Average proposed assessed value 44,813 Average final assessed value 43,518 Data analysis prepared by Cook County Tax Appeals . Hanover Township Appeal Results Overview This overview summarizes how often appealed assessments received a change , and how outcomes differed across property classes in Hanover Township. In Cook County, property owners usually appeal during a set window with the Cook County Assessor , and may also appeal later to the Cook County Board of Review . Filing windows are township-based and time-limited. At Cook County Tax Appeals , we look at real appeal outcome patterns like these to help Cook County owners understand what tends to move the needle. Overall Appeal Success Rate in Hanover Township In this township’s results, an appeal is counted as successful when the outcome is marked “Change.” Using that definition, Hanover Township had 1,483 successful appeals out of 11,438 total , for an overall success rate of 13.0% . What this means in simple terms: Many appeals do not change, so the quality of the appeal support matters Strong evidence often focuses on market value , comparable properties , or correcting property details Appeal Success Rate by Property Class in Hanover Township Cook County property class codes describe the property type. For example: Class 2-xx is generally residential (including single-family and condos) Class 3-xx is multi-family Class 5-xx is commercial Class 6-xx relates to industrial / incentive classes (Exact meanings vary by code, like 2-99 for residential condominiums.) What the class results show Some classes have a higher success rate than others A few classes show very high rates because there were only a small number of appeals in that category Larger, common residential categories (like condos and larger residential groups) tend to shape the overall township results Cook County Tax Appeals regularly tracks class-level trends like these for Cook County property owners. Assessed Value Changes Explained in Hanover Township Across all appeals in this dataset: Average proposed assessed value: 44,813 Average final assessed value: 43,518 That is an average drop of about 1,295 points , or roughly 2.9% lower after the decision. Why this matters: Your assessed value is a key input used to calculate property taxes When an assessed value is reduced, it can help limit the tax impact, especially after reassessment years When it is not reduced, the next best step is often understanding whether the issue is uniformity , market value , or a property detail error At Cook County Tax Appeals , we help owners make sense of these numbers so they know what to question and what to document. What These Results Mean for Property Owners in Hanover Township If you own property in Hanover Township, these results suggest: Appeals can work, but they do not always lead to a change Property type matters, so your strategy should match your property class and the strongest argument available If your assessed value feels too high, checking recent sales and comparable assessments is often a practical starting point Also, deadlines are real, and they move. For Hanover Township, official sources may publish specific end dates for Assessor and Board of Review windows, so it’s smart to check the current calendars before you act. FAQ (Hanover Township) 1) What counts as a successful property tax appeal in Hanover Township? In these results, a successful appeal is any outcome marked “Change,” meaning the assessed value was adjusted. 2) Where do I file a Cook County property tax appeal for Hanover Township? Most owners start with the Cook County Assessor during the township’s open window. If needed, you can also appeal to the Cook County Board of Review during its filing period. 3) What evidence helps most in a Hanover Township appeal? Common support includes: Comparable sales (recent sales of similar properties) Comparable assessments for uniformity Documents that correct key property details 4) Why do appeal results vary by property class? Property classes group properties by type and features. Different property types can have different valuation patterns, and that can change how often appeals succeed. 5) How do I check appeal deadlines for Hanover Township? Cook County Property Tax Appeal Deadlines page.. Conclusion Hanover Township’s appeal data shows a 13.0% success rate when success is defined as a result marked “Change.” Results vary by property class , and on average, the final assessed value ended up lower than the proposed assessed value . If you want help understanding where your property fits in these trends, Cook County Tax Appeals is a trusted Cook County resource for making appeal results easier to understand. Next step Want to see how much you could save? Visit Cook County Tax Appeals to check your situation and register with no upfront costs . You only pay if you save .  
CCTA TeamRead More
Cook County Illinois senior property tax reduction guide for older homeowners
MAR 02, 2026

Senior Property Tax Relief in Illinois | Cook County Senior Exemption & Senior Freeze Guide

Senior Property Tax Relief in Illinois: Exemptions, Senior Freeze, and How to Lower Property Taxes Section 1: Senior Citizen Property Tax Exemption in Illinois The Senior Citizen Homestead Exemption lowers the taxable value of your primary residence. Who qualifies? You must: Be 65 years or older Own the property Live in the home as your primary residence Be responsible for paying property taxes How much is the senior exemption in Cook County? In Cook County: The exemption reduces the Equalized Assessed Value by $8,000 This lowers your total property tax bill This exemption is sometimes called: Senior exemption from property tax Senior citizen homeowners exemption Illinois real estate tax senior exemption   Section 2: Senior Freeze Exemption in Illinois The Senior Freeze Exemption protects qualified seniors from increases in property taxes caused by rising home values. It freezes your home’s assessed value at a base year level. Who is eligible for the senior property tax freeze? You must: Be 65 or older Receive the Senior Citizen Homestead Exemption Meet the annual household income limit Use the home as your primary residence What does the senior freeze do? Freezes assessed value Helps control tax increases Does not freeze tax rates This program is commonly searched as: Senior tax freeze in Illinois Cook County senior freeze Property tax freeze for seniors in Illinois IL senior tax freeze If you need help completing the senior freeze exemption application, Cook County Tax Appeals can assist.   Section 3: Illinois Homestead Exemption and Owner-Occupied Exemption The Homestead Exemption in Illinois is available to most homeowners. It is also called: Owner-occupied exemption Homeowner tax exemption in Illinois IL homestead exemption Who qualifies for a homestead exemption in Illinois? You must: Own the property Live in it as your primary residence How much is the homeowners' exemption in Cook County? Reduces Equalized Assessed Value by up to $10,000 This is separate from the senior exemption. Seniors may qualify for both.   Section 4: How to Apply for Senior Property Tax Exemption in Cook County Many homeowners ask: Where to file for a senior property tax exemption? How to apply for a senior property tax exemption online? When can I apply for a senior exemption in Cook County? How to apply: File with the Cook County Assessor Submit proof of age Confirm owner occupancy Apply before the township deadline Applications can often be completed online. To avoid mistakes or delays, Cook County Tax Appeals can prepare and file your exemption.   Section 5: Do Seniors Stop Paying Property Taxes? There is no age at which property taxes automatically stop. However, seniors can reduce taxes through: Senior Citizen Homestead Exemption Senior Freeze Exemption Disabled exemptions Property tax appeals If your property is overassessed, filing an appeal may significantly lower your bill.   Section 6: How to Lower Property Taxes in Illinois If you are asking: How can I lower my property taxes? How to get your property taxes lowered? How to reduce property taxes in Illinois? Here are your main options: 1. Apply for all eligible exemptions 2. File a property tax appeal 3. Check for Illinois property tax credit 4. Search for Cook County property tax refund You may qualify for: Illinois property tax credit Illinois real estate tax credit Cook County property tax refund Chicago property tax refund Refund searches can be done through the Cook County Treasurer's website. If you believe your home is overassessed, Cook County Tax Appeals can review your case and file a professional appeal.   Section 7: Property Tax Assistance Programs in Illinois Some seniors may qualify for additional support, such as: Property tax assistance program in Illinois State relief programs Payment installment options These programs are separate from exemptions.   Why Work With Cook County Tax Appeals ? Property tax laws in Illinois can be confusing. Cook County Tax Appeals helps: Review your assessment Identify missed exemptions File Cook County property tax appeals Monitor deadlines Maximize savings legally If you are a senior homeowner in Cook County, professional guidance can prevent costly mistakes.   Final Summary Senior property tax relief in Illinois includes: Senior exemption in Cook County Senior freeze Illinois Homestead Illinois Property tax exemptions in Illinois Property tax appeals Seniors do pay property taxes, but there are strong programs that reduce the burden. If you want help lowering your property taxes or applying for exemptions, visit Cook County Tax Appeals for expert assistance.
CCTA TeamRead More
Cook_County_Property_Tax_Bills_Are_Here
FEB 27, 2026

Where Is My Cook County Second Installment Bill

Where Is My Cook County Second-Installment Property Tax Bill? If you are asking, “Where is my second installment Cook County property tax bill?” you are not alone. Many homeowners and commercial property owners have the same question each year. In Cook County, property tax bills are issued in two installments. The second installment bill is typically the larger of the two and often arrives later than expected. Understanding how it works and where to find it can help you avoid late payments and penalties. How the Cook County Property Tax Bill Is Structured Cook County property taxes are billed in two installments: First Installment The first installment is usually due in early March. It is generally 55 percent of the prior year’s total tax bill. This amount is an estimate and does not reflect current year changes in assessment or exemptions. Second Installment The second installment reflects the current tax year’s reassessed value, exemptions, and the final tax rates set by local taxing districts. This bill is typically due in late summer or fall, depending on the year. Because it includes updated assessments and tax rates, the second installment often changes from the prior year. Why Your Second Installment Bill May Not Have Arrived There are several common reasons you may not have received your second installment Cook County property tax bill. 1. Mailing Delays or Address Issues The Cook County Treasurer mails tax bills to the property address unless a different mailing address is on file. If you recently moved or changed your mailing address, the bill may have been sent elsewhere. You can update your mailing address through the Cook County Treasurer’s Office. 2. Mortgage Escrow If you pay property taxes through your mortgage escrow account, your lender typically receives the bill directly. In this case, you may not receive a paper copy at all. Even if your lender pays the bill, it is wise to review the second installment for accuracy. 3. Delayed Billing Calendar In some years, the second installment bill is delayed due to reassessment schedules, tax rate calculations, or administrative processing. Cook County has experienced delays in prior tax years. If the due date has not yet been announced, the bill may simply not have been issued. How to Find Your Cook County Second-Installment Property Tax Bill Online If you have not received your bill, the fastest way to locate it is online. You can also access your latest bill by entering your property address at: Cook County Tax Appeals The Cook County Treasurer’s Office provides an online property tax portal where you can: Search by Property Index Number, commonly called PIN Search by property address View and download your current tax bill Confirm payment status Print a copy for your records You can also verify installment due dates and any penalties for late payment. Make sure you enter your PIN exactly as it appears on prior tax bills or assessment notices. Both residential and commercial property owners use the same lookup system. What If the Bill Shows a Large Increase? Many property owners first notice changes when they review the second installment bill. If the amount is significantly higher than expected, it may be due to: A reassessment by the Cook County Assessor A change in exemptions An increase in local tax rates set by taxing districts Improvements or changes to the property The second installment reflects the final tax calculation for that year. If you believe your assessed value is too high, the appropriate time to act is during the appeal window set by the Assessor or, later, the Cook County Board of Review. Understanding the Assessment and Appeal Timeline To better understand your second installment bill, it helps to know how the process works. Assessment by the Cook County Assessor Each township in Cook County is reassessed on a rotating schedule. The Assessor determines your property’s assessed value and sends a reassessment notice. Property owners have a limited time to file an appeal during the open window for their township. Review by the Board of Review If you miss the Assessor’s appeal window or disagree with the result, you may file an appeal with the Cook County Board of Review during its filing period. Both residential and commercial property owners have the right to appeal. Any successful appeal typically affects the tax bill issued after the reassessment year. Because of this timing, changes may not appear until the second installment. What Happens If You Miss the Due Date? If you do not receive your bill, you are still responsible for paying it on time. Failure to receive a paper bill does not remove the obligation to pay. Late payments are subject to interest, which accrues monthly as set by Illinois law. If you believe you missed a payment, confirm the status through the Treasurer’s website as soon as possible. You may also contact the Treasurer’s Office directly for clarification. Tips for Residential and Commercial Property Owners Whether you own a single-family home, a multi-unit building, retail space, or an industrial property, consider these steps: Check your second installment bill online each year Confirm your mailing address is current Review your exemptions for accuracy Compare your assessed value to similar properties Track your township’s appeal deadlines Commercial property owners, in particular, should review assessment methodology carefully. Commercial assessments often rely on income and expense data, which can significantly impact value. Staying informed reduces the risk of overpaying and helps you act within the proper filing window. Where to Get Reliable Local Information Cook County property tax procedures can be complex. The Assessor sets values. The Board of Review hears appeals. The Treasurer issues and collects bills. Each office has a distinct role. If you are unsure why your second installment bill looks the way it does, reviewing official records and deadlines is essential. Reliable local resources can help explain the process clearly and outline your options. Cook County Tax Appeals provides up-to-date information on Cook County assessment notices, appeal windows, and filing procedures for both residential and commercial properties. The goal is to help property owners understand their rights and responsibilities under current Cook County rules. Final Thoughts If you are wondering, “Where is my second installment Cook County property tax bill?” Start by checking the Cook County Treasurer’s online portal. Confirm your mailing address, review your PIN, and verify whether your mortgage lender receives the bill. Then take time to review the assessed value and exemptions listed. The second installment bill reflects the final calculation for the tax year, and it often prompts important questions about valuation and fairness. Understanding the system is the first step toward making informed decisions about your property taxes. Need Help Understanding Your Tax Bill? If your second installment bill raises concerns about your assessment or exemptions, visit Cook County Tax Appeals to learn more about the Cook County appeal process and available filing options.
CCTA TeamRead More