Skip to content

Refine Connect your tools hero responsiveness and geometry#15

Merged
NguyenCuong1989 merged 1 commit into
mainfrom
codex/linear-mention-www-3-connect-your-tools-3-3cqls8
Apr 10, 2026
Merged

Refine Connect your tools hero responsiveness and geometry#15
NguyenCuong1989 merged 1 commit into
mainfrom
codex/linear-mention-www-3-connect-your-tools-3-3cqls8

Conversation

@NguyenCuong1989
Copy link
Copy Markdown
Collaborator

@NguyenCuong1989 NguyenCuong1989 commented Mar 29, 2026

Motivation

  • Improve visual fidelity of the “Connect your tools” hero to better match the Linear reference while hardening layout for responsive and production use.
  • Remove brittle pixel-based sizing and positioning so the icon lockup scales consistently across viewports and DPRs.
  • Add technical guards for layout containment and motion accessibility to make future animation safe and stable.

Description

  • Unified connect-your-tools.html and examples/connect-your-tools.html to the same final implementation and replaced fixed pixel geometry with CSS variables: --icon-size, --icon-gap, and --cluster-shift-y.
  • Tuned gradient stop positions and color tokens (--bg-start, --bg-mid, --bg-end, --icon-bg, --icon-accent) to reduce contrast jumps and improve fidelity.
  • Reworked icon composition so the Linear stripes are rendered via a radial/linear background and the plus glyph dimensions are expressed as percentages of the icon diameter (e.g. width: 44%, height: 10.5%) for consistent stroke scaling.
  • Added stability/accessibility guards: overflow: hidden, contain: layout paint, min-height: 100vh, and a @media (prefers-reduced-motion: reduce) rule.

Testing

  • Parsed both files with Python html.parser to validate HTML syntax; the parse succeeded for connect-your-tools.html and examples/connect-your-tools.html.
  • Ran a local preview using python3 -m http.server and validated HTTP reachability with curl -I http://127.0.0.1:4173/connect-your-tools.html; the server responded 200 OK.
  • Ran whitespace/lint integrity via git diff --check; no whitespace errors were reported.
  • Captured a visual verification screenshot using a Playwright script; screenshot artifact was produced successfully.

Codex Task

Summary by Sourcery

Thống nhất cách triển khai phần “Connect your tools” hero trên các trang, đồng thời giúp bố cục của nó phản hồi tốt hơn, tinh chỉnh thẩm mỹ và đảm bảo an toàn về khả năng truy cập.

Tính năng mới:

  • Giới thiệu các thuộc tính tùy chỉnh CSS cho kích thước biểu tượng, khoảng cách và độ lệch theo chiều dọc để cho phép phóng to/thu nhỏ minh họa hero một cách linh hoạt.

Cải tiến:

  • Căn chỉnh nền chuyển sắc (gradient), màu biểu tượng và cách render Linear mark giữa trang chính và trang ví dụ để đảm bảo tính nhất quán về mặt thị giác.
  • Tái cấu trúc cấu trúc và ngữ nghĩa của cụm biểu tượng, bao gồm cập nhật aria label, để diễn đạt rõ hơn minh họa “các công cụ được kết nối”.
  • Thêm containment cho bố cục, chiều cao toàn bộ viewport và xử lý overflow để tăng độ ổn định trên các kích thước viewport và thiết bị khác nhau.
  • Thêm media query prefers-reduced-motion để tắt animation và transition cho người dùng nhạy cảm với chuyển động.
Original summary in English

Summary by Sourcery

Unify the “Connect your tools” hero implementation across pages while making its layout more responsive, visually refined, and accessibility-safe.

New Features:

  • Introduce CSS custom properties for icon size, spacing, and vertical offset to allow responsive scaling of the hero illustration.

Enhancements:

  • Align the gradient background, icon colors, and Linear mark rendering between the main and example pages for consistent visual fidelity.
  • Refactor the icon lockup structure and semantics, including updated aria labels, to better express the connected tools illustration.
  • Add layout containment, full-viewport height, and overflow handling to improve robustness across viewports and devices.
  • Add a prefers-reduced-motion media query to disable animations and transitions for motion-sensitive users.

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Unify and refine Connect your tools hero with responsive geometry

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Unified both HTML files with consistent CSS variables for responsive scaling
• Replaced pixel-based sizing with fluid clamp() functions for icon dimensions and gaps
• Refined gradient colors and stripe geometry for improved visual fidelity
• Added accessibility and stability guards: contain: layout paint, overflow: hidden, and
  prefers-reduced-motion support
