mirror of
https://github.com/safing/web
synced 2025-04-17 17:39:08 +00:00
523 lines
9.2 KiB
SCSS
523 lines
9.2 KiB
SCSS
* {
|
|
font-family: "Roboto";
|
|
}
|
|
|
|
body {
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.not-allowed {
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.spn-shadow {
|
|
box-shadow: 0 0px 90px 0 rgba(59, 93, 199, 0.1), 0 0px 5px 0 rgba(0, 0, 0, 0);
|
|
}
|
|
|
|
.hover:hover {
|
|
box-shadow: 0 0px 90px 0 rgba(59, 93, 199, 0.1), 0 0px 5px 0 rgba(0, 0, 0, 0);
|
|
}
|
|
|
|
.shake-horizontal {
|
|
-webkit-animation: shake-horizontal .8s cubic-bezier(.455, .03, .515, .955) both;
|
|
animation: shake-horizontal .8s cubic-bezier(.455, .03, .515, .955) both
|
|
}
|
|
|
|
@-webkit-keyframes shake-horizontal {
|
|
0%, 100% {
|
|
-webkit-transform: translateX(0);
|
|
transform: translateX(0)
|
|
}
|
|
|
|
10%, 30%, 50%, 70% {
|
|
-webkit-transform: translateX(-10px);
|
|
transform: translateX(-10px)
|
|
}
|
|
|
|
20%, 40%, 60% {
|
|
-webkit-transform: translateX(10px);
|
|
transform: translateX(10px)
|
|
}
|
|
|
|
80% {
|
|
-webkit-transform: translateX(8px);
|
|
transform: translateX(8px)
|
|
}
|
|
|
|
90% {
|
|
-webkit-transform: translateX(-8px);
|
|
transform: translateX(-8px)
|
|
}
|
|
}
|
|
|
|
@keyframes shake-horizontal {
|
|
0%, 100% {
|
|
-webkit-transform: translateX(0);
|
|
transform: translateX(0)
|
|
}
|
|
|
|
10%, 30%, 50%, 70% {
|
|
-webkit-transform: translateX(-10px);
|
|
transform: translateX(-10px)
|
|
}
|
|
|
|
20%, 40%, 60% {
|
|
-webkit-transform: translateX(10px);
|
|
transform: translateX(10px)
|
|
}
|
|
|
|
80% {
|
|
-webkit-transform: translateX(8px);
|
|
transform: translateX(8px)
|
|
}
|
|
|
|
90% {
|
|
-webkit-transform: translateX(-8px);
|
|
transform: translateX(-8px)
|
|
}
|
|
}
|
|
|
|
.spin {
|
|
animation-name: spin;
|
|
animation-duration: 21000ms;
|
|
animation-iteration-count: infinite;
|
|
animation-timing-function: linear;
|
|
}
|
|
|
|
@keyframes spin {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.heart {
|
|
// animation: .8s infinite beatHeart;
|
|
}
|
|
|
|
@keyframes beatHeart {
|
|
0% {
|
|
transform: scale(1);
|
|
}
|
|
|
|
25% {
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
40% {
|
|
transform: scale(1);
|
|
}
|
|
|
|
60% {
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
100% {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
#menu-toggle:checked+#menu {
|
|
display: block;
|
|
}
|
|
|
|
.wiggle {
|
|
animation: wiggle .6s infinite alternate;
|
|
}
|
|
|
|
@keyframes wiggle {
|
|
0% {
|
|
transform: rotate(4deg);
|
|
}
|
|
|
|
100% {
|
|
transform: rotate(10deg);
|
|
}
|
|
}
|
|
|
|
.line {
|
|
width:100%;
|
|
text-align:center;
|
|
border-bottom: 2px solid rgba(0, 0, 0, 0.2);
|
|
line-height:0.1em;
|
|
margin:10px 0 20px;
|
|
}
|
|
.line span {
|
|
background:#fff;
|
|
padding:0 25px;
|
|
}
|
|
|
|
.support p{
|
|
color: #7d7d7d;
|
|
}
|
|
|
|
a.link {
|
|
--text-opacity: 1;
|
|
color: #667eea;
|
|
color: rgba(102, 126, 234, var(--text-opacity));
|
|
text-decoration: inherit;
|
|
background-color: transparent;
|
|
transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
|
|
|
|
&:hover{
|
|
opacity: .5;
|
|
transition-duration: 150ms;
|
|
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
|
|
}
|
|
}
|
|
|
|
.opacity-55 {
|
|
opacity: 0.55;
|
|
}
|
|
|
|
.hover\:opacity-55:hover {
|
|
opacity: 0.55;
|
|
}
|
|
|
|
.card{
|
|
max-width: auto;
|
|
}
|
|
|
|
.tablecard{
|
|
max-width: auto;
|
|
|
|
h3{
|
|
padding-top: 2.5rem !important;
|
|
}
|
|
|
|
ul, ol{
|
|
padding: 1rem;
|
|
|
|
li{
|
|
padding-top: 0.7rem;
|
|
color: #898989;
|
|
}
|
|
}
|
|
|
|
ul {
|
|
list-style-type: circle;
|
|
}
|
|
|
|
ol {
|
|
list-style-type: decimal;
|
|
}
|
|
|
|
a{
|
|
display: inline-table;
|
|
position: none;
|
|
padding-top: 1rem;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
.cardshadow{
|
|
box-shadow: 0 0px 5px 0 rgba(0, 0, 0, 0), 0 0px 90px 0 rgba(59, 93, 199, 0.1);
|
|
}
|
|
|
|
.blogwrapper{
|
|
display: grid;
|
|
grid-template-columns: repeat(1, auto);
|
|
grid-template-rows: auto;
|
|
grid-row-gap: 15px;
|
|
grid-auto-flow: row;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
max-width: 1350px;
|
|
}
|
|
|
|
@media (min-width: 640px) {
|
|
.blogwrapper{
|
|
grid-template-columns: repeat(1, auto);
|
|
}
|
|
|
|
#icon{
|
|
margin-top: 2rem;
|
|
}
|
|
}
|
|
|
|
.nextwrapper{
|
|
display: grid;
|
|
grid-template-columns: repeat(1, auto);
|
|
grid-template-rows: auto;
|
|
grid-row-gap: 1rem;
|
|
grid-column-gap: 1rem;
|
|
grid-auto-flow: row;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
max-width: 1350px;
|
|
}
|
|
|
|
@media (min-width: 640px) {
|
|
.nextwrapper{
|
|
grid-template-columns: repeat(1, auto);
|
|
}
|
|
}
|
|
|
|
@media (min-width: 1024px) {
|
|
.nextwrapper{
|
|
grid-template-columns: repeat(3, minmax(auto, 445px));
|
|
.card{
|
|
max-width: 445px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.dropinput {
|
|
position: absolute;
|
|
opacity: 0;
|
|
z-index: -1;
|
|
}
|
|
|
|
.tabs {
|
|
border-radius: 8px;
|
|
overflow: visible;
|
|
|
|
}
|
|
.tab {
|
|
width: 100%;
|
|
color: black;
|
|
overflow: hidden;
|
|
&-label {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
padding: 1em;
|
|
background: transparent;
|
|
font-weight: bold;
|
|
cursor: pointer;
|
|
&:hover {
|
|
background: transparent;
|
|
}
|
|
&::after {
|
|
content: " ";
|
|
width: 1em;
|
|
height: 1em;
|
|
text-align: center;
|
|
transition: all .0s;
|
|
transition-timing-function: ease;
|
|
transform: rotate(-90deg);
|
|
}
|
|
|
|
}
|
|
&-content {
|
|
max-height: 0;
|
|
padding: 0 1em;
|
|
color: black;
|
|
background: transparent;
|
|
transition: all .3s;
|
|
transition-timing-function: ease-in-out;
|
|
|
|
}
|
|
&-close {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
padding: 1em;
|
|
font-size: 0.75em;
|
|
background: transparent;
|
|
cursor: pointer;
|
|
&:hover {
|
|
background: transparent;
|
|
}
|
|
}
|
|
}
|
|
|
|
#icon {
|
|
width: 35px;
|
|
position: fixed;
|
|
}
|
|
|
|
#icontwo {
|
|
width: 35px;
|
|
}
|
|
|
|
input:checked {
|
|
|
|
+ label #icon {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
+ label #icontwo {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
~ .tab-content {
|
|
max-height: 100%;
|
|
padding: 1em;
|
|
}
|
|
}
|
|
|
|
.dot {
|
|
position: absolute;
|
|
right: 0;
|
|
height: 5px;
|
|
width: 5px;
|
|
background-color: #6188ff;
|
|
border-radius: 50%;
|
|
display: inline-block;
|
|
}
|
|
|
|
[tooltip] {
|
|
position: relative;
|
|
}
|
|
|
|
[tooltip]::before,
|
|
[tooltip]::after {
|
|
text-transform: none;
|
|
font-size: .9em;
|
|
line-height: 1;
|
|
user-select: none;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
display: none;
|
|
opacity: 0;
|
|
}
|
|
|
|
[tooltip]::before {
|
|
content: '';
|
|
border: 5px solid transparent;
|
|
z-index: 1001;
|
|
}
|
|
|
|
[tooltip]::after {
|
|
content: attr(tooltip);
|
|
font-family: Helvetica, sans-serif;
|
|
text-align: center;
|
|
min-width: 3em;
|
|
max-width: 21em;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
padding: 1ch 2ch;
|
|
border-radius: 100px;
|
|
box-shadow: 0 1em 2em -.5em rgba(0, 0, 0, 0.35);
|
|
background: #333;
|
|
color: #fff;
|
|
z-index: 1000;
|
|
}
|
|
|
|
[tooltip]:hover::before,
|
|
[tooltip]:hover::after {
|
|
display: block;
|
|
}
|
|
|
|
[tooltip='']::before,
|
|
[tooltip='']::after {
|
|
display: none !important;
|
|
}
|
|
|
|
[tooltip]:not([flow])::before,
|
|
[tooltip][flow^="up"]::before {
|
|
bottom: 100%;
|
|
border-bottom-width: 0;
|
|
border-top-color: #333;
|
|
}
|
|
|
|
[tooltip]:not([flow])::after,
|
|
[tooltip][flow^="up"]::after {
|
|
bottom: calc(100% + 5px);
|
|
}
|
|
|
|
[tooltip]:not([flow])::before,
|
|
[tooltip]:not([flow])::after,
|
|
[tooltip][flow^="up"]::before,
|
|
[tooltip][flow^="up"]::after {
|
|
left: 50%;
|
|
transform: translate(-50%, -.5em);
|
|
}
|
|
|
|
@keyframes tooltips-vert {
|
|
to {
|
|
opacity: .9;
|
|
transform: translate(-50%, 0);
|
|
}
|
|
}
|
|
|
|
[tooltip]:not([flow]):hover::before,
|
|
[tooltip]:not([flow]):hover::after,
|
|
[tooltip][flow^="up"]:hover::before,
|
|
[tooltip][flow^="up"]:hover::after {
|
|
animation: tooltips-vert 300ms ease-out forwards;
|
|
}
|
|
|
|
.notification {
|
|
position: relative;
|
|
opacity: 0;
|
|
animation: notification 0.5s forwards ease-in;
|
|
animation-delay: 0.1s;
|
|
}
|
|
|
|
@keyframes notification {
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
// This is a hacky way to solve this problem.
|
|
// I could not find away in tailwind to set a max of cols and to allow
|
|
// each tag to have their own width.
|
|
|
|
.tag-grid{
|
|
grid-template-columns: repeat(3, minmax(max-content, 1fr))
|
|
}
|
|
|
|
@media (min-width: 640px) {
|
|
.tag-grid{
|
|
grid-template-columns: repeat(4, minmax(max-content, 1fr))
|
|
}
|
|
}
|
|
|
|
@media (min-width: 768px) {
|
|
.tag-grid{
|
|
grid-template-columns: repeat(7, minmax(max-content, 1fr))
|
|
}
|
|
}
|
|
|
|
#blog.content {
|
|
padding-bottom: 2em;
|
|
}
|
|
|
|
#portmaster-plug:hover button {
|
|
--transform-scale-x: 1.04;
|
|
--transform-scale-y: 1.04;
|
|
}
|
|
|
|
/*
|
|
Grabs External Links only:
|
|
|
|
1. make sure it is NOT an internal link like: href="/guides/" by filtering it starts with http
|
|
2. exclude all links that contain "safing.io" which is super unlikely to hit external links
|
|
3. also exclude "localhost", which basically is 2. for local development
|
|
4. exclude social icons on top of content, which is currently grabbed with :not opacity-55, kinda dirty
|
|
*/
|
|
#page-container content a[href^="http"]:not([href*="safing.io"]):not([href*="localhost"]):not([class*="opacity-55"]):not([class="exclude-external-icon"]):after {
|
|
background-image : url("/assets/img/icons/external.svg");
|
|
display : inline-block;
|
|
height : 10px;
|
|
width : 17px;
|
|
content : "";
|
|
background-repeat : no-repeat;
|
|
background-position-y: 0px;
|
|
background-position-x: 4px;
|
|
background-size : 10px;
|
|
}
|
|
|
|
/*
|
|
Grab Internal Setting links to add a cog
|
|
|
|
1., 2. from other docs pages, the href will include some form of /settings-reference(/)#
|
|
*/
|
|
#page-container content a[href*="portmaster/settings#"]:before,
|
|
#page-container content a[href*="portmaster/settings/#"]:before {
|
|
background-image : url("/assets/img/icons/cog.svg");
|
|
display : inline-block;
|
|
height : 20px;
|
|
width : 20px;
|
|
content : "";
|
|
background-repeat : no-repeat;
|
|
background-position-y: 5px;
|
|
background-position-x: 1px;
|
|
background-size : 17px;
|
|
}
|