├── oceanbreeze
├── __init__.py
├── lib
│ ├── __init__.py
│ ├── custom_print.py
│ ├── digitalocean.py
│ └── helpers.py
├── modules
│ ├── list.py
│ ├── update.py
│ ├── deploy.py
│ └── destroy.py
├── oceanbreeze.py
└── config.py
├── main.py
├── assets
└── banner.png
├── ansible
├── main.yml
├── install_caddy.yml
├── install_prerequisites.yml
├── update_instance.yml
└── setup_webserver.yml
├── webserver
├── template_website
│ ├── socialmedia
│ │ ├── logo.png
│ │ ├── people9.jpg
│ │ ├── socicon.eot
│ │ ├── socicon.ttf
│ │ ├── feature46.jpg
│ │ ├── feature47.jpg
│ │ ├── mobirise2.eot
│ │ ├── mobirise2.ttf
│ │ ├── mobirise2.woff
│ │ ├── people10.jpg
│ │ ├── people11.jpg
│ │ ├── people12.jpg
│ │ ├── people41.jpg
│ │ ├── people42.jpg
│ │ ├── people43.jpg
│ │ ├── people44.jpg
│ │ ├── socicon.woff
│ │ ├── socicon.woff2
│ │ ├── background31.jpg
│ │ ├── feature45-1.jpg
│ │ ├── H4clBXOCl9bbnla_nHIq75u9.woff2
│ │ ├── QGYsz_wNahGAdqQ43Rh_fKDp.woff2
│ │ ├── H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2
│ │ ├── H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2
│ │ ├── H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2
│ │ ├── H4clBXOCl9bbnla_nHIq4pu9uqc.woff2
│ │ ├── H4clBXOCl9bbnla_nHIq65u9uqc.woff2
│ │ ├── QGYqz_wNahGAdqQ43Rh_eZDrv_0.woff2
│ │ ├── QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2
│ │ ├── QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2
│ │ ├── H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2
│ │ ├── H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2
│ │ ├── H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2
│ │ ├── H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2
│ │ ├── QGYqz_wNahGAdqQ43Rh_eZDkv_1w4A.woff2
│ │ ├── QGYqz_wNahGAdqQ43Rh_eZDlv_1w4A.woff2
│ │ ├── tether.min.css
│ │ ├── bootstrap-reboot.min.css
│ │ ├── style.css
│ │ ├── mobirise2.css
│ │ └── css.css
│ └── digitalagency
│ │ ├── about.jpg
│ │ ├── cta-img.jpg
│ │ ├── hero-bg.jpg
│ │ ├── gallery-1.jpg
│ │ ├── gallery-2.jpg
│ │ ├── gallery-3.jpg
│ │ ├── about-250x300.jpg
│ │ ├── about-400x480.jpg
│ │ ├── client-logo-1.png
│ │ ├── client-logo-2.png
│ │ ├── client-logo-4.png
│ │ ├── client-logo-5.png
│ │ ├── fa-solid-900.eot
│ │ ├── fa-solid-900.ttf
│ │ ├── fa-solid-900.woff
│ │ ├── cta-img-300x212.jpg
│ │ ├── cta-img-400x282.jpg
│ │ ├── cta-img-768x542.jpg
│ │ ├── fa-solid-900.woff2
│ │ ├── gallery-1-150x150.jpg
│ │ ├── gallery-1-300x300.jpg
│ │ ├── gallery-1-400x400.jpg
│ │ ├── gallery-2-150x150.jpg
│ │ ├── gallery-2-300x300.jpg
│ │ ├── gallery-2-400x400.jpg
│ │ ├── gallery-3-150x150.jpg
│ │ ├── gallery-3-300x300.jpg
│ │ ├── gallery-3-400x400.jpg
│ │ ├── S6uyw4BMUTPHjx4wXg.woff2
│ │ ├── client-logo-5-150x41.png
│ │ ├── KFOmCnqEu92Fr1Mu4mxK.woff2
│ │ ├── S6uyw4BMUTPHjxAwXjeu.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxIIzI.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xIIzI.woff2
│ │ ├── KFOmCnqEu92Fr1Mu4WxKOzY.woff2
│ │ ├── KFOmCnqEu92Fr1Mu4mxK-1.woff2
│ │ ├── KFOmCnqEu92Fr1Mu5mxKOzY.woff2
│ │ ├── KFOmCnqEu92Fr1Mu72xKOzY.woff2
│ │ ├── KFOmCnqEu92Fr1Mu7GxKOzY.woff2
│ │ ├── KFOmCnqEu92Fr1Mu7WxKOzY.woff2
│ │ ├── KFOmCnqEu92Fr1Mu7mxKOzY.woff2
│ │ ├── pxiEyp8kv8JHgFVrJJfecg.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEzAdLw.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2
│ │ ├── KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fBBc4.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fBBc4.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfBBc4.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfBBc4.woff2
│ │ ├── KFOmCnqEu92Fr1Mu4WxKOzY-1.woff2
│ │ ├── KFOmCnqEu92Fr1Mu5mxKOzY-1.woff2
│ │ ├── KFOmCnqEu92Fr1Mu72xKOzY-1.woff2
│ │ ├── KFOmCnqEu92Fr1Mu7GxKOzY-1.woff2
│ │ ├── KFOmCnqEu92Fr1Mu7WxKOzY-1.woff2
│ │ ├── KFOmCnqEu92Fr1Mu7mxKOzY-1.woff2
│ │ ├── pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2
│ │ ├── pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2
│ │ ├── pxiEyp8kv8JHgFVrJJfecg-1.woff2
│ │ ├── pxiEyp8kv8JHgFVrJJnecmNE-1.woff2
│ │ ├── pxiEyp8kv8JHgFVrJJnecmNE.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEz0dL_nz.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEz4dL_nz.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEz8dL_nz.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEzMdL_nz.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEzQdL_nz.woff2
│ │ ├── KFOiCnqEu92Fr1Mu51QrEzwdL_nz.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc6CsQ.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc6CsQ.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2
│ │ ├── KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2
│ │ ├── pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2
│ │ ├── pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc-CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc0CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc1CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc2CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc3CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51S7ACc5CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc-CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc0CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc1CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc2CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc3CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TLBCc5CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2
│ │ ├── KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2
│ │ ├── u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2
│ │ ├── -nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy.woff2
│ │ ├── -nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g-1.woff2
│ │ ├── -nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g.woff2
│ │ ├── iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FV0U1.woff2
│ │ ├── qkBIXvYC6trAT55ZBi1ueQVIjQTD-JqaE0lK.woff2
│ │ ├── u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2
│ │ ├── u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2
│ │ ├── u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2
│ │ ├── u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2
│ │ ├── -nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy-1.woff2
│ │ ├── 0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeHmmc.woff2
│ │ ├── iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FU0U1Z4Y.woff2
│ │ ├── iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FUkU1Z4Y.woff2
│ │ ├── iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FVUU1Z4Y.woff2
│ │ ├── iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FWUU1Z4Y.woff2
│ │ ├── iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FWkU1Z4Y.woff2
│ │ ├── qkBIXvYC6trAT55ZBi1ueQVIjQTD-JqaHUlKd7c.woff2
│ │ ├── 0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeE2mcIbA.woff2
│ │ ├── 0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeEGmcIbA.woff2
│ │ ├── 0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeEWmcIbA.woff2
│ │ ├── 0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeGmmcIbA.woff2
│ │ ├── 0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeHWmcIbA.woff2
│ │ ├── JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w5aXo.woff2
│ │ ├── JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w0aXpsog.woff2
│ │ ├── JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w2aXpsog.woff2
│ │ ├── JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w3aXpsog.woff2
│ │ ├── JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w9aXpsog.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZ9hiA.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZBhiI2B.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZFhiI2B.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZJhiI2B.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZNhiI2B.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZthiI2B.woff2
│ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZxhiI2B.woff2
│ │ ├── solid.min.css
│ │ ├── galleries.min.css
│ │ ├── post-7.css
│ │ ├── index_1.html
│ │ ├── css.css
│ │ ├── blocks.css
│ │ ├── logo-black.svg
│ │ ├── logo.svg
│ │ └── swiper.min.css
└── caddy
│ ├── Caddyfile.template
│ ├── caddy.service
│ └── filters
│ └── headers_standard.caddy
├── terraform
├── provider.tf
├── variables.tf
├── droplet.tf
├── project.tf
├── domain.tf
└── .terraform.lock.hcl
├── pyproject.toml
├── README.md
├── .gitignore
└── LICENSE
/oceanbreeze/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/oceanbreeze/lib/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from oceanbreeze import oceanbreeze
2 |
3 | oceanbreeze.main()
--------------------------------------------------------------------------------
/assets/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/assets/banner.png
--------------------------------------------------------------------------------
/ansible/main.yml:
--------------------------------------------------------------------------------
1 | - import_playbook: install_prerequisites.yml
2 | - import_playbook: install_caddy.yml
3 | - import_playbook: setup_webserver.yml
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/logo.png
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/about.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/about.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people9.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/socicon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/socicon.eot
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/socicon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/socicon.ttf
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/cta-img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/cta-img.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/hero-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/hero-bg.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/feature46.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/feature46.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/feature47.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/feature47.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/mobirise2.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/mobirise2.eot
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/mobirise2.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/mobirise2.ttf
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/mobirise2.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/mobirise2.woff
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people10.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people11.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people12.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people41.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people41.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people42.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people42.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people43.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people43.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/people44.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/people44.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/socicon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/socicon.woff
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/socicon.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/socicon.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-1.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-2.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-3.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/background31.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/background31.jpg
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/feature45-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/feature45-1.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/about-250x300.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/about-250x300.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/about-400x480.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/about-400x480.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/client-logo-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/client-logo-1.png
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/client-logo-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/client-logo-2.png
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/client-logo-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/client-logo-4.png
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/client-logo-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/client-logo-5.png
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/fa-solid-900.eot
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/fa-solid-900.ttf
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/fa-solid-900.woff
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/cta-img-300x212.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/cta-img-300x212.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/cta-img-400x282.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/cta-img-400x282.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/cta-img-768x542.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/cta-img-768x542.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/fa-solid-900.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-1-150x150.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-1-150x150.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-1-300x300.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-1-300x300.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-1-400x400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-1-400x400.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-2-150x150.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-2-150x150.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-2-300x300.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-2-300x300.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-2-400x400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-2-400x400.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-3-150x150.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-3-150x150.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-3-300x300.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-3-300x300.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/gallery-3-400x400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/gallery-3-400x400.jpg
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/S6uyw4BMUTPHjx4wXg.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/S6uyw4BMUTPHjx4wXg.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/client-logo-5-150x41.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/client-logo-5-150x41.png
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4mxK.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4mxK.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/S6uyw4BMUTPHjxAwXjeu.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/S6uyw4BMUTPHjxAwXjeu.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxIIzI.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxIIzI.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xIIzI.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xIIzI.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4WxKOzY.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4WxKOzY.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4mxK-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4mxK-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu5mxKOzY.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu5mxKOzY.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu72xKOzY.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu72xKOzY.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7GxKOzY.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7GxKOzY.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7WxKOzY.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7WxKOzY.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7mxKOzY.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7mxKOzY.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJfecg.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJfecg.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq75u9.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq75u9.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/QGYsz_wNahGAdqQ43Rh_fKDp.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/QGYsz_wNahGAdqQ43Rh_fKDp.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzAdLw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzAdLw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fBBc4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fBBc4.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fBBc4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fBBc4.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfBBc4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfBBc4.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfBBc4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfBBc4.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4WxKOzY-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu4WxKOzY-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu5mxKOzY-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu5mxKOzY-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu72xKOzY-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu72xKOzY-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7GxKOzY-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7GxKOzY-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7WxKOzY-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7WxKOzY-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7mxKOzY-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOmCnqEu92Fr1Mu7mxKOzY-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJfecg-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJfecg-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJnecmNE-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJnecmNE-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJnecmNE.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiEyp8kv8JHgFVrJJnecmNE.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq4pu9uqc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq4pu9uqc.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq65u9uqc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4clBXOCl9bbnla_nHIq65u9uqc.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/QGYqz_wNahGAdqQ43Rh_eZDrv_0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/QGYqz_wNahGAdqQ43Rh_eZDrv_0.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEz0dL_nz.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEz0dL_nz.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEz4dL_nz.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEz4dL_nz.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEz8dL_nz.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEz8dL_nz.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzMdL_nz.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzMdL_nz.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzQdL_nz.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzQdL_nz.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzwdL_nz.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOiCnqEu92Fr1Mu51QrEzwdL_nz.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc6CsQ.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc6CsQ.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc6CsQ.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc6CsQ.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/QGYqz_wNahGAdqQ43Rh_eZDkv_1w4A.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/QGYqz_wNahGAdqQ43Rh_eZDkv_1w4A.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/QGYqz_wNahGAdqQ43Rh_eZDlv_1w4A.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/socialmedia/QGYqz_wNahGAdqQ43Rh_eZDlv_1w4A.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc-CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc-CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc0CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc0CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc1CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc1CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc2CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc2CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc3CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc3CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc5CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51S7ACc5CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc-CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc-CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc0CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc0CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc1CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc1CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc2CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc2CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc3CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc3CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc5CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TLBCc5CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2
--------------------------------------------------------------------------------
/terraform/provider.tf:
--------------------------------------------------------------------------------
1 | terraform {
2 | required_providers {
3 | digitalocean = {
4 | source = "digitalocean/digitalocean"
5 | version = "~> 2.0"
6 | }
7 | }
8 | }
9 |
10 |
11 |
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FV0U1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FV0U1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/qkBIXvYC6trAT55ZBi1ueQVIjQTD-JqaE0lK.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/qkBIXvYC6trAT55ZBi1ueQVIjQTD-JqaE0lK.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy-1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/-nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy-1.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeHmmc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeHmmc.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FU0U1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FU0U1Z4Y.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FUkU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FUkU1Z4Y.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FVUU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FVUU1Z4Y.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FWUU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FWUU1Z4Y.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FWkU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-4I-FWkU1Z4Y.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/qkBIXvYC6trAT55ZBi1ueQVIjQTD-JqaHUlKd7c.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/qkBIXvYC6trAT55ZBi1ueQVIjQTD-JqaHUlKd7c.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeE2mcIbA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeE2mcIbA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeEGmcIbA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeEGmcIbA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeEWmcIbA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeEWmcIbA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeGmmcIbA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeGmmcIbA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeHWmcIbA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213aeHWmcIbA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w5aXo.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w5aXo.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w0aXpsog.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w0aXpsog.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w2aXpsog.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w2aXpsog.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w3aXpsog.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w3aXpsog.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w9aXpsog.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM73w9aXpsog.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZ9hiA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZ9hiA.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZBhiI2B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZBhiI2B.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZFhiI2B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZFhiI2B.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZJhiI2B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZJhiI2B.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZNhiI2B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZNhiI2B.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZthiI2B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZthiI2B.woff2
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZxhiI2B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Fudgedotdotdot/oceanbreeze/HEAD/webserver/template_website/digitalagency/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZxhiI2B.woff2
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/tether.min.css:
--------------------------------------------------------------------------------
1 | .tether-element,.tether-element *,.tether-element :after,.tether-element :before,.tether-element:after,.tether-element:before{box-sizing:border-box}.tether-element{position:absolute;display:none}.tether-element.tether-open{display:block}
--------------------------------------------------------------------------------
/terraform/variables.tf:
--------------------------------------------------------------------------------
1 | variable "domain_name" {}
2 | variable "project_name" {}
3 | variable "sshkey" {}
4 | variable "droplet_ip" {
5 | type = string
6 | default = ""
7 | }
8 | variable "spawn_droplet" {
9 | type = number
10 | default = 1
11 | }
12 |
13 | data "digitalocean_ssh_key" "oceanbreeze" {
14 | name = var.sshkey
15 | }
--------------------------------------------------------------------------------
/webserver/caddy/Caddyfile.template:
--------------------------------------------------------------------------------
1 | DOMAIN {
2 | tls {
3 | dns digitalocean {env.DIGITALOCEAN_TOKEN}
4 | }
5 | log {
6 | output file /opt/caddy/log/access.log
7 | }
8 | header {
9 | import ./filters/headers_standard.caddy
10 | }
11 |
12 | encode gzip zstd
13 | handle {
14 | file_server {
15 | root /var/www/html/DOMAIN
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/terraform/droplet.tf:
--------------------------------------------------------------------------------
1 | resource "digitalocean_droplet" "oceanbreeze" {
2 | count = var.spawn_droplet == 1 ? 1 : 0
3 | image = "ubuntu-20-04-x64"
4 | name = var.domain_name
5 | region = "ams3"
6 | #size = "s-1vcpu-512mb-10gb" golang needs 1GB of ram to build custom caddy binary
7 | size = "s-1vcpu-1gb"
8 | ssh_keys = [
9 | data.digitalocean_ssh_key.oceanbreeze.id
10 | ]
11 | }
--------------------------------------------------------------------------------
/terraform/project.tf:
--------------------------------------------------------------------------------
1 | data "digitalocean_project" "oceanbreeze" {
2 | name = var.project_name
3 | }
4 |
5 | resource "digitalocean_project_resources" "oceanbreeze_domain" {
6 | project = data.digitalocean_project.oceanbreeze.id
7 | resources = [digitalocean_domain.oceanbreeze.urn]
8 | }
9 |
10 | resource "digitalocean_project_resources" "oceanbreeze_droplet" {
11 | project = data.digitalocean_project.oceanbreeze.id
12 | resources = can(digitalocean_droplet.oceanbreeze[0].urn) ? [digitalocean_droplet.oceanbreeze[0].urn] : []
13 | }
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/solid.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | */
5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url("");src:url("fa-solid-900.eot") format("embedded-opentype"),url("fa-solid-900.woff2") format("woff2"),url("fa-solid-900.woff") format("woff"),url("fa-solid-900.ttf") format("truetype"),url("fa-solid-900.svg") format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900}
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [build-system]
2 | requires = ["setuptools >= 61.0"]
3 | build-backend = "setuptools.build_meta"
4 |
5 | [project]
6 | name = "OceanBreeze"
7 | version = "1.0.0"
8 | description = "Manages domain and related infrastructure on DigitalOcean"
9 | authors = [
10 | { name = "Fudgedotdotdot" },
11 | ]
12 | readme = "README.md"
13 | requires-python = ">=3.7"
14 | dependencies = [
15 | "requests==2.31.0",
16 | "rich==13.7.1"
17 | ]
18 |
19 | [tool.setuptools.packages.find]
20 | include = ["oceanbreeze", "oceanbreeze.*"]
21 |
22 | [project.scripts]
23 | oceanbreeze = "oceanbreeze.oceanbreeze:main"
24 |
--------------------------------------------------------------------------------
/webserver/caddy/caddy.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Caddy
3 | Documentation=https://caddyserver.com/docs/
4 | After=network.target network-online.target
5 | Requires=network-online.target
6 |
7 | [Service]
8 | Type=notify
9 | User=caddy
10 | Group=caddy
11 | WorkingDirectory=/opt/caddy
12 | EnvironmentFile=/opt/caddy/.env
13 | ExecStart=/usr/bin/caddy run --config /opt/caddy/Caddyfile
14 | ExecReload=/usr/bin/caddy reload --config /opt/caddy/Caddyfile --force
15 | TimeoutStopSec=5s
16 | LimitNOFILE=1048576
17 | PrivateTmp=true
18 | ProtectSystem=full
19 | AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
20 |
21 | [Install]
22 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/webserver/caddy/filters/headers_standard.caddy:
--------------------------------------------------------------------------------
1 | # Stolen from https://aptw.tf/2021/11/25/c2-redirectors-using-caddy.html
2 |
3 | # Add a custom fingerprint signature
4 | Server "Apache/2.4.50 (Unix) OpenSSL/1.1.1d"
5 |
6 | X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"
7 | X-Content-Type-Options "nosniff"
8 |
9 | # disable FLoC tracking
10 | Permissions-Policy interest-cohort=()
11 |
12 | # enable HSTS
13 | Strict-Transport-Security max-age=31536000;
14 |
15 | # disable clients from sniffing the media type
16 | X-Content-Type-Options nosniff
17 |
18 | # clickjacking protection
19 | X-Frame-Options DENY
20 |
21 | # keep referrer data off of HTTP connections
22 | Referrer-Policy no-referrer-when-downgrade
23 |
24 | # Do not allow to cache the response
25 | Cache-Control no-cache
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/galleries.min.css:
--------------------------------------------------------------------------------
1 | .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%}.gallery-columns-2 .gallery-item{max-width:50%}.gallery-columns-3 .gallery-item{max-width:33.33%}.gallery-columns-4 .gallery-item{max-width:25%}.gallery-columns-5 .gallery-item{max-width:20%}.gallery-columns-6 .gallery-item{max-width:16.66%}.gallery-columns-7 .gallery-item{max-width:14.28%}.gallery-columns-8 .gallery-item{max-width:12.5%}.gallery-columns-9 .gallery-item{max-width:11.11%}.gallery-caption{display:block}.ast-blog-featured-section .gallery{margin-bottom:0}.single .entry-content .gallery{margin-left:-10px;margin-right:-10px}.gallery-caption{color:#000;padding:10px;border-radius:0 0 2px 2px;border:1px solid var(--ast-border-color);border-top:none;font-size:.9em}.gallery-icon{border-bottom:0;border-radius:2px 2px 0 0;border:1px solid var(--ast-border-color);overflow:hidden}.gallery-item{margin:0;padding:10px;border-radius:2px}.gallery-item:last-child{margin-bottom:2em}.elementor-image-gallery .gallery-icon{border:none}
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/post-7.css:
--------------------------------------------------------------------------------
1 | .elementor-kit-7{--e-global-color-primary:#6EC1E4;--e-global-color-secondary:#54595F;--e-global-color-text:#7A7A7A;--e-global-color-accent:#61CE70;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1200px}.e-con{--container-max-width:1200px}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-element{--widgets-spacing:20px}{}h1.entry-title{display:var(--page-title-display)}@media(max-width:1024px){.elementor-section.elementor-section-boxed>.elementor-container{max-width:1024px}.e-con{--container-max-width:1024px}}@media(max-width:767px){.elementor-section.elementor-section-boxed>.elementor-container{max-width:767px}.e-con{--container-max-width:767px}}
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/index_1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | ns
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/ansible/install_caddy.yml:
--------------------------------------------------------------------------------
1 | - hosts: all
2 | name: Installing caddy and xcaddy
3 | gather_facts: no
4 | environment:
5 | PATH: "{{ ansible_env.PATH }}:/usr/local/go/bin:/root/go/bin" # xcaddy needs golang
6 | tasks:
7 | - block:
8 | - name: Create caddy group
9 | ansible.builtin.group:
10 | name: caddy
11 | state: present
12 |
13 | - name: Create caddy user
14 | ansible.builtin.user:
15 | name: caddy
16 | shell: /usr/sbin/nologin
17 | comment: Caddy webserver user
18 | group: caddy
19 |
20 | - name: Installing xcaddy
21 | command: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
22 |
23 | - name: Building custom caddy binary for DNS challenge (This takes a while, be patient)
24 | command: xcaddy build --with github.com/caddy-dns/digitalocean@master
25 | args:
26 | chdir: /root
27 |
28 | - name: Copying custom caddy binary to /usr/bin
29 | ansible.builtin.copy:
30 | remote_src: true
31 | src: /root/caddy
32 | dest: /usr/bin/
33 | mode: 'a+x'
34 |
35 |
--------------------------------------------------------------------------------
/oceanbreeze/lib/custom_print.py:
--------------------------------------------------------------------------------
1 | from rich.console import Console
2 | from rich.theme import Theme
3 |
4 |
5 | class CustomPrint(Console):
6 | def __init__(self, log_level="INFO"):
7 | super().__init__()
8 | self.log_level = ""
9 | self.INFO = "INFO"
10 | self.DEBUG = "DEBUG"
11 |
12 | if log_level != self.INFO:
13 | self.log_level = self.DEBUG
14 | else:
15 | self.log_level = self.INFO
16 |
17 | self.custom_theme = Theme({
18 | "info": "bold green",
19 | "debug": "blue_violet",
20 | "danger": "bold red"
21 | })
22 | self.rc = Console(theme=self.custom_theme, highlight=True)
23 |
24 | def info(self, message: str, **kwargs) -> None:
25 | self.rc.print(f"[info]\[+][/info] {message}", **kwargs)
26 |
27 | def debug(self, message: str, **kwargs) -> None:
28 | if self.log_level != self.DEBUG:
29 | return
30 | self.rc.print(f"[debug]\[#][/debug] {message}", **kwargs)
31 |
32 | def warning(self, message: str, **kwargs) -> None:
33 | self.rc.print(f"[danger]\[!][/danger] [bold]{message}[/bold]", **kwargs)
34 |
35 | def set_log_level(self, loglevel: str) -> None:
36 | self.log_level = loglevel
37 |
--------------------------------------------------------------------------------
/terraform/domain.tf:
--------------------------------------------------------------------------------
1 | resource "digitalocean_domain" "oceanbreeze" {
2 | name = var.domain_name
3 | }
4 | # example A with wildcard
5 | resource "digitalocean_record" "wildcard" {
6 | domain = digitalocean_domain.oceanbreeze.id
7 | type = "A"
8 | name = "*"
9 | value = can(digitalocean_droplet.oceanbreeze[0].ipv4_address) ? digitalocean_droplet.oceanbreeze[0].ipv4_address: var.droplet_ip
10 | }
11 | # example A
12 | resource "digitalocean_record" "main" {
13 | domain = digitalocean_domain.oceanbreeze.id
14 | type = "A"
15 | name = "@"
16 | value = can(digitalocean_droplet.oceanbreeze[0].ipv4_address) ? digitalocean_droplet.oceanbreeze[0].ipv4_address: var.droplet_ip
17 | }
18 | # example dmarc
19 | resource "digitalocean_record" "dmarc" {
20 | domain = digitalocean_domain.oceanbreeze.id
21 | type = "TXT"
22 | name = "_dmarc"
23 | value = "v=DMARC1; p=none; rua=mailto:dmarc@${var.domain_name}"
24 | }
25 | # example spf
26 | resource "digitalocean_record" "spf" {
27 | domain = digitalocean_domain.oceanbreeze.id
28 | type = "TXT"
29 | name = "@"
30 | value = "v=spf1 include:spf.infomaniak.ch a:${var.domain_name} ip4:%{ if length(digitalocean_droplet.oceanbreeze) == 1 }${digitalocean_droplet.oceanbreeze[0].ipv4_address}%{ else }${var.droplet_ip}%{ endif } -all"
31 | }
32 | # example mx
33 | resource "digitalocean_record" "mx" {
34 | domain = digitalocean_domain.oceanbreeze.id
35 | type = "MX"
36 | name = "@"
37 | priority = 10
38 | value = "mta-gw.infomaniak.ch."
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/terraform/.terraform.lock.hcl:
--------------------------------------------------------------------------------
1 | # This file is maintained automatically by "terraform init".
2 | # Manual edits may be lost in future updates.
3 |
4 | provider "registry.terraform.io/digitalocean/digitalocean" {
5 | version = "2.34.1"
6 | constraints = "~> 2.0"
7 | hashes = [
8 | "h1:QfEfcgrNurRsMvaqWRnUtaH7BrLolVcIJEB3gQ8Tmwo=",
9 | "h1:iRyhFUfKnDRWx75+alSOEtdS0BtNUkrvLusC15s34eo=",
10 | "zh:022d4c97af3d022d4e3735a81c6a7297aa43c3b28a8cecaa0ff58273a5677e2e",
11 | "zh:1922f86d5710707eb497fbebcb1a1c5584c843a7e95c3900d750d81bd2785204",
12 | "zh:1b7ab7c67a26c399eb5aa8a7a695cb59279c6a1a562ead3064e4a6b17cdacabe",
13 | "zh:1dc666faa2ec0efc32329b4c8ff79813b54741ef1741bc42d90513e5ba904048",
14 | "zh:220dec61ffd9448a91cca92f2bc6642df10db57b25d3d27036c3a370e9870cb7",
15 | "zh:262301545057e654bd6193dc04b01666531fccfcf722f730827695098d93afa7",
16 | "zh:63677684a14e6b7790833982d203fb2f84b105ad6b9b490b3a4ecc7043cdba81",
17 | "zh:67a2932227623073aa9431a12916b52ce1ccddb96f9a2d6cdae2aaf7558ccbf8",
18 | "zh:70dfc6ac33ee140dcb29a971df7eeb15117741b5a75b9f8486c5468c9dd28f24",
19 | "zh:7e3b3b62754e86442048b4b1284e10807e3e58f417e1d59a4575dd29ac6ba518",
20 | "zh:7e6fe662b1e283ad498eb2549d0c2260b908ab5b848e05f84fa4acdca5b4d5ca",
21 | "zh:9c554170f20e659222896533a3a91954fb1d210eea60de05aea803b36d5ccd5d",
22 | "zh:ad2f64d758bd718eb39171f1c31219900fd2bfb552a14f6a90b18cfd178a74b4",
23 | "zh:cfce070000e95dfe56a901340ac256f9d2f84a73bf62391cba8a8e9bf1f857e0",
24 | "zh:d5ae30eccd53ca7314157e62d8ec53151697ed124e43b24b2d16c565054730c6",
25 | "zh:fbe5edf5337adb7360f9ffef57d02b397555b6a89bba68d1b60edfec6e23f02c",
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/ansible/install_prerequisites.yml:
--------------------------------------------------------------------------------
1 | # print output with :
2 | # register: output
3 | # - debug: var=output.stdout_lines
4 | - hosts: all
5 | name: Installing prerequisites
6 | vars:
7 | ansible_ssh_common_args: "-o StrictHostKeyChecking=accept-new"
8 | golang_version: 1.22.1
9 | tasks:
10 | - block:
11 | - name: Wait for cloud-init / user-data to finish
12 | # https://github.com/ansible/ansible/issues/51663#issuecomment-1038843039
13 | command: cloud-init status --wait
14 | changed_when: false
15 |
16 | - name: Install system packages
17 | apt:
18 | pkg:
19 | - apt-transport-https
20 | - python3-pip
21 | state: latest
22 | update_cache: true
23 |
24 | # Golang install (path updated for user, not for ansible)
25 | - name: Download Golang tar file
26 | command: wget https://go.dev/dl/go{{golang_version}}.linux-amd64.tar.gz
27 | args:
28 | chdir: /tmp
29 |
30 | - name: Extract and move new go folder to /usr/local
31 | command: tar -C /usr/local -xzf go{{golang_version}}.linux-amd64.tar.gz
32 | args:
33 | chdir: /tmp
34 |
35 | - name: Delete downloaded tar file
36 | command: rm -f go*tar.gz*
37 | args:
38 | chdir: /tmp
39 |
40 | - name: Add go binary path to ~/.profile
41 | lineinfile:
42 | path: ~/.bashrc
43 | line: 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin'
44 | create: true
45 | state: present
46 |
47 | - name: Update PATH
48 | shell: . ~/.bashrc
--------------------------------------------------------------------------------
/oceanbreeze/modules/list.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 | import json
3 |
4 | from oceanbreeze.lib import helpers
5 | from oceanbreeze.config import config
6 |
7 |
8 |
9 | def list(args):
10 | """
11 | Entry point function for the list action
12 | Gets active terraform state and prettyprints it.
13 | """
14 |
15 | if args.domain_name:
16 | if helpers.terra_check_workspace(config.phishdomain):
17 | helpers.terra_workspace("select", config.phishdomain)
18 | for rsrc in helpers.terra_state():
19 | config.rc.print(f"# {rsrc['type']}.{rsrc['name']}", style="italic")
20 | config.rc.print(f"resource \"{rsrc['type']}\"", style="italic")
21 | config.rc.print_json(json.dumps(rsrc['instances'][0]['attributes']))
22 | config.rc.print()
23 | else:
24 | config.rc.warning("Domain doesn't exist")
25 | helpers.terra_workspace("select", "default")
26 |
27 | else:
28 | config.rc.info("Fetching active domains")
29 | if not helpers.terra_list_workspace():
30 | config.rc.warning("Didn't find any deployed infrastructure...", highlight=False)
31 | else:
32 | for workspace in helpers.terra_list_workspace():
33 | instances = config.instances.items()
34 | if instances:
35 | for k, v in instances:
36 | if workspace in v:
37 | config.rc.print(f"[green]-->[/green] {workspace} ({k})")
38 | else:
39 | config.rc.print(f"[green]-->[/green] {workspace} (no IP)")
40 |
41 | config.rc.info("Template websites")
42 | websites = Path(config.path_webserver / "template_website/")
43 | for website in websites.glob("*"):
44 | if website.is_dir(): config.rc.print(f"[green]-->[/green] {website.parts[-1]}")
45 |
46 |
--------------------------------------------------------------------------------
/oceanbreeze/lib/digitalocean.py:
--------------------------------------------------------------------------------
1 |
2 | from rich.prompt import Prompt
3 | import os
4 | import requests
5 |
6 |
7 | def get_project(config):
8 | """
9 | Gets the list of projects in DigitalOcean
10 | """
11 | # Prompt for the project where the ressources will be organized
12 | resp = _make_api_call("https://api.digitalocean.com/v2/projects")
13 | project_list = [x['name'] for x in resp['projects']]
14 | for project in project_list:
15 | config.rc.print(f"[green]-->[/green] {project}")
16 |
17 | project = Prompt.ask("[dark_orange]\[?][/dark_orange] Select the project in which all the created ressouces will be placed")
18 | while project not in project_list:
19 | project = Prompt.ask("[dark_orange]\[?][/dark_orange] Invalid project, please select one that exists")
20 | if project in project_list: break
21 | return project
22 |
23 |
24 | def get_key(config):
25 | """
26 | Gets the ssh keys in DigitalOcean
27 | """
28 |
29 | # Prompt for the SSH key that will be added to the spawned droplet
30 | resp = _make_api_call("https://api.digitalocean.com/v2/account/keys")
31 | key_list = [x['name'] for x in resp['ssh_keys']]
32 | for key in key_list:
33 | config.rc.print(f"[green]-->[/green] {key}")
34 |
35 | key = Prompt.ask("[dark_orange]\[?][/dark_orange] Select SSH key that will be added to the droplet")
36 | while key not in key_list:
37 | key = Prompt.ask("[dark_orange]\[?][/dark_orange] Invalid key, please select one that exists")
38 | if key in key_list: break
39 | return key
40 |
41 |
42 | def _make_api_call(url):
43 | headers = {"Authorization": f"Bearer {os.environ['DIGITALOCEAN_TOKEN']}",
44 | "Content-Type": "application/json",
45 | "User-Agent": "OceanBreeze"
46 | }
47 | resp = requests.get(url, headers=headers).json()
48 | return resp
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/css.css:
--------------------------------------------------------------------------------
1 | /* latin-ext */
2 | @font-face {
3 | font-family: 'DM Sans';
4 | font-style: normal;
5 | font-weight: 400;
6 | src: url("") format('woff2');
7 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
8 | }
9 | /* latin */
10 | @font-face {
11 | font-family: 'DM Sans';
12 | font-style: normal;
13 | font-weight: 400;
14 | src: url("") format('woff2');
15 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
16 | }
17 | /* latin-ext */
18 | @font-face {
19 | font-family: 'DM Sans';
20 | font-style: normal;
21 | font-weight: 500;
22 | src: url("") format('woff2');
23 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
24 | }
25 | /* latin */
26 | @font-face {
27 | font-family: 'DM Sans';
28 | font-style: normal;
29 | font-weight: 500;
30 | src: url("") format('woff2');
31 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
32 | }
33 | /* latin-ext */
34 | @font-face {
35 | font-family: 'DM Sans';
36 | font-style: normal;
37 | font-weight: 700;
38 | src: url("") format('woff2');
39 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
40 | }
41 | /* latin */
42 | @font-face {
43 | font-family: 'DM Sans';
44 | font-style: normal;
45 | font-weight: 700;
46 | src: url("") format('woff2');
47 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
48 | }
49 |
--------------------------------------------------------------------------------
/ansible/update_instance.yml:
--------------------------------------------------------------------------------
1 | - hosts: all
2 | name: Adding new domain to instance
3 | gather_facts: no
4 | vars:
5 | website: "{{ fake_website }}"
6 | domain: "{{ domain_name }}"
7 | tasks:
8 | - block:
9 | - name: Create webroot directory
10 | ansible.builtin.file:
11 | path: /var/www/html/{{ domain }}
12 | state: directory
13 | owner: caddy
14 | group: caddy
15 | mode: '0744'
16 |
17 | - name: Archive the content of the template website
18 | archive:
19 | path: "../webserver/template_website/{{ website }}/*"
20 | dest: "../webserver/template_website/{{ website }}.tar.gz"
21 | delegate_to: localhost
22 |
23 | - name: Unarchive template website onto remote host
24 | ansible.builtin.unarchive:
25 | src: "../webserver/template_website/{{ website }}.tar.gz"
26 | dest: /var/www/html/{{ domain }}
27 | owner: caddy
28 | group: caddy
29 |
30 | - name: Remove local website template archive
31 | file:
32 | path: "../webserver/template_website/{{ website }}.tar.gz"
33 | state: absent
34 | delegate_to: localhost
35 |
36 | - name: Upload new Caddyfile
37 | ansible.builtin.blockinfile:
38 | block: "{{ lookup('ansible.builtin.file', '../webserver/caddy/Caddyfile') }}"
39 | path: /opt/caddy/Caddyfile
40 | marker: "# {mark} {{ domain }}"
41 | prepend_newline: true
42 | backup: yes
43 |
44 | - name: Create env file with the token
45 | ansible.builtin.copy:
46 | content: "DIGITALOCEAN_TOKEN={{ lookup('env', 'DIGITALOCEAN_TOKEN') }}"
47 | dest: /opt/caddy/.env
48 | owner: root
49 | group: root
50 | mode: '0600'
51 |
52 | - name: Restart caddy service
53 | ansible.builtin.systemd_service:
54 | name: caddy
55 | state: reloaded
56 |
57 | - name: Remove the token from the env file
58 | ansible.builtin.lineinfile:
59 | path: /opt/caddy/.env
60 | regexp: '^DIGITALOCEAN_TOKEN'
61 | state: absent
--------------------------------------------------------------------------------
/ansible/setup_webserver.yml:
--------------------------------------------------------------------------------
1 | - hosts: all
2 | name: Setup Caddy webserver
3 | gather_facts: no
4 | vars:
5 | website: "{{ fake_website }}"
6 | domain: "{{ domain_name }}"
7 | tasks:
8 | - block:
9 | - name: Upload Caddy configuration
10 | ansible.builtin.copy:
11 | src: ../webserver/caddy
12 | dest: /opt
13 | owner: caddy
14 | group: caddy
15 | mode: '0644'
16 |
17 | - name: Create webroot directory
18 | ansible.builtin.file:
19 | path: /var/www/html/{{ domain }}
20 | state: directory
21 | owner: caddy
22 | group: caddy
23 | mode: '0744'
24 |
25 | - name: Archive the content of the template website
26 | archive:
27 | path: "../webserver/template_website/{{ website }}/*"
28 | dest: "../webserver/template_website/{{ website }}.tar.gz"
29 | delegate_to: localhost
30 |
31 | - name: Unarchive template website onto remote host
32 | ansible.builtin.unarchive:
33 | src: "../webserver/template_website/{{ website }}.tar.gz"
34 | dest: /var/www/html/{{ domain }}
35 | owner: caddy
36 | group: caddy
37 |
38 | - name: Remove local website template archive
39 | file:
40 | path: "../webserver/template_website/{{ website }}.tar.gz"
41 | state: absent
42 | delegate_to: localhost
43 |
44 | - name: Upload service file
45 | ansible.builtin.copy:
46 | src: ../webserver/caddy/caddy.service
47 | dest: /etc/systemd/system/
48 | owner: caddy
49 | group: caddy
50 | mode: '0644'
51 |
52 | - name: Create env file with the token
53 | ansible.builtin.copy:
54 | content: "DIGITALOCEAN_TOKEN={{ lookup('env', 'DIGITALOCEAN_TOKEN') }}"
55 | dest: /opt/caddy/.env
56 | owner: root
57 | group: root
58 | mode: '0600'
59 |
60 | - name: Start caddy service
61 | ansible.builtin.systemd_service:
62 | name: caddy
63 | daemon_reload: true
64 | state: reloaded
65 | enabled: true
66 |
67 | - name: Remove the token from the env file
68 | ansible.builtin.lineinfile:
69 | path: /opt/caddy/.env
70 | regexp: '^DIGITALOCEAN_TOKEN'
71 | state: absent
--------------------------------------------------------------------------------
/oceanbreeze/modules/update.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 | import json
3 |
4 | from rich.prompt import Confirm
5 |
6 | from oceanbreeze.lib import helpers
7 | from oceanbreeze.config import config
8 |
9 |
10 |
11 | def configure_infra(ip) -> None:
12 | """
13 | Updating the instance with the new domain to be added
14 | """
15 | path_caddy = helpers.generate_caddy_file()
16 | config.rc.info("Running ansible to update the droplet")
17 | helpers.run_command(f"ansible-playbook -u root -i '{ip},' --private-key {config.local_sshkey} --extra-vars \"fake_website={config.website} domain_name={config.phishdomain}\" update_instance.yml")
18 |
19 | Path.unlink(path_caddy)
20 |
21 |
22 | def update_infra(ip) -> None:
23 | """
24 | Updating an existing instance with a new domain without spawning a new droplet
25 | """
26 | terraform_outfile = config.path_terra / f"{config.phishdomain}-terraform-plan"
27 | helpers.run_command(f"terraform plan -out={terraform_outfile} -var 'project_name={config.project}' -var 'sshkey={config.terra_sshkey}' -var 'domain_name={config.phishdomain}' -var 'droplet_ip={ip}' -var 'spawn_droplet=0'")
28 |
29 | deploy_ok = Confirm.ask("[dark_orange]\[?][/dark_orange] Are OK with the proposed state ?")
30 | if deploy_ok:
31 | helpers.run_command(f"terraform apply -auto-approve \"{terraform_outfile}\"")
32 | helpers.cleanup(terraform_outfile, approve=True)
33 | else:
34 | helpers.cleanup(terraform_outfile, approve=False)
35 | config.rc.warning("Didn't deploy the state")
36 | exit()
37 |
38 |
39 | def update():
40 | """
41 | Entry point function for the update action
42 | """
43 | if not (config.path_webserver / "template_website" / config.website).is_dir():
44 | config.rc.warning(f"Website template [bold purple]{config.website}[/bold purple] is not a valid template")
45 | exit()
46 |
47 | ip = helpers.config_getIP(config.update_domain)
48 | config.rc.info(f"Adding [bold dodger_blue1]{config.phishdomain}[/bold dodger_blue1] with [bold purple]{config.website}[/bold purple] template to {ip}")
49 | helpers.terra_workspace("select", "default")
50 | if helpers.terra_check_workspace(config.phishdomain):
51 | helpers.terra_workspace("select", f"{config.phishdomain}")
52 | else:
53 | helpers.terra_workspace("new", f"{config.phishdomain}")
54 |
55 | update_infra(ip)
56 | configure_infra(ip)
57 | helpers.update_configfile(ip)
58 |
59 | # at the end, make sure to switch back to the neutral workspace
60 | helpers.terra_workspace("select", "default")
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 |
4 | 
5 |
6 |  Not supported (for now?)
7 |
8 | 
9 |
10 |
11 | # Description
12 |
13 | OceanBreeze is a infrastructure management tool to deploy and manage domains on DigitalOcean for pentesting engagements.
14 |
15 | You can use the tool to help mature recently bought domains and help them get categorized by adding website templates in the *webserver/template_website* directory and selecting a template when running the tool.
16 |
17 | # Prerequisites
18 | **This tool only works on WSL (tested on WSL2)**
19 |
20 | 1. Install [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) and make it accessible in your PATH.
21 |
22 | 2. Install [Ansible with Pipx](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-and-upgrading-ansible-with-pipx)
23 |
24 | 3. Clone this repository : `git clone https://github.com/Fudgedotdotdot/oceanbreeze`
25 |
26 | 4. Install the tool with [Pipx](https://pipx.pypa.io/stable/installation/) with `pipx install .` from within the cloned repository.
27 |
28 |
29 | Since the tool uses DigitalOcean, there a few things prepare there as well.
30 |
31 | 1. Create a project that will house the ressources deployed with this tool.
32 | 2. Create and add an SSH key to DigitalOcean. This key will be added to the droplet during the deployement process and used by Ansible.
33 | 3. Create an [API key](https://docs.digitalocean.com/reference/api/create-personal-access-token/) (read, write) on DigitalOcean and save it in the `DIGITALOCEAN_TOKEN` environment variable
34 |
35 | **IMPORTANT** - Because of [https://github.com/python/cpython/issues/95299](https://github.com/python/cpython/issues/95299), Python3.12 is not supported as the current build system is *setuptools*. I might change it in the futur.
36 |
37 | # Usage
38 | When first running the tool, a configuration menu will prompt you for information to setup the tool.
39 |
40 | You can then deploy, list and destroy infrastructure :
41 | ```bash
42 | ❯ oceanbreeze -h
43 | usage: oceanbreeze [-h] [-silent] {deploy,list,destroy} ...
44 |
45 | Manages domain and related infrastructure on DigitalOcean
46 |
47 | positional arguments:
48 | {deploy,list,destroy}
49 | deploy Deploy infrastructure
50 | list List active domain infrastructure
51 | destroy Destroy infrastructure
52 |
53 | options:
54 | -h, --help show this help message and exit
55 | -silent 💔 Don't show the banner
56 | ```
57 |
58 |
--------------------------------------------------------------------------------
/oceanbreeze/modules/deploy.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 | import shutil
3 | import json
4 | import datetime
5 |
6 | from rich.prompt import Confirm
7 |
8 | from oceanbreeze.lib import helpers
9 | from oceanbreeze.config import config
10 |
11 |
12 |
13 | def configure_infra() -> str:
14 | """
15 | Configuring the terraform deployed infra with ansible
16 | Returns the IP of the instance for convenience
17 | """
18 | ip = helpers.terra_getIP()
19 | with config.rc.status(f"[bold green]Waiting for SSH on {ip}", spinner_style="green") as x:
20 | helpers.check_port(ip)
21 | path_caddy = helpers.generate_caddy_file()
22 | config.rc.info("Running ansible to configure the droplet")
23 | helpers.run_command(f"ansible-playbook -u root -i '{ip},' --private-key {config.local_sshkey} --extra-vars \"fake_website={config.website} domain_name={config.phishdomain}\" main.yml")
24 |
25 | Path.unlink(path_caddy)
26 | return ip
27 |
28 |
29 | def deploy_infra() -> None:
30 | """
31 | Deploying infrastructure with terraform
32 | """
33 | terraform_outfile = config.path_terra / f"{config.phishdomain}-terraform-plan"
34 | helpers.run_command(f"terraform plan -out={terraform_outfile} -var 'project_name={config.project}' -var 'sshkey={config.terra_sshkey}' -var 'domain_name={config.phishdomain}'")
35 |
36 | deploy_ok = Confirm.ask("[dark_orange]\[?][/dark_orange] Are OK with the proposed state ?")
37 | if deploy_ok:
38 | helpers.run_command(f"terraform apply -auto-approve \"{terraform_outfile}\"")
39 | helpers.cleanup(terraform_outfile, approve=True)
40 | else:
41 | helpers.cleanup(terraform_outfile, approve=False)
42 | config.rc.warning("Didn't deploy the state")
43 | exit()
44 |
45 |
46 | def deploy():
47 | """
48 | Entry point function for the deploy action
49 | """
50 |
51 | if not (config.path_webserver / "template_website" / config.website).is_dir():
52 | config.rc.warning(f"Website template [bold purple]{config.website}[/bold purple] is not a valid template")
53 | exit()
54 |
55 | config.rc.info(f"Deploying infra for [bold dodger_blue1]{config.phishdomain}[/bold dodger_blue1] with [bold purple]{config.website}[/bold purple] template")
56 | helpers.terra_workspace("select", "default")
57 | if helpers.terra_check_workspace(config.phishdomain):
58 | helpers.terra_workspace("select", f"{config.phishdomain}")
59 | else:
60 | helpers.terra_workspace("new", f"{config.phishdomain}")
61 |
62 | deploy_infra()
63 | #ip = configure_infra()
64 | ip = helpers.terra_getIP()
65 | helpers.update_configfile(ip)
66 |
67 | # # at the end, make sure to switch back to the neutral workspace
68 | helpers.terra_workspace("select", "default")
--------------------------------------------------------------------------------
/oceanbreeze/modules/destroy.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 | import shutil
3 | import json
4 |
5 | from rich.prompt import Confirm
6 |
7 | from oceanbreeze.lib import helpers
8 | from oceanbreeze.config import config
9 |
10 |
11 |
12 | def update_configfile(ip: str, domain: str) -> None:
13 | """
14 | Update the configuration file by removing the domain for the terraform state we deleted
15 | """
16 | with open(config.configfile, 'r') as f:
17 | conf = json.load(f)
18 | config.rc.debug(f"Deleting {domain} from {ip}")
19 | conf['instances'][ip].remove(domain)
20 | if len(conf['instances'][ip]) == 0:
21 | del conf['instances'][ip]
22 |
23 | with open(config.configfile, 'w') as f:
24 | json.dump(conf, f, indent=2)
25 |
26 |
27 | def destroy_infra(ip: str, domain: str):
28 | """
29 | Destroys the selected terraform state.
30 | """
31 | state = helpers.terra_state()
32 | for rsrc in state:
33 | config.rc.print(f"# {rsrc['type']}.{rsrc['name']} will be [bold red]destroyed[/bold red]", style="italic")
34 | config.rc.print(f"resource \"{rsrc['type']}\"", style="italic")
35 | config.rc.print_json(json.dumps(rsrc['instances'][0]['attributes'])) # there's an terminal injection here, the :droplet: is shown as 💧
36 | config.rc.print()
37 |
38 | destroy_ok = Confirm.ask("[dark_orange]\[?][/dark_orange] Are OK with the proposed state ? ([bold red]this will auto-approve[bold red])")
39 | if destroy_ok:
40 | helpers.run_command(f"terraform apply -destroy -auto-approve -var 'project_name={config.project}' -var 'sshkey={config.terra_sshkey}' -var 'domain_name={domain}'")
41 | helpers.terra_workspace("select", "default")
42 | helpers.terra_workspace("delete", domain)
43 | update_configfile(ip, domain)
44 | else:
45 | config.rc.warning("Didn't deploy the state")
46 |
47 |
48 | def destroy():
49 | """
50 | Entry point function for the destroy action
51 | """
52 | ip = helpers.config_getIP(config.phishdomain)
53 | if not ip: config.rc.warning("Domain doesn't exist"); exit()
54 |
55 | linked_domains = config.instances[ip]
56 | if len(linked_domains) > 1:
57 | config.rc.warning("Found domains linked to the same instance !")
58 | destroy_ok = Confirm.ask(f"[dark_orange]\[?][/dark_orange] This will destroy these domains : [bold red]{linked_domains}[/bold red] - Is that what you want ?")
59 | if not destroy_ok: exit()
60 |
61 | delete_domains = linked_domains if len(linked_domains) > 1 else [config.phishdomain]
62 |
63 | for domain in delete_domains:
64 | if helpers.terra_check_workspace(domain):
65 | helpers.terra_workspace("select", domain)
66 | print(ip, domain)
67 | destroy_infra(ip, domain)
68 | else:
69 | config.rc.warning("Domain doesn't exist")
70 | exit()
71 |
72 |
73 | # # ensure that we are in the default workspace
74 | helpers.terra_workspace("select", "default")
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/bootstrap-reboot.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Reboot v4.5.2 (https://getbootstrap.com/)
3 | * Copyright 2011-2020 The Bootstrap Authors
4 | * Copyright 2011-2020 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */
--------------------------------------------------------------------------------
/oceanbreeze/oceanbreeze.py:
--------------------------------------------------------------------------------
1 | import signal
2 | import os
3 | import argparse
4 |
5 | from oceanbreeze.config import init_config
6 | from oceanbreeze.modules import deploy, destroy, list, update
7 |
8 | from rich.console import Console
9 |
10 | def signal_handler(sig, frame):
11 | print('Captured CTRL+C or SIGINT, quitting')
12 | exit()
13 |
14 | def create_banner():
15 | banner = r"""
16 | [turquoise2] ____ [/turquoise2][gold3] ____
17 | [turquoise2] / __ \ _____ ___ ____ _ ____ [/turquoise2][gold3] / __ ) _____ ___ ___ ____ ___ [/gold3]
18 | [turquoise2] / / / // ___// _ \ / __ `// __ \ [/turquoise2][gold3]/ __ // ___// _ \ / _ \/_ / / _ \ [/gold3]
19 | [turquoise2]/ /_/ // /__ / __// /_/ // / / [/turquoise2][gold3] / /_/ // / / __// __/ / /_/ __/[gold3]
20 | [turquoise2]\____/ \___/ \___/ \__,_//_/ /_[/turquoise2][gold3] /_____//_/ \___/ \___/ /___/\___/ [/gold3]
21 |
22 | [bold grey78]By: 🧀 Fudgedotdotdot ([deep_sky_blue1 link https://twitter.com/fudgedotdotdot]@fudgedotdotdot[/deep_sky_blue1 link https://twitter.com/fudgedotdotdot])
23 | [bold grey78]Version: 1.0.0[/bold grey78]
24 | """
25 | Console().print(banner, highlight=False)
26 |
27 |
28 | def check_env():
29 | if os.environ.get('DIGITALOCEAN_TOKEN') is None:
30 | Console().print("[bold red][!] DigitalOcean API key missing[/bold red] - put the key in the [dark_violet]DIGITALOCEAN_TOKEN[/dark_violet] env variable")
31 | exit()
32 |
33 |
34 | def main():
35 | signal.signal(signal.SIGINT, signal_handler)
36 | check_env()
37 |
38 | parser = argparse.ArgumentParser(description="Manages domain and related infrastructure on DigitalOcean")
39 |
40 | subparser = parser.add_subparsers(dest="commands")
41 |
42 | deploy_parser = subparser.add_parser('deploy', help="Deploy infrastructure")
43 | deploy_parser.add_argument("-d", "--domain", dest="domain_name", help="Domain to manage", required=True, type=str)
44 | deploy_parser.add_argument("-w", "--website", dest="website", default="socialmedia", help="Upload the selected website template to the droplet")
45 |
46 | list_parser = subparser.add_parser('list', help='List active domain infrastructure')
47 | list_parser.add_argument("-d", "--domain", dest="domain_name", help="Get details on this workspace/domain", type=str)
48 |
49 | update_parser = subparser.add_parser('update', help='Update instance with additional domain')
50 | update_parser.add_argument("-d", "--domain", dest="domain_name", help="Domain to append to the instance", required=True, type=str)
51 | update_parser.add_argument("-i", "--instance", dest="instance", required=True, type=str, help="Instance (IP or domain) on which to add the domain")
52 | update_parser.add_argument("-w", "--website", dest="website", default="socialmedia", help="Upload the selected website template to the droplet")
53 |
54 | destroy_parser = subparser.add_parser('destroy', help='Destroy infrastructure')
55 | destroy_parser.add_argument("-d", "--domain", dest="domain_name", required=True, type=str, help="Domain to destroy")
56 |
57 | parser.add_argument('-debug', action='store_true', help="Be verbose plz thanks")
58 | parser.add_argument('-silent', action='store_true', help="💔 Don't show the banner")
59 | args = parser.parse_args()
60 |
61 | if not args.silent:
62 | create_banner()
63 |
64 | if args.commands is None:
65 | parser.error("Please select an option")
66 |
67 | init_config(args)
68 |
69 | if args.commands == "list":
70 | list.list(args)
71 | elif args.commands == "destroy":
72 | destroy.destroy()
73 | elif args.commands == "deploy":
74 | deploy.deploy()
75 | elif args.commands == "update":
76 | update.update()
77 |
78 | if __name__ == "__main__":
79 | main()
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | webserver/template_website
2 | webserver/Caddyfile
3 |
4 |
5 | ### VisualStudioCode ###
6 | .vscode/*
7 |
8 | ### VisualStudioCode Patch ###
9 | # Ignore all local history of files
10 | **/.history
11 |
12 | # Byte-compiled / optimized / DLL files
13 | __pycache__/
14 | *.py[cod]
15 | *$py.class
16 | # C extensions
17 | *.so
18 |
19 | # Distribution / packaging
20 | .Python
21 | build/
22 | develop-eggs/
23 | dist/
24 | downloads/
25 | eggs/
26 | .eggs/
27 | parts/
28 | sdist/
29 | var/
30 | wheels/
31 | share/python-wheels/
32 | *.egg-info/
33 | .installed.cfg
34 | *.egg
35 | MANIFEST
36 |
37 | # PyInstaller
38 | # Usually these files are written by a python script from a template
39 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
40 | *.manifest
41 | *.spec
42 |
43 | # Installer logs
44 | pip-log.txt
45 | pip-delete-this-directory.txt
46 |
47 | # Unit test / coverage reports
48 | htmlcov/
49 | .tox/
50 | .nox/
51 | .coverage
52 | .coverage.*
53 | .cache
54 | nosetests.xml
55 | coverage.xml
56 | *.cover
57 | *.py,cover
58 | .hypothesis/
59 | .pytest_cache/
60 | cover/
61 |
62 | # Translations
63 | *.mo
64 | *.pot
65 |
66 | # Django stuff:
67 | *.log
68 | local_settings.py
69 | db.sqlite3
70 | db.sqlite3-journal
71 |
72 | # Flask stuff:
73 | instance/
74 | .webassets-cache
75 |
76 | # Scrapy stuff:
77 | .scrapy
78 |
79 | # Sphinx documentation
80 | docs/_build/
81 |
82 | # PyBuilder
83 | .pybuilder/
84 | target/
85 |
86 | # Jupyter Notebook
87 | .ipynb_checkpoints
88 |
89 | # IPython
90 | profile_default/
91 | ipython_config.py
92 |
93 | # pyenv
94 | # For a library or package, you might want to ignore these files since the code is
95 | # intended to run in multiple environments; otherwise, check them in:
96 | # .python-version
97 |
98 | # pipenv
99 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
100 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
101 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
102 | # install all needed dependencies.
103 | #Pipfile.lock
104 |
105 | # poetry
106 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
107 | # This is especially recommended for binary packages to ensure reproducibility, and is more
108 | # commonly ignored for libraries.
109 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
110 | #poetry.lock
111 |
112 | # pdm
113 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
114 | #pdm.lock
115 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
116 | # in version control.
117 | # https://pdm.fming.dev/#use-with-ide
118 | .pdm.toml
119 |
120 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121 | __pypackages__/
122 |
123 | # Celery stuff
124 | celerybeat-schedule
125 | celerybeat.pid
126 |
127 | # SageMath parsed files
128 | *.sage.py
129 |
130 | # Environments
131 | .env
132 | .venv
133 | env/
134 | venv/
135 | ENV/
136 | env.bak/
137 | venv.bak/
138 |
139 | # Spyder project settings
140 | .spyderproject
141 | .spyproject
142 |
143 | # Rope project settings
144 | .ropeproject
145 |
146 | # mkdocs documentation
147 | /site
148 |
149 | # mypy
150 | .mypy_cache/
151 | .dmypy.json
152 | dmypy.json
153 |
154 | # Pyre type checker
155 | .pyre/
156 |
157 | # pytype static type analyzer
158 | .pytype/
159 |
160 | # Cython debug symbols
161 | cython_debug/
162 |
163 | # PyCharm
164 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166 | # and can be added to the global gitignore or merged into this file. For a more nuclear
167 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168 | #
169 | .idea/
170 | # Local .terraform directories
171 | **/.terraform/*
172 | terraform/*terraform-plan
173 |
174 | # .tfstate files
175 | *.tfstate
176 | *.tfstate.*
177 |
178 | # Crash log files
179 | crash.log
180 | crash.*.log
181 |
182 | # Exclude all .tfvars files, which are likely to contain sensitive data, such as
183 | # password, private keys, and other secrets. These should not be part of version
184 | # control as they are data points which are potentially sensitive and subject
185 | # to change depending on the environment.
186 | *.tfvars
187 | *.tfvars.json
188 |
189 | # Ignore override files as they are usually used to override resources locally and so
190 | # are not checked in
191 | override.tf
192 | override.tf.json
193 | *_override.tf
194 | *_override.tf.json
195 |
196 | # Include override files you do wish to add to version control using negated pattern
197 | # !example_override.tf
198 |
199 | # Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
200 | # example: *tfplan*
201 |
202 | # Ignore CLI configuration files
203 | .terraformrc
204 | terraform.rc
--------------------------------------------------------------------------------
/oceanbreeze/config.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 | import json
3 | from dataclasses import dataclass
4 | import subprocess
5 |
6 | from oceanbreeze.lib import custom_print, digitalocean
7 |
8 | from rich.console import Console
9 | from rich.prompt import Prompt
10 |
11 |
12 |
13 | @dataclass
14 | class Config:
15 | configfile: Path
16 | phishdomain: str
17 | rootdomain: str
18 | instances: dict
19 | update_domain: str
20 | rc: Console
21 | project: str
22 | path_terra: Path
23 | path_ansible: Path
24 | path_webserver: Path
25 | local_sshkey: Path
26 | terra_sshkey: str
27 | website: str = "socialmedia"
28 | if_subdomain: bool = False
29 | color_terra: str = "sky_blue1 italic"
30 | color_ansible: str = "medium_turquoise italic"
31 | color_default: str = "grey62 italic"
32 |
33 | config = Config # I don't think this is how you initialize a dataclass, but it works so whatever
34 |
35 |
36 | def init_config(args):
37 | """
38 | Inits the config by performing basic checks and then by calling use_config() to finish the configuration
39 | """
40 | config.rc = custom_print.CustomPrint()
41 | if args.debug:
42 | config.rc.set_log_level(config.rc.DEBUG)
43 |
44 |
45 | config.phishdomain = args.domain_name
46 | if args.commands != "list":
47 | config.rootdomain = '.'.join(config.phishdomain.split('.')[-2:])
48 | if config.phishdomain != config.rootdomain:
49 | config.if_subdomain = True
50 | config.rc.warning("Use the root domain, not a subdomain")
51 | exit()
52 |
53 | if args.commands == "deploy" or args.commands == "update":
54 | if args.website:
55 | config.website = args.website
56 |
57 | if args.commands == "update":
58 | config.update_domain = args.instance
59 |
60 | config_file = Path.home() / ".config/oceanbreeze/config.json"
61 | config.configfile = config_file
62 |
63 | if config_file.is_file():
64 | read_config(config_file)
65 | else:
66 | create_config(config_file)
67 |
68 |
69 | def read_config(config_file):
70 | """
71 | Reads the configuration file and setup the config dataclass
72 | """
73 | config_json = json.loads(config_file.read_text())
74 | directory = Path(config_json['directory'])
75 |
76 | config.project = config_json['project']
77 | config.instances = config_json['instances']
78 |
79 | config.terra_sshkey = config_json['sshkey_terra']
80 | config.local_sshkey = config_json['sshkey_local']
81 |
82 | config.path_terra = directory / "terraform/"
83 | config.path_ansible = directory / "ansible/"
84 | config.path_webserver = directory / "webserver/"
85 |
86 | config.color_ansible = config_json['color_ansible']
87 | config.color_terra = config_json['color_terra']
88 | config.color_default = config_json['color_default']
89 |
90 |
91 | config.rc.debug(f"Content of the config file: ")
92 | if config.rc.log_level == config.rc.DEBUG:
93 | config.rc.print_json(config_file.read_text())
94 |
95 |
96 | def create_config(config_file):
97 | """
98 | Creates the configuration file and writes it to disk
99 | """
100 | config.rc.info(f"First launch detected, creating config file")
101 |
102 | directory = Path(Prompt.ask("[dark_orange]\[?][/dark_orange] Enter the directory where this tool is installed")).expanduser()
103 | while not directory.is_dir():
104 | directory = Path(Prompt.ask("[dark_orange]\[?][/dark_orange] Not a directory - Enter the directory where this tool is installed")).expanduser()
105 |
106 | active_tfstate = directory / "terraform/terraform.tfstate.d/"
107 | if list(active_tfstate.glob("*")):
108 | config.rc.warning(f"Found active terraform state, please remove it before changing the configuration (location: {active_tfstate})")
109 | config.rc.warning("If you deleted the configuration file, you can use [italic]terraform workspace[/italic] and [italic]terraform destroy[/italic] manually to destroy the active state and workspace")
110 | exit()
111 |
112 | config.rc.info("Initializing Terraform")
113 | terra_init = subprocess.run("terraform init", cwd=directory / "terraform/", shell=True, text=True, check=True, stdout=subprocess.PIPE).stdout
114 | config.rc.print(terra_init, highlight=False)
115 |
116 | config.rc.info("Fetching projects from DigitalOcean")
117 | project = digitalocean.get_project(config)
118 | config.rc.info("Fetching SSH Keys from DigitalOcean")
119 | do_sshkey = digitalocean.get_key(config)
120 |
121 | local_sshkey = Path(Prompt.ask(f"[dark_orange]\[?][/dark_orange] Enter the local path to the {do_sshkey} private ssh key")).expanduser()
122 | while not local_sshkey.is_file():
123 | local_sshkey = Path(Prompt.ask(f"[dark_orange]\[?][/dark_orange] Not a file - Enter the local path to the {do_sshkey} private ssh key")).expanduser()
124 |
125 | config_json = {"directory": str(directory),
126 | "project": project,
127 | "instances": dict(),
128 | "sshkey_terra": do_sshkey,
129 | "sshkey_local": str(local_sshkey),
130 | "color_terra": config.color_terra, "color_ansible": config.color_ansible, "color_default": config.color_default,}
131 |
132 | config_file.parent.mkdir(exist_ok=True, parents=True)
133 | config_file.write_text(json.dumps(config_json))
134 |
135 | config.rc.info(f"Configuration file : {config_file} (you can change the colors by editing the json): ")
136 | config.rc.print_json(json.dumps(config_json))
137 | config.rc.info("You can now use [turquoise2]Ocean[/turquoise2][gold3 italic]Breeze[/gold3 italic] !")
138 | exit()
139 |
140 |
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/blocks.css:
--------------------------------------------------------------------------------
1 | #astra-sites-showcase-blocks-wrap .theme-wrap{border-radius:3px;position:relative;backface-visibility:hidden;-webkit-backface-visibility:hidden;font-size:1rem}#astra-sites-showcase-blocks-wrap .theme-wrap .theme-wrap-inner,#astra-sites-showcase-blocks-wrap .theme-wrap .theme-image .theme-image-inner{-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#astra-sites-showcase-blocks-wrap .theme-wrap .theme-image{background:#fff;border:1px solid #dcd9e2;border-radius:3px;display:block;margin-bottom:0;position:relative;z-index:10}#astra-sites-showcase-blocks-wrap .theme-wrap .theme-image img{display:block}#astra-sites-showcase-blocks-wrap .astra-blocks-filters-wrap{display:flex}.astra-blocks-filters-wrap .search-icon{position:absolute;top:0;right:0;color:#666;opacity:.3;padding:4px}.astra-color-cat-filter .astra-category-filter-wrap,.astra-color-cat-filter .astra-blocks-filter-wrap{position:relative}#astra-sites-showcase-blocks-wrap .astra-sites-showcase-blocks-list .site-single{margin-bottom:0}.astra-sites-showcase-blocks-list .theme-screenshot{transition:all ease-in-out .2s;border-radius:2px}#astra-sites-showcase-blocks-list{margin-left:-22px;margin-right:-22px}#astra-sites-showcase-blocks-wrap .theme-wrap:hover .theme-wrap-inner{box-shadow:none!important;transform:none}.astra-color-cat-filter{display:flex;flex-direction:row}.astra-blocks-filters-wrap select,.astra-blocks-filters-wrap input[type=search]{padding:6px 8px;border-radius:5px;font-size:14px;line-height:16px;color:#58565d}.astra-blocks-filters-wrap input[type=search]{position:absolute;right:0;top:0;padding:10px 5px;width:200px;border-radius:0;opacity:1;background:0 0;font-size:16px;border:none;border-bottom:1px solid #ddd;box-shadow:none;height:auto}.astra-blocks-filters-wrap select{border:1px solid #c1c1c1;cursor:pointer;background-color:#fff;height:35px;vertical-align:middle;width:140px;line-height:1.5;margin-right:0;padding-left:15px;-webkit-appearance:none}.astra-category-filter-wrap{margin-right:10px}.astra-blocks-filters-wrap select option{padding:2px;display:block}.astra-blocks-filters-wrap input[type=search]::placeholder{font-size:12px;color:#58565d;text-transform:uppercase}.astra-blocks-filters-wrap select:focus,.astra-blocks-filters-wrap input[type=search]:focus{border-color:#9c9c9c;outline:none}#astra-sites-showcase-blocks-list .site-single{padding:15px;transition:all ease-in-out .2s;position:relative}#astra-sites-showcase-blocks-wrap .theme-wrap .theme-entry-content{padding-top:10px;padding-bottom:8px;text-align:center;z-index:10;background-color:#fff;color:#6d7882}#astra-sites-showcase-blocks-wrap .theme-wrap .theme-entry-content .theme-type{margin-top:0;font-size:.7em;font-weight:500!important;text-transform:uppercase;display:flex;line-height:1;justify-content:space-between}.astra-sites-showcase-blocks-list .astra-sites-no-sites{box-shadow:none;text-align:center;width:100%}.astra-sites-showcase-blocks-list .astra-sites-no-sites .description{font-size:16px;margin:0;display:flex;align-items:center;justify-content:center}.astra-sites-no-sites .inner{padding:1.5em}.astra-color-cat-filter .astra-category-filter-wrap:after,.astra-color-cat-filter .astra-blocks-filter-wrap:after{content:"\f078";font-family:'font awesome 5 free';font-size:.6em;font-weight:800;line-height:1;pointer-events:none;position:absolute;right:8%;top:50%;transform:translateY(-45%);-webkit-transform:translateY(-45%);-ms-transform:translateY(-45%);z-index:5}#astra-sites-showcase-blocks-wrap .blocks-loader{width:25px;height:25px;border:3px solid #7c5ec8;-webkit-border-radius:50%;border-radius:50%;display:inline-block;vertical-align:middle;border-left-color:rgba(0,0,0,.2);position:relative;top:50%;left:50%;-webkit-animation:block-rotating 1s linear infinite;animation:block-rotating 1s linear infinite}@-webkit-keyframes block-rotating{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes block-rotating{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@media(min-width:768px){.astra-blocks-filters-wrap input[type=search]{width:280px;padding:8px 8px 10px}.astra-blocks-filters-wrap .search-form .search-icon{right:5px}.astra-blocks-filters-wrap .search-form .fa.fa-search{font-family:"font awesome 5 free";font-weight:600;font-size:14px}}@media(max-width:767px){.astra-sites-showcase-blocks-search-box{display:flex;margin:0 60px;justify-content:space-between}.astra-blocks-filters-wrap .search-form{flex:1;text-align:center;position:relative;width:80%}.astra-blocks-filters-wrap .search-icon{position:absolute;top:48%;right:25px}.astra-sites-showcase-blocks-categories{margin-left:60px;margin-right:60px}.astra-sites-showcase-blocks-categories ul{flex-wrap:wrap;line-height:2}.astra-blocks-filters-wrap{display:flex;flex-direction:column;align-items:center;margin:0}.astra-blocks-filters-wrap input[type=search]{position:unset;border-bottom:0;font-size:16px;line-height:1;width:100%;margin-top:30px;margin-right:0;padding:15px 20px;border-radius:5px;background-color:#fff;box-shadow:0 0 15px 0 rgba(62,28,135,.1)}.astra-blocks-filters-wrap input[type=search]:focus{border-bottom:0}.astra-sites-showcase-blocks-site-type{position:relative}#astra-sites-showcase-blocks-wrap{padding-top:20px}#astra-sites-showcase-blocks-list .site-single{padding-left:10px;padding-right:10px}#astra-sites-showcase-blocks-list{margin-left:-10px;margin-right:-10px}.astra-sites-showcase-blocks-list .site-single{margin-bottom:30px}}@media(max-width:480px){.astra-blocks-filters-wrap .search-form,.astra-color-cat-filter select,.astra-color-cat-filter{width:100%}.astra-color-cat-filter .astra-category-filter-wrap{margin-right:10px;width:calc(50% - 10px)}.astra-color-cat-filter .astra-blocks-filter-wrap{width:50%}.astra-color-cat-filter select,#astra-sites-showcase-blocks-list .site-single.masonry-brick{margin:0}#astra-sites-showcase-blocks-list .site-single.masonry-brick{padding:15px 15px 0}#astra-sites-showcase-blocks-wrap .blocks-loader{left:45%}}
--------------------------------------------------------------------------------
/oceanbreeze/lib/helpers.py:
--------------------------------------------------------------------------------
1 | import subprocess
2 | import time
3 | import socket
4 | from pathlib import Path
5 | import string
6 | import re
7 | import json
8 |
9 | from oceanbreeze.config import config
10 |
11 |
12 |
13 | def run_command(cmd: str, return_output=False):
14 | """
15 | Helper fonction to run terraform and ansible commands
16 | """
17 | if cmd.startswith('terraform workspace'):
18 | style = config.color_default
19 | cwd = config.path_terra
20 | cmd = "TF_CLI_ARGS=\"-no-color\" " + cmd # remove terraform's colors
21 | elif cmd.startswith('terraform') :
22 | style = config.color_terra
23 | cwd = config.path_terra
24 | cmd = "TF_CLI_ARGS=\"-no-color\" " + cmd # remove terraform's colors
25 | elif cmd.startswith('ansible'):
26 | style = config.color_ansible
27 | cwd = config.path_ansible
28 | else:
29 | style = config.color_default
30 | cwd = "."
31 |
32 | try:
33 | if return_output:
34 | return subprocess.run(cmd, cwd=cwd, shell=True, text=True, check=True, stdout=subprocess.PIPE).stdout
35 | else:
36 | with subprocess.Popen(cmd, cwd=cwd, shell=True, text=True, stdout=subprocess.PIPE, bufsize=1) as p:
37 | for line in p.stdout:
38 | config.rc.print(line, end='', style=style, highlight=False)
39 | p.communicate() # sets the returncode
40 | if p.returncode != 0:
41 | raise subprocess.CalledProcessError(p.returncode, cmd)
42 | except subprocess.CalledProcessError as e:
43 | config.rc.print(e)
44 | if cmd.startswith('ansible'):
45 | config.rc.info(f"You can run the playbook manually with : {cmd}")
46 | exit()
47 |
48 |
49 | def terra_check_workspace(workspace: str) -> bool:
50 | """
51 | Checks if workspace already exists (ie: canceled ansible, but terraform has a state for a workspace)
52 | Returns True is exist, False if not
53 | """
54 | if workspace in terra_list_workspace():
55 | return True
56 | else:
57 | return False
58 |
59 |
60 | def terra_list_workspace() -> list[str]:
61 | """
62 | Lists the workspaces created by terraform
63 | Returns a list of workspaces
64 | """
65 | workspace_dir = config.path_terra / "terraform.tfstate.d/"
66 | return [x.parts[-1] for x in Path(workspace_dir).glob("*")]
67 |
68 |
69 |
70 | def terra_state() -> list[dict]:
71 | """
72 | Prints the terraform state sort of like the real terraform show command
73 | Returns a list of all the resources deployed in the state
74 | """
75 | managed_rsrc = []
76 | state = json.loads(run_command("terraform state pull", return_output=True))
77 | for rsrc in state['resources']:
78 | if rsrc['mode'] == "managed":
79 | managed_rsrc.append(rsrc)
80 |
81 | return managed_rsrc
82 |
83 |
84 | def terra_workspace(*args) -> None:
85 | """
86 | Helper fonction to manage terraform workspaces
87 | """
88 | need_args = ["delete", "select", "new"]
89 | if args[0] in need_args:
90 | if len(args) != 2:
91 | exit(f"invalid {args[0]} command: {args}")
92 | if "show" in args[0]:
93 | run_command(f"terraform workspace show")
94 | if "list" in args[0]:
95 | run_command(f"terraform workspace list")
96 | elif "select" in args[0]:
97 | run_command(f"terraform workspace select {args[1]}")
98 | elif "delete" in args[0]:
99 | run_command(f"terraform workspace delete {args[1]}")
100 | elif "new" in args[0]:
101 | run_command(f"terraform workspace new {args[1]}")
102 | else:
103 | print(f"unknown command: {args[0]}")
104 |
105 |
106 | def generate_caddy_file() -> Path:
107 | config.rc.debug("Writing caddy file...", higlight=False)
108 | with open(config.path_webserver / "caddy/Caddyfile.template", "r") as f:
109 | tmp_caddy = f.read()
110 |
111 | tmp_caddy = re.sub("DOMAIN", f"{config.phishdomain}", tmp_caddy)
112 | path_caddy = config.path_webserver / "caddy/Caddyfile"
113 | with open(path_caddy, "w") as f:
114 | f.write(tmp_caddy)
115 |
116 | return path_caddy
117 |
118 |
119 | def cleanup(terraform_outfile: Path, approve=True) -> None:
120 | """
121 | Cleans up the temporary plan file. Also removes the workspace if the state was not approved.
122 | """
123 | Path.unlink(terraform_outfile)
124 | if not approve:
125 | terra_workspace("select", "default")
126 | terra_workspace("delete", config.phishdomain)
127 |
128 |
129 | def update_configfile(ip: str) -> None:
130 | with open(config.configfile, 'r') as f:
131 | conf = json.load(f)
132 |
133 | if ip not in conf['instances'].keys():
134 | conf['instances'][ip] = []
135 | conf['instances'][ip].append(config.phishdomain)
136 |
137 | with open(config.configfile, 'w') as f:
138 | json.dump(conf, f, indent=2)
139 |
140 |
141 | def config_getIP(instance: str) -> str:
142 | """
143 | Gets the ip of the instance from the config dataclass
144 | Only checks the first character - [1].1.1.1 vs [g]oogle.ch
145 | """
146 | c = instance[0]
147 | if c.isdigit():
148 | if instance in config.instances.keys():
149 | return instance
150 | elif c.lower() in string.ascii_lowercase:
151 | for k, v in config.instances.items():
152 | if instance in v: return k
153 | return ""
154 | else:
155 | config.rc.warning(f"Invalid instance name : {instance}")
156 | return ""
157 |
158 |
159 | def terra_getIP() -> list[str]:
160 | """
161 | Pull the terraform state from the active workspace and returns it.
162 | """
163 | state = json.loads(run_command("terraform state pull", return_output=True))
164 | for rsrc in state['resources']:
165 | if rsrc['type'] == "digitalocean_droplet":
166 | return rsrc['instances'][0]['attributes']['ipv4_address']
167 |
168 |
169 | def check_port(ip: str) -> None:
170 | while True:
171 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
172 | s.settimeout(1)
173 | try:
174 | s.connect((ip, 22))
175 | s.close()
176 | break
177 | except:
178 | time.sleep(5)
179 |
180 |
181 | def resolve_domain(domain: str, ip: str) -> None:
182 | while True:
183 | try:
184 | domain_ip = socket.gethostbyname(domain)
185 | if domain_ip == ip:
186 | break
187 | except socket.gaierror:
188 | time.sleep(30)
189 |
190 |
191 |
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/style.css:
--------------------------------------------------------------------------------
1 | .navbar-dropdown {
2 | left: 0;
3 | padding: 0;
4 | position: absolute;
5 | right: 0;
6 | top: 0;
7 | transition: all 0.45s ease;
8 | z-index: 1030;
9 | background: #282828; }
10 | .navbar-dropdown .navbar-logo {
11 | margin-right: 0.8rem;
12 | transition: margin 0.3s ease-in-out;
13 | vertical-align: middle; }
14 | .navbar-dropdown .navbar-logo img {
15 | height: 3.125rem;
16 | transition: all 0.3s ease-in-out; }
17 | .navbar-dropdown .navbar-logo.mbr-iconfont {
18 | font-size: 3.125rem;
19 | line-height: 3.125rem; }
20 | .navbar-dropdown .navbar-caption {
21 | font-weight: 700;
22 | white-space: normal;
23 | vertical-align: -4px;
24 | line-height: 3.125rem !important; }
25 | .navbar-dropdown .navbar-caption, .navbar-dropdown .navbar-caption:hover {
26 | color: inherit;
27 | text-decoration: none; }
28 | .navbar-dropdown .mbr-iconfont + .navbar-caption {
29 | vertical-align: -1px; }
30 | .navbar-dropdown.navbar-fixed-top {
31 | position: fixed; }
32 | .navbar-dropdown .navbar-brand span {
33 | vertical-align: -4px; }
34 | .navbar-dropdown.bg-color.transparent {
35 | background: none; }
36 | .navbar-dropdown.navbar-short .navbar-brand {
37 | padding: 0.625rem 0; }
38 | .navbar-dropdown.navbar-short .navbar-brand span {
39 | vertical-align: -1px; }
40 | .navbar-dropdown.navbar-short .navbar-caption {
41 | line-height: 2.375rem !important;
42 | vertical-align: -2px; }
43 | .navbar-dropdown.navbar-short .navbar-logo {
44 | margin-right: 0.5rem; }
45 | .navbar-dropdown.navbar-short .navbar-logo img {
46 | height: 2.375rem; }
47 | .navbar-dropdown.navbar-short .navbar-logo.mbr-iconfont {
48 | font-size: 2.375rem;
49 | line-height: 2.375rem; }
50 | .navbar-dropdown.navbar-short .mbr-table-cell {
51 | height: 3.625rem; }
52 | .navbar-dropdown .navbar-close {
53 | left: 0.6875rem;
54 | position: fixed;
55 | top: 0.75rem;
56 | z-index: 1000; }
57 | .navbar-dropdown .hamburger-icon {
58 | content: "";
59 | display: inline-block;
60 | vertical-align: middle;
61 | width: 16px;
62 | -webkit-box-shadow: 0 -6px 0 1px #282828,0 0 0 1px #282828,0 6px 0 1px #282828;
63 | -moz-box-shadow: 0 -6px 0 1px #282828,0 0 0 1px #282828,0 6px 0 1px #282828;
64 | box-shadow: 0 -6px 0 1px #282828,0 0 0 1px #282828,0 6px 0 1px #282828; }
65 |
66 | .dropdown-menu .dropdown-toggle[data-toggle="dropdown-submenu"]::after {
67 | border-bottom: 0.35em solid transparent;
68 | border-left: 0.35em solid;
69 | border-right: 0;
70 | border-top: 0.35em solid transparent;
71 | margin-left: 0.3rem; }
72 |
73 | .dropdown-menu .dropdown-item:focus {
74 | outline: 0; }
75 |
76 | .nav-dropdown {
77 | font-size: 0.75rem;
78 | font-weight: 500;
79 | height: auto !important; }
80 | .nav-dropdown .nav-btn {
81 | padding-left: 1rem; }
82 | .nav-dropdown .link {
83 | margin: .667em 1.667em;
84 | font-weight: 500;
85 | padding: 0;
86 | transition: color .2s ease-in-out; }
87 | .nav-dropdown .link.dropdown-toggle {
88 | margin-right: 2.583em; }
89 | .nav-dropdown .link.dropdown-toggle::after {
90 | margin-left: .25rem;
91 | border-top: 0.35em solid;
92 | border-right: 0.35em solid transparent;
93 | border-left: 0.35em solid transparent;
94 | border-bottom: 0; }
95 | .nav-dropdown .link.dropdown-toggle[aria-expanded="true"] {
96 | margin: 0;
97 | padding: 0.667em 3.263em 0.667em 1.667em; }
98 | .nav-dropdown .link::after,
99 | .nav-dropdown .dropdown-item::after {
100 | color: inherit; }
101 | .nav-dropdown .btn {
102 | font-size: 0.75rem;
103 | font-weight: 700;
104 | letter-spacing: 0;
105 | margin-bottom: 0;
106 | padding-left: 1.25rem;
107 | padding-right: 1.25rem; }
108 | .nav-dropdown .dropdown-menu {
109 | border-radius: 0;
110 | border: 0;
111 | left: 0;
112 | margin: 0;
113 | padding-bottom: 1.25rem;
114 | padding-top: 1.25rem;
115 | position: relative; }
116 | .nav-dropdown .dropdown-submenu {
117 | margin-left: 0.125rem;
118 | top: 0; }
119 | .nav-dropdown .dropdown-item {
120 | font-weight: 500;
121 | line-height: 2;
122 | padding: 0.3846em 4.615em 0.3846em 1.5385em;
123 | position: relative;
124 | transition: color .2s ease-in-out, background-color .2s ease-in-out; }
125 | .nav-dropdown .dropdown-item::after {
126 | margin-top: -0.3077em;
127 | position: absolute;
128 | right: 1.1538em;
129 | top: 50%; }
130 | .nav-dropdown .dropdown-item:focus, .nav-dropdown .dropdown-item:hover {
131 | background: none; }
132 |
133 | @media (max-width: 767px) {
134 | .nav-dropdown.navbar-toggleable-sm {
135 | bottom: 0;
136 | display: none;
137 | left: 0;
138 | overflow-x: hidden;
139 | position: fixed;
140 | top: 0;
141 | transform: translateX(-100%);
142 | -ms-transform: translateX(-100%);
143 | -webkit-transform: translateX(-100%);
144 | width: 18.75rem;
145 | z-index: 999; } }
146 | .nav-dropdown.navbar-toggleable-xl {
147 | bottom: 0;
148 | display: none;
149 | left: 0;
150 | overflow-x: hidden;
151 | position: fixed;
152 | top: 0;
153 | transform: translateX(-100%);
154 | -ms-transform: translateX(-100%);
155 | -webkit-transform: translateX(-100%);
156 | width: 18.75rem;
157 | z-index: 999; }
158 |
159 | .nav-dropdown-sm {
160 | display: block !important;
161 | overflow-x: hidden;
162 | overflow: auto;
163 | padding-top: 3.875rem; }
164 | .nav-dropdown-sm::after {
165 | content: "";
166 | display: block;
167 | height: 3rem;
168 | width: 100%; }
169 | .nav-dropdown-sm.collapse.in ~ .navbar-close {
170 | display: block !important; }
171 | .nav-dropdown-sm.collapsing, .nav-dropdown-sm.collapse.in {
172 | transform: translateX(0);
173 | -ms-transform: translateX(0);
174 | -webkit-transform: translateX(0);
175 | transition: all 0.25s ease-out;
176 | -webkit-transition: all 0.25s ease-out;
177 | background: #282828; }
178 | .nav-dropdown-sm.collapsing[aria-expanded="false"] {
179 | transform: translateX(-100%);
180 | -ms-transform: translateX(-100%);
181 | -webkit-transform: translateX(-100%); }
182 | .nav-dropdown-sm .nav-item {
183 | display: block;
184 | margin-left: 0 !important;
185 | padding-left: 0; }
186 | .nav-dropdown-sm .link,
187 | .nav-dropdown-sm .dropdown-item {
188 | border-top: 1px dotted rgba(255, 255, 255, 0.1);
189 | font-size: 0.8125rem;
190 | line-height: 1.6;
191 | margin: 0 !important;
192 | padding: 0.875rem 2.4rem 0.875rem 1.5625rem !important;
193 | position: relative;
194 | white-space: normal; }
195 | .nav-dropdown-sm .link:focus, .nav-dropdown-sm .link:hover,
196 | .nav-dropdown-sm .dropdown-item:focus,
197 | .nav-dropdown-sm .dropdown-item:hover {
198 | background: rgba(0, 0, 0, 0.2) !important;
199 | color: #c0a375; }
200 | .nav-dropdown-sm .nav-btn {
201 | position: relative;
202 | padding: 1.5625rem 1.5625rem 0 1.5625rem; }
203 | .nav-dropdown-sm .nav-btn::before {
204 | border-top: 1px dotted rgba(255, 255, 255, 0.1);
205 | content: "";
206 | left: 0;
207 | position: absolute;
208 | top: 0;
209 | width: 100%; }
210 | .nav-dropdown-sm .nav-btn + .nav-btn {
211 | padding-top: 0.625rem; }
212 | .nav-dropdown-sm .nav-btn + .nav-btn::before {
213 | display: none; }
214 | .nav-dropdown-sm .btn {
215 | padding: 0.625rem 0; }
216 | .nav-dropdown-sm .dropdown-toggle[data-toggle="dropdown-submenu"]::after {
217 | margin-left: .25rem;
218 | border-top: 0.35em solid;
219 | border-right: 0.35em solid transparent;
220 | border-left: 0.35em solid transparent;
221 | border-bottom: 0; }
222 | .nav-dropdown-sm .dropdown-toggle[data-toggle="dropdown-submenu"][aria-expanded="true"]::after {
223 | border-top: 0;
224 | border-right: 0.35em solid transparent;
225 | border-left: 0.35em solid transparent;
226 | border-bottom: 0.35em solid; }
227 | .nav-dropdown-sm .dropdown-menu {
228 | margin: 0;
229 | padding: 0;
230 | position: relative;
231 | top: 0;
232 | left: 0;
233 | width: 100%;
234 | border: 0;
235 | float: none;
236 | border-radius: 0;
237 | background: none; }
238 | .nav-dropdown-sm .dropdown-submenu {
239 | left: 100%;
240 | margin-left: 0.125rem;
241 | margin-top: -1.25rem;
242 | top: 0; }
243 |
244 | .navbar-toggleable-sm .nav-dropdown .dropdown-menu {
245 | position: absolute; }
246 |
247 | .navbar-toggleable-sm .nav-dropdown .dropdown-submenu {
248 | left: 100%;
249 | margin-left: 0.125rem;
250 | margin-top: -1.25rem;
251 | top: 0; }
252 |
253 | .navbar-toggleable-sm.opened .nav-dropdown .dropdown-menu {
254 | position: relative; }
255 |
256 | .navbar-toggleable-sm.opened .nav-dropdown .dropdown-submenu {
257 | left: 0;
258 | margin-left: 00rem;
259 | margin-top: 0rem;
260 | top: 0; }
261 |
262 | .is-builder .nav-dropdown.collapsing {
263 | transition: none !important; }
264 |
265 | /*# sourceMappingURL=style.css.map */
266 |
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/logo-black.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/logo.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/mobirise2.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Moririse2';
3 | font-display: swap;
4 | src: url("");
5 | src: url("mobirise2.eot") format('embedded-opentype'),
6 | url("mobirise2.ttf") format('truetype'),
7 | url("mobirise2.woff") format('woff'),
8 | url("mobirise2.svg") format('svg');
9 | font-weight: normal;
10 | font-style: normal;
11 | }
12 |
13 | [class^="mobi-"], [class*=" mobi-"] {
14 | /* use !important to prevent issues with browser extensions that change fonts */
15 | font-family: 'Moririse2' !important;
16 | speak: none;
17 | font-style: normal;
18 | font-weight: normal;
19 | font-variant: normal;
20 | text-transform: none;
21 | line-height: 1;
22 |
23 | /* Better Font Rendering =========== */
24 | -webkit-font-smoothing: antialiased;
25 | -moz-osx-font-smoothing: grayscale;
26 | }
27 |
28 | .mobi-mbri-add-submenu:before {
29 | content: "\e900";
30 | }
31 | .mobi-mbri-alert:before {
32 | content: "\e901";
33 | }
34 | .mobi-mbri-align-center:before {
35 | content: "\e902";
36 | }
37 | .mobi-mbri-align-justify:before {
38 | content: "\e903";
39 | }
40 | .mobi-mbri-align-left:before {
41 | content: "\e904";
42 | }
43 | .mobi-mbri-align-right:before {
44 | content: "\e905";
45 | }
46 | .mobi-mbri-android:before {
47 | content: "\e906";
48 | }
49 | .mobi-mbri-apple:before {
50 | content: "\e907";
51 | }
52 | .mobi-mbri-arrow-down:before {
53 | content: "\e908";
54 | }
55 | .mobi-mbri-arrow-next:before {
56 | content: "\e909";
57 | }
58 | .mobi-mbri-arrow-prev:before {
59 | content: "\e90a";
60 | }
61 | .mobi-mbri-arrow-up:before {
62 | content: "\e90b";
63 | }
64 | .mobi-mbri-bold:before {
65 | content: "\e90c";
66 | }
67 | .mobi-mbri-bookmark:before {
68 | content: "\e90d";
69 | }
70 | .mobi-mbri-bootstrap:before {
71 | content: "\e90e";
72 | }
73 | .mobi-mbri-briefcase:before {
74 | content: "\e90f";
75 | }
76 | .mobi-mbri-browse:before {
77 | content: "\e910";
78 | }
79 | .mobi-mbri-bulleted-list:before {
80 | content: "\e911";
81 | }
82 | .mobi-mbri-calendar:before {
83 | content: "\e912";
84 | }
85 | .mobi-mbri-camera:before {
86 | content: "\e913";
87 | }
88 | .mobi-mbri-cart-add:before {
89 | content: "\e914";
90 | }
91 | .mobi-mbri-cart-full:before {
92 | content: "\e915";
93 | }
94 | .mobi-mbri-cash:before {
95 | content: "\e916";
96 | }
97 | .mobi-mbri-change-style:before {
98 | content: "\e917";
99 | }
100 | .mobi-mbri-chat:before {
101 | content: "\e918";
102 | }
103 | .mobi-mbri-clock:before {
104 | content: "\e919";
105 | }
106 | .mobi-mbri-close:before {
107 | content: "\e91a";
108 | }
109 | .mobi-mbri-cloud:before {
110 | content: "\e91b";
111 | }
112 | .mobi-mbri-code:before {
113 | content: "\e91c";
114 | }
115 | .mobi-mbri-contact-form:before {
116 | content: "\e91d";
117 | }
118 | .mobi-mbri-credit-card:before {
119 | content: "\e91e";
120 | }
121 | .mobi-mbri-cursor-click:before {
122 | content: "\e91f";
123 | }
124 | .mobi-mbri-cust-feedback:before {
125 | content: "\e920";
126 | }
127 | .mobi-mbri-database:before {
128 | content: "\e921";
129 | }
130 | .mobi-mbri-delivery:before {
131 | content: "\e922";
132 | }
133 | .mobi-mbri-desktop:before {
134 | content: "\e923";
135 | }
136 | .mobi-mbri-devices:before {
137 | content: "\e924";
138 | }
139 | .mobi-mbri-down:before {
140 | content: "\e925";
141 | }
142 | .mobi-mbri-download-2:before {
143 | content: "\e926";
144 | }
145 | .mobi-mbri-download:before {
146 | content: "\e927";
147 | }
148 | .mobi-mbri-drag-n-drop-2:before {
149 | content: "\e928";
150 | }
151 | .mobi-mbri-drag-n-drop:before {
152 | content: "\e929";
153 | }
154 | .mobi-mbri-edit-2:before {
155 | content: "\e92a";
156 | }
157 | .mobi-mbri-edit:before {
158 | content: "\e92b";
159 | }
160 | .mobi-mbri-error:before {
161 | content: "\e92c";
162 | }
163 | .mobi-mbri-extension:before {
164 | content: "\e92d";
165 | }
166 | .mobi-mbri-features:before {
167 | content: "\e92e";
168 | }
169 | .mobi-mbri-file:before {
170 | content: "\e92f";
171 | }
172 | .mobi-mbri-flag:before {
173 | content: "\e930";
174 | }
175 | .mobi-mbri-folder:before {
176 | content: "\e931";
177 | }
178 | .mobi-mbri-gift:before {
179 | content: "\e932";
180 | }
181 | .mobi-mbri-github:before {
182 | content: "\e933";
183 | }
184 | .mobi-mbri-globe-2:before {
185 | content: "\e934";
186 | }
187 | .mobi-mbri-globe:before {
188 | content: "\e935";
189 | }
190 | .mobi-mbri-growing-chart:before {
191 | content: "\e936";
192 | }
193 | .mobi-mbri-hearth:before {
194 | content: "\e937";
195 | }
196 | .mobi-mbri-help:before {
197 | content: "\e938";
198 | }
199 | .mobi-mbri-home:before {
200 | content: "\e939";
201 | }
202 | .mobi-mbri-hot-cup:before {
203 | content: "\e93a";
204 | }
205 | .mobi-mbri-idea:before {
206 | content: "\e93b";
207 | }
208 | .mobi-mbri-image-gallery:before {
209 | content: "\e93c";
210 | }
211 | .mobi-mbri-image-slider:before {
212 | content: "\e93d";
213 | }
214 | .mobi-mbri-info:before {
215 | content: "\e93e";
216 | }
217 | .mobi-mbri-italic:before {
218 | content: "\e93f";
219 | }
220 | .mobi-mbri-key:before {
221 | content: "\e940";
222 | }
223 | .mobi-mbri-laptop:before {
224 | content: "\e941";
225 | }
226 | .mobi-mbri-layers:before {
227 | content: "\e942";
228 | }
229 | .mobi-mbri-left-right:before {
230 | content: "\e943";
231 | }
232 | .mobi-mbri-left:before {
233 | content: "\e944";
234 | }
235 | .mobi-mbri-letter:before {
236 | content: "\e945";
237 | }
238 | .mobi-mbri-like:before {
239 | content: "\e946";
240 | }
241 | .mobi-mbri-link:before {
242 | content: "\e947";
243 | }
244 | .mobi-mbri-lock:before {
245 | content: "\e948";
246 | }
247 | .mobi-mbri-login:before {
248 | content: "\e949";
249 | }
250 | .mobi-mbri-logout:before {
251 | content: "\e94a";
252 | }
253 | .mobi-mbri-magic-stick:before {
254 | content: "\e94b";
255 | }
256 | .mobi-mbri-map-pin:before {
257 | content: "\e94c";
258 | }
259 | .mobi-mbri-menu:before {
260 | content: "\e94d";
261 | }
262 | .mobi-mbri-mobile-2:before {
263 | content: "\e94e";
264 | }
265 | .mobi-mbri-mobile-horizontal:before {
266 | content: "\e94f";
267 | }
268 | .mobi-mbri-mobile:before {
269 | content: "\e950";
270 | }
271 | .mobi-mbri-mobirise:before {
272 | content: "\e951";
273 | }
274 | .mobi-mbri-more-horizontal:before {
275 | content: "\e952";
276 | }
277 | .mobi-mbri-more-vertical:before {
278 | content: "\e953";
279 | }
280 | .mobi-mbri-music:before {
281 | content: "\e954";
282 | }
283 | .mobi-mbri-new-file:before {
284 | content: "\e955";
285 | }
286 | .mobi-mbri-numbered-list:before {
287 | content: "\e956";
288 | }
289 | .mobi-mbri-opened-folder:before {
290 | content: "\e957";
291 | }
292 | .mobi-mbri-pages:before {
293 | content: "\e958";
294 | }
295 | .mobi-mbri-paper-plane:before {
296 | content: "\e959";
297 | }
298 | .mobi-mbri-paperclip:before {
299 | content: "\e95a";
300 | }
301 | .mobi-mbri-phone:before {
302 | content: "\e95b";
303 | }
304 | .mobi-mbri-photo:before {
305 | content: "\e95c";
306 | }
307 | .mobi-mbri-photos:before {
308 | content: "\e95d";
309 | }
310 | .mobi-mbri-pin:before {
311 | content: "\e95e";
312 | }
313 | .mobi-mbri-play:before {
314 | content: "\e95f";
315 | }
316 | .mobi-mbri-plus:before {
317 | content: "\e960";
318 | }
319 | .mobi-mbri-preview:before {
320 | content: "\e961";
321 | }
322 | .mobi-mbri-print:before {
323 | content: "\e962";
324 | }
325 | .mobi-mbri-protect:before {
326 | content: "\e963";
327 | }
328 | .mobi-mbri-question:before {
329 | content: "\e964";
330 | }
331 | .mobi-mbri-quote-left:before {
332 | content: "\e965";
333 | }
334 | .mobi-mbri-quote-right:before {
335 | content: "\e966";
336 | }
337 | .mobi-mbri-redo:before {
338 | content: "\e967";
339 | }
340 | .mobi-mbri-refresh:before {
341 | content: "\e968";
342 | }
343 | .mobi-mbri-responsive-2:before {
344 | content: "\e969";
345 | }
346 | .mobi-mbri-responsive:before {
347 | content: "\e96a";
348 | }
349 | .mobi-mbri-right:before {
350 | content: "\e96b";
351 | }
352 | .mobi-mbri-rocket:before {
353 | content: "\e96c";
354 | }
355 | .mobi-mbri-sad-face:before {
356 | content: "\e96d";
357 | }
358 | .mobi-mbri-sale:before {
359 | content: "\e96e";
360 | }
361 | .mobi-mbri-save:before {
362 | content: "\e96f";
363 | }
364 | .mobi-mbri-search:before {
365 | content: "\e970";
366 | }
367 | .mobi-mbri-setting-2:before {
368 | content: "\e971";
369 | }
370 | .mobi-mbri-setting-3:before {
371 | content: "\e972";
372 | }
373 | .mobi-mbri-setting:before {
374 | content: "\e973";
375 | }
376 | .mobi-mbri-share:before {
377 | content: "\e974";
378 | }
379 | .mobi-mbri-shopping-bag:before {
380 | content: "\e975";
381 | }
382 | .mobi-mbri-shopping-basket:before {
383 | content: "\e976";
384 | }
385 | .mobi-mbri-shopping-cart:before {
386 | content: "\e977";
387 | }
388 | .mobi-mbri-sites:before {
389 | content: "\e978";
390 | }
391 | .mobi-mbri-smile-face:before {
392 | content: "\e979";
393 | }
394 | .mobi-mbri-speed:before {
395 | content: "\e97a";
396 | }
397 | .mobi-mbri-star:before {
398 | content: "\e97b";
399 | }
400 | .mobi-mbri-success:before {
401 | content: "\e97c";
402 | }
403 | .mobi-mbri-sun:before {
404 | content: "\e97d";
405 | }
406 | .mobi-mbri-sun2:before {
407 | content: "\e97e";
408 | }
409 | .mobi-mbri-tablet-vertical:before {
410 | content: "\e97f";
411 | }
412 | .mobi-mbri-tablet:before {
413 | content: "\e980";
414 | }
415 | .mobi-mbri-target:before {
416 | content: "\e981";
417 | }
418 | .mobi-mbri-timer:before {
419 | content: "\e982";
420 | }
421 | .mobi-mbri-to-ftp:before {
422 | content: "\e983";
423 | }
424 | .mobi-mbri-to-local-drive:before {
425 | content: "\e984";
426 | }
427 | .mobi-mbri-touch-swipe:before {
428 | content: "\e985";
429 | }
430 | .mobi-mbri-touch:before {
431 | content: "\e986";
432 | }
433 | .mobi-mbri-trash:before {
434 | content: "\e987";
435 | }
436 | .mobi-mbri-underline:before {
437 | content: "\e988";
438 | }
439 | .mobi-mbri-undo:before {
440 | content: "\e989";
441 | }
442 | .mobi-mbri-unlink:before {
443 | content: "\e98a";
444 | }
445 | .mobi-mbri-unlock:before {
446 | content: "\e98b";
447 | }
448 | .mobi-mbri-up-down:before {
449 | content: "\e98c";
450 | }
451 | .mobi-mbri-up:before {
452 | content: "\e98d";
453 | }
454 | .mobi-mbri-update:before {
455 | content: "\e98e";
456 | }
457 | .mobi-mbri-upload-2:before {
458 | content: "\e98f";
459 | }
460 | .mobi-mbri-upload:before {
461 | content: "\e990";
462 | }
463 | .mobi-mbri-user-2:before {
464 | content: "\e991";
465 | }
466 | .mobi-mbri-user:before {
467 | content: "\e992";
468 | }
469 | .mobi-mbri-users:before {
470 | content: "\e993";
471 | }
472 | .mobi-mbri-video-play:before {
473 | content: "\e994";
474 | }
475 | .mobi-mbri-video:before {
476 | content: "\e995";
477 | }
478 | .mobi-mbri-watch:before {
479 | content: "\e996";
480 | }
481 | .mobi-mbri-website-theme-2:before {
482 | content: "\e997";
483 | }
484 | .mobi-mbri-website-theme:before {
485 | content: "\e998";
486 | }
487 | .mobi-mbri-wifi:before {
488 | content: "\e999";
489 | }
490 | .mobi-mbri-windows:before {
491 | content: "\e99a";
492 | }
493 | .mobi-mbri-zoom-in:before {
494 | content: "\e99b";
495 | }
496 | .mobi-mbri-zoom-out:before {
497 | content: "\e99c";
498 | }
499 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/webserver/template_website/digitalagency/swiper.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Swiper 8.4.5
3 | * Most modern mobile touch slider and framework with hardware accelerated transitions
4 | * https://swiperjs.com
5 | *
6 | * Copyright 2014-2022 Vladimir Kharlampidi
7 | *
8 | * Released under the MIT License
9 | *
10 | * Released on: November 21, 2022
11 | */
12 |
13 | @font-face{font-family:swiper-icons;src:url("");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:50%;background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader,.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-next+.swiper-slide,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-creative .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden}
--------------------------------------------------------------------------------
/webserver/template_website/socialmedia/css.css:
--------------------------------------------------------------------------------
1 | /* cyrillic-ext */
2 | @font-face {
3 | font-family: 'Cormorant';
4 | font-style: italic;
5 | font-weight: 300;
6 | font-display: swap;
7 | src: url("H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2") format('woff2');
8 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
9 | }
10 | /* cyrillic */
11 | @font-face {
12 | font-family: 'Cormorant';
13 | font-style: italic;
14 | font-weight: 300;
15 | font-display: swap;
16 | src: url("H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2") format('woff2');
17 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
18 | }
19 | /* vietnamese */
20 | @font-face {
21 | font-family: 'Cormorant';
22 | font-style: italic;
23 | font-weight: 300;
24 | font-display: swap;
25 | src: url("H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2") format('woff2');
26 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
27 | }
28 | /* latin-ext */
29 | @font-face {
30 | font-family: 'Cormorant';
31 | font-style: italic;
32 | font-weight: 300;
33 | font-display: swap;
34 | src: url("H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2") format('woff2');
35 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
36 | }
37 | /* latin */
38 | @font-face {
39 | font-family: 'Cormorant';
40 | font-style: italic;
41 | font-weight: 300;
42 | font-display: swap;
43 | src: url("H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2") format('woff2');
44 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
45 | }
46 | /* cyrillic-ext */
47 | @font-face {
48 | font-family: 'Cormorant';
49 | font-style: italic;
50 | font-weight: 400;
51 | font-display: swap;
52 | src: url("H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2") format('woff2');
53 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
54 | }
55 | /* cyrillic */
56 | @font-face {
57 | font-family: 'Cormorant';
58 | font-style: italic;
59 | font-weight: 400;
60 | font-display: swap;
61 | src: url("H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2") format('woff2');
62 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
63 | }
64 | /* vietnamese */
65 | @font-face {
66 | font-family: 'Cormorant';
67 | font-style: italic;
68 | font-weight: 400;
69 | font-display: swap;
70 | src: url("H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2") format('woff2');
71 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
72 | }
73 | /* latin-ext */
74 | @font-face {
75 | font-family: 'Cormorant';
76 | font-style: italic;
77 | font-weight: 400;
78 | font-display: swap;
79 | src: url("H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2") format('woff2');
80 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
81 | }
82 | /* latin */
83 | @font-face {
84 | font-family: 'Cormorant';
85 | font-style: italic;
86 | font-weight: 400;
87 | font-display: swap;
88 | src: url("H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2") format('woff2');
89 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
90 | }
91 | /* cyrillic-ext */
92 | @font-face {
93 | font-family: 'Cormorant';
94 | font-style: italic;
95 | font-weight: 500;
96 | font-display: swap;
97 | src: url("H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2") format('woff2');
98 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
99 | }
100 | /* cyrillic */
101 | @font-face {
102 | font-family: 'Cormorant';
103 | font-style: italic;
104 | font-weight: 500;
105 | font-display: swap;
106 | src: url("H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2") format('woff2');
107 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
108 | }
109 | /* vietnamese */
110 | @font-face {
111 | font-family: 'Cormorant';
112 | font-style: italic;
113 | font-weight: 500;
114 | font-display: swap;
115 | src: url("H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2") format('woff2');
116 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
117 | }
118 | /* latin-ext */
119 | @font-face {
120 | font-family: 'Cormorant';
121 | font-style: italic;
122 | font-weight: 500;
123 | font-display: swap;
124 | src: url("H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2") format('woff2');
125 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
126 | }
127 | /* latin */
128 | @font-face {
129 | font-family: 'Cormorant';
130 | font-style: italic;
131 | font-weight: 500;
132 | font-display: swap;
133 | src: url("H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2") format('woff2');
134 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
135 | }
136 | /* cyrillic-ext */
137 | @font-face {
138 | font-family: 'Cormorant';
139 | font-style: italic;
140 | font-weight: 600;
141 | font-display: swap;
142 | src: url("H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2") format('woff2');
143 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
144 | }
145 | /* cyrillic */
146 | @font-face {
147 | font-family: 'Cormorant';
148 | font-style: italic;
149 | font-weight: 600;
150 | font-display: swap;
151 | src: url("H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2") format('woff2');
152 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
153 | }
154 | /* vietnamese */
155 | @font-face {
156 | font-family: 'Cormorant';
157 | font-style: italic;
158 | font-weight: 600;
159 | font-display: swap;
160 | src: url("H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2") format('woff2');
161 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
162 | }
163 | /* latin-ext */
164 | @font-face {
165 | font-family: 'Cormorant';
166 | font-style: italic;
167 | font-weight: 600;
168 | font-display: swap;
169 | src: url("H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2") format('woff2');
170 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
171 | }
172 | /* latin */
173 | @font-face {
174 | font-family: 'Cormorant';
175 | font-style: italic;
176 | font-weight: 600;
177 | font-display: swap;
178 | src: url("H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2") format('woff2');
179 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
180 | }
181 | /* cyrillic-ext */
182 | @font-face {
183 | font-family: 'Cormorant';
184 | font-style: italic;
185 | font-weight: 700;
186 | font-display: swap;
187 | src: url("H4cjBXOCl9bbnla_nHIq6quyoqOOag.woff2") format('woff2');
188 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
189 | }
190 | /* cyrillic */
191 | @font-face {
192 | font-family: 'Cormorant';
193 | font-style: italic;
194 | font-weight: 700;
195 | font-display: swap;
196 | src: url("H4cjBXOCl9bbnla_nHIq6qu7oqOOag.woff2") format('woff2');
197 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
198 | }
199 | /* vietnamese */
200 | @font-face {
201 | font-family: 'Cormorant';
202 | font-style: italic;
203 | font-weight: 700;
204 | font-display: swap;
205 | src: url("H4cjBXOCl9bbnla_nHIq6quwoqOOag.woff2") format('woff2');
206 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
207 | }
208 | /* latin-ext */
209 | @font-face {
210 | font-family: 'Cormorant';
211 | font-style: italic;
212 | font-weight: 700;
213 | font-display: swap;
214 | src: url("H4cjBXOCl9bbnla_nHIq6quxoqOOag.woff2") format('woff2');
215 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
216 | }
217 | /* latin */
218 | @font-face {
219 | font-family: 'Cormorant';
220 | font-style: italic;
221 | font-weight: 700;
222 | font-display: swap;
223 | src: url("H4cjBXOCl9bbnla_nHIq6qu_oqM.woff2") format('woff2');
224 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
225 | }
226 | /* cyrillic-ext */
227 | @font-face {
228 | font-family: 'Cormorant';
229 | font-style: normal;
230 | font-weight: 300;
231 | font-display: swap;
232 | src: url("H4clBXOCl9bbnla_nHIq4pu9uqc.woff2") format('woff2');
233 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
234 | }
235 | /* cyrillic */
236 | @font-face {
237 | font-family: 'Cormorant';
238 | font-style: normal;
239 | font-weight: 300;
240 | font-display: swap;
241 | src: url("H4clBXOCl9bbnla_nHIq65u9uqc.woff2") format('woff2');
242 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
243 | }
244 | /* vietnamese */
245 | @font-face {
246 | font-family: 'Cormorant';
247 | font-style: normal;
248 | font-weight: 300;
249 | font-display: swap;
250 | src: url("H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2") format('woff2');
251 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
252 | }
253 | /* latin-ext */
254 | @font-face {
255 | font-family: 'Cormorant';
256 | font-style: normal;
257 | font-weight: 300;
258 | font-display: swap;
259 | src: url("H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2") format('woff2');
260 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
261 | }
262 | /* latin */
263 | @font-face {
264 | font-family: 'Cormorant';
265 | font-style: normal;
266 | font-weight: 300;
267 | font-display: swap;
268 | src: url("H4clBXOCl9bbnla_nHIq75u9.woff2") format('woff2');
269 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
270 | }
271 | /* cyrillic-ext */
272 | @font-face {
273 | font-family: 'Cormorant';
274 | font-style: normal;
275 | font-weight: 400;
276 | font-display: swap;
277 | src: url("H4clBXOCl9bbnla_nHIq4pu9uqc.woff2") format('woff2');
278 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
279 | }
280 | /* cyrillic */
281 | @font-face {
282 | font-family: 'Cormorant';
283 | font-style: normal;
284 | font-weight: 400;
285 | font-display: swap;
286 | src: url("H4clBXOCl9bbnla_nHIq65u9uqc.woff2") format('woff2');
287 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
288 | }
289 | /* vietnamese */
290 | @font-face {
291 | font-family: 'Cormorant';
292 | font-style: normal;
293 | font-weight: 400;
294 | font-display: swap;
295 | src: url("H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2") format('woff2');
296 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
297 | }
298 | /* latin-ext */
299 | @font-face {
300 | font-family: 'Cormorant';
301 | font-style: normal;
302 | font-weight: 400;
303 | font-display: swap;
304 | src: url("H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2") format('woff2');
305 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
306 | }
307 | /* latin */
308 | @font-face {
309 | font-family: 'Cormorant';
310 | font-style: normal;
311 | font-weight: 400;
312 | font-display: swap;
313 | src: url("H4clBXOCl9bbnla_nHIq75u9.woff2") format('woff2');
314 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
315 | }
316 | /* cyrillic-ext */
317 | @font-face {
318 | font-family: 'Cormorant';
319 | font-style: normal;
320 | font-weight: 500;
321 | font-display: swap;
322 | src: url("H4clBXOCl9bbnla_nHIq4pu9uqc.woff2") format('woff2');
323 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
324 | }
325 | /* cyrillic */
326 | @font-face {
327 | font-family: 'Cormorant';
328 | font-style: normal;
329 | font-weight: 500;
330 | font-display: swap;
331 | src: url("H4clBXOCl9bbnla_nHIq65u9uqc.woff2") format('woff2');
332 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
333 | }
334 | /* vietnamese */
335 | @font-face {
336 | font-family: 'Cormorant';
337 | font-style: normal;
338 | font-weight: 500;
339 | font-display: swap;
340 | src: url("H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2") format('woff2');
341 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
342 | }
343 | /* latin-ext */
344 | @font-face {
345 | font-family: 'Cormorant';
346 | font-style: normal;
347 | font-weight: 500;
348 | font-display: swap;
349 | src: url("H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2") format('woff2');
350 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
351 | }
352 | /* latin */
353 | @font-face {
354 | font-family: 'Cormorant';
355 | font-style: normal;
356 | font-weight: 500;
357 | font-display: swap;
358 | src: url("H4clBXOCl9bbnla_nHIq75u9.woff2") format('woff2');
359 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
360 | }
361 | /* cyrillic-ext */
362 | @font-face {
363 | font-family: 'Cormorant';
364 | font-style: normal;
365 | font-weight: 600;
366 | font-display: swap;
367 | src: url("H4clBXOCl9bbnla_nHIq4pu9uqc.woff2") format('woff2');
368 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
369 | }
370 | /* cyrillic */
371 | @font-face {
372 | font-family: 'Cormorant';
373 | font-style: normal;
374 | font-weight: 600;
375 | font-display: swap;
376 | src: url("H4clBXOCl9bbnla_nHIq65u9uqc.woff2") format('woff2');
377 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
378 | }
379 | /* vietnamese */
380 | @font-face {
381 | font-family: 'Cormorant';
382 | font-style: normal;
383 | font-weight: 600;
384 | font-display: swap;
385 | src: url("H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2") format('woff2');
386 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
387 | }
388 | /* latin-ext */
389 | @font-face {
390 | font-family: 'Cormorant';
391 | font-style: normal;
392 | font-weight: 600;
393 | font-display: swap;
394 | src: url("H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2") format('woff2');
395 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
396 | }
397 | /* latin */
398 | @font-face {
399 | font-family: 'Cormorant';
400 | font-style: normal;
401 | font-weight: 600;
402 | font-display: swap;
403 | src: url("H4clBXOCl9bbnla_nHIq75u9.woff2") format('woff2');
404 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
405 | }
406 | /* cyrillic-ext */
407 | @font-face {
408 | font-family: 'Cormorant';
409 | font-style: normal;
410 | font-weight: 700;
411 | font-display: swap;
412 | src: url("H4clBXOCl9bbnla_nHIq4pu9uqc.woff2") format('woff2');
413 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
414 | }
415 | /* cyrillic */
416 | @font-face {
417 | font-family: 'Cormorant';
418 | font-style: normal;
419 | font-weight: 700;
420 | font-display: swap;
421 | src: url("H4clBXOCl9bbnla_nHIq65u9uqc.woff2") format('woff2');
422 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
423 | }
424 | /* vietnamese */
425 | @font-face {
426 | font-family: 'Cormorant';
427 | font-style: normal;
428 | font-weight: 700;
429 | font-display: swap;
430 | src: url("H4clBXOCl9bbnla_nHIq4Ju9uqc.woff2") format('woff2');
431 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
432 | }
433 | /* latin-ext */
434 | @font-face {
435 | font-family: 'Cormorant';
436 | font-style: normal;
437 | font-weight: 700;
438 | font-display: swap;
439 | src: url("H4clBXOCl9bbnla_nHIq4Zu9uqc.woff2") format('woff2');
440 | unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
441 | }
442 | /* latin */
443 | @font-face {
444 | font-family: 'Cormorant';
445 | font-style: normal;
446 | font-weight: 700;
447 | font-display: swap;
448 | src: url("H4clBXOCl9bbnla_nHIq75u9.woff2") format('woff2');
449 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
450 | }
451 |
--------------------------------------------------------------------------------