chore: add images

This commit is contained in:
Jesús Pérez 2025-11-19 17:38:11 +00:00
parent 9067b69eac
commit f8cd8db487
6 changed files with 1771 additions and 0 deletions

100
.gitignore vendored Normal file
View File

@ -0,0 +1,100 @@
wrks
OLD
# Generated by Cargo
# will have compiled files and executables
debug/
target/
# Encryption keys and related files (CRITICAL - NEVER COMMIT)
.k
.k.backup
*.k
*.key.backup
config.*.toml
config.*back
# where book is written
_book
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
node_modules/
**/output.css
**/input.css
# Environment files
.env
.env.local
.env.production
.env.development
.env.staging
# Keep example files
!.env.example
# Configuration files (may contain sensitive data)
config.prod.toml
config.production.toml
config.local.toml
config.*.local.toml
# Keep example configuration files
!config.toml
!config.dev.toml
!config.example.toml
# Log files
logs/
*.log
# TLS certificates and keys
certs/
*.pem
*.crt
*.key
*.p12
*.pfx
# Database files
*.db
*.sqlite
*.sqlite3
# Backup files
*.bak
*.backup
*.tmp
*~
# Encryption and security related files
*.encrypted
*.enc
secrets/
private/
security/
# Configuration backups that may contain secrets
config.*.backup
config.backup.*
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Documentation build output
book-output/
# Generated setup report
SETUP_COMPLETE.md

146
imgs/provctl_logo_bn.svg Normal file
View File

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 210 160">
<defs>
<!-- Grayscale gradient for orbital system -->
<linearGradient id="flowGradient">
<stop offset="0%" style="stop-color:#404040;stop-opacity:1"/>
<stop offset="25%" style="stop-color:#606060;stop-opacity:1"/>
<stop offset="50%" style="stop-color:#808080;stop-opacity:1"/>
<stop offset="75%" style="stop-color:#707070;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#505050;stop-opacity:1"/>
</linearGradient>
<!-- Radial gradient for nodes -->
<radialGradient id="nodeGradient" cx="30%" cy="30%">
<stop offset="0%" style="stop-color:#707070;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#505050;stop-opacity:1"/>
</radialGradient>
<!-- Glow filters -->
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="strongGlow">
<feGaussianBlur stdDeviation="5" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<!-- Grayscale text gradient -->
<linearGradient id="textGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#404040;stop-opacity:1"/>
<stop offset="50%" style="stop-color:#606060;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#707070;stop-opacity:1"/>
</linearGradient>
</defs>
<g id="logo-main">
<!-- ORBITAL ICON SYSTEM (Left side) -->
<g id="orbital-system" transform="translate(105, 45) scale(0.405)">
<!-- Outer orbital rings -->
<ellipse cx="0" cy="0" rx="180" ry="90" fill="none" stroke="#707070" stroke-width="2" opacity="0.4"/>
<ellipse cx="0" cy="0" rx="150" ry="75" fill="none" stroke="#707070" stroke-width="2" opacity="0.4"/>
<!-- INFINITY LOOP - Continuous CI/CD flow -->
<g id="infinity-flow">
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="url(#flowGradient)" stroke-width="8" stroke-linecap="round" opacity="0.7" filter="url(#glow)"/>
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="#707070" stroke-width="3" stroke-linecap="round" opacity="0.7"/>
</g>
<!-- Data particles flowing along infinity path -->
<g id="flow-particles">
<circle cx="-30" cy="0" r="4" fill="#808080" filter="url(#strongGlow)" opacity="0.7"/>
<circle cx="30" cy="0" r="4" fill="#707070" filter="url(#strongGlow)" opacity="0.7"/>
<circle cx="0" cy="35" r="4" fill="#606060" filter="url(#strongGlow)" opacity="0.7"/>
</g>
<!-- CENTRAL CONTROL NODE (local) -->
<g id="central-node">
<circle cx="0" cy="0" r="25" fill="#404040" opacity="0.2"/>
<circle cx="0" cy="0" r="20" fill="#404040" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="15" fill="none" stroke="#707070" stroke-width="1.5" opacity="0.5"/>
<circle cx="0" cy="0" r="10" fill="none" stroke="#707070" stroke-width="2" opacity="0.7"/>
<circle cx="0" cy="0" r="6" fill="#707070" filter="url(#strongGlow)" opacity="0.8"/>
<circle cx="-3" cy="-3" r="3" fill="#fff" opacity="0.9"/>
</g>
<!-- LARGE ORBITAL REMOTE NODES -->
<g id="remote-nodes">
<!-- Node 1 - Top -->
<g transform="translate(0, -70)">
<circle cx="0" cy="0" r="22" fill="#606060" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#707070" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#808080" text-anchor="middle">&gt;_</text>
<line x1="0" y1="18" x2="0" y2="48" stroke="#707070" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 2 - Right -->
<g transform="translate(140, 0)">
<circle cx="0" cy="0" r="22" fill="#606060" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#707070" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#808080" text-anchor="middle">&gt;_</text>
<line x1="-18" y1="0" x2="-118" y2="0" stroke="#707070" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 3 - Bottom Right -->
<g transform="translate(100, 50)">
<circle cx="0" cy="0" r="22" fill="#606060" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#707070" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#808080" text-anchor="middle">&gt;_</text>
<line x1="-10" y1="-10" x2="-80" y2="-40" stroke="#707070" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 4 - Bottom Left -->
<g transform="translate(-100, 50)">
<circle cx="0" cy="0" r="22" fill="#606060" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#707070" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#808080" text-anchor="middle">&gt;_</text>
<line x1="10" y1="-10" x2="80" y2="-40" stroke="#707070" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 5 - Left -->
<g transform="translate(-140, 0)">
<circle cx="0" cy="0" r="22" fill="#606060" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#707070" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#808080" text-anchor="middle">&gt;_</text>
<line x1="18" y1="0" x2="118" y2="0" stroke="#707070" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
</g>
</g>
<!-- TEXT SECTION (Below icon) -->
<g id="text-group" transform="translate(-120, 75) scale(0.7)">
<!-- Main text paths -->
<g id="text-paths" opacity="0.9">
<path fill="url(#textGradient)" d="M215.69,30.31c3.05-2.3,6.06-3.46,9.04-3.46s5.44,1.19,7.38,3.56,2.92,5.82,2.92,10.33c0,7.2-1.97,13.32-5.9,18.36-3.94,5.04-8.67,7.56-14.18,7.56-1.97,0-3.96-.38-5.98-1.15,4.7-1.1,8.45-4.15,11.23-9.14,2.78-4.99,4.18-9.96,4.18-14.9,0-2.3-.42-4.18-1.26-5.62-.84-1.44-2.03-2.16-3.56-2.16-2.93,0-5.52,1.78-7.78,5.33-2.26,3.55-3.98,8.41-5.18,14.58-1.2,6.17-1.8,12.6-1.8,19.3s.48,12.52,1.44,17.46c-3.94-.14-6.85-.78-8.75-1.91-1.9-1.13-2.84-3.28-2.84-6.44,0-1.15.73-7.24,2.2-18.25,1.46-11.02,2.2-19.5,2.2-25.45s-.36-10.97-1.08-15.05c3.84.96,6.49,2.74,7.96,5.33,1.46,2.59,2.2,6.38,2.2,11.38,2.02-4.13,4.55-7.34,7.6-9.65Z"/>
<path fill="url(#textGradient)" d="M262.42,29.48c2.42-2.95,4.68-4.43,6.77-4.43s3.66.78,4.72,2.34c1.06,1.56,1.58,3.58,1.58,6.05s-.73,4.74-2.2,6.8c-1.46,2.06-3.47,3.1-6.01,3.1-.67,0-1.46-.19-2.38-.58,1.49-1.87,2.23-4.13,2.23-6.77,0-1.54-.62-2.3-1.87-2.3-.91,0-1.9.64-2.95,1.91-1.06,1.27-2.06,3.02-3.02,5.26-.96,2.23-1.76,5.09-2.41,8.57-.65,3.48-.97,7.19-.97,11.12,0,.48.12,2.52.36,6.12-1.54.1-2.52.14-2.95.14-2.74,0-4.71-.48-5.9-1.44-1.2-.96-1.8-2.54-1.8-4.75,0-.96.5-4.66,1.51-11.09,1.01-6.43,1.51-11.56,1.51-15.37s-.41-7.33-1.22-10.55c3.5,1.1,5.95,2.68,7.34,4.72,1.39,2.04,2.09,4.42,2.09,7.13s-.22,5.32-.65,7.81c1.73-6.24,3.8-10.84,6.23-13.79Z"/>
<path fill="url(#textGradient)" d="M306.3,25.34c2.88,0,5.33,1.42,7.34,4.25,2.02,2.83,3.02,6.62,3.02,11.38,0,5.33-1.08,10.22-3.24,14.69-2.4,5.04-5.81,8.52-10.22,10.44-2.5,1.1-5.23,1.66-8.21,1.66-4.18,0-7.81-1.62-10.91-4.86-3.1-3.24-4.64-7.89-4.64-13.97s1.49-11.42,4.46-16.06c2.98-4.63,6.91-7.55,11.81-8.75.53,0,1.02.16,1.48.47.46.31.68.64.68.97-4.85,3.36-7.75,8.04-8.71,14.04,1.01-2.69,2.24-5.01,3.71-6.98,1.46-1.97,2.99-3.46,4.57-4.46,3.02-1.87,5.98-2.81,8.86-2.81ZM301.84,30.6c-3.12,0-5.9,2.1-8.35,6.3-2.45,4.2-3.67,8.39-3.67,12.56,0,8.74,2.26,13.1,6.77,13.1,3.22,0,5.83-2.1,7.85-6.3,2.02-4.2,3.02-8.92,3.02-14.15,0-7.68-1.87-11.52-5.62-11.52Z"/>
<path fill="url(#textGradient)" d="M341.36,66.67c-1.54.67-3.14,1.01-4.82,1.01s-2.62-.36-2.81-1.08c-.77-3.07-1.66-7.67-2.66-13.79s-2.03-11.47-3.06-16.06c-1.03-4.58-2.27-8.05-3.71-10.4,2.64-1.25,4.75-1.87,6.34-1.87s2.78.36,3.6,1.08c.82.72,1.5,2.15,2.05,4.28.55,2.14.95,3.9,1.19,5.29.67,4.61,1.01,7.18,1.01,7.7s.19,2.68.58,6.44c.38,3.77.67,6.25.86,7.45,8.54-16.56,12.82-27.62,12.82-33.19,3.94,2.02,5.9,4.2,5.9,6.55,0,1.92-1,4.76-2.99,8.53-1.99,3.77-4.49,8.33-7.49,13.68-3,5.35-5.27,10.14-6.8,14.36Z"/>
<path fill="url(#textGradient)" d="M375.2,50.4c0,8.02,2.35,12.02,7.06,12.02,1.82,0,3.67-.62,5.54-1.87,1.87-1.25,3.5-2.98,4.9-5.18,1.73.38,2.59,1.27,2.59,2.66-2.02,3.5-4.49,6-7.42,7.49s-5.86,2.23-8.78,2.23c-3.94,0-7.29-1.45-10.04-4.36-2.76-2.9-4.14-7.12-4.14-12.64,0-7.06,1.94-13.09,5.83-18.11s9.14-7.52,15.77-7.52c3.7,0,6.48.9,8.35,2.7s2.81,3.94,2.81,6.41-.76,4.62-2.27,6.44c-1.51,1.83-3.44,2.74-5.8,2.74-1.15,0-2.3-.24-3.46-.72.72-.82,1.39-2.1,2.02-3.85.62-1.75.94-3.37.94-4.86,0-2.93-1.27-4.39-3.82-4.39-2.98,0-5.4,2.18-7.27,6.55-1.87,4.37-2.81,9.12-2.81,14.26Z"/>
<path fill="url(#textGradient)" d="M420.85,41.83c-.77,4.27-1.37,8.06-1.8,11.38-.43,3.31-.65,6.7-.65,10.15s.33,5.93,1.01,7.42c-3.7-.96-6.24-2.44-7.63-4.43-1.39-1.99-2.09-4.81-2.09-8.46,0-3.21.5-7.62,1.51-13.21,1.01-5.59,1.66-9.37,1.94-11.34-2.5.43-5.16,1.27-7.99,2.52-.1-1.05-.14-1.85-.14-2.38,0-2.54.77-4.28,2.3-5.22,1.54-.94,3.74-1.43,6.62-1.48.33-3.6.5-6.19.5-7.78s-.01-2.9-.04-3.96c-.03-1.06-.04-1.85-.04-2.38,3.17.34,5.47,1.29,6.91,2.84,1.44,1.56,2.16,3.78,2.16,6.66,0,1.15-.12,2.76-.36,4.82,4.03-.1,6.98-.89,8.86-2.38.09.96.14,1.68.14,2.16,0,2.3-.41,3.9-1.22,4.79-.82.89-2.19,1.33-4.1,1.33s-3.38-.02-4.39-.07c-.24,1.73-.75,4.73-1.51,9Z"/>
<path fill="url(#textGradient)" d="M437.27,62.1c-.14-.89-.22-2.27-.22-4.14s.8-9.24,2.41-22.1c1.61-12.86,2.41-21.7,2.41-26.5s-.29-7.92-.86-9.36c3.6.96,6.06,2.41,7.38,4.36,1.32,1.94,1.98,4.69,1.98,8.24,0,2.11-.7,8.98-2.09,20.59-1.39,11.62-2.09,20.98-2.09,28.08,0,1.54.1,3.7.29,6.48-4.37-.19-7.08-1.15-8.14-2.88-.58-.96-.94-1.88-1.08-2.77Z"/>
</g>
<!-- Static underline -->
<g id="underline">
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.7"/>
<path d="M172.5,86.67h300" stroke="#606060" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.2"/>
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="6" fill="none" stroke-linecap="round" opacity="0.3"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

246
imgs/provctl_logo_h.svg Normal file
View File

@ -0,0 +1,246 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 380 100">
<defs>
<!-- Continuous flow gradient for orbital system -->
<linearGradient id="flowGradient">
<stop offset="0%" style="stop-color:#455aa5;stop-opacity:1">
<animate attributeName="offset" values="0%;1%;0%" dur="4s" repeatCount="indefinite"/>
</stop>
<stop offset="25%" style="stop-color:#4cc2f1;stop-opacity:1">
<animate attributeName="offset" values="0.25;1.25;0.25" dur="4s" repeatCount="indefinite"/>
</stop>
<stop offset="50%" style="stop-color:#f2b03f;stop-opacity:1">
<animate attributeName="offset" values="0.5;1.5;0.5" dur="4s" repeatCount="indefinite"/>
</stop>
<stop offset="75%" style="stop-color:#05ab9e;stop-opacity:1">
<animate attributeName="offset" values="0.75;1.75;0.75" dur="4s" repeatCount="indefinite"/>
</stop>
<stop offset="100%" style="stop-color:#5e74b7;stop-opacity:1">
<animate attributeName="offset" values="1;2;1" dur="4s" repeatCount="indefinite"/>
</stop>
</linearGradient>
<!-- Radial gradient for nodes -->
<radialGradient id="nodeGradient" cx="30%" cy="30%">
<stop offset="0%" style="stop-color:#7085c9;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#5e74b7;stop-opacity:1"/>
</radialGradient>
<!-- Glow filters -->
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="strongGlow">
<feGaussianBlur stdDeviation="5" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<!-- Text gradient with animation -->
<linearGradient id="textGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#455aa5;stop-opacity:1">
<animate attributeName="stop-color" values="#455aa5;#4cc2f1;#455aa5" dur="4s" repeatCount="indefinite"/>
</stop>
<stop offset="50%" style="stop-color:#4cc2f1;stop-opacity:1">
<animate attributeName="stop-color" values="#4cc2f1;#05ab9e;#4cc2f1" dur="4s" repeatCount="indefinite"/>
</stop>
<stop offset="100%" style="stop-color:#05ab9e;stop-opacity:1">
<animate attributeName="stop-color" values="#05ab9e;#455aa5;#05ab9e" dur="4s" repeatCount="indefinite"/>
</stop>
</linearGradient>
<!-- Particle gradient for floating elements -->
<linearGradient id="particleGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#4cc2f1;stop-opacity:0.8">
<animate attributeName="stop-color" values="#4cc2f1;#f2b03f;#05ab9e;#4cc2f1" dur="3s" repeatCount="indefinite"/>
</stop>
<stop offset="100%" style="stop-color:#05ab9e;stop-opacity:0.8">
<animate attributeName="stop-color" values="#05ab9e;#4cc2f1;#f2b03f;#05ab9e" dur="3s" repeatCount="indefinite"/>
</stop>
</linearGradient>
</defs>
<g id="logo-main">
<!-- LEFT SIDE: ORBITAL ICON -->
<g id="orbital-system" transform="translate(90, 55) scale(0.42)">
<!-- Outer orbital rings -->
<ellipse cx="0" cy="0" rx="180" ry="90" fill="none" stroke="#8895b3" stroke-width="2" opacity="0.4">
<animate attributeName="opacity" values="0.35;0.5;0.35" dur="3s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</ellipse>
<ellipse cx="0" cy="0" rx="150" ry="75" fill="none" stroke="#8895b3" stroke-width="2" opacity="0.4">
<animate attributeName="opacity" values="0.35;0.5;0.35" dur="2.5s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</ellipse>
<!-- INFINITY LOOP - Continuous CI/CD flow -->
<g id="infinity-flow">
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="url(#flowGradient)" stroke-width="8" stroke-linecap="round" opacity="0.7" filter="url(#glow)">
<animate attributeName="opacity" values="0.6;0.9;0.6" dur="2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</path>
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="#8895b3" stroke-width="3" stroke-linecap="round" opacity="0.7"/>
</g>
<!-- Data particles flowing along infinity path -->
<g id="flow-particles">
<circle r="4" fill="#f2b03f" filter="url(#strongGlow)">
<animateMotion dur="6s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1">
<mpath href="#infinity-path"/>
</animateMotion>
<animate attributeName="opacity" values="0.4;1;0.4" dur="6s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle r="4" fill="#05ab9e" filter="url(#strongGlow)">
<animateMotion dur="6s" begin="2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1">
<mpath href="#infinity-path"/>
</animateMotion>
<animate attributeName="opacity" values="0.4;1;0.4" dur="6s" begin="2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle r="4" fill="#4cc2f1" filter="url(#strongGlow)">
<animateMotion dur="6s" begin="4s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1">
<mpath href="#infinity-path"/>
</animateMotion>
<animate attributeName="opacity" values="0.4;1;0.4" dur="6s" begin="4s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
</g>
<!-- Hidden path for particle animation -->
<path id="infinity-path" d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 Z M 30,-35 C 65,-60 110,-45 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 Z" fill="none" stroke="none"/>
<!-- CENTRAL CONTROL NODE (local) -->
<g id="central-node">
<circle cx="0" cy="0" r="25" fill="#455aa5" opacity="0.2">
<animate attributeName="r" values="22;28;22" dur="2.5s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.15;0.35;0.15" dur="2.5s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="0" cy="0" r="20" fill="#455aa5" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="15" fill="none" stroke="#05ab9e" stroke-width="1.5" opacity="0.5"/>
<circle cx="0" cy="0" r="10" fill="none" stroke="#05ab9e" stroke-width="2" opacity="0.7"/>
<circle cx="0" cy="0" r="6" fill="#05ab9e" filter="url(#strongGlow)">
<animate attributeName="r" values="5;8;5" dur="2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.7;1;0.7" dur="2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="-3" cy="-3" r="3" fill="#fff" opacity="0.9"/>
</g>
<!-- LARGE ORBITAL REMOTE NODES -->
<g id="remote-nodes">
<!-- Node 1 - Top -->
<g transform="translate(0, -70)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15">
<animate attributeName="r" values="20;24;20" dur="2.2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.1;0.25;0.1" dur="2.2s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="0" y1="18" x2="0" y2="48" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75">
<animate attributeName="stroke-dashoffset" values="0;8;0" dur="1.5s" repeatCount="indefinite"/>
</line>
</g>
<!-- Node 2 - Right -->
<g transform="translate(140, 0)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15">
<animate attributeName="r" values="20;24;20" dur="2.4s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.1;0.25;0.1" dur="2.4s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="-18" y1="0" x2="-118" y2="0" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75">
<animate attributeName="stroke-dashoffset" values="0;8;0" dur="1.7s" repeatCount="indefinite"/>
</line>
</g>
<!-- Node 3 - Bottom Right -->
<g transform="translate(100, 50)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15">
<animate attributeName="r" values="20;24;20" dur="2.1s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.1;0.25;0.1" dur="2.1s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="-10" y1="-10" x2="-80" y2="-40" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75">
<animate attributeName="stroke-dashoffset" values="0;8;0" dur="1.9s" repeatCount="indefinite"/>
</line>
</g>
<!-- Node 4 - Bottom Left -->
<g transform="translate(-100, 50)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15">
<animate attributeName="r" values="20;24;20" dur="2.3s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.1;0.25;0.1" dur="2.3s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="10" y1="-10" x2="80" y2="-40" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75">
<animate attributeName="stroke-dashoffset" values="0;8;0" dur="2s" repeatCount="indefinite"/>
</line>
</g>
<!-- Node 5 - Left -->
<g transform="translate(-140, 0)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15">
<animate attributeName="r" values="20;24;20" dur="2.5s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
<animate attributeName="opacity" values="0.1;0.25;0.1" dur="2.5s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</circle>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="18" y1="0" x2="118" y2="0" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75">
<animate attributeName="stroke-dashoffset" values="0;8;0" dur="1.8s" repeatCount="indefinite"/>
</line>
</g>
</g>
</g>
<!-- RIGHT SIDE: TEXT -->
<g id="text-group" transform="translate(50, 20) scale(0.7)">
<!-- Main text paths with animation -->
<g id="text-paths">
<path fill="url(#textGradient)" d="M215.69,30.31c3.05-2.3,6.06-3.46,9.04-3.46s5.44,1.19,7.38,3.56,2.92,5.82,2.92,10.33c0,7.2-1.97,13.32-5.9,18.36-3.94,5.04-8.67,7.56-14.18,7.56-1.97,0-3.96-.38-5.98-1.15,4.7-1.1,8.45-4.15,11.23-9.14,2.78-4.99,4.18-9.96,4.18-14.9,0-2.3-.42-4.18-1.26-5.62-.84-1.44-2.03-2.16-3.56-2.16-2.93,0-5.52,1.78-7.78,5.33-2.26,3.55-3.98,8.41-5.18,14.58-1.2,6.17-1.8,12.6-1.8,19.3s.48,12.52,1.44,17.46c-3.94-.14-6.85-.78-8.75-1.91-1.9-1.13-2.84-3.28-2.84-6.44,0-1.15.73-7.24,2.2-18.25,1.46-11.02,2.2-19.5,2.2-25.45s-.36-10.97-1.08-15.05c3.84.96,6.49,2.74,7.96,5.33,1.46,2.59,2.2,6.38,2.2,11.38,2.02-4.13,4.55-7.34,7.6-9.65Z"/>
<path fill="url(#textGradient)" d="M262.42,29.48c2.42-2.95,4.68-4.43,6.77-4.43s3.66.78,4.72,2.34c1.06,1.56,1.58,3.58,1.58,6.05s-.73,4.74-2.2,6.8c-1.46,2.06-3.47,3.1-6.01,3.1-.67,0-1.46-.19-2.38-.58,1.49-1.87,2.23-4.13,2.23-6.77,0-1.54-.62-2.3-1.87-2.3-.91,0-1.9.64-2.95,1.91-1.06,1.27-2.06,3.02-3.02,5.26-.96,2.23-1.76,5.09-2.41,8.57-.65,3.48-.97,7.19-.97,11.12,0,.48.12,2.52.36,6.12-1.54.1-2.52.14-2.95.14-2.74,0-4.71-.48-5.9-1.44-1.2-.96-1.8-2.54-1.8-4.75,0-.96.5-4.66,1.51-11.09,1.01-6.43,1.51-11.56,1.51-15.37s-.41-7.33-1.22-10.55c3.5,1.1,5.95,2.68,7.34,4.72,1.39,2.04,2.09,4.42,2.09,7.13s-.22,5.32-.65,7.81c1.73-6.24,3.8-10.84,6.23-13.79Z"/>
<path fill="url(#textGradient)" d="M306.3,25.34c2.88,0,5.33,1.42,7.34,4.25,2.02,2.83,3.02,6.62,3.02,11.38,0,5.33-1.08,10.22-3.24,14.69-2.4,5.04-5.81,8.52-10.22,10.44-2.5,1.1-5.23,1.66-8.21,1.66-4.18,0-7.81-1.62-10.91-4.86-3.1-3.24-4.64-7.89-4.64-13.97s1.49-11.42,4.46-16.06c2.98-4.63,6.91-7.55,11.81-8.75.53,0,1.02.16,1.48.47.46.31.68.64.68.97-4.85,3.36-7.75,8.04-8.71,14.04,1.01-2.69,2.24-5.01,3.71-6.98,1.46-1.97,2.99-3.46,4.57-4.46,3.02-1.87,5.98-2.81,8.86-2.81ZM301.84,30.6c-3.12,0-5.9,2.1-8.35,6.3-2.45,4.2-3.67,8.39-3.67,12.56,0,8.74,2.26,13.1,6.77,13.1,3.22,0,5.83-2.1,7.85-6.3,2.02-4.2,3.02-8.92,3.02-14.15,0-7.68-1.87-11.52-5.62-11.52Z"/>
<path fill="url(#textGradient)" d="M341.36,66.67c-1.54.67-3.14,1.01-4.82,1.01s-2.62-.36-2.81-1.08c-.77-3.07-1.66-7.67-2.66-13.79s-2.03-11.47-3.06-16.06c-1.03-4.58-2.27-8.05-3.71-10.4,2.64-1.25,4.75-1.87,6.34-1.87s2.78.36,3.6,1.08c.82.72,1.5,2.15,2.05,4.28.55,2.14.95,3.9,1.19,5.29.67,4.61,1.01,7.18,1.01,7.7s.19,2.68.58,6.44c.38,3.77.67,6.25.86,7.45,8.54-16.56,12.82-27.62,12.82-33.19,3.94,2.02,5.9,4.2,5.9,6.55,0,1.92-1,4.76-2.99,8.53-1.99,3.77-4.49,8.33-7.49,13.68-3,5.35-5.27,10.14-6.8,14.36Z"/>
<path fill="url(#textGradient)" d="M375.2,50.4c0,8.02,2.35,12.02,7.06,12.02,1.82,0,3.67-.62,5.54-1.87,1.87-1.25,3.5-2.98,4.9-5.18,1.73.38,2.59,1.27,2.59,2.66-2.02,3.5-4.49,6-7.42,7.49s-5.86,2.23-8.78,2.23c-3.94,0-7.29-1.45-10.04-4.36-2.76-2.9-4.14-7.12-4.14-12.64,0-7.06,1.94-13.09,5.83-18.11s9.14-7.52,15.77-7.52c3.7,0,6.48.9,8.35,2.7s2.81,3.94,2.81,6.41-.76,4.62-2.27,6.44c-1.51,1.83-3.44,2.74-5.8,2.74-1.15,0-2.3-.24-3.46-.72.72-.82,1.39-2.1,2.02-3.85.62-1.75.94-3.37.94-4.86,0-2.93-1.27-4.39-3.82-4.39-2.98,0-5.4,2.18-7.27,6.55-1.87,4.37-2.81,9.12-2.81,14.26Z"/>
<path fill="url(#textGradient)" d="M420.85,41.83c-.77,4.27-1.37,8.06-1.8,11.38-.43,3.31-.65,6.7-.65,10.15s.33,5.93,1.01,7.42c-3.7-.96-6.24-2.44-7.63-4.43-1.39-1.99-2.09-4.81-2.09-8.46,0-3.21.5-7.62,1.51-13.21,1.01-5.59,1.66-9.37,1.94-11.34-2.5.43-5.16,1.27-7.99,2.52-.1-1.05-.14-1.85-.14-2.38,0-2.54.77-4.28,2.3-5.22,1.54-.94,3.74-1.43,6.62-1.48.33-3.6.5-6.19.5-7.78s-.01-2.9-.04-3.96c-.03-1.06-.04-1.85-.04-2.38,3.17.34,5.47,1.29,6.91,2.84,1.44,1.56,2.16,3.78,2.16,6.66,0,1.15-.12,2.76-.36,4.82,4.03-.1,6.98-.89,8.86-2.38.09.96.14,1.68.14,2.16,0,2.3-.41,3.9-1.22,4.79-.82.89-2.19,1.33-4.1,1.33s-3.38-.02-4.39-.07c-.24,1.73-.75,4.73-1.51,9Z"/>
<path fill="url(#textGradient)" d="M437.27,62.1c-.14-.89-.22-2.27-.22-4.14s.8-9.24,2.41-22.1c1.61-12.86,2.41-21.7,2.41-26.5s-.29-7.92-.86-9.36c3.6.96,6.06,2.41,7.38,4.36,1.32,1.94,1.98,4.69,1.98,8.24,0,2.11-.7,8.98-2.09,20.59-1.39,11.62-2.09,20.98-2.09,28.08,0,1.54.1,3.7.29,6.48-4.37-.19-7.08-1.15-8.14-2.88-.58-.96-.94-1.88-1.08-2.77Z"/>
<!-- Text glow animation -->
<animate attributeName="opacity" values="0.8;1;0.8" dur="2.5s" repeatCount="indefinite" calcMode="spline" keySplines="0.42 0 0.58 1; 0.42 0 0.58 1"/>
</g>
<!-- Animated underline -->
<g id="underline">
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.7">
<animate attributeName="stroke-dasharray" values="0,300;300,0" dur="4s" repeatCount="indefinite"/>
<animate attributeName="opacity" values="0;0.7;0.7" dur="4s" repeatCount="indefinite"/>
</path>
<path d="M172.5,86.67h300" stroke="#4cc2f1" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.2">
<animate attributeName="stroke-dasharray" values="0,300;300,0" dur="4s" begin="0.2s" repeatCount="indefinite"/>
<animate attributeName="opacity" values="0;0.2;0.2" dur="4s" begin="0.2s" repeatCount="indefinite"/>
</path>
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="6" fill="none" stroke-linecap="round" opacity="0.3">
<animate attributeName="stroke-dasharray" values="0,300;300,0" dur="4s" begin="0.1s" repeatCount="indefinite"/>
<animate attributeName="opacity" values="0;0.3;0.3" dur="4s" begin="0.1s" repeatCount="indefinite"/>
</path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

146
imgs/provctl_logo_h_s.svg Normal file
View File

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 380 100">
<defs>
<!-- Static gradient for orbital system -->
<linearGradient id="flowGradient">
<stop offset="0%" style="stop-color:#455aa5;stop-opacity:1"/>
<stop offset="25%" style="stop-color:#4cc2f1;stop-opacity:1"/>
<stop offset="50%" style="stop-color:#f2b03f;stop-opacity:1"/>
<stop offset="75%" style="stop-color:#05ab9e;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#5e74b7;stop-opacity:1"/>
</linearGradient>
<!-- Radial gradient for nodes -->
<radialGradient id="nodeGradient" cx="30%" cy="30%">
<stop offset="0%" style="stop-color:#7085c9;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#5e74b7;stop-opacity:1"/>
</radialGradient>
<!-- Glow filters -->
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="strongGlow">
<feGaussianBlur stdDeviation="5" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<!-- Static text gradient -->
<linearGradient id="textGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#455aa5;stop-opacity:1"/>
<stop offset="50%" style="stop-color:#4cc2f1;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#05ab9e;stop-opacity:1"/>
</linearGradient>
</defs>
<g id="logo-main">
<!-- LEFT SIDE: ORBITAL ICON -->
<g id="orbital-system" transform="translate(90, 55) scale(0.42)">
<!-- Outer orbital rings -->
<ellipse cx="0" cy="0" rx="180" ry="90" fill="none" stroke="#8895b3" stroke-width="2" opacity="0.4"/>
<ellipse cx="0" cy="0" rx="150" ry="75" fill="none" stroke="#8895b3" stroke-width="2" opacity="0.4"/>
<!-- INFINITY LOOP - Continuous CI/CD flow -->
<g id="infinity-flow">
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="url(#flowGradient)" stroke-width="8" stroke-linecap="round" opacity="0.7" filter="url(#glow)"/>
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="#8895b3" stroke-width="3" stroke-linecap="round" opacity="0.7"/>
</g>
<!-- Data particles flowing along infinity path -->
<g id="flow-particles">
<circle cx="-30" cy="0" r="4" fill="#f2b03f" filter="url(#strongGlow)" opacity="0.7"/>
<circle cx="30" cy="0" r="4" fill="#05ab9e" filter="url(#strongGlow)" opacity="0.7"/>
<circle cx="0" cy="35" r="4" fill="#4cc2f1" filter="url(#strongGlow)" opacity="0.7"/>
</g>
<!-- CENTRAL CONTROL NODE (local) -->
<g id="central-node">
<circle cx="0" cy="0" r="25" fill="#455aa5" opacity="0.2"/>
<circle cx="0" cy="0" r="20" fill="#455aa5" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="15" fill="none" stroke="#05ab9e" stroke-width="1.5" opacity="0.5"/>
<circle cx="0" cy="0" r="10" fill="none" stroke="#05ab9e" stroke-width="2" opacity="0.7"/>
<circle cx="0" cy="0" r="6" fill="#05ab9e" filter="url(#strongGlow)" opacity="0.8"/>
<circle cx="-3" cy="-3" r="3" fill="#fff" opacity="0.9"/>
</g>
<!-- LARGE ORBITAL REMOTE NODES -->
<g id="remote-nodes">
<!-- Node 1 - Top -->
<g transform="translate(0, -70)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="0" y1="18" x2="0" y2="48" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 2 - Right -->
<g transform="translate(140, 0)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="-18" y1="0" x2="-118" y2="0" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 3 - Bottom Right -->
<g transform="translate(100, 50)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="-10" y1="-10" x2="-80" y2="-40" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 4 - Bottom Left -->
<g transform="translate(-100, 50)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="10" y1="-10" x2="80" y2="-40" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 5 - Left -->
<g transform="translate(-140, 0)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="18" y1="0" x2="118" y2="0" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
</g>
</g>
<!-- RIGHT SIDE: TEXT -->
<g id="text-group" transform="translate(50, 20) scale(0.7)">
<!-- Main text paths -->
<g id="text-paths" opacity="0.9">
<path fill="url(#textGradient)" d="M215.69,30.31c3.05-2.3,6.06-3.46,9.04-3.46s5.44,1.19,7.38,3.56,2.92,5.82,2.92,10.33c0,7.2-1.97,13.32-5.9,18.36-3.94,5.04-8.67,7.56-14.18,7.56-1.97,0-3.96-.38-5.98-1.15,4.7-1.1,8.45-4.15,11.23-9.14,2.78-4.99,4.18-9.96,4.18-14.9,0-2.3-.42-4.18-1.26-5.62-.84-1.44-2.03-2.16-3.56-2.16-2.93,0-5.52,1.78-7.78,5.33-2.26,3.55-3.98,8.41-5.18,14.58-1.2,6.17-1.8,12.6-1.8,19.3s.48,12.52,1.44,17.46c-3.94-.14-6.85-.78-8.75-1.91-1.9-1.13-2.84-3.28-2.84-6.44,0-1.15.73-7.24,2.2-18.25,1.46-11.02,2.2-19.5,2.2-25.45s-.36-10.97-1.08-15.05c3.84.96,6.49,2.74,7.96,5.33,1.46,2.59,2.2,6.38,2.2,11.38,2.02-4.13,4.55-7.34,7.6-9.65Z"/>
<path fill="url(#textGradient)" d="M262.42,29.48c2.42-2.95,4.68-4.43,6.77-4.43s3.66.78,4.72,2.34c1.06,1.56,1.58,3.58,1.58,6.05s-.73,4.74-2.2,6.8c-1.46,2.06-3.47,3.1-6.01,3.1-.67,0-1.46-.19-2.38-.58,1.49-1.87,2.23-4.13,2.23-6.77,0-1.54-.62-2.3-1.87-2.3-.91,0-1.9.64-2.95,1.91-1.06,1.27-2.06,3.02-3.02,5.26-.96,2.23-1.76,5.09-2.41,8.57-.65,3.48-.97,7.19-.97,11.12,0,.48.12,2.52.36,6.12-1.54.1-2.52.14-2.95.14-2.74,0-4.71-.48-5.9-1.44-1.2-.96-1.8-2.54-1.8-4.75,0-.96.5-4.66,1.51-11.09,1.01-6.43,1.51-11.56,1.51-15.37s-.41-7.33-1.22-10.55c3.5,1.1,5.95,2.68,7.34,4.72,1.39,2.04,2.09,4.42,2.09,7.13s-.22,5.32-.65,7.81c1.73-6.24,3.8-10.84,6.23-13.79Z"/>
<path fill="url(#textGradient)" d="M306.3,25.34c2.88,0,5.33,1.42,7.34,4.25,2.02,2.83,3.02,6.62,3.02,11.38,0,5.33-1.08,10.22-3.24,14.69-2.4,5.04-5.81,8.52-10.22,10.44-2.5,1.1-5.23,1.66-8.21,1.66-4.18,0-7.81-1.62-10.91-4.86-3.1-3.24-4.64-7.89-4.64-13.97s1.49-11.42,4.46-16.06c2.98-4.63,6.91-7.55,11.81-8.75.53,0,1.02.16,1.48.47.46.31.68.64.68.97-4.85,3.36-7.75,8.04-8.71,14.04,1.01-2.69,2.24-5.01,3.71-6.98,1.46-1.97,2.99-3.46,4.57-4.46,3.02-1.87,5.98-2.81,8.86-2.81ZM301.84,30.6c-3.12,0-5.9,2.1-8.35,6.3-2.45,4.2-3.67,8.39-3.67,12.56,0,8.74,2.26,13.1,6.77,13.1,3.22,0,5.83-2.1,7.85-6.3,2.02-4.2,3.02-8.92,3.02-14.15,0-7.68-1.87-11.52-5.62-11.52Z"/>
<path fill="url(#textGradient)" d="M341.36,66.67c-1.54.67-3.14,1.01-4.82,1.01s-2.62-.36-2.81-1.08c-.77-3.07-1.66-7.67-2.66-13.79s-2.03-11.47-3.06-16.06c-1.03-4.58-2.27-8.05-3.71-10.4,2.64-1.25,4.75-1.87,6.34-1.87s2.78.36,3.6,1.08c.82.72,1.5,2.15,2.05,4.28.55,2.14.95,3.9,1.19,5.29.67,4.61,1.01,7.18,1.01,7.7s.19,2.68.58,6.44c.38,3.77.67,6.25.86,7.45,8.54-16.56,12.82-27.62,12.82-33.19,3.94,2.02,5.9,4.2,5.9,6.55,0,1.92-1,4.76-2.99,8.53-1.99,3.77-4.49,8.33-7.49,13.68-3,5.35-5.27,10.14-6.8,14.36Z"/>
<path fill="url(#textGradient)" d="M375.2,50.4c0,8.02,2.35,12.02,7.06,12.02,1.82,0,3.67-.62,5.54-1.87,1.87-1.25,3.5-2.98,4.9-5.18,1.73.38,2.59,1.27,2.59,2.66-2.02,3.5-4.49,6-7.42,7.49s-5.86,2.23-8.78,2.23c-3.94,0-7.29-1.45-10.04-4.36-2.76-2.9-4.14-7.12-4.14-12.64,0-7.06,1.94-13.09,5.83-18.11s9.14-7.52,15.77-7.52c3.7,0,6.48.9,8.35,2.7s2.81,3.94,2.81,6.41-.76,4.62-2.27,6.44c-1.51,1.83-3.44,2.74-5.8,2.74-1.15,0-2.3-.24-3.46-.72.72-.82,1.39-2.1,2.02-3.85.62-1.75.94-3.37.94-4.86,0-2.93-1.27-4.39-3.82-4.39-2.98,0-5.4,2.18-7.27,6.55-1.87,4.37-2.81,9.12-2.81,14.26Z"/>
<path fill="url(#textGradient)" d="M420.85,41.83c-.77,4.27-1.37,8.06-1.8,11.38-.43,3.31-.65,6.7-.65,10.15s.33,5.93,1.01,7.42c-3.7-.96-6.24-2.44-7.63-4.43-1.39-1.99-2.09-4.81-2.09-8.46,0-3.21.5-7.62,1.51-13.21,1.01-5.59,1.66-9.37,1.94-11.34-2.5.43-5.16,1.27-7.99,2.52-.1-1.05-.14-1.85-.14-2.38,0-2.54.77-4.28,2.3-5.22,1.54-.94,3.74-1.43,6.62-1.48.33-3.6.5-6.19.5-7.78s-.01-2.9-.04-3.96c-.03-1.06-.04-1.85-.04-2.38,3.17.34,5.47,1.29,6.91,2.84,1.44,1.56,2.16,3.78,2.16,6.66,0,1.15-.12,2.76-.36,4.82,4.03-.1,6.98-.89,8.86-2.38.09.96.14,1.68.14,2.16,0,2.3-.41,3.9-1.22,4.79-.82.89-2.19,1.33-4.1,1.33s-3.38-.02-4.39-.07c-.24,1.73-.75,4.73-1.51,9Z"/>
<path fill="url(#textGradient)" d="M437.27,62.1c-.14-.89-.22-2.27-.22-4.14s.8-9.24,2.41-22.1c1.61-12.86,2.41-21.7,2.41-26.5s-.29-7.92-.86-9.36c3.6.96,6.06,2.41,7.38,4.36,1.32,1.94,1.98,4.69,1.98,8.24,0,2.11-.7,8.98-2.09,20.59-1.39,11.62-2.09,20.98-2.09,28.08,0,1.54.1,3.7.29,6.48-4.37-.19-7.08-1.15-8.14-2.88-.58-.96-.94-1.88-1.08-2.77Z"/>
</g>
<!-- Static underline -->
<g id="underline">
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.7"/>
<path d="M172.5,86.67h300" stroke="#4cc2f1" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.2"/>
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="6" fill="none" stroke-linecap="round" opacity="0.3"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

146
imgs/provctl_logo_s.svg Normal file
View File

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 210 160">
<defs>
<!-- Static gradient for orbital system -->
<linearGradient id="flowGradient">
<stop offset="0%" style="stop-color:#455aa5;stop-opacity:1"/>
<stop offset="25%" style="stop-color:#4cc2f1;stop-opacity:1"/>
<stop offset="50%" style="stop-color:#f2b03f;stop-opacity:1"/>
<stop offset="75%" style="stop-color:#05ab9e;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#5e74b7;stop-opacity:1"/>
</linearGradient>
<!-- Radial gradient for nodes -->
<radialGradient id="nodeGradient" cx="30%" cy="30%">
<stop offset="0%" style="stop-color:#7085c9;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#5e74b7;stop-opacity:1"/>
</radialGradient>
<!-- Glow filters -->
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="strongGlow">
<feGaussianBlur stdDeviation="5" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<!-- Static text gradient -->
<linearGradient id="textGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#455aa5;stop-opacity:1"/>
<stop offset="50%" style="stop-color:#4cc2f1;stop-opacity:1"/>
<stop offset="100%" style="stop-color:#05ab9e;stop-opacity:1"/>
</linearGradient>
</defs>
<g id="logo-main">
<!-- ORBITAL ICON SYSTEM (Left side) -->
<g id="orbital-system" transform="translate(105, 45) scale(0.405)">
<!-- Outer orbital rings -->
<ellipse cx="0" cy="0" rx="180" ry="90" fill="none" stroke="#8895b3" stroke-width="2" opacity="0.4"/>
<ellipse cx="0" cy="0" rx="150" ry="75" fill="none" stroke="#8895b3" stroke-width="2" opacity="0.4"/>
<!-- INFINITY LOOP - Continuous CI/CD flow -->
<g id="infinity-flow">
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="url(#flowGradient)" stroke-width="8" stroke-linecap="round" opacity="0.7" filter="url(#glow)"/>
<path d="M -110,0 C -110,-45 -65,-60 -30,-35 C 5,-10 5,10 -30,35 C -65,60 -110,45 -110,0 M 110,0 C 110,45 65,60 30,35 C -5,10 -5,-10 30,-35 C 65,-60 110,-45 110,0" fill="none" stroke="#8895b3" stroke-width="3" stroke-linecap="round" opacity="0.7"/>
</g>
<!-- Data particles flowing along infinity path -->
<g id="flow-particles">
<circle cx="-30" cy="0" r="4" fill="#f2b03f" filter="url(#strongGlow)" opacity="0.7"/>
<circle cx="30" cy="0" r="4" fill="#05ab9e" filter="url(#strongGlow)" opacity="0.7"/>
<circle cx="0" cy="35" r="4" fill="#4cc2f1" filter="url(#strongGlow)" opacity="0.7"/>
</g>
<!-- CENTRAL CONTROL NODE (local) -->
<g id="central-node">
<circle cx="0" cy="0" r="25" fill="#455aa5" opacity="0.2"/>
<circle cx="0" cy="0" r="20" fill="#455aa5" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="15" fill="none" stroke="#05ab9e" stroke-width="1.5" opacity="0.5"/>
<circle cx="0" cy="0" r="10" fill="none" stroke="#05ab9e" stroke-width="2" opacity="0.7"/>
<circle cx="0" cy="0" r="6" fill="#05ab9e" filter="url(#strongGlow)" opacity="0.8"/>
<circle cx="-3" cy="-3" r="3" fill="#fff" opacity="0.9"/>
</g>
<!-- LARGE ORBITAL REMOTE NODES -->
<g id="remote-nodes">
<!-- Node 1 - Top -->
<g transform="translate(0, -70)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="0" y1="18" x2="0" y2="48" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 2 - Right -->
<g transform="translate(140, 0)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="-18" y1="0" x2="-118" y2="0" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 3 - Bottom Right -->
<g transform="translate(100, 50)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="-10" y1="-10" x2="-80" y2="-40" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 4 - Bottom Left -->
<g transform="translate(-100, 50)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="10" y1="-10" x2="80" y2="-40" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
<!-- Node 5 - Left -->
<g transform="translate(-140, 0)">
<circle cx="0" cy="0" r="22" fill="#4cc2f1" opacity="0.15"/>
<circle cx="0" cy="0" r="18" fill="url(#nodeGradient)" stroke="#fff" stroke-width="2.5" filter="url(#glow)"/>
<circle cx="0" cy="0" r="13" fill="none" stroke="#8895b3" stroke-width="1.5" opacity="0.7"/>
<text x="0" y="6" font-family="'Courier New', 'Consolas', monospace" font-size="16" font-weight="bold" fill="#f2b03f" text-anchor="middle">&gt;_</text>
<line x1="18" y1="0" x2="118" y2="0" stroke="#8895b3" stroke-width="2.5" stroke-dasharray="4,4" opacity="0.75"/>
</g>
</g>
</g>
<!-- TEXT SECTION (Below icon) -->
<g id="text-group" transform="translate(-120, 75) scale(0.7)">
<!-- Main text paths -->
<g id="text-paths" opacity="0.9">
<path fill="url(#textGradient)" d="M215.69,30.31c3.05-2.3,6.06-3.46,9.04-3.46s5.44,1.19,7.38,3.56,2.92,5.82,2.92,10.33c0,7.2-1.97,13.32-5.9,18.36-3.94,5.04-8.67,7.56-14.18,7.56-1.97,0-3.96-.38-5.98-1.15,4.7-1.1,8.45-4.15,11.23-9.14,2.78-4.99,4.18-9.96,4.18-14.9,0-2.3-.42-4.18-1.26-5.62-.84-1.44-2.03-2.16-3.56-2.16-2.93,0-5.52,1.78-7.78,5.33-2.26,3.55-3.98,8.41-5.18,14.58-1.2,6.17-1.8,12.6-1.8,19.3s.48,12.52,1.44,17.46c-3.94-.14-6.85-.78-8.75-1.91-1.9-1.13-2.84-3.28-2.84-6.44,0-1.15.73-7.24,2.2-18.25,1.46-11.02,2.2-19.5,2.2-25.45s-.36-10.97-1.08-15.05c3.84.96,6.49,2.74,7.96,5.33,1.46,2.59,2.2,6.38,2.2,11.38,2.02-4.13,4.55-7.34,7.6-9.65Z"/>
<path fill="url(#textGradient)" d="M262.42,29.48c2.42-2.95,4.68-4.43,6.77-4.43s3.66.78,4.72,2.34c1.06,1.56,1.58,3.58,1.58,6.05s-.73,4.74-2.2,6.8c-1.46,2.06-3.47,3.1-6.01,3.1-.67,0-1.46-.19-2.38-.58,1.49-1.87,2.23-4.13,2.23-6.77,0-1.54-.62-2.3-1.87-2.3-.91,0-1.9.64-2.95,1.91-1.06,1.27-2.06,3.02-3.02,5.26-.96,2.23-1.76,5.09-2.41,8.57-.65,3.48-.97,7.19-.97,11.12,0,.48.12,2.52.36,6.12-1.54.1-2.52.14-2.95.14-2.74,0-4.71-.48-5.9-1.44-1.2-.96-1.8-2.54-1.8-4.75,0-.96.5-4.66,1.51-11.09,1.01-6.43,1.51-11.56,1.51-15.37s-.41-7.33-1.22-10.55c3.5,1.1,5.95,2.68,7.34,4.72,1.39,2.04,2.09,4.42,2.09,7.13s-.22,5.32-.65,7.81c1.73-6.24,3.8-10.84,6.23-13.79Z"/>
<path fill="url(#textGradient)" d="M306.3,25.34c2.88,0,5.33,1.42,7.34,4.25,2.02,2.83,3.02,6.62,3.02,11.38,0,5.33-1.08,10.22-3.24,14.69-2.4,5.04-5.81,8.52-10.22,10.44-2.5,1.1-5.23,1.66-8.21,1.66-4.18,0-7.81-1.62-10.91-4.86-3.1-3.24-4.64-7.89-4.64-13.97s1.49-11.42,4.46-16.06c2.98-4.63,6.91-7.55,11.81-8.75.53,0,1.02.16,1.48.47.46.31.68.64.68.97-4.85,3.36-7.75,8.04-8.71,14.04,1.01-2.69,2.24-5.01,3.71-6.98,1.46-1.97,2.99-3.46,4.57-4.46,3.02-1.87,5.98-2.81,8.86-2.81ZM301.84,30.6c-3.12,0-5.9,2.1-8.35,6.3-2.45,4.2-3.67,8.39-3.67,12.56,0,8.74,2.26,13.1,6.77,13.1,3.22,0,5.83-2.1,7.85-6.3,2.02-4.2,3.02-8.92,3.02-14.15,0-7.68-1.87-11.52-5.62-11.52Z"/>
<path fill="url(#textGradient)" d="M341.36,66.67c-1.54.67-3.14,1.01-4.82,1.01s-2.62-.36-2.81-1.08c-.77-3.07-1.66-7.67-2.66-13.79s-2.03-11.47-3.06-16.06c-1.03-4.58-2.27-8.05-3.71-10.4,2.64-1.25,4.75-1.87,6.34-1.87s2.78.36,3.6,1.08c.82.72,1.5,2.15,2.05,4.28.55,2.14.95,3.9,1.19,5.29.67,4.61,1.01,7.18,1.01,7.7s.19,2.68.58,6.44c.38,3.77.67,6.25.86,7.45,8.54-16.56,12.82-27.62,12.82-33.19,3.94,2.02,5.9,4.2,5.9,6.55,0,1.92-1,4.76-2.99,8.53-1.99,3.77-4.49,8.33-7.49,13.68-3,5.35-5.27,10.14-6.8,14.36Z"/>
<path fill="url(#textGradient)" d="M375.2,50.4c0,8.02,2.35,12.02,7.06,12.02,1.82,0,3.67-.62,5.54-1.87,1.87-1.25,3.5-2.98,4.9-5.18,1.73.38,2.59,1.27,2.59,2.66-2.02,3.5-4.49,6-7.42,7.49s-5.86,2.23-8.78,2.23c-3.94,0-7.29-1.45-10.04-4.36-2.76-2.9-4.14-7.12-4.14-12.64,0-7.06,1.94-13.09,5.83-18.11s9.14-7.52,15.77-7.52c3.7,0,6.48.9,8.35,2.7s2.81,3.94,2.81,6.41-.76,4.62-2.27,6.44c-1.51,1.83-3.44,2.74-5.8,2.74-1.15,0-2.3-.24-3.46-.72.72-.82,1.39-2.1,2.02-3.85.62-1.75.94-3.37.94-4.86,0-2.93-1.27-4.39-3.82-4.39-2.98,0-5.4,2.18-7.27,6.55-1.87,4.37-2.81,9.12-2.81,14.26Z"/>
<path fill="url(#textGradient)" d="M420.85,41.83c-.77,4.27-1.37,8.06-1.8,11.38-.43,3.31-.65,6.7-.65,10.15s.33,5.93,1.01,7.42c-3.7-.96-6.24-2.44-7.63-4.43-1.39-1.99-2.09-4.81-2.09-8.46,0-3.21.5-7.62,1.51-13.21,1.01-5.59,1.66-9.37,1.94-11.34-2.5.43-5.16,1.27-7.99,2.52-.1-1.05-.14-1.85-.14-2.38,0-2.54.77-4.28,2.3-5.22,1.54-.94,3.74-1.43,6.62-1.48.33-3.6.5-6.19.5-7.78s-.01-2.9-.04-3.96c-.03-1.06-.04-1.85-.04-2.38,3.17.34,5.47,1.29,6.91,2.84,1.44,1.56,2.16,3.78,2.16,6.66,0,1.15-.12,2.76-.36,4.82,4.03-.1,6.98-.89,8.86-2.38.09.96.14,1.68.14,2.16,0,2.3-.41,3.9-1.22,4.79-.82.89-2.19,1.33-4.1,1.33s-3.38-.02-4.39-.07c-.24,1.73-.75,4.73-1.51,9Z"/>
<path fill="url(#textGradient)" d="M437.27,62.1c-.14-.89-.22-2.27-.22-4.14s.8-9.24,2.41-22.1c1.61-12.86,2.41-21.7,2.41-26.5s-.29-7.92-.86-9.36c3.6.96,6.06,2.41,7.38,4.36,1.32,1.94,1.98,4.69,1.98,8.24,0,2.11-.7,8.98-2.09,20.59-1.39,11.62-2.09,20.98-2.09,28.08,0,1.54.1,3.7.29,6.48-4.37-.19-7.08-1.15-8.14-2.88-.58-.96-.94-1.88-1.08-2.77Z"/>
</g>
<!-- Static underline -->
<g id="underline">
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.7"/>
<path d="M172.5,86.67h300" stroke="#4cc2f1" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.2"/>
<path d="M172.5,86.67h300" stroke="url(#textGradient)" stroke-width="6" fill="none" stroke-linecap="round" opacity="0.3"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,987 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>provctl Logo - Specifications & Preview</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family:
"Segoe UI",
-apple-system,
BlinkMacSystemFont,
sans-serif;
background: linear-gradient(
135deg,
#0f0f1e 0%,
#1a1a2e 50%,
#16213e 100%
);
color: #fff;
padding: 2rem;
line-height: 1.6;
}
.container {
max-width: 1600px;
margin: 0 auto;
}
/* Header */
.header {
text-align: center;
margin-bottom: 3rem;
padding-bottom: 2rem;
border-bottom: 2px solid rgba(76, 194, 241, 0.3);
}
h1 {
font-size: 3.5rem;
margin-bottom: 0.5rem;
background: linear-gradient(135deg, #4cc2f1, #f2b03f, #05ab9e);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
}
.version-badge {
display: inline-block;
background: linear-gradient(135deg, #05ab9e, #4cc2f1);
color: white;
padding: 0.5rem 1.5rem;
border-radius: 25px;
font-size: 1rem;
font-weight: bold;
margin-top: 1rem;
box-shadow: 0 4px 15px rgba(5, 171, 158, 0.4);
}
.subtitle {
color: #8d9ccf;
font-size: 1.3rem;
margin-top: 1.5rem;
font-weight: 300;
}
/* Section Headers */
.section {
margin-bottom: 4rem;
}
.section-title {
font-size: 2rem;
color: #4cc2f1;
margin-bottom: 1.5rem;
padding-bottom: 0.5rem;
border-bottom: 2px solid rgba(76, 194, 241, 0.3);
display: flex;
align-items: center;
gap: 0.75rem;
}
.section-title::before {
content: "";
width: 8px;
height: 8px;
background: #05ab9e;
border-radius: 50%;
display: inline-block;
}
/* Logo Display Grid */
.logo-display-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
gap: 2rem;
margin-bottom: 2rem;
}
.logo-box-wrapper {
background: rgba(255, 255, 255, 0.03);
border: 2px solid rgba(76, 194, 241, 0.2);
border-radius: 16px;
padding: 1.5rem;
transition: all 0.3s ease;
}
.logo-box-wrapper:hover {
border-color: rgba(76, 194, 241, 0.5);
transform: translateY(-5px);
box-shadow: 0 10px 30px rgba(76, 194, 241, 0.2);
}
.logo-box {
background: rgba(0, 0, 0, 0.4);
border-radius: 12px;
padding: 3rem;
display: flex;
align-items: center;
justify-content: center;
min-height: 320px;
}
.logo-box.dark {
background: #16213e;
}
.logo-box.light {
background: #f8f9fa;
}
.logo-box.gradient {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.logo-box img {
width: 100%;
max-width: 600px;
height: auto;
}
.logo-box-label {
text-align: center;
margin-top: 1rem;
color: #f2b03f;
font-size: 0.95rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1.5px;
}
/* Technical Specs Grid */
.specs-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
}
.spec-card {
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(76, 194, 241, 0.2);
border-left: 4px solid #4cc2f1;
border-radius: 12px;
padding: 1.5rem;
}
.spec-card h3 {
color: #f2b03f;
font-size: 1.1rem;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.spec-card h3::before {
content: "⚙️";
font-size: 1.3rem;
}
.spec-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.spec-item:last-child {
border-bottom: none;
}
.spec-label {
color: #8d9ccf;
font-size: 0.9rem;
}
.spec-value {
color: #fff;
font-family: "Courier New", monospace;
font-size: 0.85rem;
background: rgba(76, 194, 241, 0.1);
padding: 0.3rem 0.6rem;
border-radius: 4px;
}
/* Color Palette */
.color-palette {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
}
.color-swatch {
background: rgba(255, 255, 255, 0.03);
border: 2px solid rgba(76, 194, 241, 0.2);
border-radius: 12px;
padding: 1.5rem;
text-align: center;
transition: all 0.3s ease;
}
.color-swatch:hover {
transform: scale(1.05);
border-color: rgba(76, 194, 241, 0.5);
}
.color-preview {
width: 100%;
height: 100px;
border-radius: 8px;
margin-bottom: 1rem;
border: 2px solid rgba(255, 255, 255, 0.1);
}
.color-name {
font-weight: 600;
color: #f2b03f;
margin-bottom: 0.5rem;
font-size: 1.1rem;
}
.color-code {
font-family: "Courier New", monospace;
color: #4cc2f1;
font-size: 0.9rem;
margin-bottom: 0.3rem;
}
.color-rgb {
font-family: "Courier New", monospace;
color: #8d9ccf;
font-size: 0.85rem;
}
.color-usage {
margin-top: 0.75rem;
padding-top: 0.75rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
color: #8d9ccf;
font-size: 0.85rem;
line-height: 1.5;
}
/* Animation Table */
.animation-table {
width: 100%;
border-collapse: collapse;
margin-top: 2rem;
background: rgba(255, 255, 255, 0.03);
border-radius: 12px;
overflow: hidden;
}
.animation-table th,
.animation-table td {
padding: 1rem 1.5rem;
text-align: left;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.animation-table th {
background: rgba(76, 194, 241, 0.15);
color: #4cc2f1;
font-weight: 600;
text-transform: uppercase;
font-size: 0.9rem;
letter-spacing: 1px;
}
.animation-table td:first-child {
color: #f2b03f;
font-weight: 500;
}
.animation-table td {
color: #8d9ccf;
font-family: "Courier New", monospace;
font-size: 0.85rem;
}
/* Component Breakdown */
.component-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
}
.component-card {
background: rgba(255, 255, 255, 0.03);
border: 2px solid rgba(5, 171, 158, 0.3);
border-radius: 12px;
padding: 1.5rem;
}
.component-card h3 {
color: #05ab9e;
font-size: 1.2rem;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.component-card ul {
list-style: none;
padding: 0;
}
.component-card li {
padding: 0.5rem 0;
color: #8d9ccf;
display: flex;
align-items: start;
gap: 0.5rem;
}
.component-card li::before {
content: "▹";
color: #4cc2f1;
font-weight: bold;
font-size: 1.2rem;
}
/* Highlight Box */
.highlight-box {
background: rgba(242, 176, 63, 0.08);
border: 2px solid rgba(242, 176, 63, 0.3);
border-radius: 12px;
padding: 2rem;
margin: 2rem 0;
}
.highlight-box h3 {
color: #f2b03f;
font-size: 1.4rem;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.highlight-box h3::before {
content: "💡";
}
.highlight-box p {
color: #8d9ccf;
line-height: 1.8;
font-size: 1.05rem;
}
/* Usage Guidelines */
.usage-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin-top: 2rem;
}
.usage-section {
background: rgba(255, 255, 255, 0.03);
border-radius: 12px;
padding: 2rem;
border: 2px solid rgba(76, 194, 241, 0.2);
}
.usage-section h3 {
color: #4cc2f1;
font-size: 1.3rem;
margin-bottom: 1.5rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.usage-section.do h3::before {
content: "✅";
}
.usage-section.dont h3::before {
content: "❌";
}
.usage-section ul {
list-style: none;
padding: 0;
}
.usage-section li {
padding: 0.75rem 0;
color: #8d9ccf;
line-height: 1.6;
}
/* Footer */
.footer {
margin-top: 4rem;
padding-top: 2rem;
border-top: 2px solid rgba(76, 194, 241, 0.3);
text-align: center;
color: #8d9ccf;
}
/* Responsive */
@media (max-width: 768px) {
h1 {
font-size: 2.5rem;
}
.logo-display-grid,
.usage-grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<!-- Header -->
<div class="header">
<h1>⚙️ provctl</h1>
<div class="version-badge">Logos</div>
<p class="subtitle">Machine Orchestration & Service Control Platform</p>
</div>
<!-- Logo Preview Section -->
<section class="section">
<h2 class="section-title">Logo Preview</h2>
<div class="logo-display-grid">
<div class="logo-box-wrapper">
<div class="logo-box dark">
<img
src="provctl_logo.svg"
alt="provctl logo on dark background"
/>
</div>
<div class="logo-box-label">Dark Background</div>
</div>
<div class="logo-box-wrapper">
<div class="logo-box light">
<img
src="provctl_logo.svg"
alt="provctl logo on light background"
/>
</div>
<div class="logo-box-label">Light Background</div>
</div>
<div class="logo-box-wrapper">
<div class="logo-box gradient">
<img
src="provctl_logo.svg"
alt="provctl logo on gradient background"
/>
</div>
<div class="logo-box-label">Gradient Background</div>
</div>
<div class="logo-box-wrapper">
<div class="logo-box" style="background: rgba(0, 0, 0, 0.8)">
<img
src="provctl_logo.svg"
alt="provctl logo on black background"
/>
</div>
<div class="logo-box-label">Pure Black</div>
</div>
</div>
</section>
<!-- Design Concept -->
<section class="section">
<h2 class="section-title">Design Concept</h2>
<div class="highlight-box">
<h3>Orbital CI/CD System with Infinity Loop</h3>
<p>
The v6 logo represents a
<strong>distributed orchestration system</strong> where multiple
remote nodes orbit around a central control hub. The
<strong>infinity loop</strong> symbolizes continuous integration and
continuous deployment (CI/CD) — a process with no beginning or end.
Unlike traditional two-gear designs, this orbital approach
emphasizes
<strong>scalable, multi-node orchestration</strong> rather than
simple 1:1 connections.
</p>
</div>
<div class="component-grid">
<div class="component-card">
<h3>🔄 Infinity Loop</h3>
<ul>
<li>Continuous CI/CD flow visualization</li>
<li>Animated gradient flowing eternally</li>
<li>8px stroke width with glow effect</li>
<li>Three particles traveling the path</li>
<li>Represents endless integration cycle</li>
</ul>
</div>
<div class="component-card">
<h3>🟢 Central Control Node</h3>
<ul>
<li>20px radius blue sphere (#455aa5)</li>
<li>Green LED indicator (6px, pulsing)</li>
<li>Concentric rings for depth</li>
<li>Represents local control center</li>
<li>Breathing animation (2s cycle)</li>
</ul>
</div>
<div class="component-card">
<h3>🔵 Remote Nodes (5x)</h3>
<ul>
<li>18px radius with radial gradient</li>
<li>Terminal prompt ">_" centered</li>
<li>Individual pulsing glow effects</li>
<li>Distributed orbital positions</li>
<li>Connected via dashed lines</li>
</ul>
</div>
<div class="component-card">
<h3>🌊 Flow Particles</h3>
<ul>
<li>Three colored particles (4px radius)</li>
<li>Travel along infinity path</li>
<li>Staggered timing (0s, 2s, 4s)</li>
<li>Smooth spline animation</li>
<li>Represents data/command flow</li>
</ul>
</div>
<div class="component-card">
<h3>📡 Connection Lines</h3>
<ul>
<li>Dashed lines (4,4 pattern)</li>
<li>2px stroke width, cyan color</li>
<li>Animated dash offset</li>
<li>From each node to center</li>
<li>Shows active SSH connections</li>
</ul>
</div>
<div class="component-card">
<h3>✍️ Typography</h3>
<ul>
<li>Font: Merienda One (rounded)</li>
<li>Size: 48px, weight: 700</li>
<li>Color: #455aa5 (primary blue)</li>
<li>Letter-by-letter pulse animation</li>
<li>Staggered 0.2s offset</li>
</ul>
</div>
</div>
</section>
<!-- Technical Specifications -->
<section class="section">
<h2 class="section-title">Technical Specifications</h2>
<div class="specs-grid">
<div class="spec-card">
<h3>Canvas & Layout</h3>
<div class="spec-item">
<span class="spec-label">Dimensions</span>
<span class="spec-value">600 × 280 px</span>
</div>
<div class="spec-item">
<span class="spec-label">Format</span>
<span class="spec-value">SVG (Vector)</span>
</div>
<div class="spec-item">
<span class="spec-label">File Size</span>
<span class="spec-value">~18 KB</span>
</div>
<div class="spec-item">
<span class="spec-label">Scalability</span>
<span class="spec-value">Infinite</span>
</div>
</div>
<div class="spec-card">
<h3>Central Node</h3>
<div class="spec-item">
<span class="spec-label">Radius</span>
<span class="spec-value">20px</span>
</div>
<div class="spec-item">
<span class="spec-label">Fill Color</span>
<span class="spec-value">#455aa5</span>
</div>
<div class="spec-item">
<span class="spec-label">LED Color</span>
<span class="spec-value">#05ab9e</span>
</div>
<div class="spec-item">
<span class="spec-label">LED Pulse</span>
<span class="spec-value">5-8px @ 2s</span>
</div>
</div>
<div class="spec-card">
<h3>Remote Nodes</h3>
<div class="spec-item">
<span class="spec-label">Radius</span>
<span class="spec-value">18px</span>
</div>
<div class="spec-item">
<span class="spec-label">Fill Color</span>
<span class="spec-value">#5e74b7</span>
</div>
<div class="spec-item">
<span class="spec-label">Count</span>
<span class="spec-value">5 nodes</span>
</div>
<div class="spec-item">
<span class="spec-label">Terminal Icon</span>
<span class="spec-value">&gt;_</span>
</div>
</div>
<div class="spec-card">
<h3>Infinity Loop</h3>
<div class="spec-item">
<span class="spec-label">Stroke Width</span>
<span class="spec-value">8px (main)</span>
</div>
<div class="spec-item">
<span class="spec-label">Path Length</span>
<span class="spec-value">~440px</span>
</div>
<div class="spec-item">
<span class="spec-label">Particles</span>
<span class="spec-value">3 flowing</span>
</div>
<div class="spec-item">
<span class="spec-label">Animation</span>
<span class="spec-value">6s loop</span>
</div>
</div>
<div class="spec-card">
<h3>Typography</h3>
<div class="spec-item">
<span class="spec-label">Font Family</span>
<span class="spec-value">Merienda One</span>
</div>
<div class="spec-item">
<span class="spec-label">Font Size</span>
<span class="spec-value">48px</span>
</div>
<div class="spec-item">
<span class="spec-label">Font Weight</span>
<span class="spec-value">700 (Bold)</span>
</div>
<div class="spec-item">
<span class="spec-label">Letter Spacing</span>
<span class="spec-value">0.5px</span>
</div>
</div>
<div class="spec-card">
<h3>Performance</h3>
<div class="spec-item">
<span class="spec-label">Target FPS</span>
<span class="spec-value">60 fps</span>
</div>
<div class="spec-item">
<span class="spec-label">CPU Usage</span>
<span class="spec-value">&lt; 1%</span>
</div>
<div class="spec-item">
<span class="spec-label">Browser Support</span>
<span class="spec-value">Modern</span>
</div>
<div class="spec-item">
<span class="spec-label">Compatibility</span>
<span class="spec-value">Chrome 90+</span>
</div>
</div>
</div>
</section>
<!-- Color Palette -->
<section class="section">
<h2 class="section-title">Color Palette</h2>
<div class="color-palette">
<div class="color-swatch">
<div class="color-preview" style="background-color: #455aa5"></div>
<div class="color-name">Primary Blue</div>
<div class="color-code">#455aa5</div>
<div class="color-rgb">RGB(69, 90, 165)</div>
<div class="color-usage">
Central control node, typography, primary brand color
</div>
</div>
<div class="color-swatch">
<div class="color-preview" style="background-color: #5e74b7"></div>
<div class="color-name">Secondary Blue</div>
<div class="color-code">#5e74b7</div>
<div class="color-rgb">RGB(94, 116, 183)</div>
<div class="color-usage">
Remote nodes, distributed systems, gradient fills
</div>
</div>
<div class="color-swatch">
<div class="color-preview" style="background-color: #f2b03f"></div>
<div class="color-name">Orange/Gold</div>
<div class="color-code">#f2b03f</div>
<div class="color-rgb">RGB(242, 176, 63)</div>
<div class="color-usage">
Terminal symbols, flow particles, accent highlights
</div>
</div>
<div class="color-swatch">
<div class="color-preview" style="background-color: #05ab9e"></div>
<div class="color-name">Green Status</div>
<div class="color-code">#05ab9e</div>
<div class="color-rgb">RGB(5, 171, 158)</div>
<div class="color-usage">
LED indicator, active status, health monitoring
</div>
</div>
<div class="color-swatch">
<div class="color-preview" style="background-color: #4cc2f1"></div>
<div class="color-name">Cyan</div>
<div class="color-code">#4cc2f1</div>
<div class="color-rgb">RGB(76, 194, 241)</div>
<div class="color-usage">
SSH connections, orbital rings, network links
</div>
</div>
</div>
</section>
<!-- Animation Specifications -->
<section class="section">
<h2 class="section-title">Animation Specifications</h2>
<table class="animation-table">
<thead>
<tr>
<th>Element</th>
<th>Type</th>
<th>Duration</th>
<th>Easing</th>
<th>Details</th>
</tr>
</thead>
<tbody>
<tr>
<td>Infinity Loop Gradient</td>
<td>Offset Animation</td>
<td>4s</td>
<td>Linear</td>
<td>Continuous color flow along path</td>
</tr>
<tr>
<td>Central LED</td>
<td>Scale + Opacity</td>
<td>2s</td>
<td>ease-in-out</td>
<td>Breathing: 5-8px radius, 0.7-1.0 opacity</td>
</tr>
<tr>
<td>Flow Particles (3x)</td>
<td>Path Motion</td>
<td>6s</td>
<td>spline (0.42, 0, 0.58, 1)</td>
<td>Staggered: 0s, 2s, 4s begin times</td>
</tr>
<tr>
<td>Remote Node Glow</td>
<td>Scale + Opacity</td>
<td>2.1-2.5s</td>
<td>ease-in-out</td>
<td>Each node independent timing</td>
</tr>
<tr>
<td>Connection Lines</td>
<td>Dash Offset</td>
<td>1.5-2s</td>
<td>Linear</td>
<td>Animated flow towards center</td>
</tr>
<tr>
<td>Typography</td>
<td>Opacity</td>
<td>3.5s</td>
<td>ease-in-out</td>
<td>Letter-by-letter: 0.2s offset</td>
</tr>
<tr>
<td>Orbital Rings</td>
<td>Opacity</td>
<td>2.5-3s</td>
<td>ease-in-out</td>
<td>Subtle pulse 0.08-0.2 opacity</td>
</tr>
</tbody>
</table>
<div class="highlight-box" style="margin-top: 2rem">
<h3>Performance Optimization</h3>
<p>
All animations use <strong>CSS-based SVG animations</strong> with
hardware acceleration. The <code>calcMode="spline"</code> with
Bézier curves <code>(0.42, 0, 0.58, 1)</code> ensures smooth,
natural motion. Linear easing is used for mechanical elements (gear
rotation, dash offset) to maintain technical precision. Target:
<strong>60fps @ &lt;1% CPU usage</strong> on modern browsers.
</p>
</div>
</section>
<!-- Usage Guidelines -->
<section class="section">
<h2 class="section-title">Usage Guidelines</h2>
<div class="usage-grid">
<div class="usage-section do">
<h3>Best Practices</h3>
<ul>
<li>Use on contrasting backgrounds (dark or light)</li>
<li>Maintain aspect ratio (600:280)</li>
<li>Provide clear space: minimum 20px around logo</li>
<li>Scale proportionally: 32px to 600px+ width</li>
<li>Link to project repository when displayed</li>
<li>Include alt text: "provctl - machine orchestration"</li>
<li>Use animated version for web/digital contexts</li>
<li>Export static version for print/email</li>
</ul>
</div>
<div class="usage-section dont">
<h3>Avoid These</h3>
<ul>
<li>Don't distort or skew the logo</li>
<li>Don't modify colors without approval</li>
<li>Don't add effects (shadows, glows, outlines)</li>
<li>Don't rotate or flip the logo</li>
<li>Don't place on busy/patterned backgrounds</li>
<li>Don't separate elements (infinity + nodes + text)</li>
<li>Don't use low-res raster versions</li>
<li>Don't alter animation timing</li>
</ul>
</div>
</div>
<div class="highlight-box" style="margin-top: 2rem">
<h3>Recommended Use Cases</h3>
<p>
<strong>Web:</strong> GitHub README (400-600px), documentation
headers, project websites<br />
<strong>Digital:</strong> Presentations, social media, blog posts,
tutorials<br />
<strong>Print:</strong> Business cards, stickers, conference
materials (use static version)<br />
<strong>Development:</strong> CLI splash screens, terminal ASCII art
derivatives, IDE themes
</p>
</div>
</section>
<!-- File Information -->
<section class="section">
<h2 class="section-title">File Information</h2>
<div class="specs-grid">
<div class="spec-card">
<h3>File Details</h3>
<div class="spec-item">
<span class="spec-label">Filename</span>
<span class="spec-value">provctl_logo_v6.svg</span>
</div>
<div class="spec-item">
<span class="spec-label">Version</span>
<span class="spec-value">6.0</span>
</div>
<div class="spec-item">
<span class="spec-label">Created</span>
<span class="spec-value">November 2025</span>
</div>
<div class="spec-item">
<span class="spec-label">License</span>
<span class="spec-value">MIT / Apache 2.0</span>
</div>
</div>
<div class="spec-card">
<h3>Browser Support</h3>
<div class="spec-item">
<span class="spec-label">Chrome</span>
<span class="spec-value">90+</span>
</div>
<div class="spec-item">
<span class="spec-label">Firefox</span>
<span class="spec-value">88+</span>
</div>
<div class="spec-item">
<span class="spec-label">Safari</span>
<span class="spec-value">14+</span>
</div>
<div class="spec-item">
<span class="spec-label">Edge</span>
<span class="spec-value">90+</span>
</div>
</div>
<div class="spec-card">
<h3>Export Options</h3>
<div class="spec-item">
<span class="spec-label">PNG (High-res)</span>
<span class="spec-value">600px, 1200px</span>
</div>
<div class="spec-item">
<span class="spec-label">Favicon</span>
<span class="spec-value">16×16, 32×32, 64×64</span>
</div>
<div class="spec-item">
<span class="spec-label">Social Media</span>
<span class="spec-value">400×400 square crop</span>
</div>
<div class="spec-item">
<span class="spec-label">Print (PDF)</span>
<span class="spec-value">Static version</span>
</div>
</div>
</div>
</section>
<!-- Footer -->
<div class="footer">
<p>
<strong>provctl</strong> — Machine Orchestration & Service Control
Platform
</p>
<p style="margin-top: 0.5rem; font-size: 0.9rem">
Built with Rust • Designed for DevOps/SRE Teams • Part of the
provisioning ecosystem
</p>
<p style="margin-top: 1rem; font-size: 0.85rem; opacity: 0.7">
© 2025 provctl project • Documentation and Logo v6 Specifications
</p>
</div>
</div>
</body>
</html>