├── 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 | ![banner](assets/banner.png) 2 | 3 | 4 | ![Python minimum version](https://img.shields.io/badge/Python-3.10%2B-brightgreen) 5 | 6 | ![Not compatible with version](https://img.shields.io/badge/Python-3.12-red) Not supported (for now?) 7 | 8 | ![WSL](https://img.shields.io/badge/WSL-2-blue) 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 | 2 | 3 | 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 | --------------------------------------------------------------------------------