Diagram
flowchart LR
  A["Fixed Pixel Sizing"] -->|"Replace with clamp()"| B["Responsive CSS Variables"]
  C["Brittle Stripe Elements"] -->|"Simplify to gradients"| D["Scalable Pseudo-elements"]
  E["Inconsistent Files"] -->|"Unify implementation"| F["Single Source of Truth"]
  B --> G["Production-Ready Layout"]
  D --> G
  F --> G
Loading

Grey Divider

File Changes

1. connect-your-tools.html ✨ Enhancement +38/-24

Refactor to CSS variables and responsive geometry

• Introduced three CSS variables (--icon-size, --icon-gap, --cluster-shift-y) using clamp()
 for fluid responsive scaling
• Updated gradient color tokens to match Linear reference design with refined stop positions
 (124deg, 4%, 53%, 98%)
• Converted plus icon dimensions from pixel-based clamp() to percentage-based (44% width, 10.5%
 height) for consistent scaling
• Added layout containment (contain: layout paint), overflow hidden, and prefers-reduced-motion
 accessibility rule
• Adjusted Linear stripe gradient stops for improved visual fidelity and reduced contrast jumps

connect-your-tools.html


2. examples/connect-your-tools.html ✨ Enhancement +63/-105

Consolidate to unified responsive implementation

• Unified with connect-your-tools.html by adopting identical CSS variable structure and naming
 conventions
• Removed 42 lines of brittle stripe positioning code (individual .stripe elements with hardcoded
 transforms)
• Replaced complex mask and stripe composition with simple radial/linear gradient pseudo-elements
• Standardized HTML structure: renamed .icons to .logos, .circle to .logo, and simplified
 markup from 9 elements to 2
• Added layout containment, accessibility labels, and prefers-reduced-motion support

examples/connect-your-tools.html


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Mar 29, 2026

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented Mar 29, 2026

Hướng dẫn dành cho người review

Tái cấu trúc phần hero "Connect your tools" trong cả file HTML chính và file ví dụ để sử dụng các biến CSS dùng chung, responsive, gradient được cập nhật và cách render icon chính xác về mặt hình học, đồng thời bổ sung containment cho layout và các biện pháp đảm bảo khả năng truy cập liên quan đến chuyển động.

Sơ đồ lớp cho cấu trúc và style mới của hero Connect your tools

classDiagram
  class Root {
    +--bg-start
    +--bg-mid
    +--bg-end
    +--icon-bg
    +--icon-accent
    +--icon-size
    +--icon-gap
    +--cluster-shift-y
  }

  class HtmlBody {
    +min-height : 100vh
    +overflow : hidden
    +display : grid
    +place-items : center
    +background : linear-gradient(124deg, var(--bg-start), var(--bg-mid), var(--bg-end))
    +font-family : Inter ui-sans-serif system-ui
  }

  class LogosMain {
    +class : logos
    +display : flex
    +align-items : center
    +justify-content : center
    +gap : var(--icon-gap)
    +transform : translateY(var(--cluster-shift-y))
    +contain : layout paint
    +aria-label : Connected tools illustration
  }

  class LogoBase {
    +class : logo
    +width : var(--icon-size)
    +aspect-ratio : 1
    +border-radius : 50percent
    +background : var(--icon-bg)
    +position : relative
    +overflow : hidden
    +flex : 0 0 auto
  }

  class LinearLogo {
    +class : linear
    +pseudo-element : ::before
    +background : linear-gradient with accent stripes
  }

  class PlusLogo {
    +class : plus
    +pseudo-elements : ::before ::after
    +plus_bar_width : 44percent
    +plus_bar_height : 10.5percent
    +border-radius : 999px
  }

  class MotionReducedMedia {
    +media : prefers-reduced-motion reduce
    +disable : animation
    +disable_transition : transition
  }

  class SmallViewportMedia {
    +media : max-width 480px
    +override : --cluster-shift-y
  }

  Root <|-- HtmlBody
  HtmlBody *-- LogosMain
  LogosMain *-- LogoBase
  LogoBase <|-- LinearLogo
  LogoBase <|-- PlusLogo
  Root <.. LogosMain : uses variables
  Root <.. LogoBase : uses variables
  Root <.. SmallViewportMedia : overrides variable
  MotionReducedMedia <.. HtmlBody : applies to all elements
Loading

Sơ đồ luồng cho kích thước responsive và khả năng truy cập trong hero

