Jump to content

Recommended Posts

Posted

Version 2.6.2.3213.

Hello everyone,

The following code has been generated by the Affinity Suite. Although it is usable in its current form, it contains errors that must be corrected, along with a number of essential optimisations. These adjustments significantly reduce development time, simplify maintenance, improve compatibility with both web and industrial tools, and accelerate rendering and printing.

Context: File intended for print and internet use, created with Serif (Affinity). Compatibility with cutting or engraving systems is also considered.

optimisation-svg.webp.d57cf60aecfad2c976f96468e6a52a9d.webp

 

0. original and optimization

 

Original created by the Affinity suite.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 915 915" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
    <rect id="Background" x="-0" y="-0" width="914.667" height="914.667" style="fill:#407336;"/>
    <rect id="Lower-recurring-elements" serif:id="Lower recurring elements" x="121.333" y="644" width="653.333" height="93.333" style="fill:#fffffc;"/>
    <rect id="Recurring-elements-left" serif:id="Recurring elements left" x="121.333" y="289.333" width="93.333" height="336" style="fill:#fffffc;"/>
    <rect id="Recurring-elements-top" serif:id="Recurring elements top" x="121.333" y="177.333" width="672" height="93.333" style="fill:#fffffc;"/>
    <path id="Small-gear" serif:id="Small gear" d="M321.54,366.086l4.46,17.37c8.632,1.057 17.091,2.871 25.227,5.408l14.719,-13.259c8.236,2.996 16.09,6.623 23.452,10.832l-6.994,16.827c6.815,4.368 13.008,9.322 18.467,14.774l21.034,-5.595c5.261,5.889 9.795,12.172 13.54,18.761l-16.574,11.776c3.172,6.508 5.439,13.276 6.76,20.181l21.713,3.568c0.875,7.204 0.875,14.46 -0,21.664l-21.713,3.568c-1.321,6.905 -3.588,13.673 -6.76,20.182l16.574,11.775c-3.745,6.589 -8.279,12.872 -13.54,18.761l-21.034,-5.595c-5.459,5.452 -11.652,10.406 -18.467,14.774l6.994,16.827c-7.362,4.209 -15.216,7.836 -23.452,10.832l-14.719,-13.259c-8.136,2.538 -16.595,4.351 -25.227,5.408l-4.46,17.37c-9.005,0.7 -18.075,0.7 -27.08,0l-4.46,-17.37c-8.632,-1.057 -17.091,-2.87 -25.227,-5.408l-14.719,13.259c-8.236,-2.996 -16.09,-6.623 -23.452,-10.832l6.994,-16.827c-6.815,-4.368 -13.008,-9.322 -18.467,-14.774l-21.034,5.595c-5.261,-5.889 -9.795,-12.172 -13.54,-18.761l16.574,-11.775c-3.172,-6.509 -5.439,-13.277 -6.76,-20.182l-21.713,-3.568c-0.875,-7.204 -0.875,-14.46 0,-21.664l21.713,-3.568c1.321,-6.905 3.588,-13.673 6.76,-20.181l-16.574,-11.776c3.745,-6.589 8.279,-12.872 13.54,-18.761l21.034,5.595c5.459,-5.452 11.652,-10.406 18.467,-14.774l-6.994,-16.827c7.362,-4.209 15.216,-7.836 23.452,-10.832l14.719,13.259c8.136,-2.537 16.595,-4.351 25.227,-5.408l4.46,-17.37c9.005,-0.7 18.075,-0.7 27.08,0Zm-13.54,89.075c15.454,0 28,10.037 28,22.4c0,12.363 -12.546,22.4 -28,22.4c-15.454,0 -28,-10.037 -28,-22.4c-0,-12.363 12.546,-22.4 28,-22.4Z" style="fill:#fffffc;stroke:#407336;stroke-width:7.78px;"/>
    <path id="Large-gear" serif:id="Large gear" d="M609.665,318.208l7.434,28.951c14.385,1.761 28.485,4.783 42.044,9.013l24.532,-22.099c13.727,4.993 26.818,11.039 39.087,18.053l-11.657,28.046c11.358,7.279 21.68,15.537 30.779,24.623l35.057,-9.325c8.767,9.815 16.325,20.287 22.566,31.269l-27.623,19.625c5.287,10.847 9.065,22.127 11.266,33.636l36.188,5.947c1.459,12.007 1.459,24.099 0,36.106l-36.188,5.947c-2.201,11.509 -5.979,22.789 -11.266,33.636l27.623,19.625c-6.241,10.982 -13.799,21.454 -22.566,31.269l-35.057,-9.325c-9.099,9.086 -19.421,17.344 -30.779,24.623l11.657,28.046c-12.269,7.014 -25.36,13.06 -39.087,18.053l-24.532,-22.099c-13.559,4.23 -27.659,7.252 -42.044,9.013l-7.434,28.951c-15.009,1.166 -30.124,1.166 -45.133,-0l-7.433,-28.951c-14.386,-1.761 -28.486,-4.783 -42.045,-9.013l-24.532,22.099c-13.727,-4.993 -26.817,-11.039 -39.086,-18.053l11.656,-28.046c-11.358,-7.279 -21.679,-15.537 -30.779,-24.623l-35.056,9.325c-8.768,-9.815 -16.326,-20.287 -22.567,-31.269l27.623,-19.625c-5.286,-10.847 -9.064,-22.127 -11.266,-33.636l-36.188,-5.947c-1.458,-12.007 -1.458,-24.099 0,-36.106l36.188,-5.947c2.202,-11.509 5.98,-22.789 11.266,-33.636l-27.623,-19.625c6.241,-10.982 13.799,-21.454 22.567,-31.269l35.056,9.325c9.1,-9.086 19.421,-17.344 30.779,-24.623l-11.656,-28.046c12.269,-7.014 25.359,-13.06 39.086,-18.053l24.532,22.099c13.559,-4.23 27.659,-7.252 42.045,-9.013l7.433,-28.951c15.009,-1.166 30.124,-1.166 45.133,0Zm-22.566,148.459c25.756,-0 46.666,16.728 46.666,37.333c0,20.605 -20.91,37.333 -46.666,37.333c-25.756,0 -46.667,-16.728 -46.667,-37.333c-0,-20.605 20.911,-37.333 46.667,-37.333Z" style="fill:#fffffc;stroke:#407336;stroke-width:7.78px;"/>
    <rect id="Masking" x="737.333" y="177.333" width="93.333" height="560" style="fill:#407336;"/>
