22 December 2025
BC PST for Contractors and Trades in Vancouver: When to Charge vs Pay
Understanding when to charge or pay Provincial Sales Tax (PST) is crucial for contractors and tradespeople in British Columbia. Misapplying PST rules can lead to costly audits, penalties, and client disputes. This guide clarifies the key distinctions between contractors and vendors, when PST applies to materials versus services, and how to structure your invoices to pass CRA audits.
Why PST Rules Matter for Contractors
BC’s PST rules differ significantly from GST. The key distinction is between tangible personal property (materials, equipment) and real property (installations that become part of a building). Understanding this difference determines whether you charge PST to clients or pay it on purchases—and getting it wrong can cost thousands in penalties.
Contractor vs Vendor: Key Distinctions
In BC, how PST applies depends on whether you’re acting as a contractor (installing/fabricating) or a vendor (selling goods). Most tradespeople operate as contractors, which changes PST obligations:
Contractor
Definition: Installs, fabricates, or modifies real property (buildings, structures)
- Pays PST on materials purchased
- Does NOT charge PST on installation labor
- May charge PST on materials if itemized separately
- Examples: Electricians, plumbers, carpenters, HVAC installers
Vendor
Definition: Sells tangible personal property (goods) without installation
- Charges PST on all sales
- Pays PST on inventory purchases (if not registered)
- Collects and remits PST to government
- Examples: Building supply stores, equipment retailers
When to Pay PST on Materials
As a contractor, you typically pay PST when purchasing materials from suppliers. This is because you’re buying tangible personal property that you’ll use in your work:
Materials for Installation
When buying lumber, wiring, pipes, fixtures, or other materials that will be installed into real property, you pay PST at the point of purchase.
Tools and Equipment
Tools and equipment used in your business operations (not installed) are subject to PST. You pay PST when purchasing.
Materials You Resell
If you purchase materials to resell (not install), you may need to register as a PST vendor and charge PST to your customers.
When to Charge PST to Clients
Contractors charge PST to clients in specific situations. The key is understanding real property (installations) versus tangible personal property (goods):
Real Property Installation Rules
Invoice Examples That Pass Audits
Proper invoice structure is critical for PST compliance. Here are examples of invoices that will pass CRA audits:
Example 1: Lump Sum Installation (No PST Charged)
$5,000.00
$250.00
$5,250.00
Example 2: Itemized Materials (PST Charged)
$800.00
$400.00
$1,200.00
$84.00
$1,500.00
$135.00
$2,919.00
Example 3: Sale of Goods (PST Required)
$1,200.00
$84.00
$60.00
$1,344.00
Common PST Exemptions for Contractors
Several exemptions apply to contractor purchases, which can reduce your PST costs:
Production Machinery
Machinery and equipment used primarily in manufacturing or processing are PST-exempt.
Commercial Vehicles
Vehicles used primarily for commercial purposes (trucks, vans) may be PST-exempt.
Resale Items
If you’re registered as a PST vendor, materials purchased for resale are exempt (you’ll charge PST when selling).
Government Contracts
Materials purchased for government contracts may be PST-exempt with proper documentation.
Reconciling PST with Bookkeeping
Proper bookkeeping ensures PST compliance and simplifies audits. Here’s how to track PST correctly:
PST Tracking Best Practices
PST Checklist for New Quotes
Use this checklist when preparing quotes to ensure PST compliance:
Determine if work is installation (real property) or sale of goods
If installation: Decide whether to quote lump sum (no PST) or itemize materials (charge PST)
If selling goods without installation: Plan to charge PST (may need vendor registration)
Factor PST paid on materials into your material cost calculations
Structure invoice to clearly show labor vs. materials (if itemizing)
Keep all supplier receipts showing PST paid for audit purposes
Common Audit Pitfalls to Avoid
Charging PST on Labor
Never charge PST on installation labor. This is a common error that triggers audits and requires refunds to clients.
Missing PST on Itemized Materials
If you itemize materials on invoices, you must charge PST. Failing to do so can result in penalties.
Poor Documentation
Without receipts showing PST paid, auditors may assume you didn’t pay PST and assess additional tax.
Mixing Contractor and Vendor Activities
If you both install and sell goods, ensure proper PST registration and separate tracking to avoid confusion.
Book a 15-Minute PST Review
PST rules for contractors can be confusing, and mistakes are costly. J. Wang Chartered Professional Accountant offers quick PST reviews to help Vancouver contractors ensure compliance and avoid audit issues. We’ll review your invoice structure, bookkeeping practices, and help you understand when to charge or pay PST.
PST Compliance Review
Invoice Structure Analysis
Bookkeeping Setup
CRA Audit Support
Schedule Your PST Review
Let’s discuss your PST compliance and ensure your invoices are structured correctly
Need help understanding GST and HST as well? Schedule an appointment with our Vancouver accounting team today.
.pst-contractors-guide {
max-width: 1000px;
margin: 0 auto;
padding: 20px;
font-family: -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto, ‘Helvetica Neue’, Arial, sans-serif;
line-height: 1.7;
color: #1e293b;
font-size: 16px;
}
/* SVG Icon Styles */
.pst-svg-icon {
color: currentColor;
stroke: currentColor;
transition: all 0.3s ease;
}
/* Icon Animations */
@keyframes pst-pulse {
0%, 100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.85;
transform: scale(1.05);
}
}
@keyframes pst-float {
0%, 100% {
transform: translateY(0px);
}
50% {
transform: translateY(-8px);
}
}
@keyframes pst-glow {
0%, 100% {
filter: drop-shadow(0 0 5px rgba(59, 130, 246, 0.5));
}
50% {
filter: drop-shadow(0 0 15px rgba(59, 130, 246, 0.8));
}
}
@keyframes pst-shake {
0%, 100% { transform: translateX(0); }
10%, 30%, 50%, 70%, 90% { transform: translateX(-0.3px); }
20%, 40%, 60%, 80% { transform: translateX(0.3px); }
}
@keyframes pst-rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.pst-icon-pulse {
animation: pst-pulse 2s ease-in-out infinite;
}
.pst-icon-float {
animation: pst-float 3s ease-in-out infinite;
}
.pst-icon-glow {
animation: pst-glow 3s ease-in-out infinite;
}
.pst-icon-shake {
animation: pst-shake 3s ease-in-out;
}
.pst-icon-spin-slow {
transition: transform 0.6s ease;
}
.pst-icon-spin-slow:hover {
transform: rotate(360deg);
}
.pst-contractors-guide h2 {
font-size: 2em;
color: #1e40af;
margin-top: 50px;
margin-bottom: 20px;
font-weight: 700;
border-bottom: 3px solid #3b82f6;
padding-bottom: 12px;
}
.pst-contractors-guide h2:first-of-type {
margin-top: 0;
}
.pst-contractors-guide h3 {
font-size: 1.5em;
color: #334155;
margin-top: 35px;
margin-bottom: 15px;
font-weight: 600;
}
.pst-contractors-guide h4 {
font-size: 1.2em;
color: #475569;
margin-top: 20px;
margin-bottom: 12px;
font-weight: 600;
}
.pst-contractors-guide p {
margin-bottom: 18px;
line-height: 1.8;
}
.pst-contractors-guide .lead-text {
font-size: 1.15em;
color: #475569;
line-height: 1.8;
margin-bottom: 30px;
border-left: 4px solid #3b82f6;
background: #f8fafc;
padding: 20px;
border-radius: 4px;
}
/* Intro Box */
.pst-intro-box {
background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
border: 2px solid #3b82f6;
border-radius: 8px;
padding: 25px;
margin: 30px 0;
position: relative;
padding-top: 60px;
text-align: center;
}
.pst-intro-icon {
position: absolute;
top: -30px;
left: 50%;
transform: translateX(-50%);
background: #3b82f6;
color: white;
border-radius: 50%;
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
}
.pst-intro-box h3 {
margin-top: 0;
color: #1e40af;
}
/* Comparison Grid */
.pst-comparison-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 25px;
margin: 30px 0;
}
.pst-comparison-card {
background: white;
border: 2px solid #e2e8f0;
border-radius: 12px;
padding: 25px;
transition: all 0.3s ease;
position: relative;
padding-top: 70px;
}
.pst-comparison-card:hover {
border-color: #3b82f6;
box-shadow: 0 8px 20px rgba(59, 130, 246, 0.15);
transform: translateY(-5px);
}
.comparison-icon {
position: absolute;
top: -30px;
left: 50%;
transform: translateX(-50%);
background: linear-gradient(135deg, #3b82f6 0%, #1e40af 100%);
color: white;
border-radius: 50%;
width: 70px;
height: 70px;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
}
.comparison-icon svg {
color: white;
}
.pst-comparison-card h4 {
margin-top: 10px;
margin-bottom: 12px;
color: #1e40af;
}
.pst-comparison-card ul {
margin: 15px 0;
padding-left: 20px;
color: #64748b;
}
.pst-comparison-card li {
margin-bottom: 8px;
line-height: 1.6;
}
/* Warning Box */
.pst-warning-box {
background: #fef2f2;
border-left: 5px solid #ef4444;
padding: 20px;
margin: 30px 0;
border-radius: 8px;
display: flex;
gap: 15px;
align-items: flex-start;
}
.pst-warning-box svg {
color: #ef4444;
flex-shrink: 0;
margin-top: 2px;
}
.pst-warning-box strong {
color: #991b1b;
}
/* Scenarios Grid */
.pst-scenarios-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
margin: 30px 0;
}
.pst-scenario-card {
background: white;
border: 2px solid #cbd5e1;
border-left: 5px solid #22c55e;
border-radius: 8px;
padding: 25px;
transition: all 0.3s ease;
position: relative;
padding-top: 70px;
}
.pst-scenario-card:hover {
border-color: #22c55e;
box-shadow: 0 4px 12px rgba(34, 197, 94, 0.15);
transform: translateY(-3px);
}
.scenario-icon {
position: absolute;
top: -30px;
left: 50%;
transform: translateX(-50%);
background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
color: white;
border-radius: 50%;
width: 70px;
height: 70px;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(34, 197, 94, 0.4);
}
.scenario-icon svg {
color: white;
}
.pst-scenario-card h4 {
margin-top: 10px;
margin-bottom: 12px;
color: #166534;
}
.scenario-example {
background: #f0fdf4;
padding: 12px;
border-radius: 6px;
margin-top: 15px;
font-size: 0.9em;
line-height: 1.6;
}
.scenario-example strong {
color: #166534;
}
/* Rules Box */
.pst-rules-box {
background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
border: 2px solid #22c55e;
border-radius: 12px;
padding: 30px;
margin: 30px 0;
}
.pst-rules-box h3 {
margin-top: 0;
color: #166534;
text-align: center;
margin-bottom: 25px;
}
.rules-content {
display: flex;
flex-direction: column;
gap: 15px;
}
.rule-item {
display: flex;
align-items: flex-start;
gap: 15px;
background: white;
padding: 20px;
border-radius: 8px;
transition: all 0.3s ease;
}
.rule-item:hover {
transform: translateX(5px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.rule-item svg {
color: #22c55e;
flex-shrink: 0;
margin-top: 2px;
}
.rule-item strong {
color: #166534;
}
/* Invoice Examples */
.pst-invoice-examples {
display: flex;
flex-direction: column;
gap: 25px;
margin: 30px 0;
}
.invoice-example h4 {
color: #1e40af;
margin-bottom: 15px;
}
.invoice-box {
background: white;
border: 2px solid #e2e8f0;
border-radius: 8px;
padding: 25px;
font-family: ‘Courier New’, monospace;
}
.invoice-line {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px solid #f1f5f9;
}
.invoice-line.invoice-sub {
padding-left: 20px;
font-size: 0.95em;
color: #64748b;
}
.invoice-line.invoice-total {
border-top: 2px solid #3b82f6;
border-bottom: none;
margin-top: 10px;
padding-top: 15px;
font-weight: bold;
font-size: 1.1em;
color: #1e40af;
}
.invoice-note {
margin-top: 15px;
padding: 12px;
background: #f0fdf4;
border-left: 4px solid #22c55e;
border-radius: 4px;
font-size: 0.9em;
color: #166534;
}
/* Exemptions Grid */
.pst-exemptions-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin: 30px 0;
}
.pst-exemption-card {
background: white;
border: 2px solid #cbd5e1;
border-left: 5px solid #3b82f6;
border-radius: 8px;
padding: 20px;
text-align: center;
transition: all 0.3s ease;
}
.pst-exemption-card:hover {
border-color: #3b82f6;
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);
transform: translateY(-3px);
}
.exemption-icon {
margin-bottom: 12px;
}
.exemption-icon svg {
color: #3b82f6;
}
.pst-exemption-card h4 {
color: #1e40af;
margin-top: 0;
margin-bottom: 10px;
}
.pst-exemption-card p {
margin-bottom: 0;
color: #64748b;
font-size: 0.95em;
}
/* Bookkeeping Box */
.pst-bookkeeping-box {
background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
border: 2px solid #3b82f6;
border-radius: 12px;
padding: 30px;
margin: 30px 0;
}
.pst-bookkeeping-box h3 {
margin-top: 0;
color: #1e40af;
text-align: center;
margin-bottom: 25px;
}
.bookkeeping-items {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 15px;
}
.bookkeeping-item {
display: flex;
align-items: flex-start;
gap: 12px;
background: white;
padding: 15px;
border-radius: 8px;
transition: all 0.3s ease;
}
.bookkeeping-item:hover {
transform: translateX(5px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.bookkeeping-item svg {
color: #3b82f6;
flex-shrink: 0;
margin-top: 2px;
}
.bookkeeping-item strong {
color: #1e40af;
}
/* Info Box */
.pst-info-box {
background: #eff6ff;
border-left: 5px solid #3b82f6;
padding: 20px;
margin: 30px 0;
border-radius: 8px;
display: flex;
gap: 15px;
align-items: flex-start;
}
.pst-info-box svg {
color: #3b82f6;
flex-shrink: 0;
margin-top: 2px;
}
.pst-info-box strong {
color: #1e40af;
}
/* Checklist Box */
.pst-checklist-box {
background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
border: 2px solid #22c55e;
border-radius: 12px;
padding: 30px;
margin: 30px 0;
}
.checklist-items {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 15px;
}
.checklist-item {
display: flex;
align-items: flex-start;
gap: 12px;
background: white;
padding: 15px;
border-radius: 8px;
transition: all 0.3s ease;
}
.checklist-item:hover {
transform: translateX(5px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.checklist-item svg {
color: #22c55e;
flex-shrink: 0;
margin-top: 2px;
}
.checklist-item span {
color: #1e293b;
line-height: 1.6;
}
/* Pitfalls Grid */
.pst-pitfalls-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
margin: 30px 0;
}
.pst-pitfall-card {
background: #fef2f2;
border: 2px solid #fecaca;
border-left: 5px solid #ef4444;
border-radius: 8px;
padding: 20px;
text-align: center;
transition: all 0.3s ease;
}
.pst-pitfall-card:hover {
border-color: #ef4444;
box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);
transform: translateY(-3px);
}
.pst-pitfall-card svg {
color: #ef4444;
margin-bottom: 12px;
}
.pst-pitfall-card h4 {
color: #991b1b;
margin-top: 0;
margin-bottom: 10px;
}
.pst-pitfall-card p {
margin-bottom: 0;
color: #7f1d1d;
font-size: 0.95em;
}
/* CTA Box */
.pst-contractors-guide .cta-box {
background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%);
color: white;
padding: 40px;
border-radius: 12px;
margin-top: 50px;
box-shadow: 0 10px 25px rgba(30, 64, 175, 0.3);
position: relative;
overflow: hidden;
}
.pst-contractors-guide .cta-box::before {
content: ”;
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
animation: pst-rotate 20s linear infinite;
pointer-events: none;
}
.pst-cta-icon-container {
text-align: center;
margin-bottom: 30px;
}
.pst-cta-icon-container .pst-svg-icon {
color: white;
}
.pst-contractors-guide .cta-box h3 {
color: white;
margin-top: 0;
font-size: 1.8em;
text-align: center;
}
.pst-contractors-guide .cta-box h4 {
color: white;
}
.pst-contractors-guide .cta-box p {
color: rgba(255, 255, 255, 0.95);
}
.pst-contractors-guide .cta-box strong {
color: white;
}
/* Services Grid */
.pst-services-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 15px;
margin: 25px 0;
}
.pst-service-item {
display: flex;
align-items: center;
gap: 12px;
background: rgba(255, 255, 255, 0.1);
padding: 15px;
border-radius: 8px;
transition: all 0.3s ease;
}
.pst-service-item:hover {
background: rgba(255, 255, 255, 0.2);
transform: translateX(5px);
}
.pst-service-item svg {
flex-shrink: 0;
color: #22c55e;
}
.pst-service-item span {
color: rgba(255, 255, 255, 0.95);
font-size: 0.95em;
}
/* Contact Form Container */
.pst-contact-form-container {
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 30px;
margin-top: 30px;
backdrop-filter: blur(10px);
}
.pst-form-wrapper {
background: white;
padding: 25px;
border-radius: 8px;
margin-bottom: 30px;
}
/* Gravity Forms Field Visibility Fixes */
.pst-form-wrapper .gform_wrapper {
max-width: 100% !important;
}
.pst-form-wrapper .gfield {
margin-bottom: 20px !important;
}
.pst-form-wrapper .gfield_label {
display: block !important;
font-weight: 600 !important;
color: #1e293b !important;
margin-bottom: 8px !important;
font-size: 0.95em !important;
}
.pst-form-wrapper .gfield_required {
color: #ef4444 !important;
margin-left: 4px !important;
}
.pst-form-wrapper .ginput_container {
margin-top: 8px !important;
}
.pst-form-wrapper input[type=”text”],
.pst-form-wrapper input[type=”email”],
.pst-form-wrapper input[type=”tel”],
.pst-form-wrapper input[type=”number”],
.pst-form-wrapper input[type=”url”],
.pst-form-wrapper textarea,
.pst-form-wrapper select {
width: 100% !important;
padding: 12px !important;
border: 2px solid #e2e8f0 !important;
border-radius: 6px !important;
font-size: 16px !important;
transition: border-color 0.3s ease !important;
background: white !important;
box-sizing: border-box !important;
}
.pst-form-wrapper input:focus,
.pst-form-wrapper textarea:focus,
.pst-form-wrapper select:focus {
outline: none !important;
border-color: #3b82f6 !important;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
.pst-form-wrapper .gform_button,
.pst-form-wrapper input[type=”submit”] {
width: 100% !important;
padding: 15px !important;
background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%) !important;
color: white !important;
border: none !important;
border-radius: 8px !important;
font-size: 1.1em !important;
font-weight: bold !important;
cursor: pointer !important;
transition: all 0.3s ease !important;
margin-top: 10px !important;
}
.pst-form-wrapper .gform_button:hover,
.pst-form-wrapper input[type=”submit”]:hover {
transform: translateY(-2px) !important;
box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4) !important;
}
.pst-form-wrapper .validation_error {
background: #fef2f2 !important;
border: 2px solid #ef4444 !important;
color: #991b1b !important;
padding: 15px !important;
border-radius: 6px !important;
margin-bottom: 20px !important;
}
.pst-form-wrapper .gfield_error {
background: #fef2f2 !important;
border: 2px solid #ef4444 !important;
border-radius: 6px !important;
padding: 15px !important;
}
.pst-form-wrapper .validation_message {
color: #ef4444 !important;
font-size: 0.9em !important;
margin-top: 5px !important;
display: block !important;
}
.pst-form-wrapper .gform_confirmation_message {
background: #f0fdf4 !important;
border: 2px solid #22c55e !important;
color: #166534 !important;
padding: 20px !important;
border-radius: 8px !important;
text-align: center !important;
font-size: 1.1em !important;
}
/* Divider */
.pst-divider {
text-align: center;
position: relative;
margin: 30px 0;
}
.pst-divider span {
background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%);
padding: 0 20px;
color: white;
font-weight: bold;
font-size: 0.9em;
letter-spacing: 1px;
position: relative;
z-index: 1;
}
.pst-divider::before {
content: ”;
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 2px;
background: rgba(255, 255, 255, 0.3);
}
/* Contact Grid */
.pst-contact-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
margin-top: 25px;
}
.pst-contact-item {
display: flex;
align-items: center;
gap: 12px;
background: rgba(255, 255, 255, 0.1);
padding: 20px;
border-radius: 8px;
text-decoration: none;
color: white;
transition: all 0.3s ease;
border: 2px solid rgba(255, 255, 255, 0.2);
}
.pst-contact-item:hover {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.4);
transform: translateY(-3px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}
.pst-contact-item svg {
flex-shrink: 0;
color: #fbbf24;
}
.pst-contact-item div {
display: flex;
flex-direction: column;
gap: 4px;
}
.pst-contact-item strong {
font-size: 0.85em;
text-transform: uppercase;
letter-spacing: 0.5px;
opacity: 0.9;
}
.pst-contact-item span {
font-size: 1.05em;
font-weight: 500;
}
.pst-action {
font-size: 1.1em;
font-weight: bold;
text-align: center;
margin-top: 30px;
padding: 20px;
background: rgba(255, 255, 255, 0.1);
border-radius: 8px;
border: 2px solid rgba(255, 255, 255, 0.2);
}
/* Responsive Design */
@media (max-width: 768px) {
.pst-contractors-guide {
padding: 15px;
}
.pst-contractors-guide h2 {
font-size: 1.6em;
}
.pst-contractors-guide h3 {
font-size: 1.3em;
}
.pst-comparison-grid,
.pst-scenarios-grid,
.pst-exemptions-grid,
.pst-pitfalls-grid,
.pst-services-grid,
.pst-contact-grid,
.bookkeeping-items,
.checklist-items {
grid-template-columns: 1fr;
}
.pst-comparison-card,
.pst-scenario-card {
padding-top: 70px;
}
.pst-form-wrapper {
padding: 15px;
}
}
// Scoped JavaScript for PST Contractors Guide article
(function() {
‘use strict’;
// Animate elements when scrolled into view
if (‘IntersectionObserver’ in window) {
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.style.opacity = ‘0’;
entry.target.style.transform = ‘translateY(20px)’;
entry.target.style.transition = ‘opacity 0.6s ease, transform 0.6s ease’;
setTimeout(function() {
entry.target.style.opacity = ‘1’;
entry.target.style.transform = ‘translateY(0)’;
}, 100);
observer.unobserve(entry.target);
}
});
}, {
threshold: 0.1
});
// Observe cards and boxes
document.querySelectorAll(‘.pst-comparison-card, .pst-scenario-card, .pst-exemption-card, .pst-pitfall-card, .pst-bookkeeping-box, .pst-checklist-box, .invoice-example’).forEach(function(el) {
observer.observe(el);
});
}
// Add click handlers for checklist items
document.querySelectorAll(‘.checklist-item’).forEach(function(item) {
item.addEventListener(‘click’, function() {
var svg = this.querySelector(‘svg’);
if (svg) {
svg.style.transform = ‘scale(1.2)’;
setTimeout(function() {
svg.style.transform = ”;
}, 200);
}
});
});
})();

