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.