</svg>

Optimized version written in VS Code

<?xml version="1.0" encoding="UTF-8"?>
<svg width="100%" height="100%" viewBox="0 0 915 915" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <style>
        .colour-green         {fill: #407336;}
        .colour-white         {fill: #fffffc;}
        .gear-stroke-on-white {stroke: #407336; stroke-width: 7.78px; fill: #fffffc;}
    </style>
    
    <!-- Background -->
    <rect class="colour-green" x="-0" y="-0" width="915" height="915"/>
    
    <!-- Recurring elements -->
    <rect class="colour-white" x="121.333" y="289.333" width="93.333" height="336"/>
    <rect class="colour-white" x="121.333" y="644" width="653.333" height="93.333"/>
    <rect class="colour-white" x="121.333" y="177.333" width="672" height="93.333"/>
    
    <!-- Small gear -->
    <path class="gear-stroke-on-white" d="M321.54,366.086l4.46,17.37c8.632,1.057 17.091,2.871 25.227,5.408l14.719,-13.259c8.236,2.996 16.09,6.623 23.452,10.832l-6.994,16.827c6.815,4.368 13.008,9.322 18.467,14.774l21.034,-5.595c5.261,5.889 9.795,12.172 13.54,18.761l-16.574,11.776c3.172,6.508 5.439,13.276 6.76,20.181l21.713,3.568c0.875,7.204 0.875,14.46 -0,21.664l-21.713,3.568c-1.321,6.905 -3.588,13.673 -6.76,20.182l16.574,11.775c-3.745,6.589 -8.279,12.872 -13.54,18.761l-21.034,-5.595c-5.459,5.452 -11.652,10.406 -18.467,14.774l6.994,16.827c-7.362,4.209 -15.216,7.836 -23.452,10.832l-14.719,-13.259c-8.136,2.538 -16.595,4.351 -25.227,5.408l-4.46,17.37c-9.005,0.7 -18.075,0.7 -27.08,0l-4.46,-17.37c-8.632,-1.057 -17.091,-2.87 -25.227,-5.408l-14.719,13.259c-8.236,-2.996 -16.09,-6.623 -23.452,-10.832l6.994,-16.827c-6.815,-4.368 -13.008,-9.322 -18.467,-14.774l-21.034,5.595c-5.261,-5.889 -9.795,-12.172 -13.54,-18.761l16.574,-11.775c-3.172,-6.509 -5.439,-13.277 -6.76,-20.182l-21.713,-3.568c-0.875,-7.204 -0.875,-14.46 0,-21.664l21.713,-3.568c1.321,-6.905 3.588,-13.673 6.76,-20.181l-16.574,-11.776c3.745,-6.589 8.279,-12.872 13.54,-18.761l21.034,5.595c5.459,-5.452 11.652,-10.406 18.467,-14.774l-6.994,-16.827c7.362,-4.209 15.216,-7.836 23.452,-10.832l14.719,13.259c8.136,-2.537 16.595,-4.351 25.227,-5.408l4.46,-17.37c9.005,-0.7 18.075,-0.7 27.08,0Zm-13.54,89.075c15.454,0 28,10.037 28,22.4c0,12.363 -12.546,22.4 -28,22.4c-15.454,0 -28,-10.037 -28,-22.4c-0,-12.363 12.546,-22.4 28,-22.4Z"/>
    
    <!-- Large gear -->
    <path class="gear-stroke-on-white" d="M620.977,302.767l7.434,28.951c14.386,1.761 28.485,4.783 42.045,9.012l24.531,-22.098c13.728,4.993 26.818,11.039 39.087,18.053l-11.657,28.045c11.358,7.28 21.68,15.537 30.779,24.624l35.057,-9.326c8.767,9.816 16.325,20.288 22.566,31.27l-27.623,19.625c5.287,10.847 9.065,22.127 11.266,33.636l36.188,5.946c1.459,12.008 1.459,24.1 0,36.107l-36.188,5.947c-2.201,11.508 -5.979,22.788 -11.266,33.636l27.623,19.625c-6.241,10.982 -13.799,21.454 -22.566,31.269l-35.057,-9.325c-9.099,9.086 -19.421,17.344 -30.779,24.623l11.657,28.045c-12.269,7.014 -25.359,13.06 -39.087,18.054l-24.531,-22.099c-13.56,4.229 -27.659,7.252 -42.045,9.013l-7.434,28.95c-15.009,1.167 -30.124,1.167 -45.133,0l-7.433,-28.95c-14.386,-1.761 -28.486,-4.784 -42.045,-9.013l-24.532,22.099c-13.727,-4.994 -26.817,-11.04 -39.086,-18.054l11.656,-28.045c-11.358,-7.279 -21.679,-15.537 -30.779,-24.623l-35.056,9.325c-8.768,-9.815 -16.325,-20.287 -22.567,-31.269l27.623,-19.625c-5.286,-10.848 -9.064,-22.128 -11.266,-33.636l-36.188,-5.947c-1.458,-12.007 -1.458,-24.099 0,-36.107l36.188,-5.946c2.202,-11.509 5.98,-22.789 11.266,-33.636l-27.623,-19.625c6.242,-10.982 13.799,-21.454 22.567,-31.27l35.056,9.326c9.1,-9.087 19.421,-17.344 30.779,-24.624l-11.656,-28.045c12.269,-7.014 25.359,-13.06 39.086,-18.053l24.532,22.098c13.559,-4.229 27.659,-7.251 42.045,-9.012l7.433,-28.951c15.009,-1.167 30.124,-1.167 45.133,0Zm-22.566,148.458c25.756,0 46.666,16.729 46.666,37.334c0,20.605 -20.91,37.333 -46.666,37.333c-25.756,0 -46.667,-16.728 -46.667,-37.333c0,-20.605 20.911,-37.334 46.667,-37.334Z"/>
    
    <!-- Masking-->
    <rect class="colour-green" x="737.333" y="177.333" width="93.333" height="560"/>
</svg>

 

- remove

+ add

 

1. Removal of the DOCTYPE and cleaning of the XML header

 

Modification:

 
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" …>
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <svg width="100%" height="100%" viewBox="0 0 915 915" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
       
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg width="100%" height="100%" viewBox="0 0 915 915" version="1.1" xmlns="http://www.w3.org/2000/svg">
 

Why?

The SVG 1.1 DOCTYPE is inherited from strict XHTML formats or tools such as Adobe Illustrator. It is unnecessary for all modern browsers, rendering engines and production tools using inline SVG (embedded in HTML or parsed directly).

The attribute standalone="no" has no useful effect on a standalone SVG file, and may even trigger unexpected behaviour in industrial tools using lightweight XML parsers.

Consequences if not done:

  • Risk of blocking certain industrial parsers or embedded tools
  • File may be interpreted using outdated compatibility behaviour

 

2. Removal of proprietary attributes (serif:id)

 

Modification:

 
- <rect id="Lower-recurring-elements" serif:id="Lower recurring elements" style=""/>

+ <rect class="…">
 
 

Why?

The serif:id attributes are specific to Affinity Designer and have no functional value in production. They are used only when reopening the file within the same software. These attributes are neither readable nor usable by third-party tools (CNC machines, laser cutters, layout viewers, browsers).

Consequences if not done:

  • Unnecessary metadata pollutes the file
  • Possible confusion if another tool misinterprets them
  • Longer file size without benefit

 

3. Replacement of incorrect or unnecessary values (such as x="-0")

 

Modification:

 
- x="-0" y="-0"

+ x="0" y="0"
 
 

Why?

Mathematically, -0 is equivalent to 0, but it is the result of an export anomaly, usually linked to floating point rounding. It is a form of digital noise and should be removed. This ensures:

  • Consistency in coordinate values
  • Better human readability
  • More reliable interpretation by software (some fabrication tools interpret -0 as a tiny negative offset)

Consequences if not done:

  • Slight offset errors during machining may occur
  • Uncertainty about precision during quality contro

 

4. Creation of a block using CSS classes

 

Added:

 
<style>
  .colour-green         {fill: #407336;}
  .colour-white         {fill: #fffffc;}
  .gear-stroke-on-white {stroke: #407336; stroke-width: 7.78px; fill: #fffffc;}
</style>
 
 

Why?

  • Centralize all styles in one place
  • Avoids repeating fill="#fffffc" or stroke="#407336" on every element
  • If colour or style needs to be changed (for example changing green to aluminium etching), only one line must be edited.

Consequences if not done:

  • File becomes longer and harder to maintain
  • Every colour change requires manual editing of each occurrence
  • Increased risk of error (for example mismatched shade or incomplete replacement)

 

5. Use of the class attribute on each element

 

Example:

<rect class="colour-green"/>
 

Why?

  • A class defines a reusable style. It gives meaning to elements (such as "white items" or "green masking") without hardcoding their visual properties.
  • It is cleaner, lighter, more modular
  • It allows styling to be changed via CSS (in an HTML page or interactive SVG interface) without altering the SVG code itself

Consequences if not done:

  • Style repetition leads to heavier, harder-to-maintain files
  • No flexibility for future updates or variations

 

6. Placement of the class attribute at the beginning of the tag

 

Why first?

<rect class="colour-white" x="…" y="…"/>
 
  • It is the most general attribute (appearance)
  • Placing it first makes it immediately clear what the element represents:
  • Improves readability for technicians and operators
  • Respects a logical hierarchy:
    • What it is (style)
    • Where it is (coordinates)
    • What size it is (dimensions)

Consequences if not done:

  • Slower reading
  • Harder to distinguish between elements
  • Less structured code for human readers

 

7. Addition of structural comments in the code

 

Example:

 
<!-- Background --><!-- Recurring elements --><!-- Small gear --><!-- Masking -->
 

Why?

  • These comments replace the former id attributes (now removed) in a non-intrusive way
  • They serve as visual markers for those reviewing or editing the file
  • In a production context, they help locate visual sections quickly (such as gears, background, repeating elements)

Consequences if not done:

  • Files become harder to maintain over time
  • No easy way to identify parts without opening the file graphically

 

8. Removal of id attributes no longer in use

 

Why?

Id attributes are only useful if:

  • They are called by a script or link
  • They are targeted by external CSS

In this file, ids were included solely for graphic editing (Affinity, Illustrator). Removing them lightens the DOM and avoids conflicts if the SVG is embedded into a web page.

Consequences if not done:

  • DOM can be polluted with unused identifiers
  • Risk of naming conflicts in interactive interfaces

 

9. Geometrical verification and preservation of original paths

 

No geometrical changes were made:

  • All path data remains identical
  • The shapes and proportions of the gears have been left untouched

Only the code structure was optimized, not the visual content.

 

10. Correction of rounding in the background rectangle

 

Modification:

 
- <rect width="914.667" height="914.667"/>

+ <rect width="915" height="915"/>
 
 

Why?

The value 914.667 results from automatic rounding during SVG export from Serif or during unit conversion. This creates slight visual imprecision:

  • On screen, it may cause a blurred edge or one-pixel overflow depending on resolution
  • In print, it risks a faint white line or inaccurate trim

In graphic production or cutting, such an offset may lead to a misalignment or deviation from the template

Consequences if not done:

  • Imprecise cut or frame in printed output
  • Defects in alignment on presses or imposition profiles
  • Non-compliant rendering with physical specifications

Strictly speaking, the exported file should match the exact dimensions specified within the Affinity Suite. Any discrepancy, even minimal, can lead to misalignment during printing, cropping issues or visual artefacts on screen.

 

11. Why classes were used instead of inline styles

 

Why?

In the optimized version, no styles are written directly into the tags, such as

<path style="fill:#fffffc;stroke:#407336;stroke-width:7.78px;" />
 

Instead, classes are used:

<path class="gear-stroke-on-white"/>
 

Classes offer the following advantages:

  • Style definitions are reusable for multiple elements
  • They separate appearance from geometry
  • Colours can be updated quickly (for instance, switching to greyscale for offset printing, or adapting to dark mode on the web)
  • They allow for animation or interaction in dynamic SVG if required for web use

Inline styles are fixed, hard to maintain and make each element heavier

Consequences if not done:

  • File becomes larger
  • Manual errors become more frequent
  • Files are less flexible for multi-platform use (paper, screen, manufacturing)

 

12. Why classes were placed at the beginning of each tag

 

Example:

<rect class="colour-white" x="…" y="…" width="…" height="…" />
 

Why?

The class attribute defines visual intent. Placing it at the top of the tag allows:

  • Immediate understanding of the element’s visual function (background, mask, gear, etc.)
  • Easy grouping of similar elements (e.g. all white elements, all green masks)
  • A logical structure:
    • First: style
    • Then: position (x, y)
    • Finally: shape or path (width, height, d, etc.)

This choice supports efficient human reading, especially in a fabrication context or for last-minute manual adjustments

Consequences if not done:

  • Less clear code
  • Harder to navigate and read
  • More difficult to maintain after export

This writing order follows a clear and consistent structure, similar to what is found in well-designed development environments. The class attribute, which defines the overall appearance of the element, is placed at the beginning of the tag, before coordinates (x, y) and dimensions. This hierarchy improves readability, identification and modification, especially when the file is used in a web or graphical production workflow.

 

13. Compatibility extended to cutting or engraving systems

 

Why relevant, even if not the primary purpose?

Although the file is primarily designed for printing and web via Serif, the optimized SVG structure also provides:

  • Vector accuracy suitable for cutting tables (laser, router, plotter)
  • No inline styles that could be misinterpreted by automation software
  • Clean geometry without proprietary tags, making it easier to process with cutting preparation software (LightBurn, Zünd Cut Center, etc.)
  • Clearly identifiable layers if separate operations were required (cutting path, engraving path, solid fill)

Positive consequences:

  • The same file can be adapted for extended use without needing to be redrawn or manually cleaned

 

General conclusion

 

The SVG file has been carefully structured to ensure:

  • Perfect accuracy for printing, without export artefacts or misaligned edges
  • Native compatibility with browsers and online display, without obsolete code
  • Potential interoperability with cutting or engraving tools thanks to code clarity
  • Graphical modularity, allowing for future variants without needing a full redesign

All optimizations are reversible and documented, ensuring safe, reliable and scalable use.

optimisation-svg.afdesign svg-actual.svg svg-after.svg

6 cœurs, 12 processus - Windows 11 pro - 4K - DirectX 12 - Suite universelle Affinity (Affinity  Publisher, Affinity Designer, Affinity Photo).

Mais je vous le demande, peut-on imaginer une police sans sérifs ?

Posted
On 3/22/2025 at 2:53 AM, Bound by Beans said:

There’s a lot to address for Serif.

Yes.

Serif does not seem to realise the importance of this market, even though Affinity Designer was the first software to mark Serif’s strong comeback with the Affinity suite.

 

Uses and requirements of optimised vector graphics

 

Vector graphic creation tools are used by a wide range of professionals from technical, creative and industrial sectors. Among the main users are:

  • Graphic designers and illustrators : visual identities, publishing, posters,
  • Print professionals : prepress, packaging,
  • Web designers and developers : icons, SVG-based interfaces,
  • Architects and planners : stylised plans, diagrams,
  • Textile and embroidery professionals : designs for printing or cutting,
  • Teachers and researchers : diagrams, maps, educational visuals,
  • Communication and marketing departments : coherent promotional material,
  • Small businesses and microenterprises : often via simplified tools,
  • And most importantly, digital cutting professionals : plotters, CNC machines, laser engravers.

In the latter case, the precision and cleanliness of the SVG file are critical, as these machines require a perfectly clean path that can be interpreted without ambiguity.

 

Why must an SVG File truly be clean, error-free, and free of unnecessary tags?

 

A messy, error-ridden, overly verbose or repetitive code is simply rejected by most of the professional users listed above. The following criteria are generally expected:

1. Technical reliability

Cutting or printing machines do not tolerate duplicates, invisible paths or stray elements. These may lead to errors, wasted time or wasted materials.

2. Cross-software compatibility

An optimised code ensures correct interpretation across all environments: Affinity Designer, Inkscape, Illustrator, LightBurn, and others.

3. Lightness and performance

Removing redundant styles (using CSS classes), empty groups or useless objects significantly reduces file size and improves workflow fluidity.

4. Readability and maintenance

A well-structured file is easier for others to edit, easier to fix quickly, and more readily reused in other projects. Maintenance becomes far too costly with the SVG source code exported by Affinity Designer.

5. Scalability

A clean SVG code integrates more easily into automated pipelines, graphic libraries, or websites. It becomes a reliable and reusable component.

 

One example among many

The future logotype of my firm originally used four colours from a palette created by the designer. Two colours were later changed. With clean SVG code, the modification took just a few seconds — simply updating the values of the two relevant CSS colour classes.

The same change took 45 minutes in Affinity Designer. Worse still, editing the SVG it exported was an utter headache, due to its convoluted structure.

 

This Requirement is now recognised by Artificial Intelligence

 

SVG code quality has become such a concern that advanced AI models — such as Claude developed by Anthropic — have integrated dedicated modules for generating or optimising SVG files.

This reflects not only the increasing complexity of expectations around the format, but also the essential need for code that is readable, lightweight, and reusable — in a word, clean.

It is no longer merely a matter of human usage, but of interoperability with automated and intelligent systems.

It is time to act.

6 cœurs, 12 processus - Windows 11 pro - 4K - DirectX 12 - Suite universelle Affinity (Affinity  Publisher, Affinity Designer, Affinity Photo).

Mais je vous le demande, peut-on imaginer une police sans sérifs ?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.