flowchart TD
  VP[Viewport size and DPR] --> CV[CSS custom properties
--icon-size --icon-gap --cluster-shift-y]

  CV --> LM[Logos main container
flex layout gap and translate]
  CV --> LG[Logo elements
width and layout]

  VP --> MQ480[Media query max-width 480px]
  MQ480 --> CV

  PRM[User prefers-reduced-motion setting] --> MQRM[Media query prefers-reduced-motion reduce]
  MQRM --> DS[Disable animations and transitions
for all elements]

  LG --> VIS[Final hero icon geometry
Linear stripes and plus glyph]
  LM --> VIS
Loading

Thay đổi ở cấp độ file

Thay đổi Chi tiết File
Hợp nhất phần triển khai hero trong file ví dụ với phiên bản chính và chuyển toàn bộ hình học cố định sang CSS responsive, được token hóa cho icon và nền.
  • Thay thế các token màu cũ bằng token nền và icon mới, đồng thời giới thiệu các biến CSS cho kích thước icon, khoảng cách và độ lệch dọc của cụm (cluster vertical offset).
  • Tái cấu trúc container layout từ .icons sang .logos, canh giữa bằng flexbox, dùng khoảng cách và transform dựa trên biến, và bật contain: layout paint để tăng độ ổn định.
  • Thiết kế lại glyph Linear và dấu cộng (plus) sao cho các sọc được render qua gradient background trên .logo.linear::before và các thanh ngang/dọc của dấu cộng tỉ lệ theo phần trăm đường kính icon hình tròn, loại bỏ các phần tử sọc theo pixel và các tinh chỉnh media query.
  • Điều chỉnh lại ngữ nghĩa nội dung chính để phần minh họa được mô tả bằng aria-label đã cập nhật cho từng logo và container, loại bỏ các span chỉ mang tính trang trí.
examples/connect-your-tools.html
Căn chỉnh phần triển khai hero chính với hình học responsive mới, cấu trúc icon và các biện pháp đảm bảo khả năng truy cập được sử dụng trong file ví dụ.
  • Chuẩn hóa các token màu ở root và giới thiệu các biến CSS dùng chung cho kích thước icon, khoảng cách icon và độ lệch dọc của cụm để thay thế cho các giá trị clamp() trước đây và các transform cố định.
  • Cập nhật layout của body để đảm bảo phủ toàn bộ viewport với min-height: 100vh, overflow: hidden và điều chỉnh nhẹ góc cũng như các điểm dừng của gradient.
  • Điều chỉnh .logos.logo để sử dụng biến kích thước và khoảng cách mới, canh giữa, dùng flex: 0 0 autocontain: layout paint để render có thể dự đoán được.
  • Tinh chỉnh lại vị trí điểm dừng gradient cho các sọc trong logo Linear và chuyển kích thước glyph dấu cộng từ pixel dựa trên clamp() sang kích thước dựa trên phần trăm gắn với đường kính icon.
  • Thay thế tinh chỉnh responsive dựa trên width trước đây bằng việc override biến root --cluster-shift-y ở viewport nhỏ và thêm một guard prefers-reduced-motion toàn cục để vô hiệu hóa animation và transition.
connect-your-tools.html

Mẹo và câu lệnh

Tương tác với Sourcery

  • Kích hoạt một lượt review mới: Comment @sourcery-ai review trên pull request.
  • Tiếp tục thảo luận: Trả lời trực tiếp vào các comment review của Sourcery.
  • Tạo GitHub issue từ một comment review: Yêu cầu Sourcery tạo issue từ một comment review bằng cách trả lời vào comment đó. Bạn cũng có thể trả lời một comment review với @sourcery-ai issue để tạo issue từ comment đó.
  • Tạo tiêu đề pull request: Viết @sourcery-ai ở bất kỳ đâu trong tiêu đề pull request để tạo tiêu đề bất cứ lúc nào. Bạn cũng có thể comment @sourcery-ai title trên pull request để (tái) tạo tiêu đề bất cứ lúc nào.
  • Tạo tóm tắt pull request: Viết @sourcery-ai summary ở bất kỳ đâu trong phần nội dung pull request để tạo tóm tắt PR tại đúng vị trí bạn muốn. Bạn cũng có thể comment @sourcery-ai summary trên pull request để (tái) tạo tóm tắt bất cứ lúc nào.
  • Tạo reviewer's guide: Comment @sourcery-ai guide trên pull request để (tái) tạo hướng dẫn dành cho người review bất cứ lúc nào.
  • Resolve tất cả comment của Sourcery: Comment @sourcery-ai resolve trên pull request để đánh dấu đã resolve tất cả comment của Sourcery. Hữu ích nếu bạn đã xử lý hết các comment và không muốn thấy chúng nữa.
  • Dismiss tất cả review của Sourcery: Comment @sourcery-ai dismiss trên pull request để dismiss tất cả review Sourcery hiện có. Đặc biệt hữu ích nếu bạn muốn bắt đầu lại với một lượt review mới – đừng quên comment @sourcery-ai review để kích hoạt review mới!

