From 8207999205d59b34e23e041fa776fa33d9fa5562 Mon Sep 17 00:00:00 2001 From: marc barry <10514522+marcbarry@users.noreply.github.com> Date: Sat, 31 Oct 2020 20:45:31 +0000 Subject: [PATCH 01/22] restyle to match new website --- _config.yml | 3 +- _includes/nav.html | 6 +- css/enclave.scss | 1777 ++++------------------------------- img/enclave-header-logo.png | Bin 2013 -> 1099 bytes img/enclave-logo.png | Bin 2020 -> 992 bytes 5 files changed, 190 insertions(+), 1596 deletions(-) diff --git a/_config.yml b/_config.yml index d3dfe21..38dab67 100644 --- a/_config.yml +++ b/_config.yml @@ -1,7 +1,6 @@ title: Enclave -host: 0.0.0.0 +host: 0.0.0.0 port: 80 -url: https://docs.enclave.io markdown: kramdown highlighter: rouge diff --git a/_includes/nav.html b/_includes/nav.html index 63415d2..5e54281 100644 --- a/_includes/nav.html +++ b/_includes/nav.html @@ -3,7 +3,7 @@
- Enclave + Enclave diff --git a/css/enclave.scss b/css/enclave.scss index 66ef6c8..294e77a 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -6,7 +6,7 @@ $font-roboto: "Roboto"; $font-opensans: "Open Sans", "Helvetica"; $white: #FFFFFF; -$sky: #419AD5; +$sky: #a60b0b; $arctic: #71B8E2; $href: #008cde; @@ -347,17 +347,10 @@ nav.navbar { } } - a:hover, - a:focus, - span:hover, - span:focus { - color: $white; - } - a.btn-download { color: $white; - background: #2C85C0; - border-radius: 0; + background: #BE0D0D; + border-radius: 2px; font-weight: bold; font-size: 10px; padding: 3px 9px 1px 9px; @@ -371,7 +364,7 @@ nav.navbar { } a.btn-login:hover { - color: $white; + color: inherit; } .hover { @@ -582,7 +575,6 @@ nav.navbar { } .navbar-default { - border-color: transparent; /* also set in enclave.page_load.js */ /*background-color: #1a2533;*/ @@ -590,26 +582,28 @@ nav.navbar { top: 0; z-index: 1; width: 100%; - background: #131416; /* #2a2b30;*/ + background: #fff; /* #2a2b30;*/ + border-color: transparent; border-radius: 0; border: 0; + border-bottom: solid 1px #dddfe1; .navbar-toggle { margin: 14px 10px 0 0; border-radius: 0; background-color: transparent; border: none; - color: $white; + color: #000; font-size: 28px; } .navbar-toggle:hover { - background-color: #404040; + color: #BE0D0D; } .navbar-toggle:focus { background-color: transparent; - color: $white; + color: #BE0D0D; } } @@ -627,24 +621,18 @@ nav.navbar { line-height: 11px; } -/************************************************************************************/ -/************************************************************************************/ -/************************************************************************************/ -/************************************************************************************/ - #section-hero-container { text-align: center; - background: linear-gradient(60deg, #291675, #005279); + background: #f3f3f3; position: relative; padding: 70px 0 0 0; #hero { - padding: 48px 0; - user-select: none; + padding: 70px 0; h1 { border: none; - color: #fff; + color: #333; padding: 0; font-size: 26pt; line-height: 40pt; @@ -654,7 +642,7 @@ nav.navbar { } p { - color: #e9f4f9; + color: #666; font-family: $font-body; font-size: 16pt; max-width: 530px; @@ -663,18 +651,6 @@ nav.navbar { padding: 0 20px; } } - - #hero::after { - content: ''; - display: block; - height: 100%; - width: 100%; - top: 0; - left: 0; - position: absolute; - background: url('/img/diagmonds-light.png'); /* https://www.transparenttextures.com/ */ - opacity: 0.19; - } } #section-cta { @@ -691,30 +667,34 @@ nav.navbar { #footer { - background-color: #2C2D34; + background-color: #000; color: #dcdbdb; - padding: 16px 0 38px 0; + padding: 140px 0; + font-family: $font-roboto; .heading { line-height: 28pt; margin-top: 10px; - margin-bottom: 10px; - font-family: $font-opensans; - font-size: 13px; - color: #fefefe; - padding: 18px 0 0 0; - font-weight: bold; + margin-bottom: 16px; + font-size: 14px; + color: rgba(255,255,255,0.5) !important; + padding: 18px 0 0 0; + text-transform: uppercase; } ul { list-style-type: none; - padding-left: 0; + padding-left: 0; + + li { + margin: 0 0 14px 0; + } } a { - font-family: $font-opensans; - font-size: 13px; - color: #A9D3E7; + font-size: 14px; + color: #fff; + line-height: 21px; } #social { @@ -724,7 +704,7 @@ nav.navbar { li { display: inline; - margin-left: 16px; + margin-left: 16px; } li a { @@ -741,7 +721,7 @@ nav.navbar { margin: 26px 0 8px 0; img { - width: 120px; + width: 200px; height : auto; user-select: none; } @@ -753,10 +733,10 @@ nav.navbar { p { margin: 0; padding: 0; - font-size: 12px; + font-size: 14px; font-family: inherit; - color: #999; - line-height: 1.8; + color: #fff; + line-height: 24.5px; strong { color: #d4d4d4; @@ -769,7 +749,7 @@ nav.navbar { } #copyright { - font-size: 12px; + font-size: 14px; color: #999; strong { @@ -778,135 +758,6 @@ nav.navbar { } } -#modal-contact-form-window { - background: #fff; - filter: alpha(opacity=100); - opacity: 1; - - #enquiryFormContainer { - background: #fff; - padding: 40px; - - h1 { - color: #333; - font-size: 26pt; - padding: 0 0 2px 0; - } - - input, select, textarea { - line-height: 1.2em; - color: #333e48; - border: 1px solid #d0d2d3; - border-radius: 3px; - background-color: white; - font-size: 13px; - font-weight: 400; - padding: 10px; - width: 100%; - margin-bottom: 8px; - resize: none; - } - - input, select { - height: 39px; - } - - button { - margin: 20px 10px 0 0; - font-size: 11px; - width: 100%; - max-width: 250px; - height: 49px; - line-height: 40px; - } - - label { - display: block; - margin: 10px 0 5px 0; - font-weight: normal; - } - - h1, - h2, - p, - .submit-button { - text-align: center; - } - } - - #thanks { - text-align: center; - margin: 40px 0 0 0; - display: none; - - .content { - - img { - user-select: none; - width: 150px; - } - - h1 { - margin: 60px 0 0 0; - } - - h2.next { - margin: 40px 0 0 0; - font-weight: 100; - } - - p.attribution { - user-select: none; - font-size: 12px; - } - } - } -} - -#modal-company-careers-apply-window { - background: #fff; - filter: alpha(opacity=100); - opacity: 1; - - .content { - padding: 40px 30px 40px 30px; - - p { - line-height: 26px; - font-size: 14px; - } - - ul { - margin: 10px 0 30px 0; - - li { - strong { - font-size: 14px; - display: inline-block; - width: 80px; - } - } - } - - .centered { - margin: 0 auto; - text-align: center; - } - - a { - button { - margin: 30px 0 0 0; - width: 200px; - height: 50px; - } - } - - img { - user-select: none; - } - } -} - /************************************************************************************/ /************************************************************************************/ /************************************************************************************/ @@ -1111,1427 +962,173 @@ nav.navbar { padding: 15px 0 0 0; margin: -40px auto 38px auto; - border-radius: 50%; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - } - - .fa-connectdevelop { - background-color: #006f8c; - padding-top: 16px; - } - - .fa-sliders { - background-color: #005f8c; - } - - .fa-cloud { - background-color: #00488c; - padding-top: 16px; - } - } - - p { - font-size: 14px; - line-height: 26px; - } - - &::after { - content: ''; - position: absolute; - width: 1px; - height: 100%; - top: 0; - right: 0; - } - } - - .card-container:last-child:after { - border: none; - display:none; - } - } - } - - #section-devops { - background-color: #fff; - text-align: left; - padding: 120px 0; - - h1 { - margin: 14px 0 40px 0; - font-size: 30px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - img { - user-select: none; - } - } - - #section-tax { - background-color: #f3f3f3; - padding: 120px 0; - - img { - user-select: none; - } - - h1 { - margin: 14px 0 40px 0; - font-size: 26px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - .image-container { - text-align: right; - - img { - margin: 122px 0 0 0; - } - } - } - - #section-connection-overview { - padding: 120px 0; - - h1 { - margin: 14px 0 40px 0; - font-size: 26px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - img { - user-select: none; - margin: 62px 0 0 0; - } - } - - #section-get-started { - background: #AA076B; /* fallback for old browsers */ - background: -webkit-linear-gradient(to right, #AA076B, #61045F); /* Chrome 10-25, Safari 5.1-6 */ - background: linear-gradient(to right, #AA076B, #61045F); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ - padding: 110px 0; - - #try-it-container { - margin: 0 auto; - padding: 20px; - font-size: 1.6rem; - line-height: 1.3em; - background: #fff; - border-radius: 6px; - box-shadow: 0 0 1px rgba(0,0,0,.1), 0 2px 6px rgba(0,0,0,.03); - - p { - padding: 11px 0; - font-size: 15px; - font-family: $font-opensans; - margin: 0; - line-height: 28px; - } - - button { - height: 49px; - width: 100%; - display: inline-block; - max-width: 250px; - } - } - } - - #section-cta { - background-color: #f3f3f3; - padding: 110px 0; - text-align: center; - - button { - margin: 20px 0 0 0; - font-size: 11px; - width: 200px; - height: 52px; - } - } -} - -#solutions { - display: flex; - min-height: 100vh; - - .left { - background-color: #F3F3F3; - float: left; - } - - .right { - background-color: white; - min-height: 100%; - width: 100%; - padding: 0; - } - - h1 { - color: #333; - font-size: 3em; - line-height: 1.5em; - margin: 0 60px; - } - - h2 { - color: #676767; - margin: 8px 60px 14px 60px; - line-height: 1.8em; - } - - #message { - img { - margin: 180px 60px 60px 62px; - user-select: none; - } - - h2 { - max-width: 630px; - font-weight: 100; - } - } - - #overlayCanvas { - min-height: 400px; - width: 100%; - padding: 0; - } - - #enquiryForm { - max-width: 720px; - margin: 0 auto; - padding: 0 30px; - - h1 { - max-width: 1720px; - color: #333; - font-size: 26pt; - padding: 0; - margin: 100px 0 0 0; - } - - h2 { - padding: 0 0 30px 0; - font-weight: 100; - } - - input, select, textarea { - line-height: 1.2em; - color: #333e48; - border: 1px solid #d0d2d3; - border-radius: 3px; - background-color: white; - font-size: 13px; - font-weight: 400; - padding: 10px; - width: 100%; - margin-bottom: 8px; - resize: none; - } - - input, select { - height: 39px; - } - - button { - margin: 40px 10px 100px 0; - font-size: 11px; - width: 100%; - max-width: 250px; - height: 49px; - line-height: 40px; - } - - label { - display: block; - margin: 10px 0 5px 0; - font-weight: normal; - } - - h1, - h2, - p, - .submit-button { - text-align: center; - } - - .row { - position: relative; - } - - .submit-button { - text-align: left; - } - } - - #thanks { - text-align: center; - margin: 40px 0 0 0; - display: none; - - .content { - - img { - user-select: none; - width: 150px; - } - - h1 { - margin: 60px 0 0 0; - } - - h2.next { - margin: 40px 0 0 0; - font-weight: 100; - } - - p.attribution { - user-select: none; - font-size: 12px; - } - } - } -} - -#features { - padding: 70px 0 0 0; -} - -#pricing { - - #hero { - - h1, h2, h3 { - border: none; - } - - h1 { - color: #fff; - margin: 100px auto 8px auto; - padding: 0; - font-size: 26pt; - line-height: 40pt; - font-family: $font-heading; - text-align: left; - } - - h2 { - margin: 0 0 0 0; - padding: 0; - color: #e9f4f9; - font-size: 16pt; - font-family: $font-body; - font-weight: 300; - line-height: 34px; - text-align: left; - max-width: 560px; /* wrap text at a specific break-point without an obvious line break at lower width resolutions */ - - strong { - font-weight: 600; - color: #eee; - } - } - - #product-img { - background-image: url('/img/enclave-screenshot.png'); - background-repeat: no-repeat; - background-size: contain; - float: right; - right: 0; - display: block; - width: 460px; - height: 276px; - margin: 50px 0 0 0; - z-index: 2; - box-shadow: 0 4px 6px rgba(0,0,0,0.15); - } - - #content { - z-index: 1; - } - - #pricingButton { - - text-align: left; - margin: 20px 0 0 0; - - button { - padding: 14px 0 20px 0; - margin: 0 10px 0 0; - font-size: 11px; - width: 250px; - } - - button i { - font-size: 23px; - margin-right: 8px; - position: relative; - top: 4px; - } - } - - ul.tabs { - - position: relative; - bottom: -2px; - border-bottom: 1px solid transparent; - margin: 70px 0 0 0; - - li { - font-size: 14pt; - padding: 15px 45px; - border-radius: 5px 5px 0 0; - border: 1px solid transparent; - } - - li.current { - background: #F1F3F4; - border-top: 1px solid #E1E3E4; - border-left: 1px solid #E1E3E4; - border-right: 1px solid #E1E3E4; - border-bottom: 1px solid #F1F3F4; - color: #222222; - - .fa { - color: #C80D73; - } - } - - .fa { - color: #656565; - } - } - - .tab-content { - padding: 15px; - } - - .fa { - font-size: 13pt; - margin: 0 8px 0 0; - } - } - - h1, h2, h3 { - border: none; - } - - h2, h3 { - font-family: $font-body; - text-align: center; - } - - h1 { - font-size: 32pt; - padding-bottom: 7px; - } - - h2 { - margin-top: 50px; - margin-bottom: 25px; - - font-size: 22pt; - font-weight: 600; - padding: 26px 0 3px 0; - } - - h3 { - max-width: 760px; - margin: 6px auto 30px auto; - } - - #section-packages { - - background-color: #F1F3F4; - overflow: hidden; - position: relative; - padding: 0 0 90px 0; - position: relative; - - &:before { - content: ""; - width: 2000px; - height: 360px; - background: linear-gradient(90deg, #1dacfc, #1567fe); - position: absolute; - display: block; - top: 460px; - left: 0; - transform: skewY(-14deg); - } - - .pricingTable { - - text-align: center; - border-radius: 5px; - margin-top: 60px; - box-shadow: 0px 0px 8px 0px rgba(27,31,35,0.05); - position: relative; - background-color: #FFFFFF; - - h3 { - margin-top: 6px; - font-size: 18pt; - line-height: 20pt; - font-weight: 400; - } - - button { - - padding: 20px 0; - width: 76%; - margin: 0 20px 40px 20px; - font-size: 11px; - max-width: 250px; - - i { - font-size: 23px; - margin-right: 8px; - position: relative; - top: 4px; - } - } - - &:hover { - transform: scale(1.02); - } - - &.dark { - background-color: #222222; - } - - .fa { - margin: 14px 0 8px 0; - } - - .pricingTable-header { - /* border-bottom: 1px solid #F1F2F4;*/ - padding: 28px 0 0 0; - margin: 0 20px; - - h2 { - color: $sky; - border-bottom: none; - margin: 0; - padding: 0; - font-family: $font-body; - font-size: 26px; - letter-spacing: .02em; - text-transform: uppercase; - } - } - - .pricingContent { - - .sliderContainer { - - margin: 26px auto 2px auto; - position: relative; - padding: 7px; - max-width: 300px; - border-radius: 5px; - background: #f3f3f3; - - .quantityDropDown { - padding: 9px 6px 8px 6px; - font-family: $font-roboto; - font-size: 16px; - border-radius: 4px; - border: 1px solid #ddd; - background: #ffffff; - width: 100%; - margin: 0 0 5px 0; - } - - .sliderSelection { - background: transparent; - border: none; - font-family: $font-roboto; - margin: 12px 0; - font-size: 16px; - width: 100%; - padding: 0 4px; - text-align: center; - } - - .slider { - background: #eee; - border-radius: 3px; - padding: 0px; - width: 140px; - margin: 0 auto 16px auto; - } - - h3 { - font-size: 39px; - font-weight: 600; - margin: 1px; - background: #fff; - padding: 17px 0 10px 0; - border-radius: 4px; - } - - } - - .pricing-quantity-note { - p { - margin: 0 auto 45px 0; - padding: 0; - color: #666; - font-size: 14px; - font-family: $font-body; - font-weight: 300; - line-height: 34px; - } - } - - .meta-container { - - min-height: 150px; - margin-bottom: 20px; - - p { - font-size: 15px; - line-height: 24px; - padding: 0 26px 12px 26px; - margin: 0; - } - } - - .price-qualification { - font-size: 11pt; - font-weight: bold; - font-family: $font-heading; - user-select: none; - } - - .includes { - font-size: 14px; - font-weight: 600; - color: #444; - margin: 0; - padding: 28px 0 6px 0; - } - - ul { - padding: 0; - margin: 0; - list-style: none; - } - - ul li:first-child { - border-top: 1px solid #F1F2F4; - } - - ul li:last-child { - border-bottom: none; - } - - ul li { - font-size: 14px; - color: #878787; - padding: 13px 10px; - margin: 0 20px; - border-bottom: 1px solid #F1F2F4; - text-align: left; - } - - ul li i { - margin: 0 10px 0 0; - font-style: italic; - color: #35B313; - font-size: 10pt; - } - } - } - - #comparison-table { - - .panel-group { - - .panel { - border: none; - box-shadow: none; - background-color: transparent; - margin-top: 25px; - - .panel-heading { - border-bottom: 1px solid #C5C6C8; - background-color: #D5D7D8; - position: relative; - - i { - position: absolute; - top: 16px; - right: 16px; - color: #0F1114; - } - - h4 { - font-size: 13pt; - font-weight: bold; - font-family: $font-heading; - color: #0F1114; - border-bottom: none; - } - - h4:hover { - text-decoration: underline; - } - - a:hover, a:focus { - text-decoration: none; - } - } - - .panel-title { - border: none; - position: relative; - } - - .panel-body { - border: none; - background-color: #FFFFFF; - - .heading { - text-align: center; - color: #419AD5; - border-bottom: none; - font-family: $font-body; - font-size: 12pt; - letter-spacing: .02em; - font-weight: bold; - } - - .row { - border-top: 1px solid #F1F2F4; - padding: 14px 0 6px 0; - display: flex; /* vertical alignment */ - } - - .row:first-child{ - border-top: none; - } - - .row:last-child { - padding: 14px 0 0 0; - } - - .feature { - text-align: left; - - h5 { - margin: 3px 40px 0 0; - padding: 0; - color: rgb(64, 64, 64); - font-family: Helvetica; - font-size: 14px; - font-weight: 700; - line-height: 20px; - } - - p { - font-size: 15px; - line-height: 1.5em; - padding: 12px 0 8px 0; - margin: 0 40px 0 0; - } - } - - .included { - font-family: $font-opensans; - font-size: 12px; - padding-bottom: 6px; - line-height: 19px; - - display: flex; /* vertical alignment */ - align-items: center; /* vertical alignment */ - justify-content: center; /* horizontal alignment */ - text-align: center; /* horizontal text alignment */ - - .fa { - font-size: 12pt; - color: #6AB94F; - } - } - - .left { - text-align: left; - } - - .topleft { - font-family: $font-opensans; - font-size: 12px; - padding-bottom: 6px; - line-height: 19px; - text-align: left; - } - } - } - } - } - } - - #section-faq { - padding: 0 0 80px 0; - - h2 { - margin: 50px 0 20px 0; - } - - h3 { - margin: 36px 0 6px 0; - text-align: left; - line-height: 20pt; - } - - p { - font-family: $font-opensans; - font-size: 12px; - line-height: 2em; - padding: 6px 0 3px 0; - } - } - - .mostPopular { - font-size: 11px; - text-transform: uppercase; - padding: 8px 16px; - line-height: 1em; - border-radius: 2px; - margin-left: 10px; - background: #CE2173; - color: #FFFFFF; - position: absolute; - top: -14px; - left: 50%; - margin-left: -55px; - user-select: none; - } - - .fa { - font-size: 20pt; - } - - h2.compare-features { - margin: 100px 0 30px 0; - } -} - -#roadmap { - #section-roadmap { - padding: 0 0 100px 0; - - /* hack for equal height columns. thanks https://stackoverflow.com/questions/19695784/how-can-i-make-bootstrap-columns-all-the-same-height */ - .row{ - overflow: hidden; - } - - [class*="col-"]{ - margin-bottom: -99999px; - padding-bottom: 99999px; - } - - h2 { - margin: 80px 0 20px 0; - font-family: $font-heading; - font-size: 26px; - } - - h3 { - text-decoration: none; - border: none; - margin: 10px; - font-weight: bold; - } - - #intro { - margin: 0 0 80px 0; - max-width: 900px; - } - - .dashed-borders { - border-left: 1px dashed #dcdcdc; - border-right: 1px dashed #dcdcdc; - } - - .card { - border-radius: 4px; - background: #fff; - border: 1px solid #dcdcdc; - margin: 10px 10px 20px 10px; - padding: 20px; - - .title { - margin: 30px 0 6px 0; - font-weight: bold; - font-size: 13px; - color: #333; - text-transform: uppercase; - letter-spacing: 0; - font-family: $font-opensans; - } - - .tags { - user-select: none; - line-height: 26px; - - .tag::after { - padding: 5px 10px 5px 10px; - border-radius: 4px; - font-size: 11px; - color: #444; - } - - .feature::after { - content: 'Feature'; - background-color: #ffe18a; - } - - .enterprise::after { - content: 'Enterprise'; - background-color: #ffa0a0; - } - .integrations::after { - content: 'Integrations'; - background-color: #d5f584; - } - .engagement::after { - content: 'Engagement'; - background-color: #a7daff; - } - .advanced::after { - content: 'Advanced Usage'; - background-color: #d39aff; - } - .delight::after { - content: 'Delight'; - background-color: #b0eacd; - } - } - - p { - font-size: 14px; - line-height: 25px; - } - } - - } -} - -#careers { - #section-hero-container { - background: #fff; - background: url('/img/plexal-1.jpg'); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; - - #hero { - padding: 48px 0; - height: 330px; - } - - #hero::after { - content: ''; - display: none; - } - } - - #section-careers-about { - padding: 80px 0; - - #open-roles-container { - h1 { - padding: 0; - } - - hr { - margin: 0 0 60px 0; - height: 1px; - border: 0; - border-top: 1px solid #eee; - } - - h2 { - font-family: "Lato"; - font-size: 24px; - margin: 0 0 12px 0; - } - - p { - margin: 0 0 18px 0; - } - - ul { - list-style: none; - padding: 0; - margin: 0 0 110px 0; - - li { - margin: 0 0 8px 0; - position: relative; - - a { - display: block; - padding: 8px 14px; - border: 1px solid #f3f3f3; - border-radius: 6px; - - .role-name { - font-weight: 400; - padding-top: 5px; - font-size: 15px; - color: #444; - } - - .role-location { - text-transform: uppercase; - font-family: "Open Sans"; - font-size: 11px; - color: #6A7182; - } - - .role-type { - text-align: right; - text-transform: uppercase; - font-family: "Open Sans"; - font-size: 11px; - color: #6A7182; - } - - .role-go { - i { - position: absolute; - border: solid #6A7182; - border-width: 0 2px 2px 0; - display: inline-block; - padding: 2px; - transition: all 0.2s ease; - left: 16px; - top: 11px; - - transform: rotate(-45deg); - -webkit-transform: rotate(-45deg); - } - } - } - - a:hover, - a:focus { - text-decoration: none; - background-color: #fafafa; - - span { - color: $href; - } - - i { - border: solid $href; - border-width: 0 2px 2px 0; - } - - .role-go{ - i { - left: 21px; - } - } - } - } - } - } - } - - #section-careers-role-heading { - background-color: #f5f7fa; - padding: 130px 0 0 0; - - #breadcrumb { - background-color: #fff; - border: 1px solid #eaeaea; - box-shadow: 0 0px 15px 0 rgba(0,0,0,0.02); - } - - #position-type { - text-transform: uppercase; - letter-spacing: 0.05em; - font-size: 11px; - font-weight: bold; - font-family: "Open Sans","Helvetica"; - color: #717171; - margin: 30px 20px 0 20px; - padding: 0; - } - - #position-name { - margin: 30px 20px 0 20px; - } - - #position-summary-container { - position: relative; - letter-spacing: 0.05em; - font-size: 14px; - font-weight: normal; - font-family: "Open Sans","Helvetica"; - color: #717171; - margin: 10px 20px 60px 20px; - padding: 0; - - span { - position: absolute; - top: 1px; - left: 30px; - letter-spacing: 0em; - } - - h2 { - font-size: 16px; - font-family: $font-roboto; - font-weight: normal; - border: none; - padding: 0; - line-height: 24pt; - color: #555; - max-width: 900px; - margin: 50px 0 0 0; - letter-spacing: 0; - } - } - - #candidate-statement { - margin: 50px 0 0 0; - } - - #company-overview { - margin: 30px 0 0 0; - } - } - - #section-careers-role { - margin: 80px auto 300px auto; - - h1, h2, h3, h4 { - border: none; - } - - p, - li { - color: #666; - font-size: 16px; - font-family: "Roboto"; - font-weight: 300; - line-height: 32px; - } - - h3 { - color: #555; - margin: 0 auto 12px auto; - padding: 0; - font-size: 24px; - font-family: "Lato"; - border: none; - line-height: 40pt; - font-weight: 700; - } - - ul, - ol { - margin: 0 auto 30px auto; - - li { - margin: 10px 0; - max-width: 90%; - } - } - - .apply-bar-window { - background-color: #f5f7fa; - border-radius: 6px; - padding: 22px 30px 26px 30px; - margin: 0 0 26px 0; - - h3 { - text-transform: uppercase; - letter-spacing: 0.05em; - font-size: 11px; - font-weight: bold; - font-family: "Open Sans","Helvetica"; - color: #717171; - margin: 0; - padding: 0; - } - - ul { - margin: 16px 0 6px 0px; - padding: 8px 0 8px 26px; - } - - p { - margin: 16px 0 0 0; - padding: 0; - } - - p, - ul > li { - color: #666; - font-size: 14px; - font-family: "Roboto"; - font-weight: 300; - line-height: 28px; - } - - button { - width: 100%; - height: 50px; - } - } + border-radius: 50%; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + } - .role-section { - padding: 30px; - } - } -} + .fa-connectdevelop { + background-color: #006f8c; + padding-top: 16px; + } -#about { - #section-hero-container { - #hero { - top: 120px; - } - - #background { - height: 240px; - } - } + .fa-sliders { + background-color: #005f8c; + } - #section-company { - background-color: #f5f7fa; - padding: 20px 0 0 0; - - h1 { - margin-top: 46px; - } + .fa-cloud { + background-color: #00488c; + padding-top: 16px; + } + } - .whitebox { - background-color: #ffffff; - border-radius: 8px; - padding: 20px 20px 20px 20px; - margin: 60px 0 30px 50px; - box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.01); - border: 1px solid #efefef; + p { + font-size: 14px; + line-height: 26px; + } - p { - font-size: 15px; - line-height: 26px; + &::after { + content: ''; + position: absolute; + width: 1px; + height: 100%; + top: 0; + right: 0; + } } - p:last-child { - margin: 0; - } - - .imprint { - min-width: 100px; - display: inline-block; + .card-container:last-child:after { + border: none; + display:none; } } + } - .particulars { - p { - font-size: 13px; - } - } + #section-devops { + background-color: #fff; + text-align: left; + padding: 120px 0; - #registered-office { - padding: 20px; - margin: 10px 0 0 50px; - - p { - font-size: 14px; - line-height: 26px; + h1 { + margin: 14px 0 40px 0; + font-size: 30px; + font-weight: 400; + line-height: 33pt; + font-family: $font-body; + + em { + font-weight: 700; + font-size: 36px; + font-style: normal; + font-family: $font-heading; } } - #team, - #advisers { - margin: 50px 0 50px 0; - - ul { - list-style: none; - margin: 0; - padding: 0; - } + img { + user-select: none; + } + } - li { - display: inline-block; - padding: 16px 46px 16px 0; - text-align: center; - } + #section-tax { + background-color: #f3f3f3; + padding: 120px 0; - img { - width: 135px; - height: 135px; - border-radius: 4px; - filter: grayscale(100%); - } - - img:hover { - filter: grayscale(30%); - } - - h2 { - margin: 20px 0 2px 0; - padding: 0; - line-height: normal; - } - - p { - margin: 0; - padding: 0; - line-height: normal; - } + img { + user-select: none; } - #advisers { - margin: 50px 0 100px 0; - - li { - text-align: left; - - h2 { - margin: 20px 0 8px 0; - } + h1 { + margin: 14px 0 40px 0; + font-size: 26px; + font-weight: 400; + line-height: 33pt; + font-family: $font-body; - p { - line-height: 28px; - } + em { + font-weight: 700; + font-size: 36px; + font-style: normal; + font-family: $font-heading; } } - } - #section-partnerships { - - padding: 40px 0 100px 0; - text-align: center; - - h1 { - margin: 0 0 40px 0; - } - - #partnerships { - margin: 80px 0 0 0; - - ul { - list-style: none; - margin: 0; - padding: 0; - } + .image-container { + text-align: right; - li { - display: inline-block; - padding: 16px; - } - img { - opacity: 0.8; + margin: 122px 0 0 0; } } } -} -#posts { - #section-post-container { + #section-connection-overview { + padding: 120px 0; - margin: 200px auto 0 auto; - text-align: center; - max-width: 700px; - text-align: left; - h1 { - font-family: "Roboto Slab", Garamond, Georgia, 'Times New Roman', Times, serif; - font-weight: 700; - font-size: 38px; - } + margin: 14px 0 40px 0; + font-size: 26px; + font-weight: 400; + line-height: 33pt; + font-family: $font-body; - h2 { - font-family: "Roboto Slab", Garamond, Georgia, 'Times New Roman', Times, serif; - font-size: 24px; - font-weight: normal; - color: #666; - line-height: 28pt; - margin-bottom: 30px; + em { + font-weight: 700; + font-size: 36px; + font-style: normal; + font-family: $font-heading; + } } img { - margin: 0 0 20px 0; user-select: none; + margin: 62px 0 0 0; } + } - p { - margin-bottom: 30px; - font-weight: 300; - } - - ul { - margin: 0 0 30px 0; - } - - p, - ul, - li { - font-family: "Roboto Slab", Garamond, Georgia, 'Times New Roman', Times, serif; - font-size: 18px; - line-height: 34px; - } + #section-get-started { + background: #AA076B; /* fallback for old browsers */ + background: -webkit-linear-gradient(to right, #AA076B, #61045F); /* Chrome 10-25, Safari 5.1-6 */ + background: linear-gradient(to right, #AA076B, #61045F); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ + padding: 110px 0; - strong { - font-weight: 400; - } + #try-it-container { + margin: 0 auto; + padding: 20px; + font-size: 1.6rem; + line-height: 1.3em; + background: #fff; + border-radius: 6px; + box-shadow: 0 0 1px rgba(0,0,0,.1), 0 2px 6px rgba(0,0,0,.03); - p.date { - font-size: 14px; - font-family: $font-roboto; - color: #333; - } + p { + padding: 11px 0; + font-size: 15px; + font-family: $font-opensans; + margin: 0; + line-height: 28px; + } - p.centered { - text-align: center; + button { + height: 49px; + width: 100%; + display: inline-block; + max-width: 250px; + } } + } + + #section-cta { + background-color: #f3f3f3; + padding: 110px 0; + text-align: center; - blockquote { - p:last-child { - margin-bottom: 0; - } + button { + margin: 20px 0 0 0; + font-size: 11px; + width: 200px; + height: 52px; } - } + } } #docs, @@ -2650,7 +1247,7 @@ nav.navbar { } #docs-index-page { - background-color: #f5f7fa; + background-color: #fff; #hero { padding-bottom: 70px; @@ -2783,13 +1380,13 @@ nav.navbar { } #section-tiles { - .tile { - top: -34px; + background-color: #f3f3f3; + padding: 0 0 70px 0; + .tile { a { display: inline-block; position: relative; - top: -30px; background: #fff; border-radius: 8px; text-align: left; @@ -2798,7 +1395,7 @@ nav.navbar { min-width: 215px; text-decoration: none; transition: all .1s ease; - border: 1px solid #efefef; + border: 1px solid #eaeaea; h2 { @@ -2819,7 +1416,7 @@ nav.navbar { } a:hover { - top: -34px; + top: -4px; } a.setup-guide { @@ -2848,9 +1445,12 @@ nav.navbar { } } + #section-search { + margin: 0 0 60px 0; + } + #section-links { - background-color: #f5f7fa; - padding: 20px 0 70px 0; + padding: 20px 0 140px 0; ul { margin: 0; @@ -3073,11 +1673,8 @@ nav.navbar { /* component */ #breadcrumb { - background-color: #f1f1f1; - border-radius: 8px; - padding: 10px 20px; - margin: 0 0 56px 0; user-select: none; + margin: 0 0 60px 0; p { margin: 0; @@ -3091,6 +1688,10 @@ nav.navbar { font-size: 14px; } + a:first-child { + margin: 0 14px 0 0; + } + strong { margin: 0 14px; color: #545454; @@ -3435,7 +2036,8 @@ ul.tabs { a, span, a:focus, - span:focus { + span:focus, + a.btn-download { margin: 18px 0; height: auto; font-size: 13px; @@ -3449,30 +2051,23 @@ ul.tabs { border: 0; } - .hover { + .hover, + a.btn-download:hover { border: 0; color: #6A7182; i { border-color: #6A7182; } } - + a.btn-download { - padding: inherit; - margin: 4px 0; - background: none; - border-radius: 0; - font-weight: bold; - font-size: 13px; - color: #6A7182; - text-shadow: none; - font-weight: bold; - padding: 0 6px; - height: auto; + background-color: transparent; + padding-left: 6px; + color: #777; } - + a.btn-download:hover { - background: none; + background-color: transparent; } } } diff --git a/img/enclave-header-logo.png b/img/enclave-header-logo.png index f32e138389c8a67204dc28626bebcd142e426f42..e496f9576239cb0ea54fe139d3690327a19f40cd 100644 GIT binary patch literal 1099 zcmeAS@N?(olHy`uVBq!ia0vp^CxBRzgBeIVKbfcoq?QKwgt)pF`1~gtyyfEus{Ndl zM2rrgVu*SO1Hy)Ago_{x0;SNzA+kX7iSFJApo2|Ig8YIR-o!*zy+}0;eII%GP^IB} zc9z0hE#CzG_^n?y>7m5kW3#s|5K-MJ)#{Q|W|gVq5~4Bj=NW^7Z6c=_7?>42T^vIq z4sV_DvTBuqK-*$b(T!Y6-5t?av$keMTkrhuZ7qB#?CgWUl)4u-{t7eAPuB>~Si3ZB zqqlTMlx=afPhwp{#;wYI;oCB2o#*1MzRI*H_onzZhkV63FH0-l>U>jN?U;1$>ttRA z<+6CjsO!x$7e9HsQE7^q!*U6iJ?nydgZs>c6*`L(^)ugC)bPGZ%kg1lI<7Q9vBCDk zUpI~qKRG;1df69!?EQT99rN7F?`D6_S3P0VSKA+3`m&Ja#0rKZR}PxB8ecq6$B@EW zz?QK}dM*FC?Hl{wd2(JlclIQ&K)!2pf&%Z$UdB7W9cM9=&Iw)gb^7PnH;=k>yqhXM zz6)>qa!Ize`pw_E36>S>)<${nRH@z9aaVHwrb!Cf7w#%eNRt#`F79kloF%?TU--hO z_We^?Kgvpkus*8Vv9_Q((6Z|A&+sQXn|;3-cxX@Xu4i6iEOocut*^r624jN9mgGP3 zoEP&mC(N6(QCh)kH*3@Bj+rj%$`PL`+?Q6b;o*3FXqVCi(~OJjlP6BH==J~GbC<2K z=fo@#59>*5xEyqBg*0WBxO+bediIc)QRvhI-)U1d){AtAcKO6Jdie8Ig@mzo^5t#b z-z22U#3?=Tt)_q(!|}CDPlOZni^W6D>rO7M2tJj_B6Q-x+5eWxXG#P1Ycp^jFkU*V z<%;sB0-vcx72gxZzq)6HF(e(fyjDI##4~Bu9pMLRD^^^g-)6s-ZrR-(X4!b*iu&MH2 zU$=X~)+Gy7W*u>k_@;EG$(H*`u+QvIcAtK|s6A3L$y)kZ`3+(JhptbStdo#uHq3Uo zBhZ_ncQ;_F6SrfO!s)Cnwa?#bK}%02FGI| z*MFv-(Cu54_vFuUCC5kqUcbE)F0w+rVNdm|^%}3AJUtN9G$D4eOd9)Q>CpZs%cn>x zI|^N%xpw)tBHQd;^R5&-KKsX8CSuhmtMT5g?$%Z(b)MR}ss^$3%U>O<+rNKdiB`Am bANIiK^KW?XSiT9E*%&-s{an^LB{Ts5A1x(G literal 2013 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 U-K^_hfXSc1)78&qol`;+0LTWeRR910 literal 2020 zcmV000yS1^@s63Y0cZ00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv00000008+zyMF)x010qNS#tmY3labT3lag+-G2N4000McNliru;Rq5IF%tIU zA8G&q2GdDIK~!ko)!KWEokbZ2@ZZ_pQc$}qE(H+-^d_ZSO1s1u#f=Jv2#JXoLQsi; zh!KOvL=ue}O*H;#f*4E*#wf8EuhC%8M4}DZ7%#C~OF8yJ3k577bZd9Jz3py${NtUE z{d)GCwtLQ;wLZzoIs47*%r`U7Jnvg;kS5udh~tVRUH|wwcGY+Z{ITf5to)8KiEG$_Ni3<9elP_wgd0!A0KkG( zeO;hAw;t<354x}u2OCt{i4!f3xsp1+95>>-4eE5II$dqdZ7;rskKqWOzyvPDwOEVu zvA)Hz6yxYlzdMOHVu_hW8^G%{UYoh%-*`?C@MY}B3#IZGv0ZHDe(X+lT0t>qHB@o5 zL7k_1(vM@f2aV)mI+eGBZhQm}4-5_+XhnrigX?f>n#{Y?IF1Qo-j1*1^LSLKaVuzB zflh~{W*St|M*yzfi>e+ zJAT((@TBm|uE)AeyLm1HEymet|E*p0W0g?vO=c8mtsrL(?7_3b*IY5$+xKcg`n?Ko z5dPo4Iz8a|BH%0dG5UmWF<<=>rewF+1bMb|=dcuS77M={TZQ$wQkdc#*pGh-i?p^u z`8u&ag;I7DWfOd&kuqg6%N0C=yYNBWKQK77tAi%LjAQtmP>}KY=&%)}xxY%d6Waw* zp2l7gge-M(#M&y33qSA{VcxsbGgxSbl$+!Wyqa>WY?_u~b=~LUOfS%dXYflA416F{ zyJv!$P`-VboX39Wii#ivVS1-Us$_@oUDsrEUH*Y7VQ$YaJ-f0`A!k^q=Mr8|p8S4uZd_si$|Ea6=Y`*!`B?6J( z<7T`UKgrns|2qmZyARu|Bg2JR9uezvmB?%6kfoPIUhX=q9_{Vhl%8KL#Aus{f^%R> ztoxw`@1RHQs!4oB9J`fq{B*6)0YyI>gdcdDNG)_c!F#qN5$#HGZ1orHEt%Vb3`KyF zgMdebvR*Hg^&w#@%PzoFhJGsPeLpQ+i879Jau70Yete{1{1xxQTjeGBEY$l=XR%2x zqR-7vjz0Hb7v6?d1A{}=Ok)@koBwK@mp-cn4{{`+%b3!HTV(=vd~uRl8OOsI!bi>a zJ3D~|VmD4}{am|~ILAx^dWAS5E6^oOZ&#}G^L9H+eqdE3=vRoGV4v^_U&fAH3FrdN zxYaYqc5>lSA<6HT=Zy1IScq?m-Te*x`F}L#Q(>_T>N zcW*XNE#5UGROmdB{9SK$V0MAHYIZr64-5`HpJ6>tr2alG+@VEgE-T~?44ckbnSi|_ zXEW=c#R)>TU?KT}+r-6$J2Eu+cVU)p6iM#K)8Bom{VRmYc`8F+iyF++vrHsVLZTy042Iw2Hsg~&nOD@fSRL{@}9`GvZ&?Ly64IqK^ZIlgiNy3t&X z;6s9}UD^z$QXsNRxI@d+<0rI!U$PNu;-uvvjs4cC9+4BOh#XU++amh~L0iG`)c&jx zJgMN{L`vpb?d6>&@I`Tef2&Z6a|I#(B<=+MOzVqQ6PE&x2*34`y7EcQubrO`7YV;^ zFLs{7v=+(SCE|v3j&to-M4qu2Pu1+hh*nX|*;IPxM%05UK!H!UzYEipJ$GBP?eIXW>oEig1XFffTUI~xE103~!qSaf7z zbY(hiZ)9m^c>ppnF*hwRI4v Date: Sat, 31 Oct 2020 20:46:45 +0000 Subject: [PATCH 02/22] unused textures --- img/diagmonds-light.png | Bin 1760 -> 0 bytes img/noisy-texture.png | Bin 4856 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/diagmonds-light.png delete mode 100644 img/noisy-texture.png diff --git a/img/diagmonds-light.png b/img/diagmonds-light.png deleted file mode 100644 index 95ebe038844506b58dbea0db398d5688177c0394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1760 zcmV<61|Ru}P)Ucp_ZT7 zIuJum$C+TgC4mGi*NfQ#Ei2!(y!=hQYGo)JG*^SV)?D%u?cHs2CQ4CQEl+!)Y|G6-!Ol zEGHae<^>~jlI0SU^vyXK8yb(PCR62n#b9@IA{d+@M)yz4Mugz1CtXWf|p{H^{jQk<7x4DK<(|InB8u7{0-lA6YR!EvpPF=Hgjb~H*mKqIog89{;{!+~P_ru{=lP^me}na1N^2?bIi%jlSBzf|Ul;Y;q#4YO;Mi3r)Rrz8+wx zA;*#uLBl_HECaI&Hi&uDWb?-A8gf4310Sg2`;VVLUSA^+J%*ZKx(3udaDEXA;O7rS z#Lsw)m`*eNSxxgh32_hKf4%;Sw(k+Q4r61CZH+y44K0{891L=bMn4V1AtrN>b95V> zgO^?t<1XA`UZ*?G&@^mk8kZs` zqhOXAmo!-thk7WOwZ_G1TutG4!3Y{xr*X9<2VN|S#+7ND&M{^kh8lsh#xP8maj~ay zVH(#p;Y7ix8W*N2HpY(L+Ry8#Vi;PfpR0A!(SgF|!4>{!)M=a#l>??|$T4Ep zW3(JY;b3}m`~%+Y_1E7#c_>ir9g&86)`NqHv#00005 diff --git a/img/noisy-texture.png b/img/noisy-texture.png deleted file mode 100644 index 0e2ed0479ab9446ae18c0fd41ebd13ac9d2e517d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4856 zcmVyIHV_ModL4vCM1^K$&jZ20tkCS) z3e3vN%AW1H{)Er#^?Ac4uR=?~ity>^&FTo5ZkFGEB+Tp|4tM~)Nfi@l<>#EaDfW?i zYR%4Sd$ZJi$l!snkzeM~+t&iDW(PVqEvO)p=_t8}LjYHl?ioP&(VxW~j_65Z`#Jdl zE`SHs;F=!1`CKc({h;?@q)7|y$f3W6iD{XIOzIKOFW!!T2zvw7+sSzEgUQ}*OUu0s z9P^OE_;CGnrD#seNf|VH%KD+erFSY2crx$gXfx7>u5L9@y=VWLAIL~kn;m=_1dY@g ziAq`~U}=b8eoJ^n{{Te+DatUC(cXFewt{k z3zqPK)E{&5?V8X1txJwVuImxe6LNY2j<%oyq6^ZylsLI&534|>ijT#AUUL+$+ma@l zJG`WaK$ZIGxg*dz9)5s5b}aHsKQLP;wSgfLCD}AfZwEE<;tx|>aBF@&mJ@zs|4hxY zHe)Eu1NVn+GE^xhm6Gb!?|nsX6fc#dD#dmEDwVUbquL=cEj2oRKO~>g`5B-vrRM<6(acAhWl{cPp-AWzBu= zM1yQX*z@;j6RE}!d}CRvHWMx(g-Q|UJ?|#ke?b$Jj05m>Mcz^a)3EWp0Jp0Gk=vSq zj3tkB#~l!Tg5C`|7A8RrDIJ|T3f>VVWfX`al|1h$z4h}H$uLF7;9r@hD43Q zz}kLYDEazd5th{+IE^^b6U41uYY)B;#VN`GO%e)NX>m@Oj-4HW*a?5RPzeRuKR&|x zoqLy!Qp^~ZSlxq(d1f6TH7GP`yD1FTKxE!)WLw{cn^ESvYG6+K0mMXA!Si|g148iP z1B)SBHVen+9-#f{5L6-II*R6d6;tiJKNn7SCev44_IlRwPQL;?XsH4v%_%4`bj{hl?(%%7R=BaEYtZ9PK} zP(#x-J3;&EA!_qO;cOs-1617R5yNw!@sv4&sIMA?BcHqEo5V>a%F?$D&jj;9^kj_3 zhd#gFMg4jb^fN@*Dj4--XgLc+K_x~iDyIl!%g}VRQj`K)zv{T> zKoP>K1}Q69n%bvtRzVjJ?*mz7nK*rKMQMj=9u|b+R1M0eQtZB?2p%$zd^56nZaHlg zMU`8B%hrHO11q&`H=Oz6k%m5@b9y&DoEoko>A!l*XT58zE}#J)N-0GGm%LDNepHvF zzOjg_)i0{7)&OWr={A8FWFq7J>UNsN9WXE)9P9=Spg+>07cAs?UbT9~*+t_aGtHwZ z?+uLt7{I$S;69-d;?=DfYS#>81$5UhAwYs?lb=dE=~i@3*-sz8gv&wcrM~MO-wE~|6IW=Ix}s7(7H_f z)64UYY}f#>%dgmte>1W2jmHW?G$N;yay+a9a1+NF?J{s6Jfv>MtY>~=ny zfOIOOz{ior2Ce?tuT9=O_Re0|mf0|pgu&EZn<+zvW&L+Le0ZAW*Ch}7S$a{d4+MH4 zTmAmJ1g7Ev1)I*|cTq%3Q;G}1tI7U%FH}|4oTg&HSFpvVhoK#Jn_WQ7$qk=2RGVCy zgXTz_3sqSP^D#3wkVPnlOkkR=apIg#>oDfT|t_&zCn! zdmf@4T*2i4YbK4ja={(<7C}#*Kd0=TtR%q4^H>sU5MEe*71^X#_VXR4_%F^STBwK2#Wr*YRPRP@%a=$hiA> zS!1Jv<9+3dXMkyMNC}{!9PDS{WTwLUEKs_FVb=H3hzIu8-d`!#DqCT|H3KD{4Pu16 zSD2<+NOe8X7_Mj?1%i*}b`w@4&GhL);S^0+{7^5J=TX3%k>Z|W4txhOSHsf!4YnsX zLeAyeEYQG5ww?)uAO2Hh*AVrLGC!J;^2wMAc?AhZWoMk~Mmv>=^{Hsnkj zwpS=QHlMi>qQskYw!L@F`u91rw$JZu$79&QlXoLXZlr{}mx|vIRQ6-l3yYj7_8q;17wG;M(i_MY|w{&;|3 zonU#5*NFU9K=Ik>HhtO^cKr`0O-{0J4o?oSi?u88m zr?36A8;4mlIH-w%Yu2R>E>-2Gp$vXK3zl$w;aZA@3?U`AZ>vsvl5K^UEy99Lb14Iu%Vj+*{*&_^IW#dyw2mMJalnI9y0zwh9udFD$q z8uQ?Qsa#vEH_G?z@S<^cs_+E0eD-NkzV!bX@3s{;4Slph^pC=?P9kF7PK!jH;%x_W zK@(+YTlN?!auh`cRg6mRTd&I_)ez=F63sn(>IV$1HdBg_(~-RyPR2^R zH@K2Q*Zh}A%0YrvQf9g+?Vdo`md#|OFEx%DVXT!55a6z#o=AgprrK-ms;`4Td}*m@ z86rAXs7(OH#zbIuJs8N0cxa+fPx4Z`bh%|Z3&1i8)14Wq#aqWRQ{i0ASECninq0n% zSPAnk=|;-D5jWZ6*VE;NhuH|d{<_?>WyRovni~kv!EWcOX^ofA?c6eO=quf1f&-Vp z*iXz;d&#GJm+p;j@Ow3P7pWx+#_9|NLsLJ2^yPiDW% zHQ=|Be0PNOTsJ_Sg?%yB!C19?AI{u$)tEV6JYv=^EzKLvfMTLaesjH)J7&<`(x*B^ zop|&gjB9f?IzT!lxWF2rRMiapyk1~?X5VF0MH@9F)N`t&vzcA*C|v4`Jvx2Ayd<}{ z&DWA(AS?{j)-dGdR=ChKF4zJId*a+1;$Ns!AW60-ENS;&p$ElM7jN+relnU@5#wS2 zuF;`UfzSLfx{;^wIBDqd!Gfdl zWnIH1=4>OrD#{6x5u$cSssFaRoc1|Z6lZNK9wRddX#b_z18O!tfzi&OHG50JB!s3N z3|`;4^1{LtobU5wpsrL`m70FF_on(&v`acf7Z)9jK+vZ(ctnL#1jaV~HjGpUZ?o`f zeoO>;VOm?nNEz;a*O$mg6X+&QwmP<1GsJ`WL7wmtIghZcOsV||>HSgYW=v)fjg&U+Hi^Un zot6@qe|y?%1t&Ml03cvNh*%Df`a~TeACrQYhH_hv+zYK*nD|VZSf_vDhiuBjAu48| zFn3TUfM^E5h*FY6Jq)23RvgmddooZ?|#SD zX<^GJKil3#14UlNmcJm1^^@QnK)Etbt<95W-jAL%6H}*$tNnJ_{w^ z{m#sW04)?!yJw)s2bsJ0=yULxmOm$6M1u(NOS{;ckVbh8%q>@WSs3?hxhs=O`>2oB zSLM)E`aP)=FuFNNedc=NVvlHsCAmANvt2d*YGFl#0X$^)slJ$Cf#a=@#9Q zz{b~51&K!{0~RfgaSI$3BwlpDpDG#y&_{)fP&8hMsOdf*W>dlvgZPIJ3W0zgMCx8T zQ$5ReE^ZBjp3Ypm@O`{a0g>M$d3ceWI9>Rx7K!yB+7I)skrfn7TZEQ%%=;V#DmYp` zP&}~69vzv>8|T0rx%C$w_3&+#Xpyx8D#?0wfnmYCIwy!b#QXF+sLqG8CAY-TYZ|)P eGjt6$Rs9FeGirQd$>#w80000 Date: Sat, 31 Oct 2020 20:47:25 +0000 Subject: [PATCH 03/22] unused selector --- css/enclave.scss | 368 ----------------------------------------------- 1 file changed, 368 deletions(-) diff --git a/css/enclave.scss b/css/enclave.scss index 294e77a..12220b9 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -763,374 +763,6 @@ nav.navbar { /************************************************************************************/ /************************************************************************************/ -#index { - overflow: hidden; - position: relative; - padding: 70px 0 0 0; - -webkit-backface-visibility: hidden; - - #section-hero { - /* thanks http://www.noisetexturegenerator.com/ */ - position: relative; - padding: 0; - background: #103F6E; - background: linear-gradient(20deg, #241a50, #0b3765, #005f8c); - background: url("/img/noisy-texture.png"), linear-gradient(20deg, #241a50, #0b3765, #005f8c); - - #announcement-container { - text-align: center; - margin: 100px auto 0 auto; - width: 555px; - - #announcement-box { - background: #f3f3f3; - padding: 10px 65px; - border-radius: 6px; - font-family: $font-roboto; - font-weight: 400; - font-size: 15px; - user-select: none; - - a { - text-decoration: none; - } - - .highlight { - color: #636363; - } - - i { - color: #18739e; - margin: 0 0 0 10px; - font-size: 14px; - font-weight: normal; - } - } - } - - #title { - h1 { - color: $white; - margin: 105px auto 10px auto; - font-size: 25pt; - line-height: 40pt; - font-family: $font-heading; - border: none; - background-color: rgba(4, 33, 64, 0.3); - display: inline-block; - padding: 4px 12px; - position: relative; - left: -12px; - user-select: none; - } - - h2 { - margin: 0; - padding: 0; - color: #A9D3E7; - font-size: 16pt; - font-family: $font-body; - font-weight: 300; - line-height: 34px; - border: none; - } - - h2 strong { - font-weight: 600; - color: #BBDEF3; - } - } - - #buttons - { - margin: 60px 0 0 0; - - button { - margin: 0; - font-size: 11px; - width: 200px; - height: 52px; - } - } - - #overlayCanvas { - min-height: 400px; - width: 100%; - padding: 0; - margin: 100px 0 50px 0; - } - } - - #section-partnerships { - margin: 30px auto; - text-align: center; - - * { - user-select: none; - } - - ul { - list-style: none; - margin: 0; - padding: 0; - - li { - display: inline-block; - padding: 16px; - img { - opacity: 0.8; - max-width: 120px; - } - } - } - - } - - #section-sdp { - background-color: #f3f3f3; - text-align: left; - padding: 120px 0 40px 0; - - h2 { - font-weight: 700; - } - - img { - user-select: none; - } - - #about { - margin: 0 0 100px 0; - - h2 { - font-size: 13px; - font-family: $font-opensans; - text-transform: uppercase; - margin: 0; - } - - h1 { - margin: 10px 0 18px 0; - font-size: 30px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - img { - margin: 95px 0 0 0; - } - } - - .cards { - padding: 45px 10px 25px 10px; - - .card-container { - position: relative; - - .card { - padding: 10px 40px; - background-color: #fcfcfc; - border-radius: 8px; - box-shadow: 0 2px 5px 0 rgba(0,0,0,0.05); - margin: 0 0 80px 0; - } - - h2 { - font-size: 12px; - font-family: $font-opensans; - text-transform: uppercase; - text-align: left; - user-select: none; - line-height: 16pt; - text-align: center; - margin: 0 0 26px 0; - - i { - font-size: 28px; - color: #fcfcfc; - display: block; - height: 60px; - width: 60px; - padding: 15px 0 0 0; - margin: -40px auto 38px auto; - - border-radius: 50%; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - } - - .fa-connectdevelop { - background-color: #006f8c; - padding-top: 16px; - } - - .fa-sliders { - background-color: #005f8c; - } - - .fa-cloud { - background-color: #00488c; - padding-top: 16px; - } - } - - p { - font-size: 14px; - line-height: 26px; - } - - &::after { - content: ''; - position: absolute; - width: 1px; - height: 100%; - top: 0; - right: 0; - } - } - - .card-container:last-child:after { - border: none; - display:none; - } - } - } - - #section-devops { - background-color: #fff; - text-align: left; - padding: 120px 0; - - h1 { - margin: 14px 0 40px 0; - font-size: 30px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - img { - user-select: none; - } - } - - #section-tax { - background-color: #f3f3f3; - padding: 120px 0; - - img { - user-select: none; - } - - h1 { - margin: 14px 0 40px 0; - font-size: 26px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - .image-container { - text-align: right; - - img { - margin: 122px 0 0 0; - } - } - } - - #section-connection-overview { - padding: 120px 0; - - h1 { - margin: 14px 0 40px 0; - font-size: 26px; - font-weight: 400; - line-height: 33pt; - font-family: $font-body; - - em { - font-weight: 700; - font-size: 36px; - font-style: normal; - font-family: $font-heading; - } - } - - img { - user-select: none; - margin: 62px 0 0 0; - } - } - - #section-get-started { - background: #AA076B; /* fallback for old browsers */ - background: -webkit-linear-gradient(to right, #AA076B, #61045F); /* Chrome 10-25, Safari 5.1-6 */ - background: linear-gradient(to right, #AA076B, #61045F); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ - padding: 110px 0; - - #try-it-container { - margin: 0 auto; - padding: 20px; - font-size: 1.6rem; - line-height: 1.3em; - background: #fff; - border-radius: 6px; - box-shadow: 0 0 1px rgba(0,0,0,.1), 0 2px 6px rgba(0,0,0,.03); - - p { - padding: 11px 0; - font-size: 15px; - font-family: $font-opensans; - margin: 0; - line-height: 28px; - } - - button { - height: 49px; - width: 100%; - display: inline-block; - max-width: 250px; - } - } - } - - #section-cta { - background-color: #f3f3f3; - padding: 110px 0; - text-align: center; - - button { - margin: 20px 0 0 0; - font-size: 11px; - width: 200px; - height: 52px; - } - } -} - #docs, #docs-index-page, #docs-api, From 15bced188bf761e98e343c55143ac3dcec587d34 Mon Sep 17 00:00:00 2001 From: marc barry <10514522+marcbarry@users.noreply.github.com> Date: Sat, 31 Oct 2020 20:48:39 +0000 Subject: [PATCH 04/22] unused selector --- css/enclave.scss | 232 ----------------------------------------------- 1 file changed, 232 deletions(-) diff --git a/css/enclave.scss b/css/enclave.scss index 12220b9..f3778f4 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -1355,60 +1355,6 @@ ul.tabs { display: inherit; } -/* modal popup */ - -.popup { - width:100%; - height:100%; - display:none; - position:fixed; - top:0px; - left:0px; - background:rgba(0,0,0,0.80); - z-index: 9998; -} - -.popup-modal-container { - position:absolute; - left: 50%; - top: 50%; - width: 94%; - height: 86%; -} - -.popup-inner { - position: relative; - left: -50%; - top: -50%; - padding: 40px; - border-radius: 6px; - background:#30343C; - z-index: 9999; -} - -.popup-close { - width: 30px; - height: 30px; - padding-top: 4px; - display: inline-block; - position: absolute; - top:0px; - right:0px; - font-family: Arial, Sans-Serif; - font-size: 20px; - text-align: center; - line-height: 100%; - color: #fff; -} - -.popup-close:hover, -.popup-close:active -.popup-close:visited -.popup-close:focus { - color: #ccc; - text-decoration:none; -} - /* misc */ .form-control:focus { @@ -1719,184 +1665,11 @@ ul.tabs { #toc { display: none; } - - #index { - #section-hero { - #announcement-container { - max-width: 300px; - - #announcement-box { - padding: 10px 20px; - line-height: 26px; - } - } - - #title { - text-align: center; - - h1 { - font-size: 23pt; - left: auto; - } - - h2 { - margin: 0px auto; - max-width: 560px; - } - } - - #buttons { - text-align: center; - } - } - } - - #features span { - border: none; - padding: 7px 0 7px 0; - } - - #features .typed-cursor { - left: 5px; - } - - #pricing { - #hero { - #product-img { - display: none; - } - - ul.tabs { - - li { - - padding: 10px 35px; - font-size: 14pt; - } - - li.current { - font-weight: bold; - } - } - } - - #packages { - &:before { - display: none; - } - - #comparison-table { - p { - display: none; - } - - .panel-group { - .panel{ - .panel-body{ - display: block; /* disable flex for constrained views */ - - .included { - display: block; /* disable flex for constrained views */ - } - } - } - } - } - } - } - - #about { - #section-company-about { - .whitebox { - margin: 60px 0 30px 0; - } - } - } - - #roadmap { - #section-roadmap { - /* reset equal columns height hack */ - .row{ - overflow: visible; - } - - [class*="col-"]{ - margin-bottom: 0; - padding-bottom: 0; - } - - .dashed-borders { - border: none; - } - - h3 { - margin: 80px 0 0 10px; - } - } - } - - #careers { - #section-careers-about { - #open-roles-container { - ul { - li { - a { - padding: 16px 10px; - - .role-go { - display: none; - } - } - } - } - } - } - } } /* col-md */ @media screen and (max-width: 767px){ - #about { - #hero { - p { - padding: 0 30px; - } - } - - #section-company-about { - #team { - li { - padding: 16px 40px 16px 0; - } - } - } - } - - #pricing { - #section-packages { - .pricingTable { - max-width: 400px; - margin: 60px auto 0 auto; - - &:hover { - transform: none; - } - - - .pricingContent { - .sliderContainer { - margin: 26px auto; - } - } - } - } - } - - #comparison-table { - display: none; - } - #docs-index-page { #section-tiles { @@ -1964,11 +1737,6 @@ ul.tabs { /* col-sm */ @media screen and (max-width: 575px){ - - #index { - #section-hero { - } - } } @media print { From 976b1e62fa7b89b451e958aabddea98c98332441 Mon Sep 17 00:00:00 2001 From: marc barry <10514522+marcbarry@users.noreply.github.com> Date: Sat, 31 Oct 2020 20:55:38 +0000 Subject: [PATCH 05/22] clean up colours --- css/enclave.scss | 78 +++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/css/enclave.scss b/css/enclave.scss index f3778f4..f62bad1 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -5,9 +5,12 @@ $font-heading: "Lato"; $font-roboto: "Roboto"; $font-opensans: "Open Sans", "Helvetica"; -$white: #FFFFFF; -$sky: #a60b0b; -$arctic: #71B8E2; +$white: #fff; +$dark-black: #111; +$light-black: #333; +$black: #000; +$primary: #BE0D0D; +$primary-hover: #a60b0b; $href: #008cde; $box-shadow: 0 1px 1px rgba(27, 31, 35, 0.10); @@ -27,7 +30,7 @@ html, body { min-height: 100% !important; height: 100%; - background-color: #FFFFFF; + background-color: $white; -webkit-overflow-scrolling : touch !important; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; @@ -37,7 +40,7 @@ html, body { } h1 { - color: #333; + color: $light-black; margin: 46px auto 8px auto; padding: 0; font-size: 30px; @@ -123,7 +126,7 @@ html, body { p { font-family: $font-roboto; - color: #000; + color: $black; font-size: 14px; } } @@ -287,13 +290,13 @@ html, body { } ::-moz-selection { - color: #fff; + color: $white; background: rgba(0, 23, 47, 0.7); } ::selection { - color: #fff; + color: $white; background: rgba(0, 23, 47, 0.7); } @@ -349,7 +352,7 @@ nav.navbar { a.btn-download { color: $white; - background: #BE0D0D; + background: $primary; border-radius: 2px; font-weight: bold; font-size: 10px; @@ -360,7 +363,7 @@ nav.navbar { a.btn-download:hover { color: $white; - background: $sky; + background: $primary-hover; } a.btn-login:hover { @@ -369,10 +372,10 @@ nav.navbar { .hover { color: $white; - border-bottom: solid 5px #fff; + border-bottom: solid 5px $white; i { - border: solid #fff; + border: solid $white; border-width: 0 2px 2px 0; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); @@ -392,11 +395,10 @@ nav.navbar { .active { color: #ccc; border-bottom: solid 5px #ccc; - // border-bottom: solid 5px $arctic; } .active:hover { - border-bottom: solid 5px #fff; + border-bottom: solid 5px $white; } } @@ -416,7 +418,7 @@ nav.navbar { top: 70px; left: 0; right: 0; - background-color: #fff; + background-color: $white; box-shadow: 0 16px 24px 0 rgba(0,0,0,.08); padding: 50px 0 50px 0; overflow: hidden; @@ -582,7 +584,7 @@ nav.navbar { top: 0; z-index: 1; width: 100%; - background: #fff; /* #2a2b30;*/ + background: $white; /* #2a2b30;*/ border-color: transparent; border-radius: 0; border: 0; @@ -593,17 +595,17 @@ nav.navbar { border-radius: 0; background-color: transparent; border: none; - color: #000; + color: $black; font-size: 28px; } .navbar-toggle:hover { - color: #BE0D0D; + color: $primary; } .navbar-toggle:focus { background-color: transparent; - color: #BE0D0D; + color: $primary; } } @@ -632,7 +634,7 @@ nav.navbar { h1 { border: none; - color: #333; + color: $light-black; padding: 0; font-size: 26pt; line-height: 40pt; @@ -667,7 +669,7 @@ nav.navbar { #footer { - background-color: #000; + background-color: $black; color: #dcdbdb; padding: 140px 0; font-family: $font-roboto; @@ -693,7 +695,7 @@ nav.navbar { a { font-size: 14px; - color: #fff; + color: $white; line-height: 21px; } @@ -735,7 +737,7 @@ nav.navbar { padding: 0; font-size: 14px; font-family: inherit; - color: #fff; + color: $white; line-height: 24.5px; strong { @@ -779,7 +781,7 @@ nav.navbar { } #section-page { - background-color: #ffffff; + background-color: $white; margin: 70px 0 160px 0; .toc-heading { @@ -843,7 +845,7 @@ nav.navbar { h2 { font-size: 26px; - color: #333; + color: $light-black; margin: 56px 0 16px 0; } @@ -879,7 +881,7 @@ nav.navbar { } #docs-index-page { - background-color: #fff; + background-color: $white; #hero { padding-bottom: 70px; @@ -896,7 +898,7 @@ nav.navbar { h1 { text-align: center; font-size: 21pt; - color: #333; + color: $light-black; } input { @@ -910,7 +912,7 @@ nav.navbar { color: #555; padding: 0 20px 0 42px; position: relative; - background-color: #fff; + background-color: $white; background-image: none; border: 1px solid #efefef; -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; @@ -937,7 +939,7 @@ nav.navbar { position: absolute; z-index: 100; width: 100%; - background: #fff; + background: $white; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); margin-top: 2px; @@ -1019,7 +1021,7 @@ nav.navbar { a { display: inline-block; position: relative; - background: #fff; + background: $white; border-radius: 8px; text-align: left; padding: 36px 36px 16px 36px; @@ -1092,7 +1094,7 @@ nav.navbar { h1 { font-size: 18pt; - color: #333; + color: $light-black; } .item { @@ -1125,7 +1127,7 @@ nav.navbar { .tile { display: block; - background: #fff; + background: $white; border-radius: 4px; box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.01); text-decoration: none; @@ -1186,14 +1188,14 @@ nav.navbar { } li a:hover { - background-color: #fff; + background-color: $white; opacity: 1; } li.active a { background-color: #374365; border: 1px solid #374365; - color: #fff; + color: $white; opacity: 1; } } @@ -1230,7 +1232,7 @@ nav.navbar { a:hover { background-color: #374365; border: 1px solid #374365; - color: #fff; + color: $white; } } } @@ -1358,7 +1360,7 @@ ul.tabs { /* misc */ .form-control:focus { - border-color: #fff; + border-color: $white; box-shadow: 0 0 0 0.3rem rgba(0,123,255,.3); } @@ -1578,10 +1580,10 @@ ul.tabs { a:hover, a:active, a:focus { - color: #fff; + color: $white; i { - border-color: #fff; + border-color: $white; margin: 0 0 1px 8px; } } From 3bf1b1150926fd8e9f70e98a50fa4b967c884e9b Mon Sep 17 00:00:00 2001 From: marc barry <67782240+enclave-marc-barry@users.noreply.github.com> Date: Wed, 17 Mar 2021 09:21:12 +0000 Subject: [PATCH 06/22] work on style --- _includes/nav.html | 133 +++++++++++++++++++++------- _layouts/default.html | 4 +- css/enclave.scss | 156 ++++++++++++++++++--------------- css/lib/jquery.toc-scroll.scss | 8 +- guides/quick-start.md | 2 +- 5 files changed, 195 insertions(+), 108 deletions(-) diff --git a/_includes/nav.html b/_includes/nav.html index 5e54281..a332efc 100644 --- a/_includes/nav.html +++ b/_includes/nav.html @@ -1,7 +1,8 @@
-
+ + {% include search-lunr.html %} + +
@@ -38,7 +44,7 @@

Enclave Handbook

APIs, Plugins and Automation

Integrate, control and extend Enclave networks through APIs and automation.

-

Learn More

+

Start integrating

@@ -49,21 +55,6 @@

APIs, Plugins and Automati - - - - - diff --git a/css/enclave.scss b/css/enclave.scss index c030880..947af73 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -308,8 +308,7 @@ html, body { } ::selection { - color: $white; - background: rgba(0, 23, 47, 0.7); + background: #CBEAFB; } #page-content @@ -806,10 +805,10 @@ nav.navbar { p, li { - line-height: 1.6em; - font-size: 1em; + line-height: 1.8em; + font-size: 1.12em; font-family: $font-body; - color: #505356; + color: rgba(0,0,0,.6); font-weight: 400; strong { @@ -876,6 +875,13 @@ nav.navbar { } } + h1,h2,h3,h4,h5 { + font-family: $font-body; + font-weight: 500; + letter-spacing: -.03em; + line-height: 1.3em; + } + h2, h3, h4 { border-bottom: none; } @@ -901,6 +907,104 @@ nav.navbar { } } + #section-tutorial-tiles + { + position: relative; + max-width: 1070px; + margin: 0 auto 70px auto; + + .tile:before { + padding: 7px 10px 6px 10px; + border-radius: 4px; + font-family: $font-body; + font-size: .95em; + color: #444; + border: 1px solid #eaeaea; + display: block; + position: relative; + top: -52px; + left: 2px; + text-align: center; + background-color: #e6e6e6; + } + + .tile { + margin: 70px 0 0 0; + display: inline-block; + border-radius: 6px; + padding: 36px 36px 16px 36px; + box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.015); + transition: all .1s ease; + border: 1px solid #eaeaea; + background-color: #fafafa; + text-decoration: none; + + .title { + font-family: $font-body; + font-size: 1.2em; + font-weight: 500; + text-transform: uppercase; + color: #444; + letter-spacing: .015em; + + i { + font-size: 1.1em; + margin-right: 10px; + } + } + + .text { + margin: 0 0 0 35px; + + p { + margin: 12px 0 20px 0; + } + } + + button { + margin: 50px 0 16px 35px; + font-size: .9em; + letter-spacing: .01em; + line-height: 1.5em; + text-transform: uppercase; + color: #999; + text-align: left; + display: block; + + i { + margin-left: 10px; + color: #bbb; + } + } + } + + .tile:hover { + background-color: #fff; + box-shadow: 0 10px 18px #031b4e14, 0 3px 6px 0 #00000005; + + button { + color: inherit; + + i { + color: inherit; + } + } + } + + .tile:hover::before { + background-color: #008cde; + color: #fff; + } + + .locally-managed:before { + content: 'Locally managed. End-users can control Enclave'; + } + + .centrally-managed:before { + content: 'Centrally managed. End-users have no control'; + } + } + ul.air-gap { padding-top: 20px; padding-bottom: 50px; @@ -1062,7 +1166,7 @@ nav.navbar { border-radius: 8px; text-align: left; padding: 36px 36px 16px 36px; - box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.015); /* 0px 0px 8px 2px rgba(0, 0, 0, 0.04), */ + box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.015); min-width: 215px; text-decoration: none; transition: all .1s ease; @@ -1114,12 +1218,13 @@ nav.navbar { } } - .learn-more { + .learn-more { span { padding: 8px 13px; border-radius: 4px; color: #fff; - + user-select: none; + &.getting-started { background-color: #8700ca; } From 1b7109ea1c77dd54f03d88cd2a8982f7e20003f5 Mon Sep 17 00:00:00 2001 From: marc barry <67782240+enclave-marc-barry@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:28:50 +0000 Subject: [PATCH 18/22] tidy up css --- .../layout-page-docs-index-page-no-toc.html | 2 +- _layouts/layout-page-docs.html | 2 +- css/enclave.scss | 383 +++++++++--------- css/lib/jquery.toc-scroll.scss | 5 +- css/syntax.scss | 1 - guides/quick-start copy.md | 85 ++++ 6 files changed, 271 insertions(+), 207 deletions(-) create mode 100644 guides/quick-start copy.md diff --git a/_layouts/layout-page-docs-index-page-no-toc.html b/_layouts/layout-page-docs-index-page-no-toc.html index 42b6fef..13ef82d 100644 --- a/_layouts/layout-page-docs-index-page-no-toc.html +++ b/_layouts/layout-page-docs-index-page-no-toc.html @@ -26,7 +26,7 @@

{{page.title}}

-
+
{{content}}
diff --git a/_layouts/layout-page-docs.html b/_layouts/layout-page-docs.html index 5d8df75..73fa907 100644 --- a/_layouts/layout-page-docs.html +++ b/_layouts/layout-page-docs.html @@ -39,7 +39,7 @@

{{page.title}}

-
+
{{content}}
diff --git a/css/enclave.scss b/css/enclave.scss index 947af73..9318729 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -159,7 +159,6 @@ html, body { } strong { - color: #555; font-weight: 500; } @@ -223,9 +222,17 @@ html, body { background: $white; } + strong { + color: #464646; + } + a { transition: all .2s ease-in-out; color: $href; + + strong { + color: $href; + } } a:hover { @@ -795,233 +802,191 @@ nav.navbar { background-color: $white; margin: 70px 0 160px 0; - .toc-heading { - font-size: 14px; - } - - table { - margin-bottom: 16px; - } - - p, - li { - line-height: 1.8em; - font-size: 1.12em; - font-family: $font-body; - color: rgba(0,0,0,.6); - font-weight: 400; - - strong { - color: #464646; + .content { + table { + margin-bottom: 16px; } - } - - p { - margin: 24px 0 12px 0; - } - - code { - font-size: 1em; - } - - pre code { - font-size: 1em; - font-family: $font-code; - font-weight: 400; - } - - ol, ul { + + p, li { - margin: 8px 0; - - figure { - margin: 6px 0; - } + line-height: 1.7em; + font-size: 1.07em; + font-family: $font-body; + color: rgba(0,0,0,.6); + font-weight: 400; } - } - - ul { - margin: 20px 0; - - ul { - margin: 8px 0 12px 0; + + p { + margin: 24px 0 12px 0; } - } - - .toc-ul-root { - - margin-top: 0; - - .toc-heading { - margin-bottom: 8px !important; + + code { + font-size: .9em; } - - li { - margin: 0 !important; - - a { - padding: 6px 15px; + + pre code { + font-size: 1em; + font-family: $font-code; + font-weight: 400; + } + + ol, ul { + li { + margin: 8px 0 16px 0; + + figure { + margin: 6px 0; + } } } - } - - blockquote { - p { - margin: 3px 0; + + ul, ol { + margin: 20px 0; + + ul, ol { + margin: 8px 0 12px 0; + } } - - ul:last-child { - margin-bottom: 0; + + blockquote { + p { + margin: 3px 0; + } + + ul:last-child { + margin-bottom: 0; + } + } + + h1,h2,h3,h4,h5 { + font-family: $font-body; + font-weight: 500; + letter-spacing: -.03em; + line-height: 1.3em; + } + + h2, h3, h4 { + border-bottom: none; } - } - - h1,h2,h3,h4,h5 { - font-family: $font-body; - font-weight: 500; - letter-spacing: -.03em; - line-height: 1.3em; - } - h2, h3, h4 { - border-bottom: none; - } + h2 { + font-size: 26px; + color: $light-black; + margin: 70px 0 16px 0; + border-bottom: 1px solid #e5e5e5; + } - h2 { - font-size: 26px; - color: $light-black; - margin: 70px 0 16px 0; - border-bottom: 1px solid #e5e5e5; - } - - h2:first-child { - margin: 0 0 26px 0; - } + h2:first-child { + margin: 0 0 26px 0; + } + + h3 { + font-size: 19pt; + margin: 34px 0 16px 0; + } + + h4 { + font-weight: bold; + } + + #section-tutorial-tiles + { + position: relative; + max-width: 1070px; + margin: 0 auto 70px auto; - h3 { - font-size: 19pt; - margin: 34px 0 16px 0; - } + .tile:before { + padding: 7px 10px 6px 10px; + border-radius: 4px; + font-family: $font-body; + font-size: .95em; + color: #444; + border: 1px solid #eaeaea; + display: block; + position: relative; + top: -52px; + left: 2px; + text-align: center; + background-color: #e6e6e6; + } - h4 { - font-weight: bold; - } - } + .tile { + margin: 70px 0 0 0; + display: inline-block; + border-radius: 6px; + padding: 36px 36px 16px 36px; + box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.015); + transition: all .1s ease; + border: 1px solid #eaeaea; + background-color: #fafafa; + text-decoration: none; + + .title { + font-family: $font-body; + font-size: 1.2em; + font-weight: 500; + text-transform: uppercase; + color: #444; + letter-spacing: .015em; - #section-tutorial-tiles - { - position: relative; - max-width: 1070px; - margin: 0 auto 70px auto; + i { + font-size: 1.1em; + margin-right: 10px; + } + } - .tile:before { - padding: 7px 10px 6px 10px; - border-radius: 4px; - font-family: $font-body; - font-size: .95em; - color: #444; - border: 1px solid #eaeaea; - display: block; - position: relative; - top: -52px; - left: 2px; - text-align: center; - background-color: #e6e6e6; - } + .text { + margin: 0 0 0 35px; - .tile { - margin: 70px 0 0 0; - display: inline-block; - border-radius: 6px; - padding: 36px 36px 16px 36px; - box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.015); - transition: all .1s ease; - border: 1px solid #eaeaea; - background-color: #fafafa; - text-decoration: none; + p { + margin: 12px 0 20px 0; + } + } - .title { - font-family: $font-body; - font-size: 1.2em; - font-weight: 500; - text-transform: uppercase; - color: #444; - letter-spacing: .015em; + button { + margin: 50px 0 16px 35px; + font-size: .9em; + letter-spacing: .01em; + line-height: 1.5em; + text-transform: uppercase; + color: #999; + text-align: left; + display: block; - i { - font-size: 1.1em; - margin-right: 10px; + i { + margin-left: 10px; + color: #bbb; + } + } } - } - .text { - margin: 0 0 0 35px; + .tile:hover { + background-color: #fff; + box-shadow: 0 10px 18px #031b4e14, 0 3px 6px 0 #00000005; + + button { + color: inherit; - p { - margin: 12px 0 20px 0; + i { + color: inherit; + } + } } - } - - button { - margin: 50px 0 16px 35px; - font-size: .9em; - letter-spacing: .01em; - line-height: 1.5em; - text-transform: uppercase; - color: #999; - text-align: left; - display: block; - - i { - margin-left: 10px; - color: #bbb; + + .centrally-managed:before { + background-color: #008cde; + color: #fff; + content: 'Centrally managed. End-users have no control'; } - } - } - .tile:hover { - background-color: #fff; - box-shadow: 0 10px 18px #031b4e14, 0 3px 6px 0 #00000005; - - button { - color: inherit; - - i { - color: inherit; + .locally-managed:before { + content: 'Locally managed. End-users can control Enclave'; } } } - - .tile:hover::before { - background-color: #008cde; - color: #fff; - } - - .locally-managed:before { - content: 'Locally managed. End-users can control Enclave'; - } - - .centrally-managed:before { - content: 'Centrally managed. End-users have no control'; - } - } - - ul.air-gap { - padding-top: 20px; - padding-bottom: 50px; - max-width: 900px; - - li { - margin-bottom: 30px; - - a { - font-weight: 500; - font-size: 12pt; - line-height: 26px; - } - } } } - + #docs-index-page { background-color: $white; @@ -1152,8 +1117,8 @@ nav.navbar { } } } - } - + } + #section-tiles { background-color: #F5F7FA; padding: 0 0 70px 0; @@ -1312,6 +1277,22 @@ nav.navbar { padding: 120px 14px 60px 14px; } } + + ul.air-gap { + padding-top: 20px; + padding-bottom: 50px; + max-width: 900px; + + li { + margin-bottom: 30px; + + a { + font-weight: 500; + font-size: 12pt; + line-height: 26px; + } + } + } } #docs-policy { diff --git a/css/lib/jquery.toc-scroll.scss b/css/lib/jquery.toc-scroll.scss index 273038d..f5555ea 100644 --- a/css/lib/jquery.toc-scroll.scss +++ b/css/lib/jquery.toc-scroll.scss @@ -25,10 +25,9 @@ $font-inter: inter,Helvetica,sans-serif; .toc { } .toc.affix { position: static; } -.toc-heading { color: #333333; border-radius: 6px 6px 0 0; border-bottom: 1px solid #e5e5e5; padding: 10px 15px; font-weight: normal; font-size: 14px; margin: 0 0 10px 0; } -.toc-heading i { padding-right: 5px; font-size: 14px; } +.toc-heading { color: #333333; border-radius: 6px 6px 0 0; border-bottom: 1px solid #e5e5e5; padding: 10px 15px; font-weight: normal; margin: 0 0 10px 0; } +.toc-heading i { padding-right: 5px; } .toc-ul-root li a { - font-size: 1em; font-family: $font-inter; letter-spacing: -0.04em; } diff --git a/css/syntax.scss b/css/syntax.scss index 60b3b92..070ac1b 100644 --- a/css/syntax.scss +++ b/css/syntax.scss @@ -121,7 +121,6 @@ pre { } code { - font-size: 9.5pt; white-space: nowrap; } diff --git a/guides/quick-start copy.md b/guides/quick-start copy.md new file mode 100644 index 0000000..38b9477 --- /dev/null +++ b/guides/quick-start copy.md @@ -0,0 +1,85 @@ +--- +layout: layout-page-docs +css-section: docs +parent: "Tutorials and Guides" +parentPath: guides +title: "Getting Started" +subtitle: "Quick Start Guide" +contentPreview: "A short guide to installing, licensing and running Enclave on Linux and Windows. Learn how to use the command line and user interface to get your first networks up and running as quickly as possible." +indexed: true +redirect_from: + - /quick-start + - /quick-start-cli +--- + +# {{page.title}} + +#### Simplify, secure and automate networks at scale. + +--- + +Building secure, private connectivity is hard, and can be risky. + +Administrators have to configure firewalls and VPNs, manage IP addresses, subnets, port numbers, ACLs, NAT, routing tables, certificates and secret keys to build connections, and then take it all away again as business requirements change or access expires. Building connectivity pathways is often a manual, error prone work which itself can introduce vulnerabilities, and often means making network changes that carry inherent risks which need to be planned, managed, security assessed, peer reviewed and scheduled. + +Right now, building secure and private connectivity is risky. You generally have to allow somebody to enter your network, i.e. to connect (in to you vpn server, webserver, rdp, ssh etc) before they present credentials for authentication or know it advance where they're coming from and maintain ACLs. This can lead to all sorts of vulnerabilities and undesirable behaviour from port scanning and credential stuffing to zero day exploitation, MITM etc. + +Enclave aims to solve those problems. + +Enclave builds one-to-one connections (directly connected and end-to-end encrypted) without requiring changes to the existing underlying network. It does this from behind closed firewalls using only egress traffic and UDP/TCP hole punching. The result is secure, on-demand and direct connectivity which can be deployed in seconds, even when firewalls, subnets, NAT, subnets, virtual machines or containers are in between - it just works. +Enclave flips the connect-then-authenticate paradigm. It operates on need-to-know only connectivity, introducing resources only after _mutual_ authentication and authorisation have taken place. All network traffic is egress-only, so ACLs and open ports are no longer required. When you don't need to poke holes in firewalls, open listening ports, publish visible IP addresses or define public DNS records, your infrastructure can effectively go dark to to the public Internet, and also to attackers. + +Enclave then builds layer 2 network connectivity between those parties (so universal protocol support; i.e. multicast, ip, etc) and abstracts away details of the underlying network along with the complexities of NAT traversal and hole punching. Sometimes we describe Enclave as "VPN, without the VPN server" or "The network you want over the network you have". + +We use (certificate-based) authenticated key exchange between peers and compute ephemeral keys (on a per sessions basis) for symmetric ciphers which encrypt data-in-motion with perfect forward secrecy. + +## How Enclave is different? + +| | Enclave | Traditional VPN | Software Defined Perimeter (SDP) | +|-|---------|-----------------|----------------------------------| +| Serverless | ✅ | ❌ | | +| On demand | ✅ | ❌ | | +| No public IP addresses | ✅ | ❌ | | +| Works on "unreachable" networks | ✅ | ❌ | | +| Dynamic IP tolerant | ✅ | ❌ | | +| Zero configuration | ✅ | ❌ | | +| Mutual authentication | ✅ | ❌ | | +| end-to-end encryption | ✅ | ❌ | | +| Serverless | ✅ | ❌ | | +| Serverless | ✅ | ❌ | | + +## Enrol systems + +> To complete this quick start guide and build your first connection, you will need at least two systems installed and running Enclave. + + +Systems enrolled with Enclave can either be **locally managed** or **centrally managed**. Locally managed systems are great for solo or power users wanting ad-hoc connectivity in scenarios where oversight and centralised control are less important. Centrally managed systems are better suited to business environments allow for greater control and consistency as your Enclave networks grow in size and complexity. + +**Note:** Each system enrolled to your account can either be **locally managed** or **centrally controlled**, this setting can be changed at any time. Add tags to an enrolled system and it becomes centrally controlled. Remove all tags and it Enclave will allow the end-user to manage connectivity. + +
+ + +
+ +**Tip:** If you're not sure, start by [enrolling your first systems with tags & policy](/guides/quick-start-tags-and-policy). From d9171117655baa5026ce82bc7cc6757a4929b9d1 Mon Sep 17 00:00:00 2001 From: marc barry <67782240+enclave-marc-barry@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:33:47 +0000 Subject: [PATCH 19/22] Update jquery.toc-scroll.scss --- css/lib/jquery.toc-scroll.scss | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/css/lib/jquery.toc-scroll.scss b/css/lib/jquery.toc-scroll.scss index f5555ea..d77aa58 100644 --- a/css/lib/jquery.toc-scroll.scss +++ b/css/lib/jquery.toc-scroll.scss @@ -23,17 +23,15 @@ $font-inter: inter,Helvetica,sans-serif; .toc { border: 1px solid #ddd; border-radius: 4px 4px 0 0; } .toc .toc-heading { background-color: #f5f5f5; font-weight: bold; } */ -.toc { } +.toc { font-family: $font-inter; } .toc.affix { position: static; } -.toc-heading { color: #333333; border-radius: 6px 6px 0 0; border-bottom: 1px solid #e5e5e5; padding: 10px 15px; font-weight: normal; margin: 0 0 10px 0; } +.toc-heading { font-family: $font-inter; color: #333333; border-radius: 6px 6px 0 0; border-bottom: 1px solid #e5e5e5; padding: 10px 15px; font-weight: normal; margin: 0 0 10px 0; } .toc-heading i { padding-right: 5px; } -.toc-ul-root li a { +.toc-ul-root li a { font-family: $font-inter; letter-spacing: -0.04em; } - - .toc .nav > li a { padding-top: 3px; padding-bottom: 3px; border-left: 1px solid transparent; } .toc .nav > li.active > a, From eb3d55be3d0b29bd131f5b1217bd43242be6b036 Mon Sep 17 00:00:00 2001 From: marc barry <67782240+enclave-marc-barry@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:34:04 +0000 Subject: [PATCH 20/22] Update jquery.toc-scroll.scss --- css/lib/jquery.toc-scroll.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/lib/jquery.toc-scroll.scss b/css/lib/jquery.toc-scroll.scss index d77aa58..628851b 100644 --- a/css/lib/jquery.toc-scroll.scss +++ b/css/lib/jquery.toc-scroll.scss @@ -23,7 +23,7 @@ $font-inter: inter,Helvetica,sans-serif; .toc { border: 1px solid #ddd; border-radius: 4px 4px 0 0; } .toc .toc-heading { background-color: #f5f5f5; font-weight: bold; } */ -.toc { font-family: $font-inter; } +.toc { } .toc.affix { position: static; } .toc-heading { font-family: $font-inter; color: #333333; border-radius: 6px 6px 0 0; border-bottom: 1px solid #e5e5e5; padding: 10px 15px; font-weight: normal; margin: 0 0 10px 0; } .toc-heading i { padding-right: 5px; } From 44a013ea16d89537333fa2f204bcd40210c14697 Mon Sep 17 00:00:00 2001 From: marc barry <67782240+enclave-marc-barry@users.noreply.github.com> Date: Mon, 22 Mar 2021 13:08:15 +0000 Subject: [PATCH 21/22] style adjustments --- css/enclave.scss | 178 +++------------------------------ css/lib/jquery.toc-scroll.scss | 5 +- 2 files changed, 19 insertions(+), 164 deletions(-) diff --git a/css/enclave.scss b/css/enclave.scss index 9318729..697db1f 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -19,7 +19,7 @@ $box-shadow-hover: 0 3px 6px 0px rgba(27, 31, 35, 0.30); *, *:before, *:after { box-sizing: inherit; } -html { box-sizing: border-box; font-size: 10px; } +html { box-sizing: border-box; } body { margin: 0; padding: 0; } p, h1, h2, h3, h4, h5, h6 { margin-top: 0; } a { text-decoration: none; } @@ -35,6 +35,8 @@ html, body { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; + font-size: 14px; + h1,h2,h3,h4,h5,h6 { font-family: $font-body; } @@ -99,14 +101,6 @@ html, body { color: #777; } - p, - li, - td, - blockquote { - font-size: 15px; - line-height: 1.8; - } - blockquote { clear: both; font-size: inherit; @@ -787,7 +781,6 @@ nav.navbar { #docs-index-page, #docs-api, #docs-handbook, -#docs-policy, #docs-protocol, #docs-knowledge-base, #docs-tutorials-and-guides-base, @@ -814,6 +807,10 @@ nav.navbar { font-family: $font-body; color: rgba(0,0,0,.6); font-weight: 400; + + a { + font-size: .9346em; + } } p { @@ -829,8 +826,16 @@ nav.navbar { font-family: $font-code; font-weight: 400; } + + ul, + ol { + margin: 20px 0; - ol, ul { + ul, + ol { + margin: 20px 0; + } + li { margin: 8px 0 16px 0; @@ -840,14 +845,6 @@ nav.navbar { } } - ul, ol { - margin: 20px 0; - - ul, ol { - margin: 8px 0 12px 0; - } - } - blockquote { p { margin: 3px 0; @@ -1295,149 +1292,6 @@ nav.navbar { } } -#docs-policy { - #section-all-policies { - background-color: #f5f7fa; - - ul { - list-style: none; - margin: 0 auto; - padding: 60px 0 40px 12px; - text-align: center; - max-width: 700px; - } - - li { - display: inline-block; - margin: 0 12px 22px 0; - font-weight: 600; - } - - li a { - padding: 7px 12px 8px 12px; - font-size: 14px; - font-family: $font-heading; - border: 1px solid #e0e0e0; - border-radius: 3px; - text-decoration: none; - background-color: #fcfcfc; - opacity: 0.6; - transition: all .2s ease-in-out; - color: #337ab7; - } - - li a:hover { - background-color: $white; - opacity: 1; - } - - li.active a { - background-color: #374365; - border: 1px solid #374365; - color: $white; - opacity: 1; - } - } - - #section-policy-library { - padding: 40px 0 0 0; - position: relative; - text-align: center; - - ul { - margin: 70px 0 0 0; - padding: 0; - list-style: none; - text-align: center; - - li { - margin: 0 12px 48px 0; - display: inline-block; - - a { - text-decoration: none; - padding: 7px 12px 8px 12px; - padding: 17px 30px; - font-size: 14px; - font-family: "Lato"; - border: 1px solid #e0e0e0; - border-radius: 3px; - text-decoration: none; - background-color: #fcfcfc; - transition: all .2s ease-in-out; - color: #337ab7; - } - - a:hover { - background-color: #374365; - border: 1px solid #374365; - color: $white; - } - } - } - } - - #section-page { - - #orderedList { - - .outdent { - padding-inline-start: 0; - border-top: 1px dashed #eee; - } - - ol { - counter-reset: item; - list-style: none; - - h2 { - margin: 26px 0 16px 0; - font-weight: 500; - } - - ul { - list-style-type: disc; - } - } - - ol > li { - position: relative; - float: left; - margin: 0; - } - - ol > li > h2:before, - ol > li > p:before { - content: counters(item, ".") "."; - counter-increment: item; - display: inline-block; - padding-right: 5px; - font-weight: 500; - } - } - - ol, - ul { - li { - margin: 0 0 8px 0; - } - - li:last-child { - margin: 0; - } - } - - table { - th { - white-space: nowrap; - } - th, td, li { - font-size: 13px; - } - } - } -} - /************************************************************************************/ /************************************************************************************/ /************************************************************************************/ diff --git a/css/lib/jquery.toc-scroll.scss b/css/lib/jquery.toc-scroll.scss index 628851b..0c06fe5 100644 --- a/css/lib/jquery.toc-scroll.scss +++ b/css/lib/jquery.toc-scroll.scss @@ -29,10 +29,11 @@ $font-inter: inter,Helvetica,sans-serif; .toc-heading i { padding-right: 5px; } .toc-ul-root li a { font-family: $font-inter; - letter-spacing: -0.04em; + font-size: 1em; + letter-spacing: -0.01em; } -.toc .nav > li a { padding-top: 3px; padding-bottom: 3px; border-left: 1px solid transparent; } +.toc .nav > li a { padding-top: 6px; padding-bottom: 6px; border-left: 1px solid transparent; } .toc .nav > li.active > a, .toc .nav > li.active > a:hover , From 6200a17c7a8636f811009a8f8fcf150e37e03254 Mon Sep 17 00:00:00 2001 From: marc barry <67782240+enclave-marc-barry@users.noreply.github.com> Date: Wed, 31 Mar 2021 15:18:54 +0100 Subject: [PATCH 22/22] latest changes --- css/enclave.scss | 2 +- guides/quick-start-locally-managed.md | 32 ++++ guides/quick-start-tags-and-policy.md | 54 ++++++ guides/quick-start.md | 228 +++++----------------- guides/quick-start_2.md | 262 ++++++++++++++++++++++++++ handbook/index.html | 2 +- handbook/install/ubuntu.md | 63 +++++++ handbook/install/windows.md | 67 +++++++ img/docs/enclave-tray-icon.png | Bin 0 -> 19396 bytes 9 files changed, 526 insertions(+), 184 deletions(-) create mode 100644 guides/quick-start-locally-managed.md create mode 100644 guides/quick-start-tags-and-policy.md create mode 100644 guides/quick-start_2.md create mode 100644 handbook/install/ubuntu.md create mode 100644 handbook/install/windows.md create mode 100644 img/docs/enclave-tray-icon.png diff --git a/css/enclave.scss b/css/enclave.scss index 697db1f..4e50b85 100644 --- a/css/enclave.scss +++ b/css/enclave.scss @@ -809,7 +809,7 @@ nav.navbar { font-weight: 400; a { - font-size: .9346em; + font-size: .98em; } } diff --git a/guides/quick-start-locally-managed.md b/guides/quick-start-locally-managed.md new file mode 100644 index 0000000..3e01548 --- /dev/null +++ b/guides/quick-start-locally-managed.md @@ -0,0 +1,32 @@ +--- +layout: layout-page-docs +css-section: docs +parent: "Tutorials and Guides" +parentPath: guides +title: "Getting Started" +subtitle: "Quick Start Guide" +contentPreview: "A short guide to installing, licensing and running Enclave on Linux and Windows. Learn how to use the command line and user interface to get your first networks up and running as quickly as possible." +indexed: true +redirect_from: + - /quick-start + - /quick-start-cli +--- + +# {{page.title}} + +> To complete this quick start guide and build your first connection, you will need at least two systems installed and running Enclave. + + +## Install Enclave + +The fastest way to get started is to install Enclave on to two separate systems, enrol both of those systems to your account and then use Enclave to build a private connection. + +- [Windows](/handbook/install/windows) +- [Ubuntu](/handbook/install/ubuntu) +- [CentOS](/handbook/install/centos) +- [Arch Linux](/handbook/install/arch-linux) +- [Raspbian](/handbook/install/raspbian) +- [Docker](/handbook/install/docker) +- [Kubernetes](/handbook/install/kubernetes) +- [Synology NAS](/handbook/install/synology-nas) + diff --git a/guides/quick-start-tags-and-policy.md b/guides/quick-start-tags-and-policy.md new file mode 100644 index 0000000..1ab6146 --- /dev/null +++ b/guides/quick-start-tags-and-policy.md @@ -0,0 +1,54 @@ +--- +layout: layout-page-docs +css-section: docs +parent: "Tutorials and Guides" +parentPath: guides +title: "Enrolling with Tags & Policy" +subtitle: "Quick Start Guide" +contentPreview: "A short guide to installing, licensing and running Enclave on Linux and Windows. Learn how to use the command line and user interface to get your first networks up and running as quickly as possible." +indexed: true +redirect_from: + - /quick-start + - /quick-start-cli +--- + +# {{page.title}} + + +Welcome to the official tags & policy Enclave quick start guide. + +This guide will show you how to install and run Enclave to seamlessly connect your devices, systems, virtual machines and containers together on any infrastructure, with secure private networks that just work. + +In this guide we will show you how to enrol systems to your and **centrally manage** the connectivity between them. + +## Prerequisites + +To follow this guide and build your first connection with Enclave, you will need the following: + +1. An Enclave account, it's [free to register](https://portal.enclave.io/account/register) +2. Two computers running Windows, Linux or MacOS and Administrative access + +## About enrolment keys + +When you first registered for an account: + +- We automatically created an **initial enrolment key** called `Default Enrolment Key`. Enrolment keys allow you to enrol new systems to your account and can (optionally) apply an initial set of tags to systems as they enrol. +- We automatically created a **default tag** called `All Systems`. Tags are text labels which can be attached to one or more systems, allowing administrators to group together systems with similar characteristics. +- We automatically created a **default policy** called `Universe`. Policies determine which systems are connected to each other. Each policy is composed of sender tags and receiver tags. The Universe policy sets the `All Systems` tag on both the sender and receiver side of the policy. + +In its default state, your **Universe** policy has the same tag (**All Systems**) set on both sides of the policy. Having the same tag on both sides of a policy means that any systems with that tag attached will be connected to one another and allowed to send traffic to their peers. + +Since the **Default Enrolment Key** is configured to automatically apply the **All Systems** tag to new systems as they enrol, any systems enrolled using this key automatically gain full-mesh connectivity across your organisation. + +You can customise this configuration at any time, but to move to the next step and install Enclave you will need to obtain an enrolment key from your account on the Portal. + +## Enrol and connect two systems + +1. Visit the [**Enrol a new system**](https://portal.enclave.io/my/new-system) page in the Portal. +2. Select your `Default Enrolment Key` from the drop down list. +3. Make a note of the secret 30 character enrolment key, you will need it to install Enclave. **Security Note:** Enrolment keys should be treated as secrets; Handle, share and store as you would any other organisational secret. +4. Install Enclave on two separate systems. Follow the on-screen instructions to download Enclave for the relevant operating system. +5. Each installer will ask for an enrolment key, provide the same key to each system. +6. Your `Default Enrolment Key` is configured for manual approval of new enrolments. When new systems are enrolled using this key they will remain isolated and disabled from your wider account, until enrolment approval is granted by an account Administrator. To provide approval, visit the [**Unapproved systems**](https://portal.enclave.io/my/unapproved-systems) page, select both systems and click **Approve**. + ![Enclave Portal showing approve](https://via.placeholder.com/847x460) + diff --git a/guides/quick-start.md b/guides/quick-start.md index ccda560..e216c8c 100644 --- a/guides/quick-start.md +++ b/guides/quick-start.md @@ -1,11 +1,11 @@ --- -layout: layout-page-docs +layout: layout-page-docs-index-page-no-toc css-section: docs parent: "Tutorials and Guides" parentPath: guides title: "Quick Start Guide" -subtitle: "Enclave Documentation" -contentPreview: "A short guide to installing, licensing and running Enclave on Linux and Windows. Learn how to use the command line and user interface to get your first networks up and running as quickly as possible." +subtitle: "Getting Started With Enclave" +contentPreview: "A short guide to installing, enrolling and running Enclave on Linux, Windows and MacOS. Learn how to get your private network up and running in minutes." indexed: true redirect_from: - /quick-start @@ -14,182 +14,46 @@ redirect_from: # {{page.title}} -> **This guide applies to the following operating systems:** -> * Windows 7, 8 and 10 and Server 2012, 2016 and 2019 -> * Ubuntu 14.04 LTS, 16.04 LTS, 18.04 LTS, 18.10, 20.04 LTS -> * CentOS 7 - -Enclave is software which builds private, secure and directly connected computer networks. - -Each system running Enclave gets issued a certificate. The operators of each system exchange the names on their respective certificates, and instantly get a secure, directly connected, and private network. - -Setting up a connection between two or more systems requires mutual consent from all parties, and Enclave networks can only be established if all parties have exchanged their certificate names and agreed to cooperate with one another. - - - - - - - -## Installing on Windows - -1. From the [downloads section](https://portal.enclave.io/dashboard/download) of your account in the [Enclave Portal](https://portal.enclave.io/), download the latest version of Enclave and run the installer. - -## Installing on Linux - -1. From the [downloads section](https://portal.enclave.io/dashboard/download) of your account in the [Enclave Portal](https://portal.enclave.io/), select the appropriate installation script for your operating system and run in your terminal. If `sudo` is required you will be prompted. - -2. On Linux-based systems, the Enclave binaries unpack to `/opt/enclave/` and configuration and log files reside in `/etc/opt/enclave/`. Once installed, the installation script will display the following message: - - ``` - Installation finished. - Run sudo enclave license [LICENSE_KEY] to request a certificate. - sudo systemctl start enclave to start enclave, or sudo enclave start to start as an interactive foreground process. - sudo enclave add [PEER_NAME] to authorise a connection to another system running enclave. - sudo enclave for status. - ``` - -## Licencing Enclave - -To use Enclave, your system requires a certificate. License keys (available from the [Manage License Keys](https://portal.enclave.io/dashboard/licenses) section of your account in the [Enclave Portal](https://portal.enclave.io/)) allow Enclave to request certificates. If you have a trial account, a `30 day trial` license key will have been automatically generated for you. - -### User Interface - -2. When Enclave starts, use the license key from the [Enclave Portal](https://portal.enclave.io/) to request a certificate unique to your system. Enclave will generate a private key on your local system and encrypt it using the Windows Data Protection API. With a valid license, Enclave will then obtain a certificate for your system from the Enclave Certificate Authority. - -### Command Line - -1. With Enclave installed, Run Enclave using the `license` argument to provide a valid license. This will generate a new `Universe` profile file located at `/etc/opt/enclave/profiles/Universe.profile` containing configuration, your encrypted private key, and the newly issued certificate. - - In this example, . Keep the license key safe, without it you cannot request certificates. - - ```bash - $ sudo enclave license - Enter license key: - ``` - - You may also pass the license key as an argument, the example license key we're using here is `9DPLF-4L6T9-FYCR2-9D342-K85TT` but be aware that your license key may end up in your command line history. - - ```bash - $ sudo enclave license 4WPLF-4L6T9-FYCR2-9D342-K85TT - ``` - - Once the system has been licensed and issued with a certificate, Enclave can be started. - -## Starting and Stopping Enclave - -### User Interface - -On Windows, the tray application will have automatically started the Enclave network for you. - -### Command Line - - ```bash - $ sudo systemctl start enclave - ``` - -Alternatively, Enclave can be run interactively using the `start` argument. - - ```bash - $ sudo enclave start - ``` - -Once running, the `status` verb provides a snapshot of Enclave network health and peer connectivity. - - ``` - $ enclave status - - Local Identity: WZG24 - - Release Version . . : 2019.9.25.0 - Profile Name. . . . : Universe - Profile Location. . : /etc/opt/enclave/profiles/Universe.profile - Certificate . . . . : CN=WZG24 Expires=Never (Perpetual Issue) - Adapter Index . . . : tap0 (#4) - Binding Address . . : 0.0.0.0:36019 - Virtual Network . . : 100.64.0.0/10 (255.192.0.0) - Virtual Address . . : 100.77.23.184 - - Peer: discover.enclave.io - - Peer State. . . . . : Up - Certificate . . . . : CN=discover.enclave.io Expires=08/06/2024 09:59:59 - Endpoint. . . . . . : Tcp/35.176.215.206:443 - ``` - -## Creating connections - -In order to establish a connection, both sides must agree that the connection should take place. This means Alice must authorise Bob, and Bob must authorise Alice. To do this, operators exchange their certificate names. - -### User Interface - -1. Enclave will display your local certificate name as **Local Identity**. Give this name to your partner, and get your partner's Enclave identity in return. In this example, our local certificate name is `WZG24`. - -2. If your partner's certificate name is `72LVG` then use the `New Connection` button to authorise your system to connect with theirs. They should do - -3. Your partner should do the same in return and authorise their Enclave network to connect to your certificate name. - - ![Example Issue Token](/img/docs/highlighted-authorise-connection.png) - -4. When both systems have expressed a mutual intent to communicate, Enclave will automatically handle firewall traversal, peer discovery and key exchange to setup a direct and end-to-end encrypted connection between the cooperating parties. - - The connection will remain in place until either; - - * One side loses their network connection. Once restored, Enclave will re-establish network tunnel. - * One (or both) sides remove the authorisation they made to talk with their partner, at which point the connection is destroyed. - * One (or both) certificates expire, at which point the connection is destroyed. - -> **Key Principle** — unlike traditional Certificate Authorities, you do not need to specify a domain name, or hostname in order to obtain a certificate. The CA randomly selects the name for each certificate it issues. All communication in Enclave networks is mutually authenticated, so endpoints have no strong real-world identity association to their certificates other than ownership of the corresponding private keys. -> -> For this reason, the Certificate Authority selects names which are are short, sharable and human friendly — like telephone numbers, or car registration number plates. - -### Command Line - -To continue to example, assume we are Alice and our partner is Bob. We have the following certificate names; - -| Person | Certificate Name | -| ------ | ---------------- | -| Alice | `WZG24` | -| Bob | `72LVG` | - -We will authorise Bob's certificate using the `add` verb, and describe `-d` in a familiar way that this certificate name belongs to Bob. - -```sh -$ enclave add 72LVG -d "Bob" -``` - -On Bob's system, he must now make a counter assertion that he wants to to us. Until then, no connection is possible. - -```sh -$ enclave add WZG24 -d "Alice" -``` - -Once a mutual assertion is made by both parties, Enclave will setup the connection and establish a private, shared virtual network between the parties which can be used for any application or service. - -> Enclave traffic is subject to filtering by the local firewall. Pay particular attention to the local firewall configuration, Without explicitly permitting traffic to cross an Enclave network port, peers may connect but fail to exchange network traffic. - -In order to check the status of the connection, use the `status` verb. - -```sh -$ enclave status -``` - -## Removing connections - -All connections in Enclave require mutual consent from both parties. Either party may change their mind at any time and tear down the connection. This is done by removing the authorisation created in the previous section. - -### User Interface - -Right click on the partner connection you want to terminate and click remove. - -### Command Line - -Bob may terminate his connection with us by removing the authorisation he made to communicate with our certificate name. - -```sh -$ enclave remove WZG24 -``` \ No newline at end of file +Welcome to the official Enclave quick start guide. + +This guide will show you how to install and run Enclave to seamlessly connect your devices, systems, virtual machines and containers together on any infrastructure, with secure private networks that just work. + +## Prerequisites + +To follow this guide and build your first connection with Enclave, you will need to: + +1. Have already registered for a **free** account on our [Portal](https://portal.enclave.io). +2. Have administrative access to **at least two** systems (either Windows, Linux, MacOS or one of our other supported platforms). + +## Choose a guide + +Systems registered with Enclave can either be **locally managed** (by the end-users of those systems), or they can be **centrally managed** using tags and policy controls defined in the Portal. There are quick start guides for both options, but we recommend most new users start by enrolling systems using centralised management with [tags & policy](/guides/quick-start-tags-and-policy). + +Any enrolled system can be easily switched between locally, or centrally managed modes at any time simply by adding, or removing tags in the Portal. If a Portal Administrator adds tags to an enrolled system, it automatically becomes centrally controlled. If a Portal Administrator removes all of the tags from a particular system, Enclave will allow the end-user(s) to manage connectivity. + +
+ +
diff --git a/guides/quick-start_2.md b/guides/quick-start_2.md new file mode 100644 index 0000000..cd85b14 --- /dev/null +++ b/guides/quick-start_2.md @@ -0,0 +1,262 @@ +--- +layout: layout-page-docs +css-section: docs +parent: "Tutorials and Guides" +parentPath: guides +title: "Getting Started" +subtitle: "Quick Start Guide" +contentPreview: "A short guide to installing, licensing and running Enclave on Linux and Windows. Learn how to use the command line and user interface to get your first networks up and running as quickly as possible." +indexed: true +--- + +# {{page.title}} + +Introduction .. + +Right now, building secure and private connectivity is hard. Administrators have to configure firewalls and VPNs, manage IP addresses, subnets, ACLs, NAT, routing tables, certificates and secret keys etc, and then take it all down again after access expires. Lots of manual, error prone work which can introduce vulnerabilities, and often require changes which carry inherent risks that need to be planned, security assessed, scheduled etc. + +Right now, building secure and private connectivity is risky. You generally have to allow somebody to enter your network, i.e. to connect (in to you vpn server, webserver, rdp, ssh etc) before they present credentials for authentication or know it advance where they're coming from and maintain ACLs. This can lead to all sorts of vulnerabilities and undesirable behaviour from port scanning and credential stuffing to zero day exploitation, MITM etc. + +Enclave aims to solve those two problems. + +Enclave builds one-to-one connections (directly connected and end-to-end encrypted) without requiring changes to the existing underlying network. It does this from behind closed firewalls using only egress traffic and UDP/TCP hole punching. The result is secure, on-demand and direct connectivity which can be deployed in seconds, even when firewalls, subnets, NAT, subnets, virtual machines or containers are in between - it just works. +Enclave flips the connect-then-authenticate paradigm. It operates on need-to-know only connectivity, introducing resources only after _mutual_ authentication and authorisation have taken place. All network traffic is egress-only, so ACLs and open ports are no longer required. When you don't need to poke holes in firewalls, open listening ports, publish visible IP addresses or define public DNS records, your infrastructure can effectively go dark to to the public Internet, and also to attackers. + + +At the heart of Enclave is our discovery service (i.e. an approximation of the proposed QLSP). It helps participants find each another on any network, any infrastructure and in any geography. Our endpoint-based software relies on our discovery service to provide introductions between cooperating parties such that direct and private network connectivity can be established, even when those parties are dark to the Internet - protected behind closed firewalls. + + + +Enclave then builds layer 2 network connectivity between those parties (so universal protocol support; i.e. multicast, ip, etc) and abstracts away details of the underlying network along with the complexities of NAT traversal and hole punching. Sometimes we describe Enclave as "VPN, without the VPN server" or "The network you want over the network you have". + + + +There is no quantum component to Enclave today. We use (certificate-based) authenticated key exchange between peers and compute ephemeral keys (on a per sessions basis) for symmetric ciphers which encrypt data-in-motion with perfect forward secrecy. + + + +## How Enclave is different? + +| | Enclave | Traditional VPN | Software Defined Perimeter (SDP) | +|-|---------|-----------------|----------------------------------| +| Serverless | ✅ | ❌ | | +| On demand | ✅ | ❌ | | +| No public IP addresses | ✅ | ❌ | | +| Works on "unreachable" networks | ✅ | ❌ | | +| Dynamic IP tolerant | ✅ | ❌ | | +| Zero configuration | ✅ | ❌ | | +| Mutual authentication | ✅ | ❌ | | +| end-to-end encryption | ✅ | ❌ | | +| Serverless | ✅ | ❌ | | +| Serverless | ✅ | ❌ | | + +## Install Enclave + +Enclave is software which builds private, secure and directly connected computer networks. + +- [Windows](/handbook/install/windows) +- [Ubuntu](/handbook/install/ubuntu) +- [CentOS](/handbook/install/centos) +- [Arch Linux](/handbook/install/arch-linux) +- [Raspbian](/handbook/install/raspbian) +- [Docker](/handbook/install/docker) +- [Kubernetes](/handbook/install/kubernetes) +- [Synology NAS](/handbook/install/synology-nas) + + +## Build your first connection + +> To complete this quick start guide and build your first connection, you will need at least two systems installed and running Enclave. + + +Systems enrolled with Enclave can either be **locally managed** or **centrally managed**. Locally managed systems are great for solo or power users wanting ad-hoc connectivity in scenarios where oversight and centralised control are less important. Centrally managed systems are better suited to business environments allow for greater control and consistency as your Enclave networks grow in size and complexity. + + 1. **Locally managed:**
+ On a locally managed system, the local users of that system are responsible for controlling Enclave. You can quickly start building network connections to other enrolled systems, visit the [Getting connected](/guides/quick-start#getting-connected) section of our getting started guide to learn more about locally managed systems. + + 2. **Centrally managed:**
+ Centrally managed systems are controlled by pre-defined [Tags](/handbook/portal/tags) and [Policies](/handbook/portal/policies) in your account [Portal](https://portal.enclave.io/). Visit the [Getting connected](/guides/quick-start#getting-connected) section of our getting started guide to learn more about adding tags to this system and enabling centralised management. + + + + + + + +> **This guide applies to the following operating systems:** +> * Windows 7, 8 and 10 and Server 2012, 2016 and 2019 +> * Ubuntu 14.04 LTS, 16.04 LTS, 18.04 LTS, 18.10, 20.04 LTS +> * CentOS 7 + +Each system running Enclave gets issued a certificate. The operators of each system exchange the names on their respective certificates, and instantly get a secure, directly connected, and private network. + +Setting up a connection between two or more systems requires mutual consent from all parties, and Enclave networks can only be established if all parties have exchanged their certificate names and agreed to cooperate with one another. + + + + + + + +## Installing on Windows + +1. From the [downloads section](https://portal.enclave.io/dashboard/download) of your account in the [Enclave Portal](https://portal.enclave.io/), download the latest version of Enclave and run the installer. + +## Installing on Linux + +1. From the [downloads section](https://portal.enclave.io/dashboard/download) of your account in the [Enclave Portal](https://portal.enclave.io/), select the appropriate installation script for your operating system and run in your terminal. If `sudo` is required you will be prompted. + +2. On Linux-based systems, the Enclave binaries unpack to `/opt/enclave/` and configuration and log files reside in `/etc/opt/enclave/`. Once installed, the installation script will display the following message: + + ``` + Installation finished. + Run sudo enclave license [LICENSE_KEY] to request a certificate. + sudo systemctl start enclave to start enclave, or sudo enclave start to start as an interactive foreground process. + sudo enclave add [PEER_NAME] to authorise a connection to another system running enclave. + sudo enclave for status. + ``` + +## Licencing Enclave + +To use Enclave, your system requires a certificate. License keys (available from the [Manage License Keys](https://portal.enclave.io/dashboard/licenses) section of your account in the [Enclave Portal](https://portal.enclave.io/)) allow Enclave to request certificates. If you have a trial account, a `30 day trial` license key will have been automatically generated for you. + +### User Interface + +2. When Enclave starts, use the license key from the [Enclave Portal](https://portal.enclave.io/) to request a certificate unique to your system. Enclave will generate a private key on your local system and encrypt it using the Windows Data Protection API. With a valid license, Enclave will then obtain a certificate for your system from the Enclave Certificate Authority. + +### Command Line + +1. With Enclave installed, Run Enclave using the `license` argument to provide a valid license. This will generate a new `Universe` profile file located at `/etc/opt/enclave/profiles/Universe.profile` containing configuration, your encrypted private key, and the newly issued certificate. + + In this example, . Keep the license key safe, without it you cannot request certificates. + + ```bash + $ sudo enclave license + Enter license key: + ``` + + You may also pass the license key as an argument, the example license key we're using here is `9DPLF-4L6T9-FYCR2-9D342-K85TT` but be aware that your license key may end up in your command line history. + + ```bash + $ sudo enclave license 4WPLF-4L6T9-FYCR2-9D342-K85TT + ``` + + Once the system has been licensed and issued with a certificate, Enclave can be started. + +## Starting and Stopping Enclave + +### User Interface + +On Windows, the tray application will have automatically started the Enclave network for you. + +### Command Line + + ```bash + $ sudo systemctl start enclave + ``` + +Alternatively, Enclave can be run interactively using the `start` argument. + + ```bash + $ sudo enclave start + ``` + +Once running, the `status` verb provides a snapshot of Enclave network health and peer connectivity. + + ``` + $ enclave status + + Local Identity: WZG24 + + Release Version . . : 2019.9.25.0 + Profile Name. . . . : Universe + Profile Location. . : /etc/opt/enclave/profiles/Universe.profile + Certificate . . . . : CN=WZG24 Expires=Never (Perpetual Issue) + Adapter Index . . . : tap0 (#4) + Binding Address . . : 0.0.0.0:36019 + Virtual Network . . : 100.64.0.0/10 (255.192.0.0) + Virtual Address . . : 100.77.23.184 + + Peer: discover.enclave.io + + Peer State. . . . . : Up + Certificate . . . . : CN=discover.enclave.io Expires=08/06/2024 09:59:59 + Endpoint. . . . . . : Tcp/35.176.215.206:443 + ``` + +## Creating connections + +In order to establish a connection, both sides must agree that the connection should take place. This means Alice must authorise Bob, and Bob must authorise Alice. To do this, operators exchange their certificate names. + +### User Interface + +1. Enclave will display your local certificate name as **Local Identity**. Give this name to your partner, and get your partner's Enclave identity in return. In this example, our local certificate name is `WZG24`. + +2. If your partner's certificate name is `72LVG` then use the `New Connection` button to authorise your system to connect with theirs. They should do + +3. Your partner should do the same in return and authorise their Enclave network to connect to your certificate name. + + ![Example Issue Token](/img/docs/highlighted-authorise-connection.png) + +4. When both systems have expressed a mutual intent to communicate, Enclave will automatically handle firewall traversal, peer discovery and key exchange to setup a direct and end-to-end encrypted connection between the cooperating parties. + + The connection will remain in place until either; + + * One side loses their network connection. Once restored, Enclave will re-establish network tunnel. + * One (or both) sides remove the authorisation they made to talk with their partner, at which point the connection is destroyed. + * One (or both) certificates expire, at which point the connection is destroyed. + +> **Key Principle** — unlike traditional Certificate Authorities, you do not need to specify a domain name, or hostname in order to obtain a certificate. The CA randomly selects the name for each certificate it issues. All communication in Enclave networks is mutually authenticated, so endpoints have no strong real-world identity association to their certificates other than ownership of the corresponding private keys. +> +> For this reason, the Certificate Authority selects names which are are short, sharable and human friendly — like telephone numbers, or car registration number plates. + +### Command Line + +To continue to example, assume we are Alice and our partner is Bob. We have the following certificate names; + +| Person | Certificate Name | +| ------ | ---------------- | +| Alice | `WZG24` | +| Bob | `72LVG` | + +We will authorise Bob's certificate using the `add` verb, and describe `-d` in a familiar way that this certificate name belongs to Bob. + +```sh +$ enclave add 72LVG -d "Bob" +``` + +On Bob's system, he must now make a counter assertion that he wants to to us. Until then, no connection is possible. + +```sh +$ enclave add WZG24 -d "Alice" +``` + +Once a mutual assertion is made by both parties, Enclave will setup the connection and establish a private, shared virtual network between the parties which can be used for any application or service. + +> Enclave traffic is subject to filtering by the local firewall. Pay particular attention to the local firewall configuration, Without explicitly permitting traffic to cross an Enclave network port, peers may connect but fail to exchange network traffic. + +In order to check the status of the connection, use the `status` verb. + +```sh +$ enclave status +``` + +## Removing connections + +All connections in Enclave require mutual consent from both parties. Either party may change their mind at any time and tear down the connection. This is done by removing the authorisation created in the previous section. + +### User Interface + +Right click on the partner connection you want to terminate and click remove. + +### Command Line + +Bob may terminate his connection with us by removing the authorisation he made to communicate with our certificate name. + +```sh +$ enclave remove WZG24 +``` \ No newline at end of file diff --git a/handbook/index.html b/handbook/index.html index 34a1325..1a07523 100644 --- a/handbook/index.html +++ b/handbook/index.html @@ -35,7 +35,7 @@

{{page.title}}

  • Docker
  • Kubernetes
  • Synology NAS
  • -
  • Testing your connection
  • +
  • Testing your connection (http://connection-test.enclave/?)
  • diff --git a/handbook/install/ubuntu.md b/handbook/install/ubuntu.md new file mode 100644 index 0000000..51d5efc --- /dev/null +++ b/handbook/install/ubuntu.md @@ -0,0 +1,63 @@ +--- +layout: layout-page-docs +css-section: docs-handbook +parent: "Enclave Handbook" +parentPath: handbook +title: "Installing Enclave on Ubuntu" +subtitle: "User Guide" +contentPreview: "" +indexed: true +--- + +# {{page.title}} + +> This guide applies to Ubuntu 14.04 LTS, 16.04 LTS, 18.04 LTS, 18.10, 19.10 and 20.04 LTS. + +Packages are available for x86, x64 and ARM. All work with Ubuntu 14.04 LTS and higher. + +1. Install the **apt-transport-https** plugin. + ```bash + sudo apt-get install apt-transport-https + ``` +2. Add Enclave’s package signing key and repository to apt sources. + ```bash + curl -fsSL https://packages.enclave.io/apt/enclave.stable.gpg | sudo apt-key add - + curl -fsSL https://packages.enclave.io/apt/enclave.stable.list | sudo tee /etc/apt/sources.list.d/enclave.list + sudo apt-get update + ``` +3. Install Enclave. + ```bash + sudo apt-get install enclave + ``` +4. You will need provide a valid [Enrolment key](/handbook/portal/enrolment-keys) from your [Portal](https://portal.enclave.io/) account to complete installation. + +**Congratulations!** You've successfully enrolled a new system to your Enclave account. + +## Next steps + +Depending on the type of enrolment key you used to enrol your new system, it might be held waiting for an Administrator to provide enrolment approval in your account [Portal](https://portal.enclave.io/). Log in to authorise the enrolment of your new system and configure additional options like DNS. + +**Find your local Enclave IP address**
    +Run `enclave status` at the command line to find the **Virtual Address** of your newly installed system. + +**Connect to other systems**
    +Add [Tags](/handbook/portal/tags) to this system in the [Portal](https://portal.enclave.io/) to enable centralised management of network connectivity through [Policies](/handbook/portal/policies), or use this system without centralised management and allow local users to [define and manage](/handbook/portal/key-concepts) connectivity to other Enclave systems. + +**Test connectivity**
    +Pings are a great start, but don't forget to check the local firewall configuration to ensure ICMP traffic is permitted. + +## Starting and stopping Enclave + +The installer creates a lightweight supervisor service set to run at system start which is responsible for starting the Enclave fabric. The supervisor service exists to start, stop and restart Enclave fabric in the background as daemon child processes. + +The supervisor service responds to the Enclave CLI verbs [start](/handbook/fabric/cli/start) and [stop](/handbook/fabric/cli/stop) to control the Fabric. + +## Updating Enclave + +![Enclave tray application showing an available update](https://via.placeholder.com/847x460) + +## Uninstalling Enclave + +**TODO** `apt-get remove` and `apt-get purge` + +> **Note:** Enclave does not backup a system's private keys. Lost or deleted private keys are not recoverable. If a system's configuration and private keys are lost, to use that system with Enclave again it must be re-enrolled. \ No newline at end of file diff --git a/handbook/install/windows.md b/handbook/install/windows.md new file mode 100644 index 0000000..515b575 --- /dev/null +++ b/handbook/install/windows.md @@ -0,0 +1,67 @@ +--- +layout: layout-page-docs +css-section: docs-handbook +parent: "Enclave Handbook" +parentPath: handbook +title: "Installing Enclave on Windows" +subtitle: "User Guide" +contentPreview: "" +indexed: true +--- + +# {{page.title}} + +> This guide applies to Windows 7, 8 and 10 and Windows Server 2012, 2016 and 2019. + +Enclave works with Windows 7 or Windows Server 2012 and higher. + +1. Download the latest Windows installer from the [Downloads](https://portal.enclave.io/download) section of your account [Portal](https://portal.enclave.io/). +2. Run the installer. Administrator privileges are required, but the installer will prompt for privilege elevation if necessary. +3. You will need to provide a valid [Enrolment key](/handbook/portal/enrolment-keys) from your [Portal](https://portal.enclave.io/) account to complete installation. +4. Once installed, Enclave will start and add a new tray icon to your system tray. If the Enclave tray icon is not visible, click the up arrow to find it in the hidden system tray overflow area. +
    + Tray icon hidden in the icon overflow area +
    +6. Right click on the tray icon to access the Enclave user interface. +7. Depending on the type of enrolment key you used to enrol your new system, it might be held waiting for an Administrator to provide enrolment approval in your account [Portal](https://portal.enclave.io/). Log in to authorise the enrolment of your new system if you need to and configure additional options like DNS. + +**You're all set!** You've successfully enrolled a new system to your Enclave account. + +## Next steps + +**Connect to other Enclave systems:**
    +Visit the [building your first connection](/guides/quick-start#getting-connected) section of our getting started guide to learn how to control Enclave. + +**Find your local Enclave IP address:**
    +Open the Windows tray application to find your **Local Address** or run `enclave status` from a command prompt. + +**Test connectivity:**
    +Pings are a great start, but don't forget to check the local Windows firewall configuration to ensure ICMP traffic is permitted. + +## Starting and stopping Enclave + +The Windows installer creates a lightweight supervisor service (named **Enclave** in the Services MMC snap-in) which automatically runs at system start and is responsible for starting the Enclave fabric. The supervisor service exists to start, stop and restart Enclave fabric in the background as child processes. + +The supervisor service responds to the Enclave CLI verbs [start](/handbook/fabric/cli/start) and [stop](/handbook/fabric/cli/stop) to control the Fabric. + +## Updating Enclave + +![Enclave tray application showing an available update](https://via.placeholder.com/847x460) + +## Uninstalling Enclave + +Enclave can be removed from a system using the Windows Control Panel. Open either **Programs and Features** or **Apps and Features**. Select **Enclave** to remove / uninstall. During uninstallation Enclave will ask if you want to **Remove network fabric configuration and private keys?** Answering yes will empty the following directory: + +``` +C:\Program Files\Enclave Networks\Enclave\Agent\profiles\ +``` + +Users should remove configuration and private keys when uninstalling if they are not planning to use Enclave again on a that particular system, or want to forcibly deregister. + +> **Note:** Enclave does not backup a system's private keys. Lost or deleted private keys are not recoverable. If a system's configuration and private keys are lost, to use that system with Enclave again it must be re-enrolled. + +## What to do if the install fails + +If an install goes horribly wrong, remove Enclave using the uninstaller and try again. If you're still encountering problems, examine the log files in `C:\Program Files\Enclave Networks\Enclave\Agent\logs`. If an install is interrupted use the Enclave setup file to restart the process. + +For troubleshooting and errors, use the site search or visit our [troubleshooting](/troubleshooting/) section to look for information about common error messages. diff --git a/img/docs/enclave-tray-icon.png b/img/docs/enclave-tray-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c504abb3c18ccc57ed0d6446ffa539bf6bf3079 GIT binary patch literal 19396 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