PageSourceSearch

https://lp-designs.vercel.app/_next/static/chunks/0yszrq227cdo_.js?dpl=dpl_FpAkegvedxdwtq1oadK1j9VLEvwU

js lp-designs.vercel.app collected 2026-10-03 07:17:19 UTC 105,710 bytes, 1,092 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,8201,e=>{"use strict";var a=e.i(43476),t=e.i(71645),i=e.i(26869),o=e.i(65172),s=e.i(67687),n=e.i(92534);let l=s.default,r="/clients/odysseylegal-com-au/assets",d=`${r}/brand`,c=`${r}/defamation`,h="https://www.odysseylegal.com.au",p="(07) 5370 8759",m="tel:0753708759",u=`${h}/contact-us/`,g=`${h}/news-articles/`,x="[email protected]",f="#quick-assessment",b="https://www.legislation.qld.gov.au/view/html/inforce/current/act-2005-055",y=`${h}/how-to-respond-online-defamation-queensland/`,w=[{label:"Home",href:`${h}/`},{label:"About Us",href:`${h}/about-us/`},{label:"Legal Services",href:`${h}/our-legal-services/`},{label:"Blog",href:g},{label:"Contact Us",href:u}],v=[{label:"About Us",href:`${h}/about-us/`},{label:"Legal Services",href:`${h}/our-legal-services/`},{label:"Blog",href:g},{label:"Business Risk Assessment",href:`${h}/our-legal-services/business-law-services/`},{label:"Case Evaluation",href:u},{label:"DIY Templates",href:`${h}/diy-templates/`},{label:"Contact",href:u}],j=[{label:"Building & Construction Disputes",href:`${h}/our-legal-services/building-construction/`},{label:"Defamation",href:`${h}/our-legal-services/defamation/`},{label:"Debt Recovery",href:`${h}/our-legal-services/debt-recovery/`},{label:"Business Law Services",href:`${h}/our-legal-services/business-law-services/`},{label:"Letter of Demand",href:`${h}/letter-of-demand/`},{label:"Building Contract Review",href:`${h}/residential-building-contract-review/`},{label:"Statutory Demands",href:`${h}/statutory-demands/`},{label:"Commercial Litigation",href:`${h}/our-legal-services/commerical-litigation/`},{label:"Bankruptcy Lawyers",href:`${h}/our-legal-services/bankruptcy-insolvency/`},{label:"Insolvency Lawyers",href:`${h}/our-legal-services/bankruptcy-insolvency/`},{label:"Civil Litigation",href:`${h}/our-legal-services/civil-personal-litigation/`},{label:"Peace & Good Behaviour Disputes",href:`${h}/our-legal-services/peace-good-behaviour/`},{label:"Tax Debt Disputes",href:`${h}/our-legal-services/tax-debt-disputes/`}];function $(e){let a=(0,n.resolveScheme)(l,e);return{backgroundColor:a["Background/Background"],textColor:a["Text/Default"]}}let k=e=>Object.entries(e).map(([e,a])=>`${e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}: ${a};`).join(" ");function S({children:e,delay:i=0,className:o}){let s=(0,t.useRef)(null),[n,l]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{let e=s.current;if(!e)return;let a=new IntersectionObserver(e=>{e[0].isIntersecting&&(l(!0),a.disconnect())},{rootMargin:"-60px 0px"});return a.observe(e),()=>a.disconnect()},[]),(0,a.jsx)("div",{ref:s,className:`ol-reveal${n?" is-shown":""}${o?` ${o}`:""}`,style:{transitionDelay:`${i}ms`},children:e})}let N={fill:"none",stroke:"currentColor",strokeWidth:1.9,strokeLinecap:"round",strokeLinejoin:"round"};function T(){return(0,a.jsx)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M6.6 10.8a15.1 15.1 0 006.6 6.6l2.2-2.2a1 1 0 011-.24 11.4 11.4 0 003.6.58 1 1 0 011 1V20a1 1 0 01-1 1A17 17 0 013 4a1 1 0 011-1h3.5a1 1 0 011 1 11.4 11.4 0 00.58 3.6 1 1 0 01-.25 1l-2.23 2.2z"})})}function B(){return(0,a.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M5 12h14"}),(0,a.jsx)("path",{d:"M13 6l6 6-6 6"})]})}function L(){return(0,a.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:(0,a.jsx)("path",{d:"M6 9l6 6 6-6"})})}function M(){return(0,a.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),(0,a.jsx)("path",{d:"M3 7 L12 13 L21 7"})]})}function D(){return(0,a.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,a.jsx)("path",{d:"M12 7 V12 L15.5 14"})]})}function A(){return(0,a.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M12 21c4-4.4 7-8 7-11.5A7 7 0 0 0 5 9.5C5 13 8 16.6 12 21z"}),(0,a.jsx)("circle",{cx:"12",cy:"9.5",r:"2.5"})]})}function q(){return(0,a.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",...N,strokeWidth:2.4,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M6 6l12 12"}),(0,a.jsx)("path",{d:"M18 6L6 18"})]})}function H(){return(0,a.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",...N,strokeWidth:2.4,"aria-hidden":"true",children:(0,a.jsx)("path",{d:"M5 12.5l4.2 4.2L19 7"})})}let z="Defamation Lawyers Brisbane",C="A damaging Google review appears overnight. A former employee posts accusations on LinkedIn. A competitor spreads false 
1claims to your clients. Defamation moves fast online, and the response needs to move faster.",R="Odyssey Legal helps individuals and businesses across Queensland respond to defamatory statements with the right first step, whether that's a cease and desist letter, a concerns notice, or defending a claim brought against you.",O=[{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"30",height:"30",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M4 9.5h3.5L13 5.5v13L7.5 14.5H4z"}),(0,a.jsx)("path",{d:"M16.6 9.2a4 4 0 010 5.6"}),(0,a.jsx)("path",{d:"M19.3 6.6a7.6 7.6 0 010 10.8"})]})},{}),name:"Publication to a third party",text:"spoken, written, posted, or shared with anyone beyond the person defamed"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"30",height:"30",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"12",cy:"9",r:"3.4"}),(0,a.jsx)("path",{d:"M5.6 19.5a6.6 6.6 0 0112.8 0"}),(0,a.jsx)("path",{d:"M3 6.5V4.2A1.2 1.2 0 014.2 3h2.3"}),(0,a.jsx)("path",{d:"M21 6.5V4.2A1.2 1.2 0 0019.8 3h-2.3"})]})},{}),name:"Identification",text:"the statement clearly or indirectly identifies them, even without naming them outright"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"30",height:"30",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M12 3l7.5 3v5.5c0 4.6-3.2 8.2-7.5 9.5-4.3-1.3-7.5-4.9-7.5-9.5V6z"}),(0,a.jsx)("path",{d:"M12 3v18"}),(0,a.jsx)("path",{d:"M9 9.5l3 2.5-3 2.5"})]})},{}),name:"Harm to reputation",text:"the statement causes or is likely to cause serious damage, not just embarrassment"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"30",height:"30",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M4 5.5h16"}),(0,a.jsx)("path",{d:"M6.5 5.5l-3 6a3.4 3.4 0 006.4 0z"}),(0,a.jsx)("path",{d:"M17.5 5.5l-3 6a3.4 3.4 0 006.4 0z"}),(0,a.jsx)("path",{d:"M12 5.5V20"}),(0,a.jsx)("path",{d:"M8.5 20h7"})]})},{}),name:"Falsity",text:"truth is a complete defence, so the statement has to actually be false"}],I=[{ok:!0,who:"A business with fewer than 10 employees, or a not-for-profit",verdict:"Can sue for defamation directly"},{ok:!1,who:"Medium to large businesses",verdict:"Generally can't",trail:"though they may have a claim for tortious interference instead"}],P=[{stage:"Concerns notice served",short:"Day 0",what:"Aggrieved person serves a written notice setting out the imputations and harm",time:"Day 0"},{stage:"Offer to make amends",short:"28 days",what:"Publisher may respond with an offer to make amends",time:"Generally 28 days"},{stage:"Proceedings available",short:"After the period",what:"If no adequate offer is made, or the offer period lapses, proceedings may commence",time:"After the response period"}],W=["Be in writing","Specify where the publication can be accessed","Set out the imputations the aggrieved person considers defamatory","Explain the harm caused or likely to be caused","If the aggrieved is a business, specify the serious financial loss claimed"],F=[{name:"Justification (truth)",means:"The imputations are substantially true"},{name:"Contextual truth",means:"Other true imputations mean the false one causes no further harm"},{name:"Absolute privilege",means:"Made in parliamentary or court proceedings"},{name:"Public documents",means:"Contained in, or a fair summary of, a public document"},{name:"Fair report",means:"A fair report of proceedings of public concern"},{name:"Public interest",means:"Concerns an issue of public interest and was reasonably believed to be so"},{name:"Qualified privilege",means:"Published to someone with a genuine interest in the information"},{name:"Honest opinion",means:"An expression of opinion on a matter of public interest, based on proper material"},{name:"Innocent dissemination",means:"Published only as a subordinate distributor without knowledge it was defamatory"}],E=[{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M9 3.5h6l4.5 4.5v6L15 18.5H9L4.5 14V8z"}),(0,a.jsx)("path",{d:"M12 8v4.2"}),(0,a.jsx)("path",{d:"M12 15.3h.01"})]})},{}),body:"Issuing a cease and desist letter to stop ongoing harm quickly"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M6 3.5h7.5L18 8v12.5H6z"}),(0,a.jsx)("path",{d:"M13.5 3.5V8H18"}),(0,a.jsx)("path",{d:"M9 12h6"}),(0,a.jsx)("path",{d:"M9 15.5h4"})]})},{}),body:"Drafting and serving a concerns notice"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M3.5 5.5h17v10.5h-11L5 20v-3.9H3.5z"}),(0,a.jsx)("path",{d:"M8 10.5h8"}),(0,a.jsx)("path",{d:"M8 13.4h5"})]})},{}),body:"Responding to a concerns notice you've received"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M3 8.5h6.5L12 11l2.5-2.5H21"}),(0,a.jsx)("path",{d:"M7 5l-4 3.5L7 12"}),(0,a.jsx)("path",{d:"M17 12l4 3.5-4 3.5"}),(0,a.jsx)("path",{d:"M21 15.5h-6.5L12 13l-2.5 2.5H3"})]})},{}),body:"Negotiating an offer to make amends"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M3.5 20.5h17"}),(0,a.jsx)("path",{d:"M12 20.5V9.5"}),(0,a.jsx)("path",{d:"M4.5 9.5h15"}),(0,a.jsx)("path",{d:"M12 3.2l8 4.1H4z"}),(0,a.jsx)("path",{d:"M7.5 9.5v11"}),(0,a.jsx)("path",{d:"M16.5 9.5v11"})]})},{}),body:"Commencing defamation proceedings"},{icon:(0,a.jsx)(function(){return(0,a.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",...N,"aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M12 3l7.5 3v5.5c0 4.6-3.2 8.2-7.5 9.5-4.3-1.3-7.5-4.9-7.5-9.5V6z"}),(0,a.jsx)("path",{d:"M9 12.2l2.2 2.2 4-4.4"})]})},{}),body:"Defending defamation proceedings brought against you"}],Q="Odyssey Legal is a Sunshine Coast based litigation firm servicing all of Queensland, including Brisbane, the Gold Coast, and Central and North Queensland. We act for individuals and small businesses on both sides of defamation disputes, with fixed-fee options and a free 15-minute initial consultation to assess your situation before anything is committed to.",G="Legal Practice Director Damon Laffin is admitted to the Supreme Court of Queensland and the High Court of Australia, and has been recognised as a finalist in the 2026 Queensland Law Society Excellence in Law Awards and the 2026 Australian Small Business Champion Awards. Defamation moves quickly online, and the advice reflects that: plain English, a clear view of your options, and no unnecessary delay.",Y=[{figure:"Fixed-fee",label:"Options available"}
1,{figure:"11+",label:"Years of Queensland experience"}],U=[{short:"About you",title:"About you",fields:[{kind:"text",label:"Name",required:!0,half:!0},{kind:"text",label:"Phone",required:!0,type:"tel",half:!0},{kind:"text",label:"Email",required:!0,type:"email"},{kind:"text",label:"Company Name (Optional)"},{kind:"select",label:"Company Size",required:!0,options:["10+ employees","Less than 10 employees"]}]},{short:"The issue",title:"What best describes the issue?",fields:[{kind:"radio",label:"What best describes the issue?",required:!0,options:["False or misleading statements about my business/services","Unfair or damaging online reviews","Social media posts/comments causing reputational harm","Threats, harassment, or ongoing communications","Other (free text)"]}]},{short:"Where",title:"Where is it happening?",fields:[{kind:"check",label:"Where is it happening?",required:!0,options:["Google review","Facebook / Instagram","Other social platform","Email / direct messages","Website / forum","In person / word of mouth","Other"]}]},{short:"The detail",title:"A little more detail",fields:[{kind:"radio",label:"Is it public (visible to others) or being shared?",required:!0,options:["Yes","No","Not sure"]},{kind:"radio",label:"Can you link it or provide proof?",options:["Yes (I can provide link/screenshot)","Not yet"]},{kind:"radio",label:"Is there any chance the statements are true or partly true?",options:["Yes","No"]}]},{short:"Outcome",title:"What outcome do you want?",fields:[{kind:"check",label:"What outcome do you want?",required:!0,options:["Remove it / stop it","Retraction / correction","Apology","Not sure"]}]}],V="A defamatory statement does not lose its sting by sitting online longer. Four questions, about a minute, and we will tell you whether a cease and desist letter, a concerns notice, or something else entirely is the right move.",K=[{id:"faq-assist",q:"How can Odyssey Legal assist with defamation disputes?",a:["Our team provides expert advice and representation on defamation matters, including drafting or responding to Concerns Notices, negotiating settlements, and commencing or defending proceedings before the Court."]},{id:"faq-online-steps",q:"What steps should I take if I'm defamed online?",a:["Document the defamatory content, avoid responding publicly, and seek legal advice promptly to explore your options surrounding a defamation claim or action."]},{id:"faq-sharing",q:"Can I be liable for sharing defamatory content?",a:["Yes, republishing or sharing defamatory material can make you liable for defamation, even if you weren't the original author."]},{id:"faq-social-media",q:"Does defamation law apply to social media posts?",a:["Absolutely. Online publications, including social media posts, blogs, and comments, are subject to the Defamations Act 2005 (Qld) and, in other states, the relevant uniform legislation will apply to social media posts."]},{id:"faq-business",q:"Can a business sue for defamation?",a:["Yes, a small business with under 10 employees or a not-for-profit organisation can sue for defamation. However, medium to large businesses with more than 10 employees cannot commence action for defamation, but they may be able to commence proceedings for tortious interference."]},{id:"faq-time-limit",q:"How long do I have to sue for defamation?",a:["Generally, within 12 months of publication. But in certain (strict) circumstances, this timeframe can be extended up to three (3) years."]},{id:"faq-damages",q:"What damages can I claim in a defamation?",a:["Depending on the severity of the publication in your defamation claim, you may be entitled to claim damages for economic loss (i.e. loss of business), non-economic loss (i.e. damages for stress, anxiety, PTSD) and aggravated damages."]},{id:"faq-defences",q:"Are there defences to defamation claims?",a:["Yes, common defences to defamation claims include truth (justification), honest opinion, absolute privilege, and qualified privilege."]},{id:"faq-serious-harm",q:"How do I prove serious harm?",a:["To prove serious harm in a defamation claim, you must demonstrate significant reputational or financial damage. This can be economic loss, including (without limitation) loss of employment, loss of clients, or a downtrend in client enquiries, which may be able to be obtained from an accountant or other expert that can demonstrate the loss.","Non-economic loss including (without limitation) damages for stress, anxiety, PTSD, or otherwise, resulting from the publication, which may be able to be obtained from a treating psychiatrist or psychologist."]},{id:"faq-prove-claim",q:"How do I prove a defamation claim?",a:["You must demonstrate that the publication was defamatory, referred to you (expressly or that it can be reasonably inferred), and was communicated to third parties. Additionally, you need to show that it caused serious harm to your reputation."]},{id:"faq-what-constitutes",q:"What constitutes defamation under Australian law?",a:["Defamation is the publishing (verbally, in writing, or in other form) by the publisher of unsubstantiated facts about an individual (aggrieved) to a third party, which damages the reputation of the aggrieved, causing them to suffer loss or damages."]},{id:"faq-concerns-notice",q:"What is the Importance of a Concerns Notice?",a:["The Concerns Notice is a prerequisite for an aggrieved party wishing to commence proceedings under the Defamation Act 2005 (Qld).","The Concerns Notice is the foundation for any defamation proceedings, and consequently, if the Concerns Notice does not meet the specific requirements under the Defamation Act 2005 (Qld) and is deficient or incorrectly served, then this could mean that any proceedings commenced by you could be struck out or dismissed and you could be liable for the publishers' legal costs.","This is why it is imperative that the Concerns Notice is drafted and served in compliance with the Defamation Act 2005 (Qld)."]},{id:"faq-process",q:"What is the Defamation process?",a:["In compliance with the Defamation Act 2005 (Qld), prior to commencing proceedings, the aggrieved party must issue a Concerns Notice to the publisher. The publisher will then generally have 28 days to make an offer to make amends. If the publisher fails to do so, or the offer to make amends is insufficient, then the aggrieved may commence defamation proceedings."]}],X=[{label:"Defamation Act 2005 (Qld)",note:"The Act itself, on the Queensland legislation register",url:b},{label:"CaseLaw search, Supreme Court Library Queensland",note:"Recent defamation cases in Queensland",url:"https://www.sclqld.org.au/caselaw?query=defamation&party=&court=&judge=&fileNumber=&citedLegislation=&citedCases=&judgmentDateFrom=&judgmentDateTo=&citation=&catchwords=&reported=&civilCriminal=&sentencingDecision=&landCourtLegislations=&matterTypes="},{label:"How to Respond to Defamation Online (Without Making It Worse)",note:"From our News and Articles",url:y}],_={type:"hero",layout:"image-bg",content:{eyebrow:"Defamation",heading:z,subheading:C,phone:p,image:`${d}/walking-phone.webp`,cta:{label:`Speak to our Experts: ${p}`,url:m},secondaryCta:{label:"Start Fast-Track Assessment",url:f}},style:$("Olive")},J={type:"features",layout:"grid-4",content:{heading:"What Is Defamation?",subheading:"Defamation occurs when a false statement about a person or business is published to someone else and causes serious harm to their reputation. Under the Defamation Act 2005 (Qld), a plaintiff needs to establish four things:",items:O.map(e=>({title:e.name,description:e.text})),note:"Since 2021 amendments to the Act, a plaintiff also carries the burden of proving serious harm under section 10A, a threshold that shifted the earlier default in the plaintiff's favour. For a business, harm to reputation only counts if it's caused, or is likely to cause, serious financial loss.",link:{label:"Defamation Act 2005 (Qld)",url:b}},style:$("Mist")},Z={type:"features",layout:"image-right",content:{heading:"Google Reviews and Social Media Defamation",image:`${c}/online-review.webp`,body:["Most of the defamation enquiries we see start online. A one-star Google review claiming fraud that never happened. A Facebook comment accusing a tradesperson of shoddy work. An Instagram post making false claims about a business owner. These are treated the same way under the Act as a printed statement, and the same four elements apply.","Small businesses have a real path here. A business with fewer than 10 employees, or a not-for-profit, can sue for defamation directly. Medium to large businesses generally can't, though they may have a claim for tortious interference instead, a related but separate legal avenue worth raising with us if that's your situation.","The instinct to respond publicly to a bad review is usually the wrong one. It rarely resolves anything and can complicate a later claim. Documenting the publication, screenshotting it before it can be edited or deleted, and getting advice on whether a concerns notice is the right next step protects your position far better than a public reply does."],items:I.map(e=>
1({title:e.who,description:[e.verdict,e.trail].filter(Boolean).join(", "),value:e.ok?"yes":"no"}))},style:$("Mist")},ee={type:"features",layout:"stepper",content:{heading:"The Concerns Notice Process",image:`${d}/signing-hands.webp`,body:["A concerns notice is the mandatory first step before defamation proceedings can start. Under section 12B of the Act, an aggrieved person can't commence proceedings unless they've served a concerns notice, particularised the defamatory imputations in it, and let the response period run its course."],steps:P.map(e=>({stage:e.stage,whatHappens:e.what,typicalTimeframe:e.time})),subheading:"To be valid under section 12A, a concerns notice must:",items:W.map(e=>({description:e})),note:"Get this document wrong and the consequences aren't minor. A defective or improperly served concerns notice can mean any proceedings you later commence get struck out, and you could be liable for the publisher's legal costs."},style:$("Mist")},ea={type:"features",layout:"tabs",content:{heading:"Defences to a Defamation Claim",image:`${c}/defences-desk.webp`,subheading:"Not every damaging statement is defamatory, and not every defamatory statement leads to a successful claim. The Act sets out several defences a publisher can rely on.",items:F.map(e=>({title:e.name,fields:[{label:"Defence",value:e.name},{label:"What it means",value:e.means}]})),body:["Which of these applies, if any, depends heavily on the specific wording and context of the publication, which is exactly the kind of assessment worth getting right before deciding how to respond."]},style:$("Mist")},et={type:"features",layout:"grid-3",content:{heading:"How We Can Assist",body:R,subheading:"Odyssey Legal's defamation work covers both sides of a dispute:",items:E.map(e=>({title:e.body}))},style:$("Mist")},ei={type:"features",layout:"image-left",content:{heading:"Why Odyssey Legal for Defamation Matters",subheading:Q,body:[G],image:`${d}/portrait-principal.webp`,stats:Y.map(e=>({label:e.label,value:e.figure}))},style:$("Mist")},eo={type:"cta",layout:"split",content:{heading:"Protect Your Reputation",subheading:V,phone:p,cta:{label:"Book Your Free Consultation",url:u},image:`${d}/consult-call.webp`},style:$("Mist")},es={type:"faq",layout:"accordion",content:{heading:"FAQs",items:K.map(e=>({question:e.q,answer:e.a.join("\n\n")})),links:X.map(e=>({label:e.label,description:e.note,url:e.url}))},style:$("Mist")},en={meta:{title:"Defamation Lawyers Brisbane | Concerns Notices & Google Reviews | Odyssey Legal",description:"False Google review, social media post, or workplace accusation damaging your reputation? Brisbane defamation lawyers acting fast across Queensland."},theme:o.default,sections:[_,J,Z,ee,ea,et,ei,eo,es]},el=`
2  /* ----------------------------- the brand fonts -------------------------- */
3  /* From the client's own brand guideline, which names four faces: Sifonn Pro
4     Bold Uppercase, Libre Baskerville Bold, Cooper Hewitt Semi Bold and Cooper
5     Hewitt Book. The five guideline colours are already the token set - 424945
6     is Olive/800, F1CA94 is Champagne/300 - so the guideline is this system's
7     source of truth, and the type had simply never been taken from it.
8
9     Libre Baskerville is on Google Fonts and is linked above. Cooper Hewitt is
10     not, so it is self-hosted here under OFL-1.1, which permits it. Sifonn Pro
11     is a commercial display face and is the wordmark, which ships as an image,
12     so the page never needs to load it.
13
14     Weights: 400 is Book, 600 is Semi Bold, 700 is Bold, 800 is Heavy. The
15     token set asks for 900 in one style and Cooper Hewitt stops at 800, so that
16     request resolves to Heavy rather than being synthesised. */
17  @font-face {
18    font-family: 'Cooper Hewitt';
19    font-style: normal;
20    font-weight: 400;
21    font-display: swap;
22    src: url('/clients/odysseylegal-com-au/assets/fonts/cooper-hewitt-400.woff2') format('woff2');
23  }
24  @font-face {
25    font-family: 'Cooper Hewitt';
26    font-style: normal;
27    font-weight: 600;
28    font-display: swap;
29    src: url('/clients/odysseylegal-com-au/assets/fonts/cooper-hewitt-600.woff2') format('woff2');
30  }
31  @font-face {
32    font-family: 'Cooper Hewitt';
33    font-style: normal;
34    font-weight: 700;
35    font-display: swap;
36    src: url('/clients/odysseylegal-com-au/assets/fonts/cooper-hewitt-700.woff2') format('woff2');
37  }
38  @font-face {
39    font-family: 'Cooper Hewitt';
40    font-style: normal;
41    font-weight: 800;
42    font-display: swap;
43    src: url('/clients/odysseylegal-com-au/assets/fonts/cooper-hewitt-800.woff2') format('woff2');
44  }
45  .tk * { box-sizing: border-box; }
46  .tk p { text-wrap: pretty; margin: 0; }
47  .tk h1, .tk h2, .tk h3, .tk h4 { margin: 0; }
48  .tk ol, .tk ul { margin: 0; padding: 0; list-style: none; }
49  .tk a { text-decoration: none; }
50  .tk :where(a) { color: inherit; }
51  .tk section, .tk header, .tk footer { background: ${(0,n.c)("Backgroun
51d/Background")}; }
52  .tk [id] { scroll-margin-top: 120px; }
53
54  .ol-reveal {
55    opacity: 0; transform: translateY(22px);
56    transition: opacity 700ms cubic-bezier(0.16,1,0.3,1), transform 700ms cubic-bezier(0.16,1,0.3,1);
57  }
58  .ol-reveal.is-shown { opacity: 1; transform: none; }
59  @media (prefers-reduced-motion: reduce) {
60    .ol-reveal { opacity: 1; transform: none; transition: none; }
61  }
62
63  /* ------------------------------ layout ------------------------------- */
64  .ol-container {
65    margin: 0 auto; width: 100%; max-width: ${(0,n.ui)("Max-Width/Large")};
66    padding-left: ${(0,n.ui)("Horizontal Padding/Medium")};
67    padding-right: ${(0,n.ui)("Horizontal Padding/Medium")};
68  }
69  /* Max-Width/Large is the OUTER box at both breakpoints, gutters included:
70     1312 less its 80px gutters is the 1152 measure the desktop page is built
71     on, and 393 less its 24px gutters is the 345 the phone is built on.
72
73     It was 353 on mobile until 2026-09-10 - a 393 frame less its 20px margins,
74     which is a content width, not an outer box. The Horizontal Padding then
75     applied inside it and inset the column a second time: every container on
76     this page came out 353px wide on a 393px phone with a 305px column inside,
77     44px of margin a side, 22% of the screen. That is what made the mobile
78     hero cramped and stopped the buttons fitting - the primary label is
79     verbatim brief copy needing 302px and could not fit a 257px box at any
80     size, tracking or weight.
81
82     Fixed in Figma across the client and regenerated, per the round-trip rule.
83     There is deliberately no page-level override here any more. */
84  .ol-container-md { max-width: ${(0,n.ui)("Max-Width/Medium")}; }
85  .ol-section-pad { padding-top: ${(0,n.ui)("Vertical Padding/Medium")}; padding-bottom: ${(0,n.ui)("Vertical Padding/Medium")}; }
86
87  .ol-col { display: flex; flex-direction: column; }
88  .ol-gap-xs { gap: ${(0,n.ui)("Spacing/xSmall")}; }
89  .ol-gap-sm { gap: ${(0,n.ui)("Spacing/Small")}; }
90  .ol-gap-md { gap: ${(0,n.ui)("Spacing/Medium")}; }
91  .ol-gap-lg { gap: ${(0,n.ui)("Spacing/Large")}; }
92  .ol-gap-xl { gap: ${(0,n.ui)("Spacing/xLarge")}; }
93  .ol-gap-xxl { gap: ${(0,n.ui)("Spacing/xxLarge")}; }
94
95  .ol-grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: ${(0,n.ui)("Spacing/Large")}; }
96  @media (max-width: 1023px) { .ol-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
97  @media (max-width: 639px) { .ol-grid-3 { grid-template-columns: minmax(0, 1fr); } }
98
99  /* --------------------------- type + accents --------------------------- */
100  /* No dot before the eyebrow: "Can you get rid of this dot", 8 Sep 2026. */
101  .ol-eyebrow-row { display: flex; align-items: center; }
102  .ol-eyebrow { ${k((0,n.typeStyle)(l,"Text/Eyebrow/Small"))} color: ${(0,n.c)("Text/Accent")}; }
103
104  .ol-h1 { ${k((0,n.typeStyle)(l,"Heading/Heading 2"))} color: ${(0,n.c)("Text/Heading")}; text-wrap: balance; }
105  .ol-h2 { ${k((0,n.typeStyle)(l,"Heading/Heading 3"))} color: ${(0,n.c)("Text/Heading")}; text-wrap: balance; }
106  .ol-h3 { ${k((0,n.typeStyle)(l,"Heading/Heading 5"))} color: ${(0,n.c)("Text/Heading")}; text-wrap: balance; }
107  .ol-h4 { ${k((0,n.typeStyle)(l,"Heading/Heading 6"))} color: ${(0,n.c)("Text/Heading")}; text-wrap: balance; }
108  /* Sentence-case label for rows and steps. Long statutory stage names read as
109     shouting in the uppercase heading ramp, so they use a weighted body style. */
110  .ol-lede-title { ${k((0,n.typeStyle)(l,"Text/Medium/Regular"))} font-weight: 600; color: ${(0,n.c)("Text/Heading")}; }
111  /* Text/Large has a size token but no composed style in the Figma set, so the
112     lead is assembled from the size, family and body metrics directly. */
113  .ol-lead {
114    font-family: ${(0,n.font)("body")}; font-size: ${(0,n.fs)("Text/Large")};
115    font-weight: 400; line-height: 150%; letter-spacing: 0.01em;
116    color: ${(0,n.c)("Text/Default")};
117  }
118  .ol-body { ${k((0,n.typeStyle)(l,"Text/Medium/Regular"))} color: ${(0,n.c)("Text/Default")}; }
119  .ol-body-sm { ${k((0,n.typeStyle)(l,"Text/Small/Regular"))} color: ${(0,n.c)("Text/Default")}; }
120  .ol-strong { color: ${(0,n.c)("Text/Heading")}; font-weight: 600; }
121  .ol-inline-link { color: ${(0,n.c)("Text/Accent")}; font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
122  .ol-inline-link:hover { color: ${(0,n.c)("Text/Heading")}; }
123
124  .ol-sec-head { display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/Medium")}; max-width: ${(0,n.ui)("Max-Width/Medium")}; }
125  /* There was an ol-sec-head-split here until 2026-09-10 - the live site's
126     services header, heading left and paragraph right - used on How We Can
127     Assist and nowhere else. Milan: "it just looks a bit weird and out of
128     place." Two faults, and the second is the general one: it was the only
129     split header on a page of eight stacked ones, and the sentence it carried
130     ends in a colon. A lead-in belongs directly above the list it introduces,
131     not in a column beside the heading. The split needs a real paragraph on
132     the right or it should not be used at all. */
133  .ol-prose { display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/Medium")}; max-width: ${(0,n.ui)("Max-Width/Medium")}; }
134  .ol-measure { max-width: ${(0,n.ui)("Max-Width/Medium")}; }
135
136  .ol-tag {
137    display: inline-flex; align-items: center; align-self: flex-start;
138    padding: ${(0,n.ui)("Spacing/xSmall")} ${(0,n.ui)("Spacing/Medium")};
139    border-radius: 999px;
140    background: ${(0,n.c)("Tags/Tag 1/Background")}; color: ${(0,n.c)("Tags/Tag 1/Text")};
141    ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} font-weight: 700;
142    letter-spacing: 0.08em; text-transform: uppercase;
143  }
144  .ol-tag-quiet { background: ${(0,n.c)("Tags/Tag 3/Background")}; color: ${(0,n.c)("Tags/Tag 3/Text")}; }
145
146  /* -------------------------------- buttons ------------------------------- */
147  .ol-btn {
148    display: inline-flex; align-items: center; justify-content: center; gap: ${(0,n.ui)("Spacing/xSmall")};
149    padding: ${(0,n.ui)("Button/Primary/Padding Top")} ${(0,n.ui)("Button/Primary/Padding Left")} ${(0,n.ui)("Button/Primary/Padding Bottom")};
150    border-radius: ${(0,n.ui)("Radius/Small")};
151    ${k((0,n.typeStyle)(l,"Text/xSmall/Bold"))}
152    font-family: ${(0,n.font)("body")};
153    letter-spacing: 0.06em; text-transform: uppercase; cursor: pointer;
154    text-align: center;
155    transition: background 200ms ease, color 200ms ease, border-color 200ms ease, transform 150ms ease;
156  }
157  .ol-btn:hover { transform: translateY(-2px); }
158  .ol-btn-block { width: 100%; }
159  .ol-btn-primary {
160    background: ${(0,n.c)("Button/Primary/Default/Background")};
161    color: ${(0,n.c)("Button/Primary/Default/Text")};
162    border: 1px solid ${(0,n.c)("Button/Primary/Default/Border")};
163  }
164  .ol-btn-primary:hover {
165    background: ${(0,n.c)("Button/Primary/Hovered/Background")};
166    color: ${(0,n.c)("Button/Primary/Hovered/Text")};
167    border-color: ${(0,n.c)("Button/Primary/Hovered/Border")};
168  }
169  .ol-btn-secondary {
170    background: ${(0,n.c)("Button/Secondary/Default/Background")};
171    color: ${(0,n.c)("Button/Secondary/Default/Text")};
172    border: 1px solid ${(0,n.c)("Button/Secondary/Default/Border")};
173  }
174  .ol-btn-secondary:hover {
175    background: ${(0,n.c)("Button/Secondary/Hovered/Background")};
176    color: ${(0,n.c)("Button/Secondary/Hovered/Text")};
177    border-color: ${(0,n.c)("Button/Secondary/Hovered/Border")};
178  }
179  .ol-btn-row { display: flex; flex-wrap: wrap; gap: ${(0,n.ui)("Spacing/Small")}; }
180  /* On a phone both buttons run the column, equally. They were shrink-to-fit,
181     which at 305px made one 229 and the other 305 with both wrapping - two
182     different widths reads as broken rather than styled. The tracking comes
183     down with them: 0.06em over a 36-character uppercase label is 31px of the
184     50 that were forcing the second line. */
185  @media (max-width: 767px) {
186    .ol-btn {
187      letter-spacing: 0.02em;
188      padding-left: ${(0,n.ui)("Spacing/Medium")}; padding-right: ${(0,n.ui)("Spacing/Medium")};
189    }
190    .ol-btn-row > .ol-btn { width: 100%; }
191  }
192  /* End-of-chapter actions. A loose pair of buttons after body copy reads as
193     tacked on, so the hairline gives them a home and says the section is
194     over. Both button roles are scheme-bound, so the same strip paints
195     correctly on Mist and on the Olive band. */
196  .ol-cta-strip {
197    display: flex; flex-wrap: wrap; align-items: center;
198    gap: ${(0,n.ui)("Spacing/Small")};
199    padding-top: ${(0,n.ui)("Spacing/Large")};
200    border-top: 1px solid ${(0,n.c)("Border/Divider")};
201  }
202
203  /* ------------------------------- the close ------------------------------ */
204  /* The page ends centred on its own ground, not in a card. See the note on
205     the section: it was the bio card's twin, and two of the same shape stacked
206     is what made the tail monotonous. */
207  .ol-close {
208    display: flex; flex-direction: column; align-items: center; text-align: center;
209    gap: ${(0,n.ui)("Spacing/Large")};
210    max-width: ${(0,n.ui)("Max-Width/Medium")}; margin: 0 auto;
211  }
212  /* Large enough to read as the action it is. Not a heading - a number. */
213  .ol-close-phone {
214    ${k((0,n.typeStyle)(l,"Heading/Heading 3"))}
215    color: ${(0,n.c)("Text/Heading")}; line-height: 1;
216    margin-top: ${(0,n.ui)("Spacing/Small")};
217  }
218  .ol-close-phone:hover { color: ${(0,n.c)("Text/Accent")}; }
219  .ol-close-actions {
220    display: flex; flex-wrap: wrap; justify-content: center;
221    gap: ${(0,n.ui)("Spacing/Medium")};
222  }
223
224  /* ------------------------- the assessment wizard ------------------------ */
225  /* Five steps. The rail is the track's geometry with five columns instead of
226     three, so the developer builds one rail for the page: nodes on the left
227     edge of their column, the line from the first node's centre to the last. */
228  .ol-wiz-rail {
229    position: relative;
230    display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0;
231  }
232  .ol-wiz-rail::before {
233    content: ""; position: absolute; top: 21px; height: 2px;
234    left: 22px; right: calc(100% / 5 - 22px);
235    background: ${(0,n.c)("Border/Divider")};
236  }
237  /* Scaled, not resized: animating width is a layout property and fails the
238     motion budget. Laid out at full centre-to-centre length and transformed. */
239  .ol-wiz-progress {
240    position: absolute; top: 21px; height: 2px;
241    left: 22px; right: calc(100% / 5 - 22px);
242    background: ${(0,n.c)("Text/Accent")};
243    transform-origin: left center;
244    transition: transform 380ms cubic-bezier(0.16,1,0.3,1);
245  }
246  @media (prefers-reduced-motion: reduce) { .ol-wiz-progress { transition: none; } }
247  .ol-wiz-step {
248    display: flex; flex-direction: column; align-items: flex-start;
249    gap: ${(0,n.ui)("Spacing/Small")};
250    padding-right: ${(0,n.ui)("Spacing/Medium")};
251    background: transparent; border: 0; cursor: pointer; text-align: left;
252  }
253  .ol-wiz-step:last-child { padding-right: 0; }
254  .ol-wiz-node {
255    position: relative; z-index: 1;
256    display: inline-flex; align-items: center; justify-content: center;
257    width: 44px; height: 44px; border-radius: 50%;
258    background: ${(0,n.c)("Background/Background")};
259    border: 2px solid ${(0,n.c)("Border/Divider")};
260    color: ${(0,n.c)("Text/Default")};
261    ${k((0,n.typeStyle)(l,"Text/xSmall/Bold"))} font-family: ${(0,n.font)("body")};
262    transition: background 260ms ease, border-color 260ms ease, color 260ms ease, transform 260ms ease;
263  }
264  .ol-wiz-step:hover .ol-wiz-node { border-color: ${(0,n.c)("Text/Accent")}; }
265  .ol-wiz-step.is-done .ol-wiz-node { border-color: ${(0,n.c)("Text/Accent")}; color: ${(0,n.c)("Text/Heading")}; }
266  .ol-wiz-step.is-active .ol-wiz-node {
267    background: ${(0,n.c)("Tags/Tag 1/Background")};
268    border-color: ${(0,n.c)("Tags/Tag 1/Background")};
269    color: ${(0,n.c)("Tags/Tag 1/Text")};
270    transform: scale(1.1);
271  }
272  .ol-wiz-label {
273    ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} font-weight: 700;
274    letter-spacing: 0.08em; text-transform: uppercase;
275    color: ${(0,n.c)("Text/Default")}; transition: color 260ms ease;
276  }
277  .ol-wiz-step.is-active .ol-wiz-label { color: ${(0,n.c)("Text/Accent")}; }
278  @media (max-width: 767px) {
279    /* Five labels will not sit across a phone. The rail becomes the counter and
280       the panel heading carries the step name. */
281    .ol-wiz-rail { grid-template-columns: repeat(5, minmax(0, 1fr)); }
282    .ol-wiz-label { display: none; }
283    .ol-wiz-node { width: 36px; height: 36px; }
284    .ol-wiz-rail::before, .ol-wiz-progress { top: 17px; }
285  }
286
287  .ol-wiz-panel {
288    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/xLarge")};
289    padding: ${(0,n.ui)("Spacing/xxLarge")};
290    border-radius: ${(0,n.ui)("Radius/Medium")};
291    background: ${(0,n.c)("Background/Background Overlay")};
292    border: 1px solid ${(0,n.c)("Border/Divider")};
293  }
294  @media (max-width: 767px) { .ol-wiz-panel { padding: ${(0,n.ui)("Spacing/xLarge")}; } }
295  .ol-wiz-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: ${(0,n.ui)("Spacing/xLarge")}; }
296  @media (max-width: 639px) { .ol-wiz-fields { grid-template-columns: minmax(0, 1fr); } }
297  .ol-wiz-field { display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/Small")}; grid-column: 1 / -1; }
298  .ol-wiz-field-half { grid-column: auto; }
299  .ol-wiz-flabel { ${k((0,n.typeStyle)(l,"Text/Small/Semi-Bold"))} color: ${(0,n.c)("Text/Heading")}; }
300  .ol-wiz-req { color: ${(0,n.c)("Text/Accent")}; font-weight: 400; }
301  .ol-input, .ol-select {
302    width: 100%; min-height: 48px;
303    padding: 0 ${(0,n.ui)("Spacing/Medium")};
304    border-radius: ${(0,n.ui)("Radius/Small")};
305    border: 1px solid ${(0,n.c)("Border/Divider")};
306    background: ${(0,n.c)("Background/Background")};
307    color: ${(0,n.c)("Text/Heading")};
308    ${k((0,n.typeStyle)(l,"Text/Small/Regular"))}
309  }
310  .ol-select { appearance: none; cursor: pointer; }
311  .ol-input:focus-visible, .ol-select:focus-visible {
312    outline: 2px solid ${(0,n.c)("Text/Accent")}; outline-offset: 2px;
313  }
314  .ol-wiz-options { display: flex; flex-direction: column; }
315  /* The whole row is the target. The native control is stretched over it at
316     zero opacity, so the click area, the focus target and the 44px minimum are
317     all the same box rather than a 16px dot with a label beside it. */
318  .ol-opt {
319    position: relative; display: flex; align-items: center;
320    gap: ${(0,n.ui)("Spacing/Medium")}; min-height: 44px;
321    padding: ${(0,n.ui)("Spacing/xSmall")} 0; cursor: pointer;
322    border-radius: ${(0,n.ui)("Radius/Small")};
323  }
324  .ol-opt:focus-within { outline: 2px solid ${(0,n.c)("Text/Accent")}; outline-offset: 2px; }
325  .ol-opt-input {
326    position: absolute; inset: 0; width: 100%; height: 100%;
327    margin: 0; opacity: 0; cursor: pointer;
328  }
329  .ol-opt-mark {
330    display: inline-flex; align-items: center; justify-content: center;
331    width: 22px; height: 22px; flex: 0 0 auto; border-radius: 50%;
332    border: 1px solid ${(0,n.c)("Border/Divider")};
333    background: ${(0,n.c)("Background/Background")};
334    color: ${(0,n.c)("Tags/Tag 1/Text")};
335    transition: background 200ms ease, border-color 200ms ease;
336  }
337  .ol-opt-mark-box { border-radius: ${(0,n.ui)("Radius/Small")}; }
338  .ol-opt-mark svg { opacity: 0; transition: opacity 160ms ease; }
339  .ol-opt-input:checked ~ .ol-opt-mark {
340    background: ${(0,n.c)("Tags/Tag 1/Background")}; border-color: ${(0,n.c)("Tags/Tag 1/Background")};
341  }
342  .ol-opt-input:checked ~ .ol-opt-mark svg { opacity: 1; }
343  @media (prefers-reduced-motion: reduce) {
344    .ol-opt-mark, .ol-opt-mark svg { transition: none; }
345  }
346  .ol-opt-text { ${k((0,n.typeStyle)(l,"Text/Small/Regular"))} color: ${(0,n.c)("Text/Default")}; }
347  .ol-opt-input:checked ~ .ol-opt-text { color: ${(0,n.c)("Text/Heading")}; }
348  .ol-wiz-nav {
349    display: flex; align-items: center; gap: ${(0,n.ui)("Spacing/Medium")};
350    padding-top: ${(0,n.ui)("Spacing/Large")};
351    border-top: 1px solid ${(0,n.c)("Border/Divider")};
352  }
353  .ol-wiz-count {
354    margin-left: auto;
355    ${k((0,n.typeStyle)(l,"Text/xSmall/Semi-Bold"))} color: ${(0,n.c)("Text/Default")};
356    font-variant-numeric: tabular-nums; letter-spacing: 0.08em;
357    /* "01 / 05" was breaking after the slash next to Back and Next on a
358       phone. It is one token, not three words. */
359    white-space: nowrap;
360  }
361  /* When a step asks one question, the panel heading IS that question, so the
362     legend under it would be the same words twice - the thing the service
363     cards were just fixed for. Hidden visually, kept for screen readers, which
364     still need the group named and the (Required) said. */
365  .ol-sr-only {
366    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
367    overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
368  }
369  .ol-wiz-note { ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} color: ${(0,n.c)("Text/Default")}; }
370
371  /* --------------------------- section rhythm ----------------------------- */
372  /* Where the ground changes, the full 112px each side earns its keep: it is a
373     chapter break. Where two sections share a ground it is 224px of nothing
374     between them, which is what made the page read as scattered islands. These
375     two halve it on the boundary that does not change ground. */
376  .ol-pad-tight-t { padding-top: ${(0,n.ui)("Spacing/xxLarge")}; }
377  .ol-pad-tight-b { padding-bottom: ${(0,n.ui)("Spacing/xxLarge")}; }
378
379  /* --------------------------------- hero -------------------------------- */
380  /* No enquiry card, so the photograph is the other half of the hero: full
381     strength, under the same directional scrim the band opener uses, weighted
382     to the column carrying the words. */
383  .ol-hero { position: relative; overflow: hidden; }
384  .ol-hero-bg {
385    position: absolute; inset: 0; width: 100%; height: 100%;
386    object-fit: cover; object-position: 62% 30%;
387  }
388  .ol-hero-inner {
389    position: relative;
390    padding-top: ${(0,n.ui)("Spacing/xHuge")}; padding-bottom: ${(0,n.ui)("Spacing/xHuge")};
391    min-height: 640px; display: flex; align-items: center;
392  }
393  /* At phone width the photograph stops being a backdrop and becomes a block
394     under the copy. Milan, 2026-09-10, on the mobile hero: "SHould we have
395     only 1 paragraph and then the image at the bottom of the text like my
396     screenshot example?"
397
398     It had been type over the picture at every width, which needed a scrim so
399     heavy - 94% at the top, easing to 58% - that the photograph was doing
400     nothing but costing contrast. Nobody could see it and the words were
401     harder to read for its being there. Below the copy at full width it is a
402     photograph again, and the copy sits on the solid Olive ground.
403
404     Desktop keeps the backdrop: at 1440 the words occupy the left third and
405     the subject is clear of them. This is the only place on the page where
406     type sits on a picture, and now only at one width. */
407  .ol-hero-shot { display: contents; }
408  @media (max-width: 767px) {
409    .ol-hero { display: flex; flex-direction: column; }
410    .ol-hero-inner { min-height: 0; order: 1; }
411    /* Square corners butting straight onto the olive read as a hard cut - the
412       photograph looked pasted in rather than part of the block. Milan:
413       "Can we get some shading on the image a border radius so it doesnt look
414       so sharp?" It comes in off the gutter so the corners are on the page
415       measure rather than clipped by the screen edge. */
416    .ol-hero-shot {
417      display: block; order: 2; position: relative; overflow: hidden;
418      margin: 0 ${(0,n.ui)("Horizontal Padding/Medium")} ${(0,n.ui)("Spacing/Large")};
419      border-radius: ${(0,n.ui)("Radius/Large")};
420    }
421    /* The shading. Olive at the top edge easing out by a third of the way
422       down, so the photograph emerges from the ground it sits on instead of
423       starting at a line; a weaker pass at the foot closes it the same way.
424       Kept light on purpose - the whole reason the picture came out from
425       behind the type was so it could be seen. */
426    .ol-hero-shot::after {
427      content: ""; position: absolute; inset: 0; pointer-events: none;
428      background:
429        linear-gradient(
430          180deg,
431          color-mix(in srgb, ${(0,n.c)("Background/Background")} 58%, transparent) 0%,
432          transparent 34%,
433          transparent 82%,
434          color-mix(in srgb, ${(0,n.c)("Background/Background")} 26%, transparent) 100%
435        );
436    }
437    .ol-hero-bg {
438      position: static;
439      display: block; width: 100%; height: 340px;
440      object-position: 62% 25%;
441    }
442    /* Scoped under .ol-hero: the shared band-scrim rule is declared later in
443       this sheet and would otherwise win on source order. */
444    .ol-hero .ol-hero-scrim { display: none; }
445  }
446  .ol-hero-copy { max-width: ${(0,n.ui)("Max-Width/Small")}; }
447  .ol-hero-points { display: flex; flex-wrap: wrap; gap: ${(0,n.ui)("Spacing/Large")}; }
448  /* On a phone the three points stack, so at desktop spacing they were three
449     lines of text floating 20px apart above the buttons - 112px of the screen
450     for eleven words, and the actions pushed below the fold with them. The
451     reference Milan sent puts the actions straight under the paragraph and the
452     supporting facts below them, closed off by a hairline. Only the two
453     buttons take focus, so the reordering does not disturb tab order, and a
454     screen reader still reads the points before the actions. */
455  @media (max-width: 767px) {
456    .ol-hero-points {
457      order: 3; gap: ${(0,n.ui)("Spacing/Small")};
458      padding-top: ${(0,n.ui)("Spacing/Large")};
459      border-top: 1px solid ${(0,n.c)("Border/Divider")};
460    }
461    .ol-hero-copy .ol-btn-row { order: 2; }
462  }
463  .ol-hero-point {
464    display: inline-flex; align-items: center; gap: ${(0,n.ui)("Spacing/xSmall")};
465    ${k((0,n.typeStyle)(l,"Text/Small/Regular"))} color: ${(0,n.c)("Text/Default")};
466  }
467  .ol-hero-point svg { color: ${(0,n.c)("Text/Accent")}; flex: 0 0 auto; }
468
469  /* ------------------------------- callout -------------------------------- */
470  /* Replaced the gold-rail note on 8 Sep 2026: "can we have a unique branded
471     design". This is the live site's own card idiom - charcoal panel, the
472     firm's gold helmet mark - with the mark ghosted large in the corner the way
473     the stepper ghosts its stage numeral. The mark is the brand's geometry
474     (TR-018); nothing else is drawn. Sets the mode and paints its own ground. */
475  .ol-callout {
476    position: relative; overflow: hidden;
477    display: grid; grid-template-columns: auto minmax(0, 1fr);
478    gap: ${(0,n.ui)("Spacing/Large")}; align-items: start;
479    padding: ${(0,n.ui)("Spacing/xLarge")} ${(0,n.ui)("Spacing/xxLarge")};
480    border-radius: ${(0,n.ui)("Radius/Large")};
481    background: ${(0,n.c)("Background/Background")};
482  }
483  @media (max-width: 639px) {
484    .ol-callout { grid-template-columns: minmax(0, 1fr); padding: ${(0,n.ui)("Spacing/xLarge")}; }
485  }
486  .ol-callout-mark { position: relative; display: block; width: 36px; height: auto; margin-top: 2px; }
487  .ol-callout-body { position: relative; display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/xSmall")}; }
488  .ol-callout-ghost {
489    /* calc(-1 * var()), because -var() is not CSS and the offset silently
490       drops, leaving the ghost at its static position on the left. */
491    position: absolute;
492    right: calc(-1 * ${(0,n.ui)("Spacing/Large")}); bottom: calc(-1 * ${(0,n.ui)("Spacing/xxLarge")});
493    width: 220px; height: 210px; pointer-events: none;
494    background: url("${d}/mark.png") no-repeat center / contain;
495    opacity: 0.14;
496  }
497  @media (max-width: 639px) { .ol-callout-ghost { width: 150px; height: 143px; } }
498
499  /* ----------------------------- service card ----------------------------- */
500  /* The live site's Our Legal Services idiom, measured 2026-09-09: a FILLED
501     charcoal card with a gold icon and a gold label, centred, and no body copy
502     under a heading. Ours was a white outlined box with an icon badge, a bold
503     title and a grey line under it - six of them, and the title mostly restated
504     the line. That is the generic card grid TR-003 exists to stop, and Milan
505     called it "a bit ugly and bland". Filled, gold, one line, no heading. */
506  .ol-service-card {
507    display: flex; flex-direction: column; align-items: center; text-align: center;
508    gap: ${(0,n.ui)("Spacing/Large")}; height: 100%;
509    padding: ${(0,n.ui)("Spacing/xxLarge")} ${(0,n.ui)("Spacing/xLarge")};
510    background: ${(0,n.c)("Background/Background")};
511    border-radius: ${(0,n.ui)("Radius/Large")};
512    transition: transform 250ms cubic-bezier(0.16,1,0.3,1);
513  }
514  .ol-service-card:hover { transform: translateY(-3px); }
515  @media (prefers-reduced-motion: reduce) { .ol-service-card { transition: none; } }
516  /* Gold on charcoal, and larger than the badge it replaces: on the live cards
517     the icon is the thing you see first. */
518  .ol-service-icon {
519    display: inline-flex; align-items: center; justify-content: center;
520    color: ${(0,n.c)("Text/Accent")};
521  }
522  .ol-service-icon svg { width: 40px; height: 40px; }
523  .ol-service-text {
524    ${k((0,n.typeStyle)(l,"Text/Medium/Regular"))} font-weight: 600;
525    color: ${(0,n.c)("Text/Accent")}; text-wrap: balance;
526  }
527
528  /* ------------------------ dark blocks on a dark band -------------------- */
529  /* A block that paints Background/Background disappears when the section
530     ground is Olive, because that is the same colour. On a band the block
531     inverts instead: it goes a step DARKER (Background Overlay, Olive/900) and
532     takes a hairline, and any panel nested inside it comes back up to
533     Background/Background so the two still separate. */
534  .ol-tl-onband, .ol-callout-onband {
535    background: ${(0,n.c)("Background/Background Overlay")};
536    border: 1px solid ${(0,n.c)("Border/Divider")};
537  }
538  /* ------------------------------ who can sue ----------------------------- */
539  /* Two rows on a charcoal panel under the photograph. A filled gold badge for
540     the tick, the same badge outlined for the cross. */
541  .ol-standing {
542    display: flex; flex-direction: column;
543    padding: ${(0,n.ui)("Spacing/xSmall")} ${(0,n.ui)("Spacing/xLarge")};
544    border-radius: ${(0,n.ui)("Radius/Large")};
545    background: ${(0,n.c)("Background/Background")};
546  }
547  .ol-standing-row {
548    display: flex; align-items: flex-start; gap: ${(0,n.ui)("Spacing/Medium")};
549    padding: ${(0,n.ui)("Spacing/Large")} 0;
550  }
551  .ol-standing-row + .ol-standing-row { border-top: 1px solid ${(0,n.c)("Border/Divider")}; }
552  .ol-standing-badge {
553    display: inline-flex; align-items: center; justify-content: center;
554    width: 28px; height: 28px; flex: 0 0 auto; margin-top: 2px; border-radius: 50%;
555    background: ${(0,n.c)("Tags/Tag 1/Background")}; color: ${(0,n.c)("Tags/Tag 1/Text")};
556  }
557  .ol-standing-badge-off {
558    background: transparent;
559    border: 1px solid ${(0,n.c)("Text/Accent")};
560    color: ${(0,n.c)("Text/Accent")};
561  }
562
563  /* --------------------------- the five parts ----------------------------- */
564  /* INVENTED for this page. The check-card grid was rejected for this content
565     (five short requirements in a three-up grid: an orphan row and four boxes
566     with nothing in them). A concerns notice is a document with five required
567     parts, so they are numbered rows, and the warning about getting the
568     document wrong sits beside them rather than under them. */
569  .ol-req {
570    display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
571    gap: ${(0,n.ui)("Spacing/xHuge")}; align-items: start;
572  }
573  @media (max-width: 1023px) { .ol-req { grid-template-columns: minmax(0, 1fr); gap: ${(0,n.ui)("Spacing/xxLarge")}; } }
574  .ol-req-list { display: flex; flex-direction: column; }
575  .ol-req-row {
576    display: flex; align-items: baseline; gap: ${(0,n.ui)("Spacing/Large")};
577    padding: ${(0,n.ui)("Spacing/Large")} 0;
578    border-bottom: 1px solid ${(0,n.c)("Border/Divider")};
579  }
580  .ol-req-row:first-child { border-top: 1px solid ${(0,n.c)("Border/Divider")}; }
581  .ol-req-num {
582    flex: 0 0 auto;
583    ${k((0,n.typeStyle)(l,"Heading/Heading 5"))} font-family: ${(0,n.font)("body")};
584    color: ${(0,n.c)("Text/Accent")}; font-variant-numeric: tabular-nums; line-height: 1;
585    min-width: 2ch;
586  }
587  /* Beside the list the callout is half the width, and the ghosted mark would
588     sit under the words rather than off to the side of them. */
589  .ol-req .ol-callout-ghost { display: none; }
590
591  /* --------------------------- stat pairs --------------------------------- */
592  .ol-stat { display: flex; flex-direction: column; gap: 4px; }
593  .ol-stat-label {
594    ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} font-weight: 700;
595    letter-spacing: 0.08em; text-transform: uppercase; color: ${(0,n.c)("Text/Accent")};
596  }
597  .ol-stat-value { ${k((0,n.typeStyle)(l,"Text/Small/Regular"))} color: ${(0,n.c)("Text/Default")}; }
598  .ol-stat-miss { padding-left: ${(0,n.ui)("Spacing/Medium")}; border-left: 2px solid ${(0,n.c)("Border/Divider")}; }
599
600  /* ------------------------------ hero scrim ------------------------------ */
601  /* Two layers: a flat wash so the photograph never fights the type, and a
602     directional gradient that keeps the left column solid enough to read on.
603     The band opener this was shared with is gone - see the note on the
604     concerns notice section - so the hero is the only thing wearing it now. */
605  .ol-hero-scrim {
606    position: absolute; inset: 0;
607    background:
608      linear-gradient(
609        100deg,
610        color-mix(in srgb, ${(0,n.c)("Background/Background")} 92%, transparent) 0%,
611        color-mix(in srgb, ${(0,n.c)("Background/Background")} 78%, transparent) 42%,
612        color-mix(in srgb, ${(0,n.c)("Background/Background")} 30%, transparent) 78%,
613        color-mix(in srgb, ${(0,n.c)("Background/Background")} 12%, transparent) 100%
614      ),
615      color-mix(in srgb, ${(0,n.c)("Background/Background")} 28%, transparent);
616  }
617
618  /* --------------------------- the dark shell ----------------------------- */
619  /* Carries the stepper on the concerns notice and the picker on the defences.
620     A photograph sits behind both at low opacity so the shell reads as a place
621     rather than a box. */
622  .ol-tl {
623    position: relative; overflow: hidden;
624    border-radius: ${(0,n.ui)("Radius/Large")};
625    background: ${(0,n.c)("Background/Background")};
626  }
627  .ol-tl-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.16; }
628  .ol-tl-inner {
629    position: relative;
630    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/xxLarge")};
631    padding: ${(0,n.ui)("Spacing/xHuge")} ${(0,n.ui)("Spacing/xxLarge")};
632  }
633  @media (max-width: 767px) { .ol-tl-inner { padding: ${(0,n.ui)("Spacing/xLarge")}; } }
634
635  /* ------------------------------- the test ------------------------------- */
636  /* One dark panel divided into cells rather than separate cards: the four
637     elements are one test, and a plaintiff needs all of them. */
638  .ol-test-panel {
639    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
640    background: ${(0,n.c)("Background/Background")};
641    border-radius: ${(0,n.ui)("Radius/Large")};
642    overflow: hidden;
643  }
644  /* ADDED for this page: debt-recovery's panel carries a set of three. The
645     elements of defamation are a set of four, so the cell count is a modifier
646     rather than a second module. */
647  .ol-test-panel-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
648  /* ADDED 2026-09-09: the nine defences, as cells of one panel rather than a
649     picker. See the note on the section. Three across, three down, so the
650     cells need horizontal rules as well as the vertical ones the 1-row panel
651     gets, and the nth-child rules below replace the blanket  selector. */
652  .ol-test-panel-9 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
653  .ol-test-panel-9 .ol-test-cell + .ol-test-cell { border-left: 0; }
654  .ol-test-panel-9 .ol-test-cell:not(:nth-child(3n + 1)) {
655    border-left: 1px solid ${(0,n.c)("Border/Divider")};
656  }
657  .ol-test-panel-9 .ol-test-cell:nth-child(n + 4) {
658    border-top: 1px solid ${(0,n.c)("Border/Divider")};
659  }
660  @media (max-width: 1023px) {
661    .ol-test-panel-9 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
662    .ol-test-panel-9 .ol-test-cell:not(:nth-child(3n + 1)) { border-left: 0; }
663    .ol-test-panel-9 .ol-test-cell:not(:nth-child(2n + 1)) {
664      border-left: 1px solid ${(0,n.c)("Border/Divider")};
665    }
666    .ol-test-panel-9 .ol-test-cell:nth-child(n + 3) {
667      border-top: 1px solid ${(0,n.c)("Border/Divider")};
668    }
669  }
670  @media (max-width: 639px) {
671    .ol-test-panel-9 { grid-template-columns: minmax(0, 1fr); }
672    .ol-test-panel-9 .ol-test-cell { border-left: 0 !important; }
673    .ol-test-panel-9 .ol-test-cell + .ol-test-cell {
674      border-top: 1px solid ${(0,n.c)("Border/Divider")};
675    }
676  }
677  /* The cell's index. Quiet, because nine of them in accent would be a rash. */
678  .ol-test-num {
679    ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} font-weight: 700;
680    font-family: ${(0,n.font)("body")}; letter-spacing: 0.08em;
681    color: ${(0,n.c)("Text/Accent")}; font-variant-numeric: tabular-nums;
682  }
683
684  /* ------------------------------- the track ------------------------------ */
685  /* A sequence with every stage visible at once. This replaces the stepper on
686     this page: the three concerns notice stages carry 60 words between them,
687     and a prev/next stepper showed 21 of those at a time behind two clicks.
688     See the note on the section. Geometry is the stepper's, so the developer
689     builds one rail: equal columns, no gap, the rail inset half a column at
690     each end so it runs node centre to node centre. */
691  .ol-track {
692    position: relative;
693    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0;
694  }
695  /* The nodes sit on the same left edge as the words under them, not centred
696     over the column: a node floating above left-aligned text reads as
697     belonging to neither. So the rail runs from the first node's centre
698     (22px) to the last node's centre, which is a column short of the right. */
699  .ol-track::before {
700    content: ""; position: absolute; top: 21px; height: 2px;
701    left: 22px; right: calc(100% / 3 - 22px);
702    background: ${(0,n.c)("Text/Accent")};
703  }
704  .ol-track-col {
705    display: flex; flex-direction: column; align-items: flex-start;
706    gap: ${(0,n.ui)("Spacing/Small")};
707    padding-right: ${(0,n.ui)("Spacing/xxLarge")};
708  }
709  .ol-track-col:last-child { padding-right: 0; }
710  .ol-track-node {
711    position: relative; z-index: 1;
712    display: inline-flex; align-items: center; justify-content: center;
713    width: 44px; height: 44px; margin-bottom: ${(0,n.ui)("Spacing/Medium")};
714    border-radius: 50%;
715    background: ${(0,n.c)("Tags/Tag 1/Background")}; color: ${(0,n.c)("Tags/Tag 1/Text")};
716    ${k((0,n.typeStyle)(l,"Text/xSmall/Bold"))} font-family: ${(0,n.font)("body")};
717  }
718  .ol-track-when {
719    ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} font-weight: 700;
720    letter-spacing: 0.08em; text-transform: uppercase; color: ${(0,n.c)("Text/Accent")};
721  }
722  @media (max-width: 767px) {
723    .ol-track { grid-template-columns: minmax(0, 1fr); }
724    /* The rail is a column-to-column device; stacked, the rows carry the
725       sequence instead and a horizontal line across one row would be a lie. */
726    .ol-track::before { display: none; }
727    .ol-track-col {
728      padding: ${(0,n.ui)("Spacing/xLarge")} 0;
729      border-top: 1px solid ${(0,n.c)("Border/Divider")};
730    }
731    .ol-track-col:first-child { padding-top: 0; border-top: 0; }
732  }
733  .ol-test-cell {
734    display: flex; flex-direction: column; align-items: flex-start;
735    gap: ${(0,n.ui)("Spacing/Medium")};
736    padding: ${(0,n.ui)("Spacing/xxLarge")} ${(0,n.ui)("Spacing/xLarge")};
737  }
738  .ol-test-icon {
739    display: inline-flex; align-items: center; justify-content: center;
740    width: 48px; height: 48px; flex: 0 0 auto; border-radius: 50%;
741    border: 1px solid ${(0,n.c)("Text/Accent")};
742    color: ${(0,n.c)("Text/Accent")};
743  }
744  .ol-test-cell + .ol-test-cell { border-left: 1px solid ${(0,n.c)("Border/Divider")}; }
745  .ol-test-rule { display: block; width: 40px; height: 2px; background: ${(0,n.c)("Text/Accent")}; }
746  .ol-test-text {
747    font-family: ${(0,n.font)("body")}; font-size: ${(0,n.fs)("Text/Large")};
748    font-weight: 600; line-height: 140%; letter-spacing: 0.01em;
749    color: ${(0,n.c)("Text/Heading")}; text-wrap: balance;
750  }
751  .ol-test-gloss { ${k((0,n.typeStyle)(l,"Text/Small/Regular"))} color: ${(0,n.c)("Text/Default")}; }
752  @media (max-width: 1023px) {
753    .ol-test-panel-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
754    .ol-test-panel-4 .ol-test-cell:nth-child(odd) { border-left: 0; }
755    .ol-test-panel-4 .ol-test-cell:nth-child(n + 3) { border-top: 1px solid ${(0,n.c)("Border/Divider")}; }
756  }
757  @media (max-width: 639px) {
758    .ol-test-panel, .ol-test-panel-4 { grid-template-columns: minmax(0, 1fr); }
759    .ol-test-cell { padding: ${(0,n.ui)("Spacing/xLarge")}; }
760    .ol-test-cell + .ol-test-cell { border-left: 0; border-top: 1px solid ${(0,n.c)("Border/Divider")}; }
761  }
762
763  /* ------------------------------- the bio -------------------------------- */
764  /* The principal, as a profile card rather than a paragraph beside a photo. */
765  /* The live site's Meet the Experts idiom, measured 2026-09-09: on the olive
766     band the card is a HAIRLINE OUTLINE rather than a filled dark box, and the
767     photograph sits proud of it, breaking the outline on three sides. That
768     overlap is the whole device - a filled card with a flush photograph is what
769     this was before, and it was one of three identical dark rectangles closing
770     the page. */
771  .ol-bio {
772    position: relative;
773    display: grid; grid-template-columns: minmax(0, 0.78fr) minmax(0, 1.22fr);
774    align-items: center;
775    border: 1px solid ${(0,n.c)("Border/Divider")};
776    border-radius: ${(0,n.ui)("Radius/Large")};
777    /* Not hidden: the photograph has to be able to leave the box. */
778    overflow: visible;
779  }
780  @media (max-width: 1023px) { .ol-bio { grid-template-columns: minmax(0, 1fr); } }
781  .ol-bio-media {
782    position: relative; min-height: 420px;
783    border-radius: ${(0,n.ui)("Radius/Large")};
784    overflow: hidden;
785    /* Out through the outline: left, top and bottom. */
786    margin: -${(0,n.ui)("Spacing/xLarge")} 0 -${(0,n.ui)("Spacing/xLarge")} -${(0,n.ui)("Spacing/xLarge")};
787  }
788  @media (max-width: 1023px) {
789    .ol-bio-media { min-height: 320px; margin: -${(0,n.ui)("Spacing/Large")} ${(0,n.ui)("Spacing/Large")} 0 -${(0,n.ui)("Spacing/Large")}; }
790  }
791  .ol-bio-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 40% 22%; }
792  .ol-bio-body {
793    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/xLarge")};
794    padding: ${(0,n.ui)("Spacing/xHuge")} ${(0,n.ui)("Spacing/xxLarge")};
795  }
796  @media (max-width: 767px) { .ol-bio-body { padding: ${(0,n.ui)("Spacing/xLarge")}; } }
797  .ol-bio-role { ${k((0,n.typeStyle)(l,"Text/Eyebrow/Small"))} color: ${(0,n.c)("Text/Accent")}; }
798  .ol-bio-stats {
799    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
800    gap: ${(0,n.ui)("Spacing/xLarge")};
801    padding-top: ${(0,n.ui)("Spacing/xLarge")};
802    border-top: 1px solid ${(0,n.c)("Border/Divider")};
803  }
804  .ol-bio-figure { ${k((0,n.typeStyle)(l,"Heading/Heading 4"))} color: ${(0,n.c)("Text/Accent")}; line-height: 1; }
805  .ol-bio-label { ${k((0,n.typeStyle)(l,"Text/xSmall/Regular"))} color: ${(0,n.c)("Text/Default")}; }
806
807  /* ------------------------------ media split ----------------------------- */
808  .ol-media-split {
809    display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
810    gap: ${(0,n.ui)("Spacing/xHuge")}; align-items: center;
811  }
812  @media (max-width: 1023px) { .ol-media-split { grid-template-columns: minmax(0, 1fr); gap: ${(0,n.ui)("Spacing/xxLarge")}; } }
813  .ol-media-frame {
814    position: relative; border-radius: ${(0,n.ui)("Radius/Large")}; overflow: hidden;
815    border: 1px solid ${(0,n.c)("Border/Image Border")};
816    aspect-ratio: 3 / 2;
817  }
818  .ol-media-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
819  .ol-media-split-top { align-items: start; }
820  /* ADDED 2026-09-09: a portrait frame. At 3:2 in half a column the photograph
821     was 384px tall beside 300px of prose and read as a thumbnail. Upright it
822     matches the text column it sits beside. */
823  .ol-media-frame-tall { aspect-ratio: 4 / 5; }
824  @media (max-width: 1023px) { .ol-media-frame-tall { aspect-ratio: 3 / 2; } }
825
826  /* ------------------------------ consult CTA ----------------------------- */
827  .ol-consult-card {
828    display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
829    border-radius: ${(0,n.ui)("Radius/Large")}; overflow: hidden;
830    border: 1px solid ${(0,n.c)("Border/Image Border")};
831  }
832  @media (max-width: 1023px) { .ol-consult-card { grid-template-columns: minmax(0, 1fr); } }
833  .ol-consult-media { position: relative; min-height: 340px; }
834  @media (max-width: 1023px) { .ol-consult-media { min-height: 260px; } }
835  .ol-consult-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
836  .ol-consult-body { padding: ${(0,n.ui)("Spacing/Huge")} ${(0,n.ui)("Spacing/xLarge")}; background: ${(0,n.c)("Background/Background")}; }
837
838  /* --------------------------------- FAQ ---------------------------------- */
839  /* The FAQ panel, from the Section Inspiration file (node 66-30) that Milan
840     picked out on 2026-09-09. The change from the old rows is three things:
841     the whole block is a dark rounded panel rather than rows on the page
842     ground, the marker is a quiet chevron on the LEFT rather than a gold plus
843     circle on the right, and each row carries a hairline UNDER it. The
844     reference also has an All / Defamation category filter, deliberately not
845     built: with one category it is a control with nothing to do, and it would
846     add an interaction state to capture for no reader benefit. */
847  .ol-faq-panel {
848    border-radius: ${(0,n.ui)("Radius/Large")};
849    background: ${(0,n.c)("Background/Background")};
850    /* Was xHuge/xxLarge (96/48) on an 808px container, which put 480px of rows
851       inside a 767px box and made it read as a floating tile rather than as
852       part of the page. Full measure now, and the padding cut to match. */
853    padding: ${(0,n.ui)("Spacing/xxLarge")};
854    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/xLarge")};
855  }
856  @media (max-width: 767px) {
857    .ol-faq-panel { padding: ${(0,n.ui)("Spacing/xLarge")}; gap: ${(0,n.ui)("Spacing/xLarge")}; }
858  }
859  .ol-faq { display: flex; flex-direction: column; }
860  .ol-faq-item { border-bottom: 1px solid ${(0,n.c)("Border/Divider")}; }
861  .ol-faq-q {
862    display: flex; align-items: center; gap: ${(0,n.ui)("Spacing/Medium")};
863    padding: ${(0,n.ui)("Spacing/Medium")} 0; cursor: pointer; list-style: none;
864    ${k((0,n.typeStyle)(l,"Text/Medium/Regular"))} color: ${(0,n.c)("Text/Heading")};
865  }
866  .ol-faq-q::-webkit-details-marker { display: none; }
867  .ol-faq-item:hover .ol-faq-q { color: ${(0,n.c)("Text/Accent")}; }
868  /* Left, small, and the same weight as the question. It marks the row rather
869     than competing with it. */
870  .ol-faq-icon {
871    display: inline-flex; align-items: center; justify-content: center;
872    width: 20px; height: 20px; flex: 0 0 auto;
873    color: ${(0,n.c)("Text/Default")};
874    transition: transform 250ms cubic-bezier(0.16,1,0.3,1), color 250ms ease;
875  }
876  .ol-faq-item[open] .ol-faq-icon { transform: rotate(180deg); color: ${(0,n.c)("Text/Accent")}; }
877  @media (prefers-reduced-motion: reduce) { .ol-faq-icon { transition: none; } }
878  /* Indented to the question's text column, not the chevron's. */
879  /* Two of the client's own answers run to more than one paragraph, so the
880     answer is a column rather than a single block. */
881  .ol-faq-a {
882    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/Medium")};
883    padding: 0 ${(0,n.ui)("Spacing/Large")} ${(0,n.ui)("Spacing/Large")} 36px;
884  }
885  @media (max-width: 639px) { .ol-faq-a { padding-left: 0; padding-right: 0; } }
886
887  /* -------------------------- related information ------------------------- */
888  /* INVENTED for this page, and the only invention on it. The live page carries
889     a Related information block whose three outbound references are part of the
890     body, so they have to survive the redesign. The feature card was rejected:
891     a link and a half-line of context in a bordered box is exactly the card of
892     a heading and one sentence that TR-003 exists to stop. These are hairline
893     rows instead, which is what a reference list looks like when it is not
894     pretending to be a feature. */
895  .ol-links { display: flex; flex-direction: column; }
896  .ol-link-row {
897    display: flex; align-items: flex-start; gap: ${(0,n.ui)("Spacing/Medium")};
898    padding: ${(0,n.ui)("Spacing/Large")} 0;
899    border-bottom: 1px solid ${(0,n.c)("Border/Divider")};
900  }
901  .ol-link-row:first-child { border-top: 1px solid ${(0,n.c)("Border/Divider")}; }
902  /* The arrow moves, not the row: padding is a layout property and animating it
903     fails the motion budget. */
904  .ol-link-arrow {
905    flex: 0 0 auto; margin-top: 2px; color: ${(0,n.c)("Text/Accent")};
906    transition: transform 200ms ease;
907  }
908  .ol-link-row:hover .ol-link-arrow { transform: translateX(4px); }
909  @media (prefers-reduced-motion: reduce) { .ol-link-arrow { transition: none; } }
910  .ol-link-label { ${k((0,n.typeStyle)(l,"Text/Small/Semi-Bold"))} color: ${(0,n.c)("Text/Heading")}; }
911  .ol-link-row:hover .ol-link-label { color: ${(0,n.c)("Text/Accent")}; }
912  .ol-link-note { ${k((0,n.typeStyle)(l,"Text/xSmall/Regular"))} color: ${(0,n.c)("Text/Default")}; }
913
914  /* ------------------------ sticky mobile call bar ------------------------ */
915  .ol-callbar {
916    position: fixed; left: ${(0,n.ui)("Spacing/Medium")}; right: ${(0,n.ui)("Spacing/Medium")}; bottom: ${(0,n.ui)("Spacing/Medium")};
917    z-index: 90;
918    display: none; align-items: center; justify-content: center; gap: ${(0,n.ui)("Spacing/xSmall")};
919    padding: ${(0,n.ui)("Spacing/Medium")};
920    border-radius: ${(0,n.ui)("Radius/Small")};
921    background: ${(0,n.c)("Button/Primary/Default/Background")};
922    color: ${(0,n.c)("Button/Primary/Default/Text")};
923    ${k((0,n.typeStyle)(l,"Text/xSmall/Bold"))} font-family: ${(0,n.font)("body")};
924    letter-spacing: 0.06em; text-transform: uppercase;
925    box-shadow: 0 14px 30px -12px rgba(0, 0, 0, 0.35);
926    opacity: 0; transform: translateY(12px); pointer-events: none;
927    transition: opacity 300ms ease, transform 300ms ease;
928  }
929  .ol-callbar.is-visible { opacity: 1; transform: none; pointer-events: auto; }
930  @media (max-width: 767px) { .ol-callbar { display: inline-flex; } }
931
932
933  /* --------------------------- the clause margin -------------------------- */
934  /* Ported from residential-building-contract-review on 2026-09-13, after Milan
935     approved that page: "THIS IS SO MUCH better. Can we now update all the other
936     services pages we have been doing?"
937
938     It replaces the gold uppercase eyebrow that used to sit on top of every
939     section heading. Eight of those down a page is the tell - it is the same
940     shape repeating, and it is the single biggest reason these five pages read
941     as one template. The section's number and a short rule sit OUT in the left
942     margin instead, which costs no vertical space and gives the eye something
943     to track down the page other than the centre line.
944
945     It is applied to the head wrapper each page already had rather than
946     replacing it, so the grid only governs the head: the section's body content
947     still starts at the container edge, and the heading is the thing that is
948     indented. Declared late in the sheet on purpose - it has to beat
949     .ol-sec-head and .ol-col, which are single classes too, on source order. */
950  .rc-head {
951    display: grid;
952    grid-template-columns: 88px minmax(0, 1fr);
953    column-gap: ${(0,n.ui)("Gutter")};
954    row-gap: ${(0,n.ui)("Spacing/Medium")};
955    align-items: start;
956    max-width: none;
957  }
958  .rc-head > * { grid-column: 2; }
959  .rc-head > :not(.rc-head-mark) { max-width: ${(0,n.ui)("Max-Width/Medium")}; }
960  .rc-head > .rc-head-mark { grid-column: 1; grid-row: 1; max-width: none; }
961  .rc-head-mark {
962    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/Small")};
963    padding-top: 8px;
964  }
965  /* Deliberately a size up from any ordinal inside a section. These pages
966     number things constantly - test panels, process steps, deadline rows, the
967     nine defences - and a 12px gold section marker sitting 20px from a 12px
968     gold card ordinal reads as one broken list rather than two ranks. At
969     Heading 6 it is plainly a chapter number and nothing else. */
970  .rc-head-n {
971    font-family: ${(0,n.font)("body")};
972    font-size: ${(0,n.fs)("Heading 6")};
973    font-weight: 700; line-height: 1;
974    letter-spacing: 0.06em; color: ${(0,n.c)("Text/Accent")};
975    font-variant-numeric: tabular-nums;
976  }
977  .rc-head-rule { width: 40px; height: 2px; background: ${(0,n.c)("Text/Accent")}; }
978  /* No margin to sit in on a phone, so it folds to a row above the heading and
979     reads as a small marker rather than a shouted label. */
980  @media (max-width: 899px) {
981    .rc-head { grid-template-columns: minmax(0, 1fr); }
982    .rc-head > *, .rc-head > .rc-head-mark { grid-column: 1; grid-row: auto; }
983    .rc-head-mark {
984      flex-direction: row; align-items: center;
985      gap: ${(0,n.ui)("Spacing/Medium")}; padding-top: 0;
986    }
987    .rc-head-rule { width: 28px; }
988  }
989
990  /* ---------------------------- site chrome ------------------------------- */
991  /* Review only. Ported from building-construction/page.tsx unchanged so the
992     two pages read as the same site when they are opened side by side. These
993     rules style nothing inside the export root. */
994  .ol-underline { text-decoration: underline; }
995
996  .ol-header { position: sticky; top: 0; z-index: 80; width: 100%; border-bottom: 1px solid ${(0,n.c)("Border/Divider")}; }
997  .ol-header-inner {
998    max-width: ${(0,n.ui)("Max-Width/Large")}; margin: 0 auto;
999    padding: ${(0,n.ui)("Spacing/Medium")} ${(0,n.ui)("Gutter")};
1000    display: flex; flex-wrap: wrap; align-items: center; gap: ${(0,n.ui)("Spacing/xLarge")};
1001    transition: padding 400ms cubic-bezier(0.16,1,0.3,1);
1002  }
1003  .ol-header.is-scrolled .ol-header-inner { padding-top: ${(0,n.ui)("Spacing/xSmall")}; padding-bottom: ${(0,n.ui)("Spacing/xSmall")}; }
1004  /* logo-dark.png, not logo.avif: the shipped avif has a white wordmark and is
1005     invisible on the Mist header. */
1006  .ol-logo { height: 52px; width: auto; display: block; transition: height 400ms cubic-bezier(0.16,1,0.3,1); }
1007  .ol-header.is-scrolled .ol-logo { height: 40px; }
1008  .ol-home-link { display: flex; align-items: center; flex: 0 0 auto; }
1009  .ol-desktop-nav { display: flex; flex-wrap: wrap; align-items: center; gap: ${(0,n.ui)("Spacing/Large")}; flex: 1 1 320px; }
1010  .ol-nav-link { position: relative; ${k((0,n.typeStyle)(l,"Text/xSmall/Semi-Bold"))} color: ${(0,n.c)("Text/Heading")}; }
1011  .ol-nav-link::after {
1012    content: ""; position: absolute; left: 0; bottom: -6px;
1013    width: 100%; height: 1px; background: ${(0,n.c)("Text/Accent")};
1014    transform: scaleX(0); transform-origin: right center;
1015    transition: transform 380ms cubic-bezier(0.16,1,0.3,1);
1016  }
1017  .ol-nav-link:hover::after { transform: scaleX(1); transform-origin: left center; }
1018  .ol-header-cta { display: flex; align-items: center; gap: ${(0,n.ui)("Spacing/Medium")}; flex: 0 0 auto; margin-left: auto; }
1019  .ol-header-phone {
1020    display: inline-flex; align-items: center; gap: ${(0,n.ui)("Spacing/xSmall")};
1021    ${k((0,n.typeStyle)(l,"Text/Small/Semi-Bold"))} font-family: ${(0,n.font)("body")}; color: ${(0,n.c)("Text/Heading")};
1022  }
1023  .ol-burger {
1024    display: none; align-items: center; justify-content: center;
1025    width: 42px; height: 42px; border-radius: ${(0,n.ui)("Radius/Small")};
1026    border: 1px solid ${(0,n.c)("Border/Divider")}; background: transparent; cursor: pointer;
1027  }
1028  .ol-burger-lines { display: flex; flex-direction: column; gap: 4px; }
1029  .ol-burger-line { display: block; width: 18px; height: 2px; background: ${(0,n.c)("Text/Heading")}; }
1030  .ol-mobile-nav { border-top: 1px solid ${(0,n.c)("Border/Divider")}; }
1031  .ol-mobile-nav-inner {
1032    display: flex; flex-direction: column; gap: ${(0,n.ui)("Spacing/Medium")};
1033    padding: ${(0,n.ui)("Spacing/Large")} ${(0,n.ui)("Gutter")};
1034  }
1035  .ol-mobile-nav-link { ${k((0,n.typeStyle)(l,"Text/Small/Semi-Bold"))} color: ${(0,n.c)("Text/Heading")}; }
1036  @media (max-width: 1023px) {
1037    .ol-desktop-nav { display: none; }
1038    .ol-burger { display: inline-flex; }
1039    .ol-header-phone { display: none; }
1040  }
1041
1042  .ol-contact-line {
1043    display: inline-flex; align-items: center; gap: ${(0,n.ui)("Spacing/Small")};
1044    ${k((0,n.typeStyle)(l,"Text/Small/Regular"))} color: ${(0,n.c)("Text/Default")};
1045  }
1046  .ol-contact-line a { color: ${(0,n.c)("Text/Accent")}; font-weight: 600; }
1047  .ol-contact-line a:hover { text-decoration: underline; }
1048
1049  .ol-footer-grid {
1050    display: grid; grid-template-columns: 1.3fr 1fr 1.3fr; gap: ${(0,n.ui)("Spacing/Huge")};
1051    padding-top: ${(0,n.ui)("Vertical Padding/Medium")}; padding-bottom: ${(0,n.ui)("Spacing/Huge")};
1052  }
1053  @media (max-width: 1023px) { .ol-footer-grid { grid-template-columns: minmax(0, 1fr); } }
1054  .ol-footer-heading { ${k((0,n.typeStyle)(l,"Text/Eyebrow/Small"))} color: ${(0,n.c)("Text/Heading")}; }
1055  .ol-footer-link { ${k((0,n.typeStyle)(l,"Text/xSmall/Regular"))} color: ${(0,n.c)("Text/Default")}; width: fit-content; }
1056  .ol-footer-link:hover { color: ${(0,n.c)("Text/Heading")}; }
1057  .ol-footer-wordmark { ${k((0,n.typeStyle)(l,"Heading/Heading 5"))} color: ${(0,n.c)("Text/Heading")}; }
1058  .ol-footer-services { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: ${(0,n.ui)("Spacing/xSmall")} ${(0,n.ui)("Spacing/Large")}; }
1059  @media (max-width: 767px) { .ol-footer-services { grid-template-columns: minmax(0, 1fr); } }
1060  .ol-footer-bottom { border-top: 1px solid ${(0,n.c)("Border/Divider")}; padding-top: ${(0,n.ui)("Spacing/Large")}; padding-bottom: ${(0,n.ui)("Spacing/Large")}; }
1061  .ol-footer-fineprint { ${k((0,n.typeStyle)(l,"Text/xxSmall/Regular"))} color: ${(0,n.c)("Text/Default")}; }
1062
1063  /* ------------------- the mobile frame-width clamps ---------------------- */
1064  /* Max-Width/Large, /Medium and /Small carry a MOBILE value that is the width
1065     of the mobile DESIGN FRAME - 393 - not a layout cap. tokens.tsx swaps every
1066     responsive token to its mobile value at max-width: 767px, so left alone
1067     these bind at EVERY width from 0 to 767. Measured 2026-09-14 before the
1068     fix: a 760px viewport rendered the whole page as a 393px strip with 184px
1069     of dead margin down each side, and the hero copy, the close and the review
1070     rows stayed 393 wide inside it.
1071
1072     A frame width is not a layout constraint. Below the breakpoint these fill,
1073     and Horizontal Padding/Medium (24 on mobile) still insets the container -
1074     which at 393 gives exactly the 345 column the phone is built on, unchanged.
1075
1076     NOTE: the same fault is live on yesloans-com-au, speakeasy-net-au and
1077     pennyfinance-com-au, whose Max-Width mobile values are 353. The real fix is
1078     in src/lib/tokens.tsx, which should not emit a responsive swap for
1079     Max-Width at all. Not done here - see studio/clients/odysseylegal-com-au.md. */
1080  @media (max-width: 767px) {
1081    .ol-container { max-width: none; }
1082    .ol-container-md { max-width: none; }
1083    .ol-sec-head { max-width: none; }
1084    .ol-prose { max-width: none; }
1085    .ol-measure { max-width: none; }
1086    .ol-close { max-width: none; }
1087    .ol-hero-copy { max-width: none; }
1088    .rc-head > :not(.rc-head-mark) { max-width: none; }
1089    .ol-header-inner { max-width: none; }
1090  }
1091
1092`;function er({field:e,step:t,titleIsLabel:i}){let o=`assess-${t}-${e.label.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`,s=e.required?(0,a.jsx)("span",{className:"ol-wiz-req",children:" (Required)"}):null;if("text"===e.kind)return(0,a.jsxs)("div",{className:`ol-wiz-field${e.half?" ol-wiz-field-half":""}`,children:[(0,a.jsxs)("label",{className:"ol-wiz-flabel",htmlFor:o,children:[e.label,s]}),(0,a.jsx)("input",{id:o,type:e.type??"text",className:"ol-input"})]});if("select"===e.kind)return(0,a.jsxs)("div",{className:"ol-wiz-field",children:[(0,a.jsxs)("label",{className:"ol-wiz-flabel",htmlFor:o,children:[e.label,s]}),(0,a.jsxs)("select",{id:o,className:"ol-select",defaultValue:"",children:[(0,a.jsx)("option",{value:"",disabled:!0,children:"Select one"}
1092),e.options.map(e=>(0,a.jsx)("option",{children:e},e))]})]});let n="radio"===e.kind;return(0,a.jsxs)("fieldset",{className:"ol-wiz-field",children:[(0,a.jsxs)("legend",{className:i?"ol-sr-only":"ol-wiz-flabel",children:[e.label,s]}),(0,a.jsx)("div",{className:"ol-wiz-options",children:e.options.map(e=>(0,a.jsxs)("label",{className:"ol-opt",children:[(0,a.jsx)("input",{type:n?"radio":"checkbox",name:o,className:"ol-opt-input"}),(0,a.jsx)("span",{"aria-hidden":"true",className:`ol-opt-mark${n?"":" ol-opt-mark-box"}`,children:(0,a.jsx)(H,{})}),(0,a.jsx)("span",{className:"ol-opt-text",children:e})]},e))})]})}function ed({children:e,onBand:t}){return(0,a.jsxs)("div",{"data-scheme":t?void 0:"Olive",className:`ol-callout${t?" ol-callout-onband":""}`,children:[(0,a.jsx)("img",{src:`${d}/mark.png`,alt:"Odyssey Legal",className:"ol-callout-mark"}),(0,a.jsx)("div",{className:"ol-callout-body",children:e}),(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-callout-ghost"})]})}function ec(){return(0,a.jsxs)("div",{className:"ol-cta-strip",children:[(0,a.jsxs)("a",{href:m,className:"ol-btn ol-btn-primary",children:[(0,a.jsx)(T,{}),"Speak to our Experts: ",p]}),(0,a.jsxs)("a",{href:f,className:"ol-btn ol-btn-secondary",children:["Start Fast-Track Assessment",(0,a.jsx)(B,{})]})]})}e.s(["default",0,function(){let e=(0,t.useRef)(null),[s,g]=(0,t.useState)(!1),[y,$]=(0,t.useState)(0),[k,N]=(0,t.useState)(!1),[_,J]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{let e=()=>{g(window.scrollY>700),N(window.scrollY>40)};return e(),window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,a.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,a.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=swap",rel:"stylesheet"}),(0,a.jsx)(n.TokenStyles,{tokens:l,defaultScheme:"Mist"}),(0,a.jsx)("style",{dangerouslySetInnerHTML:{__html:el}}),(0,a.jsxs)("div",{className:"tk",children:[(0,a.jsxs)("header",{"data-scheme":"Mist",className:`ol-header${k?" is-scrolled":""}`,children:[(0,a.jsxs)("div",{className:"ol-header-inner",children:[(0,a.jsx)("a",{href:`${h}/`,className:"ol-home-link",children:(0,a.jsx)("img",{src:`${r}/logo-dark.png`,alt:"Odyssey Legal",className:"ol-logo"})}),(0,a.jsx)("nav",{className:"ol-desktop-nav",children:w.map(e=>(0,a.jsx)("a",{href:e.href,className:"ol-nav-link",children:e.label},e.label))}),(0,a.jsxs)("div",{className:"ol-header-cta",children:[(0,a.jsxs)("a",{href:m,className:"ol-header-phone",children:[(0,a.jsx)(T,{}),p]}),(0,a.jsx)("a",{href:u,className:"ol-btn ol-btn-primary",children:"Speak to our Experts"}),(0,a.jsx)("button",{className:"ol-burger",onClick:()=>J(e=>!e),"aria-label":_?"Close menu":"Open menu","aria-expanded":_,children:(0,a.jsxs)("span",{className:"ol-burger-lines",children:[(0,a.jsx)("span",{className:"ol-burger-line"}),(0,a.jsx)("span",{className:"ol-burger-line"}),(0,a.jsx)("span",{className:"ol-burger-line"})]})})]})]}),_&&(0,a.jsx)("div",{className:"ol-mobile-nav",children:(0,a.jsxs)("div",{className:"ol-mobile-nav-inner",children:[w.map(e=>(0,a.jsx)("a",{href:e.href,className:"ol-mobile-nav-link",children:e.label},e.label)),(0,a.jsx)("a",{href:m,className:"ol-mobile-nav-link",children:p})]})})]}),(0,a.jsxs)("div",{ref:e,className:"tk",children:[(0,a.jsxs)("main",{children:[(0,a.jsxs)("section",{id:"hero","data-scheme":"Olive",className:"ol-hero",children:[(0,a.jsx)("span",{className:"ol-hero-shot",children:(0,a.jsx)("img",{src:`${d}/walking-phone.webp`,alt:"Damon Laffin on the phone walking past planting outside the office",className:"ol-hero-bg"})}),(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-hero-scrim"}),(0,a.jsx)("div",{className:"ol-container ol-hero-inner",children:(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-col ol-gap-lg ol-hero-copy",children:[(0,a.jsx)("div",{className:"ol-eyebrow-row",children:(0,a.jsx)("span",{className:"ol-eyebrow",children:"Defamation"})}),(0,a.jsx)("h1",{className:"ol-h1",children:z}),(0,a.jsx)("p",{className:"ol-lead",children:C}),(0,a.jsxs)("div",{className:"ol-hero-points",children:[(0,a.jsxs)("span",{className:"ol-hero-point",children:[(0,a.jsx)(H,{}),"Free 15-minute initial consultation"]}),(0,a.jsxs)("span",{className:"ol-hero-point",children:[(0,a.jsx)(H,{}),"Acting on both sides of a dispute"]}),(0,a.jsxs)("span",{className:"ol-hero-point",children:[(0,a.jsx)(H,{}),"Acting Queensland-wide"]})]}),(0,a.jsxs)("div",{className:"ol-btn-row",children:[(0,a.jsxs)("a",{href:m,className:"ol-btn ol-btn-primary",children:[(0,a.jsx)(T,{}),"Speak to our Experts: ",p]}),(0,a.jsxs)("a",{href:f,className:"ol-btn ol-btn-secondary",children:["Start Fast-Track Assessment",(0,a.jsx)(B,{})]})]})]})})})]}),(0,a.jsx)("section",{id:"assessment","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-b ol-pad-tight-t",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsxs)("div",{className:"ol-sec-head rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"01"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"Start with the Fast-Track Assessment"}),(0,a.jsx)("p",{className:"ol-lead",children:"Tell us what has been published and where. It takes about a minute, and the limitation period on a defamation claim is one year from publication."})]}),(0,a.jsx)(S,{children:(0,a.jsx)("div",{id:"quick-assessment","data-scheme":"Olive",className:"ol-tl",children:(0,a.jsxs)("div",{className:"ol-tl-inner",children:[(0,a.jsx)("h3",{className:"ol-h3",children:"Need a defamation response drafted quickly? Start here."}),(0,a.jsxs)("div",{className:"ol-wiz-rail",role:"tablist","aria-label":"Fast-Track Assessment steps",children:[(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-wiz-progress",style:{transform:`scaleX(${U.length>1?y/(U.length-1):0})`}}),U.map((e,t)=>(0,a.jsxs)("button",{type:"button",role:"tab",id:`assess-tab-${t}`,"aria-selected":t===y,"aria-controls":"assess-panel","aria-label":`Step ${t+1}: ${e.short}`,className:`ol-wiz-step${t===y?" is-active":t<y?" is-done":""}`,onClick:()=>$(t),children:[(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-wiz-node",children:t+1}),(0,a.jsx)("span",{className:"ol-wiz-label",children:e.short})]},e.short))]}),(0,a.jsxs)("div",{className:"ol-wiz-panel",id:"assess-panel",role:"tabpanel","aria-labelledby":`assess-tab-${y}`,children:[(0,a.jsx)("h4",{className:"ol-h4",children:U[y].title}),(0,a.jsx)("div",{className:"ol-wiz-fields",children:U[y].fields.map(e=>(0,a.jsx)(er,{field:e,step:y,titleIsLabel:1===U[y].fields.length&&e.label===U[y].title},e.label))}),(0,a.jsxs)("div",{className:"ol-wiz-nav",children:[(0,a.jsx)("button",{type:"button",className:"ol-btn ol-btn-secondary",onClick:()=>$(e=>Math.max(0,e-1)),disabled:0===y,children:"Back"}),y<U.length-1?(0,a.jsxs)("button",{type:"button",className:"ol-btn ol-btn-primary",onClick:()=>$(e=>Math.min(U.length-1,e+1)),children:["Next",(0,a.jsx)(B,{})]}):(0,a.jsx)("button",{type:"button",className:"ol-btn ol-btn-primary",children:"Submit"}),(0,a.jsxs)("span",{className:"ol-wiz-count",children:[String(y+1).padStart(2,"0")," /"," ",String(U.length).padStart(2,"0")]})]})]}),(0,a.jsxs)("p",{className:"ol-wiz-note",children:["Or call"," ",(0,a.jsx)("a",{className:"ol-inline-link",href:m,children:p})," ","and speak to our experts directly."]})]})})})]})})}),(0,a.jsx)("section",{id:"what-is-defamation","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-b",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-sec-head rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"02"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"What Is Defamation?"}),(0,a.jsxs)("p",{className:"ol-lead",children:["Defamation occurs when a false statement about a person or business is published to someone else and causes serious harm to their reputation. Under the"," ",(0,a.jsx)("a",{className:"ol-inline-link",href:b,children:"Defamation Act 2005 (Qld)"}),", a plaintiff needs to establish four things:"]})]})}),(0,a.jsx)(S,{children:(0,a.jsx)("div",{"data-scheme":"Olive",className:"ol-test-panel ol-test-panel-4",children:O.map(e=>(0,a.jsxs)("div",{className:"ol-test-cell",children:[(0,a.jsx)("span",{className:"ol-test-icon",children:e.icon}),(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-test-rule"}),(0,a.jsx)("span",{className:"ol-test-text",children:e.name}),(0,a.jsx)("span",{className:"ol-test-gloss",children:e.text})]},e.name))})}),(0,a.jsx)(S,{children:(0,a.jsx)(ed,{children:(0,a.jsxs)("p",{className:"ol-body-sm",children:["Since 2021 amendments to the Act, a plaintiff also carries the burden of proving"," ",(0,a.jsx)("strong",{className:"ol-strong",children:"serious harm"})," ","under section 10A, a threshold that shifted the earlier default in the plaintiff's favour. For a business, harm to reputation only counts if it's caused, or is likely to cause, serious financial loss."]})})}),(0,a.jsx)(S,{children:(0,a.jsx)(ec,{})})]})})}),(0,a.jsx)("section",{id:"online","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-t",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsxs)("div",{className:"ol-media-split ol-media-split-top",children:[(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-col ol-gap-lg rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"03"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"Google Reviews and Social Media Defamation"}),(0,a.jsx)("p",{className:"ol-body",children:"Most of the defamation enquiries we see start online. A one-star Google review claiming fraud that never happened. A Facebook comment accusing a tradesperson of shoddy work. An Instagram post making false claims about a business owner. These are treated the same way under the Act as a printed statement, and the same four elements apply."}),(0,a.jsx)("p",{className:"ol-body",children:"Small businesses have a real path here. A business with fewer than 10 employees, or a not-for-profit, can sue for defamation directly. Medium to large businesses generally can't, though they may have a claim for tortious interference instead, a related but separate legal avenue worth raising with us if that's your situation."})]})}),(0,a.jsx)(S,{delay:120,children:(0,a.jsx)("div",{className:"ol-media-frame ol-media-frame-tall",children:(0,a.jsx)("img",{src:`${c}/online-review.webp`,alt:"Smartphone showing social media post relevant to a defamation dispute",className:"ol-media-img"})})})]}),(0,a.jsx)(S,{children:(0,a.jsx)("div",{"data-scheme":"Olive",className:"ol-standing",children:I.map(e=>(0,a.jsxs)("div",{className:"ol-standing-row",children:[(0,a.jsx)("span",{"aria-hidden":"true",className:`ol-standing-badge${e.ok?"":" ol-standing-badge-off"}`,children:e.ok?(0,a.jsx)(H,{}):(0,a.jsx)(q,{})}),(0,a.jsxs)("span",{className:"ol-col ol-gap-xs",children:[(0,a.jsx)("span",{className:"ol-body-sm",children:e.who}),(0,a.jsx)("span",{className:"ol-lede-title",children:e.verdict}),e.trail&&(0,a.jsx)("span",{className:"ol-body-sm",children:e.trail})]})]},e.who))})}),(0,a.jsx)(S,{children:(0,a.jsxs)(ed,{children:[(0,a.jsx)("p",{className:"ol-body-sm",children:"The instinct to respond publicly to a bad review is usually the wrong one. It rarely resolves anything and can complicate a later claim."}),(0,a.jsx)("p",{className:"ol-body-sm",children:"Documenting the publication, screenshotting it before it can be edited or deleted, and getting advice on whether a concerns notice is the right next step protects your position far better than a public reply does."})]})})]})})}),(0,a.jsx)("section",{id:"concerns-notice","data-scheme":"Olive",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-sec-head rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"04"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"The Concerns Notice Process"}),(0,a.jsx)("p",{className:"ol-body",children:"A concerns notice is the mandatory first step before defamation proceedings can start. Under section 12B of the Act, an aggrieved person can't 
1092commence proceedings unless they've served a concerns notice, particularised the defamatory imputations in it, and let the response period run its course."})]})}),(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-tl ol-tl-onband",children:[(0,a.jsx)("img",{src:`${d}/signing-hands.webp`,alt:"Close crop of hands signing a legal document",className:"ol-tl-bg"}),(0,a.jsx)("div",{className:"ol-tl-inner",children:(0,a.jsx)("ol",{className:"ol-track",children:P.map((e,t)=>(0,a.jsxs)("li",{className:"ol-track-col",children:[(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-track-node",children:t+1}),(0,a.jsx)("span",{className:"ol-track-when",children:e.short}),(0,a.jsx)("h3",{className:"ol-h4",children:e.stage}),(0,a.jsx)("p",{className:"ol-body-sm",children:e.what}),(0,a.jsxs)("span",{className:"ol-stat",children:[(0,a.jsx)("span",{className:"ol-stat-label",children:"Timeframe"}),(0,a.jsx)("span",{className:"ol-stat-value",children:e.time})]})]},e.stage))})})]})}),(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-req",children:[(0,a.jsxs)("div",{className:"ol-col ol-gap-xl",children:[(0,a.jsx)("p",{className:"ol-lead",children:"To be valid under section 12A, a concerns notice must:"}),(0,a.jsx)(ed,{onBand:!0,children:(0,a.jsx)("p",{className:"ol-body-sm",children:"Get this document wrong and the consequences aren't minor. A defective or improperly served concerns notice can mean any proceedings you later commence get struck out, and you could be liable for the publisher's legal costs."})})]}),(0,a.jsx)("ol",{className:"ol-req-list",children:W.map((e,t)=>(0,a.jsxs)("li",{className:"ol-req-row",children:[(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-req-num",children:String(t+1).padStart(2,"0")}),(0,a.jsx)("span",{className:"ol-lede-title",children:e})]},e))})]})}),(0,a.jsx)(S,{children:(0,a.jsx)(ec,{})})]})})}),(0,a.jsx)("section",{id:"defences","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-b",children:(0,a.jsx)("div",{className:"ol-col ol-gap-xl",children:(0,a.jsx)(S,{children:(0,a.jsxs)("div",{"data-scheme":"Olive",className:"ol-tl",children:[(0,a.jsx)("img",{src:`${c}/defences-desk.webp`,alt:"Reviewing defamation defences and legal documents in Queensland",className:"ol-tl-bg"}),(0,a.jsxs)("div",{className:"ol-tl-inner",children:[(0,a.jsxs)("div",{className:"ol-col ol-gap-md rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"05"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"Defences to a Defamation Claim"}),(0,a.jsx)("p",{className:"ol-body ol-measure",children:"Not every damaging statement is defamatory, and not every defamatory statement leads to a successful claim. The Act sets out several defences a publisher can rely on."})]}),(0,a.jsx)("ul",{className:"ol-test-panel ol-test-panel-9",children:F.map((e,t)=>(0,a.jsxs)("li",{className:"ol-test-cell",children:[(0,a.jsx)("span",{className:"ol-test-num","aria-hidden":"true",children:String(t+1).padStart(2,"0")}),(0,a.jsx)("span",{className:"ol-test-text",children:e.name}),(0,a.jsx)("span",{className:"ol-test-gloss",children:e.means})]},e.name))}),(0,a.jsx)("p",{className:"ol-body ol-measure",children:"Which of these applies, if any, depends heavily on the specific wording and context of the publication, which is exactly the kind of assessment worth getting right before deciding how to respond."})]})]})})})})}),(0,a.jsx)("section",{id:"how-we-assist","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-t",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-sec-head rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"06"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"How We Can Assist"}),(0,a.jsx)("p",{className:"ol-body",children:R}),(0,a.jsx)("p",{className:"ol-lead",children:"Odyssey Legal's defamation work covers both sides of a dispute:"})]})}),(0,a.jsx)(S,{children:(0,a.jsx)("div",{className:"ol-grid-3",children:E.map(e=>(0,a.jsxs)("div",{"data-scheme":"Olive",className:"ol-service-card",children:[(0,a.jsx)("span",{className:"ol-service-icon",children:e.icon}),(0,a.jsx)("p",{className:"ol-service-text",children:e.body})]},e.body))})}),(0,a.jsx)(S,{children:(0,a.jsx)(ec,{})})]})})}),(0,a.jsx)("section",{id:"why","data-scheme":"Olive",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-sec-head rc-head",children:[(0,a.jsxs)("div",{className:"rc-head-mark","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"rc-head-n",children:"07"}),(0,a.jsx)("span",{className:"rc-head-rule"})]}),(0,a.jsx)("h2",{className:"ol-h1",children:"Why Odyssey Legal for Defamation Matters"}),(0,a.jsx)("p",{className:"ol-lead",children:Q})]})}),(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-bio",children:[(0,a.jsx)("div",{className:"ol-bio-media",children:(0,a.jsx)("img",{src:`${d}
1092/portrait-principal.webp`,alt:"Damon Laffin, Legal Practice Director at Odyssey Legal",className:"ol-bio-img"})}),(0,a.jsxs)("div",{className:"ol-bio-body",children:[(0,a.jsxs)("div",{className:"ol-col ol-gap-xs",children:[(0,a.jsx)("span",{className:"ol-bio-role",children:"Legal Practice Director"}),(0,a.jsx)("h3",{className:"ol-h3",children:"Damon Laffin"})]}),(0,a.jsx)("p",{className:"ol-body-sm",children:G}),(0,a.jsx)("div",{className:"ol-bio-stats",children:Y.map(e=>(0,a.jsxs)("div",{className:"ol-col ol-gap-xs",children:[(0,a.jsx)("span",{className:"ol-bio-figure",children:e.figure}),(0,a.jsx)("span",{className:"ol-bio-label",children:e.label})]},e.label))})]})]})})]})})}),(0,a.jsx)("section",{id:"protect","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-b",children:(0,a.jsx)("div",{className:"ol-col ol-gap-xxl",children:(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-close",children:[(0,a.jsx)("div",{className:"ol-eyebrow-row",children:(0,a.jsx)("span",{className:"ol-eyebrow",children:"Fast-Track Assessment"})}),(0,a.jsx)("h2",{className:"ol-h2",children:"Protect Your Reputation"}),(0,a.jsx)("p",{className:"ol-lead",children:V}),(0,a.jsx)("div",{className:"ol-close-actions",children:(0,a.jsxs)("a",{href:f,className:"ol-btn ol-btn-primary",children:["Start Fast-Track Assessment",(0,a.jsx)(B,{})]})}),(0,a.jsxs)("p",{className:"ol-body-sm",children:["If the publication is recent, start here rather than waiting: the limitation period on a defamation claim is one year. Or call"," ",(0,a.jsx)("a",{className:"ol-inline-link",href:m,children:p})," ","if you would rather talk it through first."]})]})})})})}),(0,a.jsx)("section",{id:"faqs","data-scheme":"Mist",children:(0,a.jsx)("div",{className:"ol-container ol-section-pad ol-pad-tight-t",children:(0,a.jsxs)("div",{className:"ol-col ol-gap-xxl",children:[(0,a.jsx)(S,{children:(0,a.jsxs)("div",{"data-scheme":"Olive",className:"ol-faq-panel",children:[(0,a.jsx)("h2",{className:"ol-h2",children:"FAQs"}),(0,a.jsx)("div",{className:"ol-faq",children:K.map(e=>(0,a.jsxs)("details",{id:e.id,className:"ol-faq-item",children:[(0,a.jsxs)("summary",{className:"ol-faq-q",children:[(0,a.jsx)("span",{className:"ol-faq-icon","aria-hidden":"true",children:(0,a.jsx)(L,{})}),e.q]}),(0,a.jsx)("div",{className:"ol-faq-a",children:e.a.map(e=>(0,a.jsx)("p",{className:"ol-body-sm",children:e},e))})]},e.id))})]})}),(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"ol-col ol-gap-lg",children:[(0,a.jsx)("h3",{className:"ol-h4",children:"Related information"}),(0,a.jsx)("div",{className:"ol-links",children:X.map(e=>(0,a.jsxs)("a",{className:"ol-link-row",href:e.url,children:[(0,a.jsx)("span",{"aria-hidden":"true",className:"ol-link-arrow",children:(0,a.jsx)(B,{})}),(0,a.jsxs)("span",{className:"ol-col ol-gap-xs",children:[(0,a.jsx)("span",{className:"ol-link-label",children:e.label}),(0,a.jsx)("span",{className:"ol-link-note",children:e.note})]})]},e.url))})]})})]})})})]}),(0,a.jsxs)("a",{className:`ol-callbar${s?" is-visible":""}`,href:m,children:[(0,a.jsx)(T,{}),"Call ",p]})]}),(0,a.jsx)("footer",{"data-scheme":"Olive",children:(0,a.jsxs)("div",{className:"ol-container",children:[(0,a.jsxs)("div",{className:"ol-footer-grid",children:[(0,a.jsxs)("div",{className:"ol-col ol-gap-lg",children:[(0,a.jsx)("span",{className:"ol-footer-wordmark",children:"Odyssey Legal"}),(0,a.jsxs)("div",{className:"ol-col ol-gap-sm",children:[(0,a.jsxs)("span",{className:"ol-contact-line",children:[(0,a.jsx)(D,{}),"Monday - Friday 8:30am - 5:00pm"]}),(0,a.jsxs)("span",{className:"ol-contact-line",children:[(0,a.jsx)(A,{}),"Po Box 5318, Maroochydore BC QLD 4558"]}),(0,a.jsxs)("span",{className:"ol-contact-line",children:[(0,a.jsx)(T,{}),(0,a.jsx)("a",{href:m,children:p})]}),(0,a.jsxs)("span",{className:"ol-contact-line",children:[(0,a.jsx)(M,{}),(0,a.jsx)("a",{href:`mailto:${x}`,children:x})]})]})]}),(0,a.jsxs)("div",{className:"ol-col ol-gap-md",children:[(0,a.jsx)("span",{className:"ol-footer-heading",children:"Quick Links"}),(0,a.jsx)("div",{className:"ol-col ol-gap-xs",children:v.map(e=>(0,a.jsx)("a",{href:e.href,className:"ol-footer-link",children:e.label},e.label))})]}),(0,a.jsxs)("div",{className:"ol-col ol-gap-md",children:[(0,a.jsx)("span",{className:"ol-footer-heading",children:"Legal Services"}),(0,a.jsx)("div",{className:"ol-footer-services",children:j.map((e,t)=>(0,a.jsx)("a",{href:e.href,className:"ol-footer-link",children:e.label},`${e.label}-${t}`))})]})]}),(0,a.jsx)("div",{className:"ol-footer-bottom",children:(0,a.jsxs)("p",{className:"ol-footer-fineprint",children:["© 2025 by Odyssey Legal ™. All rights reserved. |"," ",(0,a.jsx)("a",{href:`${h}/terms/`,className:"ol-underline",children:"Terms"})," ","|"," ",(0,a.jsx)("a",{href:`${h}/privacy-policy/`,className:"ol-underline",children:"Privacy Policy"})]})})]})})]}),(0,a.jsx)(i.default,{contentRef:e,clientSlug:"odysseylegal-com-au",campaignSlug:"defamation",pageData:en,theme:o.default})]})}])}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.