Tùy chỉnh trải nghiệm của bạn

Truy cập dashboard của bạn để:

  • Bật hoặc tắt các tính năng review như tóm tắt pull request do Sourcery tạo, hướng dẫn dành cho người review và các tính năng khác.
  • Thay đổi ngôn ngữ review.
  • Thêm, xóa hoặc chỉnh sửa các hướng dẫn review tùy chỉnh.
  • Điều chỉnh các thiết lập review khác.

Nhận hỗ trợ

Original review guide in English

Reviewer's Guide

Refactors the "Connect your tools" hero in both the main and example HTML files to use shared, responsive CSS variables, updated gradients, and geometry-accurate icon rendering, while adding layout containment and motion accessibility safeguards.

Class diagram for updated Connect your tools hero structure and styles

classDiagram
  class Root {
    +--bg-start
    +--bg-mid
    +--bg-end
    +--icon-bg
    +--icon-accent
    +--icon-size
    +--icon-gap
    +--cluster-shift-y
  }

  class HtmlBody {
    +min-height : 100vh
    +overflow : hidden
    +display : grid
    +place-items : center
    +background : linear-gradient(124deg, var(--bg-start), var(--bg-mid), var(--bg-end))
    +font-family : Inter ui-sans-serif system-ui
  }

  class LogosMain {
    +class : logos
    +display : flex
    +align-items : center
    +justify-content : center
    +gap : var(--icon-gap)
    +transform : translateY(var(--cluster-shift-y))
    +contain : layout paint
    +aria-label : Connected tools illustration
  }

  class LogoBase {
    +class : logo
    +width : var(--icon-size)
    +aspect-ratio : 1
    +border-radius : 50percent
    +background : var(--icon-bg)
    +position : relative
    +overflow : hidden
    +flex : 0 0 auto
  }

  class LinearLogo {
    +class : linear
    +pseudo-element : ::before
    +background : linear-gradient with accent stripes
  }

  class PlusLogo {
    +class : plus
    +pseudo-elements : ::before ::after
    +plus_bar_width : 44percent
    +plus_bar_height : 10.5percent
    +border-radius : 999px
  }

  class MotionReducedMedia {
    +media : prefers-reduced-motion reduce
    +disable : animation
    +disable_transition : transition
  }

  class SmallViewportMedia {
    +media : max-width 480px
    +override : --cluster-shift-y
  }

  Root <|-- HtmlBody
  HtmlBody *-- LogosMain
  LogosMain *-- LogoBase
  LogoBase <|-- LinearLogo
  LogoBase <|-- PlusLogo
  Root <.. LogosMain : uses variables
  Root <.. LogoBase : uses variables
  Root <.. SmallViewportMedia : overrides variable
  MotionReducedMedia <.. HtmlBody : applies to all elements
Loading

Flow diagram for responsive sizing and accessibility in the hero

flowchart TD
  VP[Viewport size and DPR] --> CV[CSS custom properties
--icon-size --icon-gap --cluster-shift-y]

  CV --> LM[Logos main container
flex layout gap and translate]
  CV --> LG[Logo elements
width and layout]

  VP --> MQ480[Media query max-width 480px]
  MQ480 --> CV

  PRM[User prefers-reduced-motion setting] --> MQRM[Media query prefers-reduced-motion reduce]
  MQRM --> DS[Disable animations and transitions
for all elements]

  LG --> VIS[Final hero icon geometry
Linear stripes and plus glyph]
  LM --> VIS
Loading

File-Level Changes

Change Details Files
Unify the example hero implementation with the main version and convert all fixed geometry into responsive, tokenized CSS for the icons and background.
  • Replaced legacy color tokens with updated background and icon tokens, and introduced CSS variables for icon size, gaps, and cluster vertical offset.
  • Refactored the layout container from .icons to .logos, centering via flexbox, using variable-based gaps and transforms, and enabling contain: layout paint for stability.
  • Redesigned the Linear and plus glyphs so the stripes are rendered via a gradient background on .logo.linear::before and the plus bars scale as percentages of the circular icon, removing pixel-based strip elements and media-query tweaks.
  • Adjusted the main content semantics so the illustration is described by an updated aria-label per logo and container, removing purely decorative spans.
