From 0d44ad18652e24d9fb10f3da91bc3d851f2b1c21 Mon Sep 17 00:00:00 2001 From: Abdul Gafar Manuel Meque <17961065+mekjr1@users.noreply.github.com> Date: Sun, 13 Sep 2026 16:19:46 -0600 Subject: [PATCH] feat(brand): add approved gflow-cli identity kit --- README.md | 6 +- brand/BRAND.md | 96 +++++++++++++++++++++ brand/LICENSES.md | 26 ++++++ brand/README.md | 60 +++++++++++++ brand/icons/app-icon.svg | 8 ++ brand/icons/favicon.svg | 8 ++ brand/icons/icon-192.svg | 8 ++ brand/icons/icon-512.svg | 8 ++ brand/logos/lockup-inverse.svg | 9 ++ brand/logos/lockup.svg | 9 ++ brand/logos/mark-inverse.svg | 8 ++ brand/logos/mark.svg | 8 ++ brand/logos/mono-black.svg | 8 ++ brand/logos/mono-white.svg | 8 ++ brand/logos/wordmark-inverse.svg | 4 + brand/logos/wordmark.svg | 4 + brand/og/og-default.png | Bin 0 -> 53062 bytes brand/og/og-default.svg | 30 +++++++ brand/preview.html | 141 +++++++++++++++++++++++++++++++ brand/provenance.json | 70 +++++++++++++++ brand/tokens.css | 12 +++ brand/tokens.json | 117 +++++++++++++++++++++++++ docs/favicon.svg | 8 ++ docs/index.html | 40 +++++++-- docs/logo-mark.svg | 8 ++ docs/og-default.png | Bin 0 -> 53062 bytes docs/og-default.svg | 30 +++++++ 27 files changed, 723 insertions(+), 11 deletions(-) create mode 100644 brand/BRAND.md create mode 100644 brand/LICENSES.md create mode 100644 brand/README.md create mode 100644 brand/icons/app-icon.svg create mode 100644 brand/icons/favicon.svg create mode 100644 brand/icons/icon-192.svg create mode 100644 brand/icons/icon-512.svg create mode 100644 brand/logos/lockup-inverse.svg create mode 100644 brand/logos/lockup.svg create mode 100644 brand/logos/mark-inverse.svg create mode 100644 brand/logos/mark.svg create mode 100644 brand/logos/mono-black.svg create mode 100644 brand/logos/mono-white.svg create mode 100644 brand/logos/wordmark-inverse.svg create mode 100644 brand/logos/wordmark.svg create mode 100644 brand/og/og-default.png create mode 100644 brand/og/og-default.svg create mode 100644 brand/preview.html create mode 100644 brand/provenance.json create mode 100644 brand/tokens.css create mode 100644 brand/tokens.json create mode 100644 docs/favicon.svg create mode 100644 docs/logo-mark.svg create mode 100644 docs/og-default.png create mode 100644 docs/og-default.svg diff --git a/README.md b/README.md index 218af20..2b303fa 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Google Flow](https://img.shields.io/badge/Google_Flow-Imagen_4_&_Veo_3.1-4285F4?logo=google)](https://labs.google/fx/tools/flow) [![MCP v2](https://img.shields.io/badge/MCP_v2-Supported-7057ff)](https://modelcontextprotocol.io) -**gflow** is a single-binary CLI and Model Context Protocol (MCP) server for generative media: image, video, audio, and chat. +**gflow-cli** is a single-binary CLI and Model Context Protocol (MCP) server for generative media: image, video, audio, and chat. Its executable/CLI command is `gflow`. - **Image Generation:** Gemini Imagen 3 and Google Flow Imagen 4 (Pro and Lite models). - **Video Generation:** Gemini Veo, MiniMax H3 (768P and 2K), and Google Flow Veo 3.1. @@ -190,7 +190,7 @@ TIME TYPE ID PROMPT LOCAL PA ## Model Context Protocol (MCP) -**gflow** includes a native stdio MCP server for AI coding assistants and desktop agents: +**gflow-cli** includes a native stdio MCP server for AI coding assistants and desktop agents through its `gflow` executable/CLI command: ### Claude Desktop Add to your `claude_desktop_config.json`: @@ -283,7 +283,7 @@ Google Flow secures generative APIs with **reCAPTCHA Enterprise v3**. Headless browsers and fresh automation profiles often score poorly, causing Google to return `403 Forbidden`. -`gflow` uses a two-tier architecture: +The **gflow-cli** project's `gflow` executable/CLI command uses a two-tier architecture: 1. **Lightweight Extension Bridge**: Runs inside your everyday, logged-in browser session on `labs.google/fx/tools/flow`. 2. **Authentic reCAPTCHA Execution**: When a generation command is issued, diff --git a/brand/BRAND.md b/brand/BRAND.md new file mode 100644 index 0000000..70216a3 --- /dev/null +++ b/brand/BRAND.md @@ -0,0 +1,96 @@ +# gflow-cli Brand + +Status: approved + +This document defines the public identity for the gflow-cli project. The files +in this directory are the canonical source assets. + +## Identity + +- Formal product name: **gflow-cli** +- CLI command: **`gflow`** +- Mark name: **Supersonic Stream Ribbons** +- Primary tile: **Cockpit Obsidian** + +Use `gflow-cli` when naming the project, repository, package, or brand. Use +`gflow` only for the executable and commands such as `gflow image`. + +## Mark Construction + +The mark uses a `0 0 100 100` view box and these fixed elements: + +- Ring: circle at `50,38`, radius `16`, no fill, 7-unit stroke. +- Stream: `M66 38 L66 64 C66 76 54 82 40 82 C28 82 22 74 22 66`, + no fill, 7-unit stroke, round caps and joins. +- Velocity accent: `M50 22 C58 22 66 30 66 38`, no fill, 3-unit stroke, + round caps. +- Endpoint: circle at `66,38`, radius `4.5`. + +Do not rotate, skew, crop, rearrange, or redraw these elements. Keep the ring +and stream as one color and retain the contrast between the main ribbon and +the velocity accent. + +## Color + +| Token | Value | Use | +| --- | --- | --- | +| Supersonic Cyan | `#00E5FF` | Primary ribbon on Cockpit Obsidian or another verified dark surface | +| Accessible Cyan Dark | `#007C91` | Primary ribbon on white and light surfaces | +| Cockpit Obsidian | `#080B10` | Primary tile and dark field | +| Signal White | `#FFFFFF` | Inverse wordmark, velocity accent, and endpoint | + +Supersonic Cyan is not approved for text or fine detail on white. Use +Accessible Cyan Dark for the light-surface variant. On light surfaces, the +velocity accent and endpoint use Cockpit Obsidian. + +## Variants + +- `logos/mark.svg`, `logos/lockup.svg`, and `logos/wordmark.svg` are for light + surfaces. +- `logos/mark-inverse.svg`, `logos/lockup-inverse.svg`, and + `logos/wordmark-inverse.svg` are for Cockpit Obsidian or similarly dark + surfaces. +- `logos/mono-black.svg` and `logos/mono-white.svg` are one-color fallbacks for + processes that cannot reproduce the two-color mark. +- Files under `icons/` place the inverse mark on the approved Cockpit Obsidian + tile. + +The wordmark is always lowercase and hyphenated: `gflow-cli`. It uses the +existing Public Sans display family at weight 800, with Arial and a generic +sans-serif as fallbacks. + +## Spacing And Size + +Keep clear space equal to at least 8% of the mark width on every side. Do not +place other type, rules, or graphics inside that area. + +- Minimum standalone mark size: 24 CSS pixels. +- Minimum lockup width: 120 CSS pixels. +- Below 120 CSS pixels, use the standalone mark and an accessible text label + instead of compressing the lockup. +- Favicons are exempt from the standalone minimum and use the supplied tiled + artwork. + +## Accessibility + +- Choose the light or inverse asset for the surface; do not recolor it ad hoc. +- When the logo is the only content of a link, provide the accessible name + `gflow-cli` or `gflow-cli home`. +- When visible text already identifies the product, treat the adjacent mark as + decorative with an empty alternative. +- Do not put essential information only in the mark or its color. + +## Product Copy + +Keep public copy tied to implemented behavior and the current README. The +current provider names are Gemini, MiniMax, and Google Flow. Command examples +must use implemented `gflow` subcommands. Do not imply that gflow-cli is an +official product of, endorsed by, or affiliated with any provider. + +## Canonical Assets And Projections + +`brand/` is canonical. The copies in `docs/favicon.svg`, `docs/logo-mark.svg`, +`docs/og-default.svg`, and `docs/og-default.png` are deployment projections for +GitHub Pages. Update a canonical asset and its projection together. The PNG is +the social-metadata asset and is generated from `brand/og/og-default.svg` using +the pinned command documented in `README.md`. diff --git a/brand/LICENSES.md b/brand/LICENSES.md new file mode 100644 index 0000000..697db18 --- /dev/null +++ b/brand/LICENSES.md @@ -0,0 +1,26 @@ +# Brand Asset Licensing + +## Project-Created Assets + +The SVG and PNG artwork, token files, documentation, and preview in `brand/` +were created for gflow-cli and are distributed under the repository's root MIT +License. + +The MIT License grants copyright permissions for these files. It does not grant +permission to misrepresent the source of the project or imply endorsement by a +third party. + +## Typography + +No font files are included in this kit. The wordmark SVGs declare Public Sans +with Arial and a generic sans-serif fallback. Public Sans is available under +the SIL Open Font License 1.1 from its upstream distributor. The documentation +site already loads it independently; the brand assets do not bundle or fetch +it. + +## Third-Party Names + +Google, Gemini, Google Flow, MiniMax, and other third-party names remain the +property of their respective owners. Their appearance in factual provider copy +does not indicate sponsorship, endorsement, or affiliation. No third-party +logos or provider artwork are included in this kit. diff --git a/brand/README.md b/brand/README.md new file mode 100644 index 0000000..4a6f74a --- /dev/null +++ b/brand/README.md @@ -0,0 +1,60 @@ +# gflow-cli Brand Kit + +This directory contains the approved, dependency-free brand assets for +gflow-cli. Open `preview.html` in a browser to inspect the complete kit. + +## Contents + +| Path | Purpose | +| --- | --- | +| `BRAND.md` | Naming, construction, color, spacing, accessibility, and copy rules | +| `LICENSES.md` | Licensing and third-party attribution notes | +| `provenance.json` | Machine-readable identity source and asset inventory | +| `tokens.json` | Portable visual tokens and complete fixed mark geometry | +| `tokens.css` | CSS custom-property projection of visual styling tokens; complete geometry remains in JSON | +| `logos/` | Light, inverse, lockup, wordmark, and monochrome SVGs | +| `icons/` | Tiled favicon and app-icon SVGs | +| `og/og-default.svg` | Canonical editable 1200 by 630 social image source | +| `og/og-default.png` | Canonical 1200 by 630 raster social image | +| `preview.html` | Local visual inventory; no build step or network access required | + +## Choosing An Asset + +- Use `logos/lockup.svg` on white and light backgrounds. +- Use `logos/lockup-inverse.svg` on Cockpit Obsidian and dark backgrounds. +- Use a standalone mark only when the product name appears next to it or an + accessible name is supplied. +- Use the files in `icons/` without adding another background tile. +- Use monochrome artwork only when the output process requires one color. +- Use `og/og-default.png` for social metadata; regenerate it from the SVG source. + +All SVGs are standalone and have no linked images or embedded credentials. +The kit introduces no runtime or package dependency. + +## Documentation Projections + +The GitHub Pages site consumes deployment copies so `docs/` remains a complete +publishable directory: + +| Canonical file | Documentation projection | +| --- | --- | +| `icons/favicon.svg` | `../docs/favicon.svg` | +| `logos/mark.svg` | `../docs/logo-mark.svg` | +| `og/og-default.svg` | `../docs/og-default.svg` | +| `og/og-default.png` | `../docs/og-default.png` | + +Keep each pair identical whenever the canonical source changes. + +## Regenerating The Social PNG + +From the repository root, use the pinned renderer and then copy the canonical +PNG to its documentation projection: + +```powershell +npx --yes sharp-cli@5.2.0 -i brand/og/og-default.svg -o brand/og/og-default.png -f png -c 9 +Copy-Item -LiteralPath brand/og/og-default.png -Destination docs/og-default.png +``` + +The output must remain exactly `1200 x 630`. After changing the source or +renderer version, render a fresh PNG and run the brand checks to verify its +geometry and source-to-projection parity. diff --git a/brand/icons/app-icon.svg b/brand/icons/app-icon.svg new file mode 100644 index 0000000..da134f2 --- /dev/null +++ b/brand/icons/app-icon.svg @@ -0,0 +1,8 @@ + + gflow-cli app icon + + + + + + diff --git a/brand/icons/favicon.svg b/brand/icons/favicon.svg new file mode 100644 index 0000000..1b8990c --- /dev/null +++ b/brand/icons/favicon.svg @@ -0,0 +1,8 @@ + + gflow-cli icon + + + + + + diff --git a/brand/icons/icon-192.svg b/brand/icons/icon-192.svg new file mode 100644 index 0000000..ca73d8d --- /dev/null +++ b/brand/icons/icon-192.svg @@ -0,0 +1,8 @@ + + gflow-cli 192 pixel icon + + + + + + diff --git a/brand/icons/icon-512.svg b/brand/icons/icon-512.svg new file mode 100644 index 0000000..3549f2f --- /dev/null +++ b/brand/icons/icon-512.svg @@ -0,0 +1,8 @@ + + gflow-cli 512 pixel icon + + + + + + diff --git a/brand/logos/lockup-inverse.svg b/brand/logos/lockup-inverse.svg new file mode 100644 index 0000000..bf3f190 --- /dev/null +++ b/brand/logos/lockup-inverse.svg @@ -0,0 +1,9 @@ + + gflow-cli inverse lockup + The inverse Supersonic Stream Ribbons mark beside the gflow-cli wordmark. + + + + + gflow-cli + diff --git a/brand/logos/lockup.svg b/brand/logos/lockup.svg new file mode 100644 index 0000000..6d4a3e5 --- /dev/null +++ b/brand/logos/lockup.svg @@ -0,0 +1,9 @@ + + gflow-cli + The Supersonic Stream Ribbons mark beside the gflow-cli wordmark. + + + + + gflow-cli + diff --git a/brand/logos/mark-inverse.svg b/brand/logos/mark-inverse.svg new file mode 100644 index 0000000..9c18ef5 --- /dev/null +++ b/brand/logos/mark-inverse.svg @@ -0,0 +1,8 @@ + + gflow-cli inverse Supersonic Stream Ribbons mark + A cyan circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/mark.svg b/brand/logos/mark.svg new file mode 100644 index 0000000..fe5d78a --- /dev/null +++ b/brand/logos/mark.svg @@ -0,0 +1,8 @@ + + gflow-cli Supersonic Stream Ribbons mark + A circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/mono-black.svg b/brand/logos/mono-black.svg new file mode 100644 index 0000000..44b9dac --- /dev/null +++ b/brand/logos/mono-black.svg @@ -0,0 +1,8 @@ + + gflow-cli monochrome black mark + A circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/mono-white.svg b/brand/logos/mono-white.svg new file mode 100644 index 0000000..ce0640a --- /dev/null +++ b/brand/logos/mono-white.svg @@ -0,0 +1,8 @@ + + gflow-cli monochrome white mark + A circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/wordmark-inverse.svg b/brand/logos/wordmark-inverse.svg new file mode 100644 index 0000000..04ab06c --- /dev/null +++ b/brand/logos/wordmark-inverse.svg @@ -0,0 +1,4 @@ + + gflow-cli inverse wordmark + gflow-cli + diff --git a/brand/logos/wordmark.svg b/brand/logos/wordmark.svg new file mode 100644 index 0000000..7bb0eb0 --- /dev/null +++ b/brand/logos/wordmark.svg @@ -0,0 +1,4 @@ + + gflow-cli wordmark + gflow-cli + diff --git a/brand/og/og-default.png b/brand/og/og-default.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3f0c004bb463f332868ba8fe419447e6dcd364 GIT binary patch literal 53062 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 literal 0 HcmV?d00001 diff --git a/brand/og/og-default.svg b/brand/og/og-default.svg new file mode 100644 index 0000000..a909448 --- /dev/null +++ b/brand/og/og-default.svg @@ -0,0 +1,30 @@ + + gflow-cli + Generative media in your terminal with a Go CLI and MCP server for Gemini, MiniMax, and Google Flow. + + + + + + + + + + + + + + + + gflow-cli + Generative media in your terminal. + Single-binary Go CLI + stdio MCP server + Gemini / MiniMax / Google Flow + + gflow image + gflow video + gflow audio + gflow chat + + github.com/xibodev/gflow-cli + diff --git a/brand/preview.html b/brand/preview.html new file mode 100644 index 0000000..b05c721 --- /dev/null +++ b/brand/preview.html @@ -0,0 +1,141 @@ + + + + + + gflow-cli Brand Kit + + + + +

+

Approved identity / gflow-cli

+ gflow-cli +

Formal name gflow-cli. Command gflow. Mark Supersonic Stream Ribbons.

+
+
+
+

Primary Lockups

+
+
+
gflow-cli light-surface lockup
+

logos/lockup.svg

+
+
+
gflow-cli dark-surface lockup
+

logos/lockup-inverse.svg

+
+
+
+
+

Marks

+
+
+
Supersonic Stream Ribbons light-surface mark
+

logos/mark.svg

+
+
+
Supersonic Stream Ribbons dark-surface mark
+

logos/mark-inverse.svg

+
+
+
+
+

Wordmarks

+
+
+
gflow-cli light-surface wordmark
+

logos/wordmark.svg

+
+
+
gflow-cli dark-surface wordmark
+

logos/wordmark-inverse.svg

+
+
+
+
+

Color Tokens

+
+
Supersonic Cyan#00E5FF
+
Accessible Cyan Dark#007C91
+
Cockpit Obsidian#080B10
+
Signal White#FFFFFF
+
+
+
+

Application Icons

+
+
gflow-cli favicon

favicon.svg

+
gflow-cli app icon

app-icon.svg

+
gflow-cli 192 pixel icon

icon-192.svg

+
gflow-cli 512 pixel icon

icon-512.svg

+
+
+
+

Monochrome

+
+
Monochrome black mark

logos/mono-black.svg

+
Monochrome white mark

logos/mono-white.svg

+
+
+
+

Default Social Image

+ gflow-cli default social image +

og/og-default.png, generated from og/og-default.svg / 1200 x 630

+
+
+ + diff --git a/brand/provenance.json b/brand/provenance.json new file mode 100644 index 0000000..86c5c99 --- /dev/null +++ b/brand/provenance.json @@ -0,0 +1,70 @@ +{ + "schemaVersion": 1, + "identity": { + "formalName": "gflow-cli", + "command": "gflow", + "markName": "Supersonic Stream Ribbons", + "status": "approved" + }, + "source": { + "type": "approved-identity-brief", + "owner": "xibodev", + "repository": "https://github.com/xibodev/gflow-cli" + }, + "canonical": { + "guidelines": "BRAND.md", + "tokens": [ + "tokens.json", + "tokens.css" + ], + "logos": [ + "logos/mark.svg", + "logos/mark-inverse.svg", + "logos/lockup.svg", + "logos/lockup-inverse.svg", + "logos/wordmark.svg", + "logos/wordmark-inverse.svg", + "logos/mono-black.svg", + "logos/mono-white.svg" + ], + "icons": [ + "icons/favicon.svg", + "icons/app-icon.svg", + "icons/icon-192.svg", + "icons/icon-512.svg" + ], + "social": [ + "og/og-default.svg", + "og/og-default.png" + ] + }, + "derivations": [ + { + "source": "og/og-default.svg", + "target": "og/og-default.png", + "tool": "sharp-cli", + "version": "5.2.0", + "command": "npx --yes sharp-cli@5.2.0 -i brand/og/og-default.svg -o brand/og/og-default.png -f png -c 9", + "width": 1200, + "height": 630 + } + ], + "projections": [ + { + "source": "icons/favicon.svg", + "target": "../docs/favicon.svg" + }, + { + "source": "logos/mark.svg", + "target": "../docs/logo-mark.svg" + }, + { + "source": "og/og-default.svg", + "target": "../docs/og-default.svg" + }, + { + "source": "og/og-default.png", + "target": "../docs/og-default.png" + } + ] +} diff --git a/brand/tokens.css b/brand/tokens.css new file mode 100644 index 0000000..ee4e57a --- /dev/null +++ b/brand/tokens.css @@ -0,0 +1,12 @@ +:root { + --gflow-color-supersonic-cyan: #00e5ff; + --gflow-color-accessible-cyan-dark: #007c91; + --gflow-color-cockpit-obsidian: #080b10; + --gflow-color-signal-white: #ffffff; + --gflow-mark-ribbon-stroke-width: 7; + --gflow-mark-accent-stroke-width: 3; + --gflow-mark-endpoint-radius: 4.5; + --gflow-mark-minimum-screen-size: 24px; + --gflow-wordmark-font-family: "Public Sans", Arial, sans-serif; + --gflow-wordmark-font-weight: 800; +} diff --git a/brand/tokens.json b/brand/tokens.json new file mode 100644 index 0000000..d6fbe69 --- /dev/null +++ b/brand/tokens.json @@ -0,0 +1,117 @@ +{ + "name": "gflow-cli", + "version": "1.0.0", + "color": { + "supersonicCyan": { + "$type": "color", + "$value": "#00E5FF", + "$description": "Primary ribbon on approved dark surfaces." + }, + "accessibleCyanDark": { + "$type": "color", + "$value": "#007C91", + "$description": "Accessible ribbon color on white and light surfaces." + }, + "cockpitObsidian": { + "$type": "color", + "$value": "#080B10", + "$description": "Primary tile and inverse background." + }, + "signalWhite": { + "$type": "color", + "$value": "#FFFFFF", + "$description": "Inverse velocity accent, endpoint, and wordmark." + } + }, + "mark": { + "viewBox": { + "$type": "string", + "$value": "0 0 100 100" + }, + "ring": { + "centerX": { + "$type": "number", + "$value": 50 + }, + "centerY": { + "$type": "number", + "$value": 38 + }, + "radius": { + "$type": "number", + "$value": 16 + } + }, + "stream": { + "path": { + "$type": "string", + "$value": "M66 38 L66 64 C66 76 54 82 40 82 C28 82 22 74 22 66" + }, + "lineCap": { + "$type": "string", + "$value": "round" + }, + "lineJoin": { + "$type": "string", + "$value": "round" + } + }, + "velocityAccent": { + "path": { + "$type": "string", + "$value": "M50 22 C58 22 66 30 66 38" + }, + "lineCap": { + "$type": "string", + "$value": "round" + } + }, + "endpoint": { + "centerX": { + "$type": "number", + "$value": 66 + }, + "centerY": { + "$type": "number", + "$value": 38 + }, + "radius": { + "$type": "number", + "$value": 4.5 + } + }, + "ribbonStrokeWidth": { + "$type": "number", + "$value": 7 + }, + "accentStrokeWidth": { + "$type": "number", + "$value": 3 + }, + "minimumScreenSize": { + "$type": "dimension", + "$value": { + "value": 24, + "unit": "px" + } + } + }, + "wordmark": { + "fontFamily": { + "$type": "fontFamily", + "$value": [ + "Public Sans", + "Arial", + "sans-serif" + ] + }, + "fontWeight": { + "$type": "fontWeight", + "$value": 800 + }, + "text": { + "$type": "string", + "$value": "gflow-cli" + } + } +} diff --git a/docs/favicon.svg b/docs/favicon.svg new file mode 100644 index 0000000..1b8990c --- /dev/null +++ b/docs/favicon.svg @@ -0,0 +1,8 @@ + + gflow-cli icon + + + + + + diff --git a/docs/index.html b/docs/index.html index b8256b8..fadc7dc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,8 +3,26 @@ - gflow: AI Media CLI & MCP Server + gflow-cli: AI Media CLI & MCP Server + + + + + + + + + + + + + + + + + + @@ -28,6 +46,11 @@ paper: '#ffffff', canvas: '#f8fafc', terminal: '#090d16', + brand: { + cyan: '#00E5FF', + accessible: '#007C91', + obsidian: '#080B10', + }, } } } @@ -73,12 +96,13 @@
-
- - gflow +
+ + + - / - v1.1.0 + +