             let center = self.eval(0.5 * (s + t))
             guard let a = _offset_point(0.5 * (s + t))?.distance(to: center) else { return }
             
-            let arc = BezierArc(angle).map { a * $0 * SDTransform.rotate(d0.phase - 0.5 * .pi) + center }
+            let arc = BezierArc(angle).map { a * $0 * SDTransform.rotate(angle < 0 ? d0.phase + 0.5 * .pi : d0.phase - 0.5 * .pi) + center }
             var s = s
             
             for i in 0..<arc.count / 3 {

    @inlinable
    public func offset(_ a0: Double, _ a1: Double) -> LineSegment? {
        
        if a0.almostZero() && a1.almostZero() {
            return self
        }
        
        let r0 = abs(a0)
        let r1 = abs(a1)

        if abs(angle) > 0.25 * .pi {
            
            let center = self.eval(0.5 * (s + t))
            let arc = BezierArc(angle).map { a * $0 * SDTransform.rotate(angle < 0 ? d0.phase + 0.5 * .pi : d0.phase - 0.5 * .pi) + center }
            var s = s
            
            for i in 0..<arc.count / 3 {