examples/connect-your-tools.html
Align the main hero implementation with the new responsive geometry, icon composition, and accessibility safeguards used in the example file.
  • Normalized root color tokens and introduced shared CSS variables for icon size, icon gap, and cluster vertical offset to replace prior clamp() uses and hard-coded transforms.
  • Updated the body layout to guarantee full-viewport coverage with min-height: 100vh, overflow: hidden, and a slightly retuned gradient angle and stops.
  • Tweaked .logos and .logo to use the new size and gap variables, center justification, flex: 0 0 auto, and contain: layout paint for predictable rendering.
  • Refined the Linear logo stripe gradient stop positions and converted the plus glyph dimensions from clamp()-based pixels to percentage-based sizing tied to the icon diameter.
  • Replaced the previous width-based responsive tweak with a root-variable override for --cluster-shift-y at small viewports and added a global prefers-reduced-motion guard that disables animations and transitions.
connect-your-tools.html

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Chào bạn - mình đã để lại một số nhận xét tổng quan:

  • Các nhãn ARIA mới trên từng thẻ .logo riêng lẻ có thể tạo ra các thông báo dư thừa hoặc gây nhầm lẫn cho trình đọc màn hình; hãy cân nhắc hoặc đánh dấu các logo là chỉ mang tính trang trí (aria-hidden="true"), hoặc dùng một thẻ bao bọc ngữ nghĩa duy nhất/role="img" với nhãn phù hợp thay thế.
  • Quy tắc toàn cục @media (prefers-reduced-motion: reduce) { * { animation/transition: none } } quá rộng và có thể vô tình vô hiệu hóa chuyển động trên những nội dung không liên quan; giới hạn phạm vi quy tắc này trong phần hero (ví dụ .logos *) sẽ an toàn hơn.
  • File ví dụ thiết lập html, body { height: 100%; } trong khi file chính connect-your-tools.html thì không, vì vậy nếu chúng được dự định là các triển khai thống nhất thì có thể bạn sẽ muốn căn chỉnh lại các ràng buộc bố cục của chúng hoặc loại bỏ phần trùng lặp nếu không cần thiết.
Prompt cho các tác nhân AI
Please address the comments from this code review:

## Overall Comments
- The new ARIA labels on the individual `.logo` divs may introduce redundant or confusing announcements for screen readers; consider either marking the logos as decorative (`aria-hidden="true"`) or using a single semantic wrapper/`role="img"` with an appropriate label instead.
- The global `@media (prefers-reduced-motion: reduce) { * { animation/transition: none } }` rule is very broad and could unintentionally disable motion across unrelated content; scoping this rule to the hero container (e.g. `.logos *`) would be safer.
- The examples file sets `html, body { height: 100%; }` while the main `connect-your-tools.html` does not, so if these are meant to be unified implementations it may be worth aligning their layout constraints or removing the duplication where not needed.

Sourcery miễn phí cho mã nguồn mở - nếu bạn thấy hữu ích, hãy cân nhắc chia sẻ nhé ✨
Hãy giúp mình hữu ích hơn! Vui lòng bấm 👍 hoặc 👎 trên từng bình luận và mình sẽ dùng phản hồi này để cải thiện các lần review sau.
Original comment in English

Hey - I've left some high level feedback:

  • The new ARIA labels on the individual .logo divs may introduce redundant or confusing announcements for screen readers; consider either marking the logos as decorative (aria-hidden="true") or using a single semantic wrapper/role="img" with an appropriate label instead.
  • The global @media (prefers-reduced-motion: reduce) { * { animation/transition: none } } rule is very broad and could unintentionally disable motion across unrelated content; scoping this rule to the hero container (e.g. .logos *) would be safer.
  • The examples file sets html, body { height: 100%; } while the main connect-your-tools.html does not, so if these are meant to be unified implementations it may be worth aligning their layout constraints or removing the duplication where not needed.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The new ARIA labels on the individual `.logo` divs may introduce redundant or confusing announcements for screen readers; consider either marking the logos as decorative (`aria-hidden="true"`) or using a single semantic wrapper/`role="img"` with an appropriate label instead.
- The global `@media (prefers-reduced-motion: reduce) { * { animation/transition: none } }` rule is very broad and could unintentionally disable motion across unrelated content; scoping this rule to the hero container (e.g. `.logos *`) would be safer.
- The examples file sets `html, body { height: 100%; }` while the main `connect-your-tools.html` does not, so if these are meant to be unified implementations it may be worth aligning their layout constraints or removing the duplication where not needed.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@NguyenCuong1989 NguyenCuong1989 merged commit b3e1697 into main Apr 10, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant