diff --git a/changedetectionio/static/styles/scss/diff.scss b/changedetectionio/static/styles/scss/diff.scss new file mode 100644 index 00000000..effb4fe3 --- /dev/null +++ b/changedetectionio/static/styles/scss/diff.scss @@ -0,0 +1,117 @@ +@import "parts/variables.scss"; + +#diff-ui { + + background: var(--color-background); + padding: 2em; + margin-left: 1em; + margin-right: 1em; + border-radius: 5px; + font-size: 11px; + + table { + table-layout: fixed; + width: 100%; + } + + td { + padding: 3px 4px; + border: 1px solid transparent; + vertical-align: top; + font: 1em monospace; + text-align: left; + } + + pre { + white-space: pre-wrap; + } +} + +h1 { + display: inline; + font-size: 100%; +} + +del { + text-decoration: none; + color: #b30000; + background: #fadad7; +} + +ins { + background: #eaf2c2; + color: #406619; + text-decoration: none; +} + +#result { + white-space: pre-wrap; + + .change { + span {} + } +} + +#settings { + background: rgba(0, 0, 0, .05); + padding: 1em; + border-radius: 10px; + margin-bottom: 1em; + color: #fff; + font-size: 80%; + + label { + margin-left: 1em; + display: inline-block; + font-weight: normal; + } + + del { + padding: 0.5em; + } + + ins { + padding: 0.5em; + } +} + +.source { + position: absolute; + right: 1%; + top: .2em; +} + +@-moz-document url-prefix() { + body { + height: 99%; + /* Hide scroll bar in Firefox */ + } +} + +td#diff-col div { + text-align: justify; + white-space: pre-wrap; +} + +.ignored { + background-color: #ccc; + /* border: #0d91fa 1px solid; */ + opacity: 0.7; +} + +.triggered { + background-color: #1b98f8; +} + +/* ignored and triggered? make it obvious error */ +.ignored.triggered { + background-color: #ff0000; +} + +.tab-pane-inner#screenshot { + text-align: center; + + img { + max-width: 99%; + } +} diff --git a/changedetectionio/static/styles/scss/parts/_arrows.scss b/changedetectionio/static/styles/scss/parts/_arrows.scss new file mode 100644 index 00000000..161330d5 --- /dev/null +++ b/changedetectionio/static/styles/scss/parts/_arrows.scss @@ -0,0 +1,26 @@ +.arrow { + border: solid #1b98f8; + border-width: 0 2px 2px 0; + display: inline-block; + padding: 3px; + + &.right { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + } + + &.left { + transform: rotate(135deg); + -webkit-transform: rotate(135deg); + } + + &.up, &.asc { + transform: rotate(-135deg); + -webkit-transform: rotate(-135deg); + } + + &.down, &.desc { + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + } +} diff --git a/changedetectionio/static/styles/scss/parts/browser-steps.scss b/changedetectionio/static/styles/scss/parts/browser-steps.scss new file mode 100644 index 00000000..fda60bbe --- /dev/null +++ b/changedetectionio/static/styles/scss/parts/browser-steps.scss @@ -0,0 +1,94 @@ + +#browser_steps { + /* convert rows to horizontal cells */ + th { + display: none; + } + + li { + &:not(:first-child) { + &:hover { + opacity: 1.0; + } + } + list-style: decimal; + padding: 5px; + .control { + padding-left: 5px; + padding-right: 5px; + a { + font-size: 70%; + } + } + &.empty { + padding: 0px; + opacity: 0.35; + .control { + display: none; + } + } + &:hover { + background: #eee; + } + > label { + display: none; + } + } +} + +#browser-steps-fieldlist { + height: 100%; + overflow-y: scroll; +} + +#browser-steps .flex-wrapper { + display: flex; + flex-flow: row; + height: 600px; /*@todo make this dynamic */ +} + +/* this is duplicate :( */ +#browsersteps-selector-wrapper { + height: 100%; + width: 100%; + overflow-y: scroll; + position: relative; + //width: 100%; + > img { + position: absolute; + max-width: 100%; + } + + > canvas { + position: relative; + max-width: 100%; + + &:hover { + cursor: pointer; + } + } + + .loader { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + margin-left: -40px; + z-index: 100; + max-width: 350px; + text-align: center; + } + + /* nice tall skinny one */ + .spinner, .spinner:after { + width: 80px; + height: 80px; + font-size: 3px; + } + + #browsersteps-click-start { + &:hover { + cursor: pointer; + } + } +} \ No newline at end of file diff --git a/changedetectionio/static/styles/scss/parts/spinners.scss b/changedetectionio/static/styles/scss/parts/spinners.scss new file mode 100644 index 00000000..cca63740 --- /dev/null +++ b/changedetectionio/static/styles/scss/parts/spinners.scss @@ -0,0 +1,44 @@ + +/* spinner */ +.spinner, +.spinner:after { + border-radius: 50%; + width: 10px; + height: 10px; +} +.spinner { + margin: 0px auto; + font-size: 3px; + vertical-align: middle; + display: inline-block; + text-indent: -9999em; + border-top: 1.1em solid rgba(38,104,237, 0.2); + border-right: 1.1em solid rgba(38,104,237, 0.2); + border-bottom: 1.1em solid rgba(38,104,237, 0.2); + border-left: 1.1em solid #2668ed; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-animation: load8 1.1s infinite linear; + animation: load8 1.1s infinite linear; +} +@-webkit-keyframes load8 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes load8 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/changedetectionio/static/styles/scss/parts/variables.scss b/changedetectionio/static/styles/scss/parts/variables.scss new file mode 100644 index 00000000..adf3aa72 --- /dev/null +++ b/changedetectionio/static/styles/scss/parts/variables.scss @@ -0,0 +1,156 @@ +/** + * CSS custom properties (aka variables). + */ + +:root { + --color-white: #fff; + --color-grey-50: #111; + --color-grey-100: #262626; + --color-grey-200: #333; + --color-grey-300: #444; + --color-grey-325: #555; + --color-grey-350: #565d64; + --color-grey-400: #666; + --color-grey-500: #777; + --color-grey-600: #999; + --color-grey-700: #cbcbcb; + --color-grey-750: #ddd; + --color-grey-800: #e0e0e0; + --color-grey-850: #eee; + --color-grey-900: #f2f2f2; + --color-black: #000; + + --color-background-page: var(--color-grey-100); + --color-background-gradient-first: #5ad8f7; + --color-background-gradient-second: #2f50af; + --color-background-gradient-third: #9150bf; + --color-background: var(--color-white); + --color-text: var(--color-grey-200); + --color-link: #1b98f8; + --color-menu-accent: #ed5900; + --color-background-code: var(--color-grey-850); + --color-error: #a00; + --color-error-input: #ffebeb; + --color-error-list: #dd0000; + --color-table-background: var(--color-background); + --color-table-stripe: var(--color-grey-900); + --color-text-tab: var(--color-white); + --color-background-tab: rgba(255, 255, 255, 0.2); + --color-background-tab-hover: rgba(255, 255, 255, 0.5); + --color-text-tab-active: #222; + --color-api-key: #0078e7; + + --color-background-button-primary: #0078e7; + --color-background-button-green: #42dd53; + --color-background-button-red: #dd4242; + --color-background-button-success: rgb(28, 184, 65); + --color-background-button-error: rgb(202, 60, 60); + --color-text-button-error: var(--color-white); + --color-background-button-warning: rgb(202, 60, 60); + --color-text-button-warning: var(--color-white); + --color-background-button-secondary: rgb(66, 184, 221); + --color-background-button-cancel: rgb(200, 200, 200); + --color-text-button: var(--color-white); + --color-background-button-tag: rgb(99, 99, 99); + --color-background-snapshot-age: #dfdfdf; + --color-error-text-snapshot-age: var(--color-white); + --color-error-background-snapshot-age: #ff0000; + --color-background-button-tag-active: #9c9c9c; + + --color-text-messages: var(--color-white); + --color-background-messages-message: rgba(255, 255, 255, .2); + --color-background-messages-error: rgba(255, 1, 1, .5); + --color-background-messages-notice: rgba(255, 255, 255, .5); + --color-border-notification: #ccc; + + --color-background-checkbox-operations: rgba(0, 0, 0, 0.05); + --color-warning: #ff3300; + --color-border-warning: var(--color-warning); + --color-text-legend: var(--color-white); + + --color-link-new-version: #e07171; + --color-last-checked: #555; + --color-text-footer: #444; + --color-border-watch-table-cell: #eee; + + --color-text-watch-tag-list: #e70069; + --color-background-new-watch-form: rgba(0, 0, 0, 0.05); + --color-background-new-watch-input: var(--color-white); + --color-text-new-watch-input: var(--color-text); + + --color-border-input: var(--color-grey-700); + --color-shadow-input: var(--color-grey-750); + --color-background-input: var(--color-white); + --color-text-input: var(--color-text); + --color-text-input-description: var(--color-text); + --color-text-input-placeholder: var(--color-grey-700); + + --color-background-table-thead: var(--color-grey-800); + --color-border-table-cell: var(--color-grey-700); + + --color-text-menu-heading: var(--color-grey-350); + --color-text-menu-link: var(--color-grey-500); + --color-background-menu-link-hover: var(--color-grey-850); + --color-text-menu-link-hover: var(--color-grey-300); + + --color-shadow-jump: var(--color-grey-500); + --color-icon-github: var(--color-black); + --color-icon-github-hover: var(--color-white); +} + +html[data-darkmode="true"] { + --color-link: #59bdfb; + --color-text: var(--color-white); + + --color-background-gradient-first: #3f90a5; + --color-background-gradient-second: #1e316c; + --color-background-gradient-third: #4d2c64; + + --color-background-new-watch-input: var(--color-grey-100); + --color-text-new-watch-input: var(--color-text); + --color-background-table-thead: var(--color-grey-200); + --color-table-background: var(--color-grey-300); + --color-table-stripe: var(--color-grey-325); + --color-background: var(--color-grey-300); + --color-text-menu-heading: var(--color-grey-850); + --color-text-menu-link: var(--color-grey-800); + --color-border-table-cell: var(--color-grey-400); + --color-text-tab-active: var(--color-text); + + --color-border-input: var(--color-grey-400); + --color-shadow-input: var(--color-grey-50); + --color-background-input: var(--color-grey-350); + --color-text-input-description: var(--color-grey-700); + --color-text-input-placeholder: var(--color-grey-600); + + --color-text-watch-tag-list: #fa3e92; + + --color-background-code: var(--color-grey-200); + + --color-background-tab: rgba(0, 0, 0, 0.2); + --color-background-tab-hover: rgba(0, 0, 0, 0.5); + + --color-background-snapshot-age: var(--color-grey-200); + --color-shadow-jump: var(--color-grey-200); + --color-icon-github: var(--color-white); + --color-icon-github-hover: var(--color-black); + + // Anything that can't be manipulated through variables follows. + .watch-controls { + img { + opacity: 0.4; + } + } + + .icon-spread { + filter: hue-rotate(-10deg) brightness(1.5); + } + + .watch-table { + + .title-col a[target="_blank"]::after, + .current-diff-url::after { + filter: invert(.5) hue-rotate(10deg) brightness(2); + } + } +} diff --git a/changedetectionio/static/styles/scss/styles.scss b/changedetectionio/static/styles/scss/styles.scss new file mode 100644 index 00000000..c434d141 --- /dev/null +++ b/changedetectionio/static/styles/scss/styles.scss @@ -0,0 +1,995 @@ +/* + * -- BASE STYLES -- + */ + +@import "parts/variables"; +@import "parts/spinners"; +@import "parts/browser-steps"; +@import "parts/_arrows"; + +body { + color: var(--color-text); + background: var(--color-background-page); +} + +.visually-hidden { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} + +.pure-table-even { + background: var(--color-background); +} + +/* Some styles from https://css-tricks.com/ */ +a { + text-decoration: none; + color: var(--color-link); +} + +a.github-link { + color: var(--color-icon-github); + margin: 0 1rem 0 0.5rem; + + svg { + fill: currentColor; + } + + &:hover { + color: var(--color-icon-github-hover); + } +} + +button.toggle-theme { + width: 4rem; + background: transparent; + border: none; + cursor: pointer; + + color: var(--color-icon-github); + + svg { + fill: currentColor; + } + + .icon-light { + display: block; + } + + .icon-dark { + display: none; + } + + &.dark { + .icon-light { + display: none; + } + + .icon-dark { + display: block; + } + } +} + +.pure-menu-horizontal { + background: var(--color-background); + padding: 5px; + display: flex; + justify-content: space-between; + border-bottom: 2px solid var(--color-menu-accent); + align-items: center; +} + +.pure-menu-heading { + color: var(--color-text-menu-heading); +} + +.pure-menu-link { + color: var(--color-text-menu-link); + + &:hover { + background-color: var(--color-background-menu-link-hover); + color: var(--color-text-menu-link-hover); + } +} + +section.content { + padding-top: 5em; + padding-bottom: 1em; + flex-direction: column; + display: flex; + align-items: center; + justify-content: center; +} + +code { + background: var(--color-background-code); + color: var(--color-text); +} + +/* table related */ +.watch-table { + width: 100%; + font-size: 80%; + + tr.unviewed { + font-weight: bold; + } + + .error { + color: var(--color-error); + } + + td { + white-space: nowrap; + } + + td.title-col { + word-break: break-all; + white-space: normal; + } + + th { + white-space: nowrap; + + a { + font-weight: normal; + + &.active { + font-weight: bolder; + } + + &.inactive { + .arrow { + display: none; + } + } + } + } + + .title-col a[target="_blank"]::after, + .current-diff-url::after { + content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAQElEQVR42qXKwQkAIAxDUUdxtO6/RBQkQZvSi8I/pL4BoGw/XPkh4XigPmsUgh0626AjRsgxHTkUThsG2T/sIlzdTsp52kSS1wAAAABJRU5ErkJggg==); + margin: 0 3px 0 5px; + } +} + +.watch-tag-list { + color: var(--color-text-watch-tag-list); + white-space: nowrap; +} + +.box { + max-width: 80%; + flex-direction: column; + display: flex; + justify-content: center; +} + + +#post-list-buttons { + text-align: right; + padding: 0px; + margin: 0px; + + li { + display: inline-block; + } + + a { + border-top-left-radius: initial; + border-top-right-radius: initial; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } +} + + +body:after { + content: ""; + background: linear-gradient(130deg, var(--color-background-gradient-first), var(--color-background-gradient-second) 41.07%, var(--color-background-gradient-third) 84.05%); +} + +body:after, +body:before { + display: block; + height: 650px; + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: -1; +} + +body::after { + opacity: 0.91; +} + +body::before { + // background-image set in base.html so it works with reverse proxies etc + content: ""; + background-size: cover +} + +body:after, +body:before { + -webkit-clip-path: polygon(100% 0, 0 0, 0 77.5%, 1% 77.4%, 2% 77.1%, 3% 76.6%, 4% 75.9%, 5% 75.05%, 6% 74.05%, 7% 72.95%, 8% 71.75%, 9% 70.55%, 10% 69.3%, 11% 68.05%, 12% 66.9%, 13% 65.8%, 14% 64.8%, 15% 64%, 16% 63.35%, 17% 62.85%, 18% 62.6%, 19% 62.5%, 20% 62.65%, 21% 63%, 22% 63.5%, 23% 64.2%, 24% 65.1%, 25% 66.1%, 26% 67.2%, 27% 68.4%, 28% 69.65%, 29% 70.9%, 30% 72.15%, 31% 73.3%, 32% 74.35%, 33% 75.3%, 34% 76.1%, 35% 76.75%, 36% 77.2%, 37% 77.45%, 38% 77.5%, 39% 77.3%, 40% 76.95%, 41% 76.4%, 42% 75.65%, 43% 74.75%, 44% 73.75%, 45% 72.6%, 46% 71.4%, 47% 70.15%, 48% 68.9%, 49% 67.7%, 50% 66.55%, 51% 65.5%, 52% 64.55%, 53% 63.75%, 54% 63.15%, 55% 62.75%, 56% 62.55%, 57% 62.5%, 58% 62.7%, 59% 63.1%, 60% 63.7%, 61% 64.45%, 62% 65.4%, 63% 66.45%, 64% 67.6%, 65% 68.8%, 66% 70.05%, 67% 71.3%, 68% 72.5%, 69% 73.6%, 70% 74.65%, 71% 75.55%, 72% 76.35%, 73% 76.9%, 74% 77.3%, 75% 77.5%, 76% 77.45%, 77% 77.25%, 78% 76.8%, 79% 76.2%, 80% 75.4%, 81% 74.45%, 82% 73.4%, 83% 72.25%, 84% 71.05%, 85% 69.8%, 86% 68.55%, 87% 67.35%, 88% 66.2%, 89% 65.2%, 90% 64.3%, 91% 63.55%, 92% 63%, 93% 62.65%, 94% 62.5%, 95% 62.55%, 96% 62.8%, 97% 63.3%, 98% 63.9%, 99% 64.75%, 100% 65.7%); + clip-path: polygon(100% 0, 0 0, 0 77.5%, 1% 77.4%, 2% 77.1%, 3% 76.6%, 4% 75.9%, 5% 75.05%, 6% 74.05%, 7% 72.95%, 8% 71.75%, 9% 70.55%, 10% 69.3%, 11% 68.05%, 12% 66.9%, 13% 65.8%, 14% 64.8%, 15% 64%, 16% 63.35%, 17% 62.85%, 18% 62.6%, 19% 62.5%, 20% 62.65%, 21% 63%, 22% 63.5%, 23% 64.2%, 24% 65.1%, 25% 66.1%, 26% 67.2%, 27% 68.4%, 28% 69.65%, 29% 70.9%, 30% 72.15%, 31% 73.3%, 32% 74.35%, 33% 75.3%, 34% 76.1%, 35% 76.75%, 36% 77.2%, 37% 77.45%, 38% 77.5%, 39% 77.3%, 40% 76.95%, 41% 76.4%, 42% 75.65%, 43% 74.75%, 44% 73.75%, 45% 72.6%, 46% 71.4%, 47% 70.15%, 48% 68.9%, 49% 67.7%, 50% 66.55%, 51% 65.5%, 52% 64.55%, 53% 63.75%, 54% 63.15%, 55% 62.75%, 56% 62.55%, 57% 62.5%, 58% 62.7%, 59% 63.1%, 60% 63.7%, 61% 64.45%, 62% 65.4%, 63% 66.45%, 64% 67.6%, 65% 68.8%, 66% 70.05%, 67% 71.3%, 68% 72.5%, 69% 73.6%, 70% 74.65%, 71% 75.55%, 72% 76.35%, 73% 76.9%, 74% 77.3%, 75% 77.5%, 76% 77.45%, 77% 77.25%, 78% 76.8%, 79% 76.2%, 80% 75.4%, 81% 74.45%, 82% 73.4%, 83% 72.25%, 84% 71.05%, 85% 69.8%, 86% 68.55%, 87% 67.35%, 88% 66.2%, 89% 65.2%, 90% 64.3%, 91% 63.55%, 92% 63%, 93% 62.65%, 94% 62.5%, 95% 62.55%, 96% 62.8%, 97% 63.3%, 98% 63.9%, 99% 64.75%, 100% 65.7%) +} + +.button-small { + font-size: 85%; +} + +.fetch-error { + padding-top: 1em; + font-size: 80%; + max-width: 400px; + display: block; +} + +.pure-button-primary, +a.pure-button-primary, +.pure-button-selected, +a.pure-button-selected { + background-color: var(--color-background-button-primary); +} + +.button-secondary { + color: var(--color-text-button); + border-radius: 4px; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} + +.button-success { + background: var(--color-background-button-success); +} + +.button-tag { + background: var(--color-background-button-tag); + color: var(--color-text-button); + font-size: 65%; + border-bottom-left-radius: initial; + border-bottom-right-radius: initial; + + &.active { + background: var(--color-background-button-tag-active); + font-weight: bold; + } + +} + +.button-error { + background: var(--color-background-button-error); + color: var(--color-text-button-error); +} + +.button-warning { + background: var(--color-background-button-warning); + color: var(--color-text-button-warning); +} + +.button-secondary { + background: var(--color-background-button-secondary); +} + +.button-cancel { + background: var(--color-background-button-cancel); +} + +#save_button { + margin-right: 1rem; +} + +.messages { + li { + list-style: none; + padding: 1em; + border-radius: 10px; + color: var(--color-text-messages); + font-weight: bold; + + &.message { + background: var(--color-background-messages-message); + } + + &.error { + background: var(--color-background-messages-error); + } + + &.notice { + background: var(--color-background-messages-notice); + } + } + + &.with-share-link { + >*:hover { + cursor: pointer; + } + } +} + +.notifications-wrapper { + padding: 0.5rem 0 1rem 0; +} + +#notification-customisation { + border: 1px solid var(--color-border-notification); + padding: 0.5rem; + border-radius: 5px; +} + +#notification-error-log { + border: 1px solid var(--color-border-notification); + padding: 1rem; + border-radius: 5px; + overflow-wrap: break-word; +} + +#token-table { + + &.pure-table td, + &.pure-table th { + font-size: 80%; + } +} + +#new-watch-form { + background: var(--color-background-new-watch-form); + padding: 1em; + border-radius: 10px; + margin-bottom: 1em; + + input { + display: inline-block; + margin-bottom: 5px; + } + + input:not(.pure-button) { + background-color: var(--color-background-new-watch-input); + color: var(--color-text-new-watch-input); + } + + .label { + display: none; + } + + legend { + color: var(--color-text-legend); + font-weight: bold; + } + + #watch-add-wrapper-zone { + >div { + display: inline-block; + } + + @media only screen and (max-width: 760px) { + #url { + width: 100%; + } + } + } +} + + +#diff-col { + padding-left: 40px; +} + +#diff-jump { + position: fixed; + left: 0px; + top: 120px; + background: var(--color-background); + padding: 10px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + box-shadow: 1px 1px 4px var(--color-shadow-jump); + + a { + color: var(--color-link); + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + -o-user-select: none; + } +} + +footer { + padding: 10px; + background: var(--color-background); + color: var(--color-text-footer); + text-align: center; +} + +#feed-icon { + vertical-align: middle; +} + +#top-right-menu { + // Just let flex overflow the x axis for now + /* + position: absolute; + right: 0px; + background: linear-gradient(to right, #fff0, #fff 10%); + padding-left: 20px; + padding-right: 10px; + */ +} + +.sticky-tab { + position: absolute; + top: 60px; + font-size: 65%; + background: var(--color-background); + padding: 10px; + + &#left-sticky { + left: 0px; + } + + &#right-sticky { + right: 0px; + } + + &#hosted-sticky { + right: 0px; + top: 100px; + font-weight: bold; + } +} + +#new-version-text a { + color: var(--color-link-new-version); +} + +.watch-controls { + color: #f8321b; + + .state-on { + img { + opacity: 0.8; + } + } + + /* default */ + img { + opacity: 0.2; + } + + img { + &:hover { + transition: opacity 0.3s; + opacity: 0.8; + } + } +} + +.monospaced-textarea { + textarea { + width: 100%; + font-family: monospace; + white-space: pre; + overflow-wrap: normal; + // No scrollbars until needed. + overflow-x: auto; + } +} + + +.pure-form { + fieldset { + padding-top: 0px; + + ul { + padding-bottom: 0px; + margin-bottom: 0px; + } + } + + .pure-control-group, + .pure-group, + .pure-controls { + padding-bottom: 1em; + + div { + margin: 0px; + } + + .checkbox { + >* { + display: inline; + vertical-align: middle; + } + + >label { + padding-left: 5px; + } + } + + legend { + color: var(--color-text-legend); + } + } + + /* The input fields with errors */ + .error { + input { + background-color: var(--color-error-input); + } + } + + /* The list of errors */ + ul.errors { + padding: .5em .6em; + border: 1px solid var(--color-error-list); + border-radius: 4px; + vertical-align: middle; + -webkit-box-sizing: border-box; + box-sizing: border-box; + + li { + margin-left: 1em; + color: var(--color-error-list); + } + } + + label { + font-weight: bold; + } + + textarea { + width: 100%; + } + + .inline-radio { + ul { + margin: 0px; + list-style: none; + + li { + >* { + display: inline-block; + } + } + } + } +} + + +@media only screen and (max-width: 760px), +(min-device-width: 768px) and (max-device-width: 1024px) { + .box { + max-width: 95% + } + + .edit-form { + padding: 0.5em; + margin: 0; + } + + #nav-menu { + overflow-x: scroll; + } +} + + +@media only screen and (max-width: 760px), +(min-device-width: 768px) and (max-device-width: 800px) { + + div.sticky-tab#hosted-sticky { + top: 60px; + left: 0px; + right: auto; + } + + section.content { + padding-top: 110px; + } + + // Make the tabs easier to hit, they will be all nice and horizontal + div.tabs.collapsable ul li { + display: block; + border-radius: 0px; + margin-right: 0px; + } + + input[type='text'] { + width: 100%; + } + + /* + Max width before this PARTICULAR table gets nasty + This query will take effect for any screen smaller than 760px + and also iPads specifically. + */ + .watch-table { + + /* Force table to not be like tables anymore */ + thead, + tbody, + th, + td, + tr { + display: block; + } + + .last-checked { + >span { + vertical-align: middle; + } + } + + .last-checked::before { + color: var(--color-last-checked); + content: "Last Checked "; + } + + .last-changed::before { + color: var(--color-last-checked); + content: "Last Changed "; + } + + /* Force table to not be like tables anymore */ + td.inline { + display: inline-block; + } + + /* Hide table headers (but not display: none;, for accessibility) */ + thead tr { + position: absolute; + top: -9999px; + left: -9999px; + } + + .pure-table td, + .pure-table th { + border: none; + } + + td { + /* Behave like a "row" */ + border: none; + border-bottom: 1px solid var(--color-border-watch-table-cell); + vertical-align: middle; + + &:before { + /* Top/left values mimic padding */ + top: 6px; + left: 6px; + width: 45%; + padding-right: 10px; + white-space: nowrap; + } + } + + &.pure-table-striped { + tr { + background-color: var(--color-table-background); + } + + tr:nth-child(2n-1) { + background-color: var(--color-table-stripe); + } + + tr:nth-child(2n-1) td { + background-color: inherit; + } + } + + } +} + +.pure-table { + border-color: var(--color-border-table-cell); + + thead { + background-color: var(--color-background-table-thead); + color: var(--color-text); + } + + td, + th { + border-left-color: var(--color-border-table-cell); + } +} + +.pure-table-striped { + tr:nth-child(2n-1) { + td { + background-color: var(--color-table-stripe); + } + } +} + +.pure-form input[type=color], +.pure-form input[type=date], +.pure-form input[type=datetime-local], +.pure-form input[type=datetime], +.pure-form input[type=email], +.pure-form input[type=month], +.pure-form input[type=number], +.pure-form input[type=password], +.pure-form input[type=search], +.pure-form input[type=tel], +.pure-form input[type=text], +.pure-form input[type=time], +.pure-form input[type=url], +.pure-form input[type=week], +.pure-form select, +.pure-form textarea { + border: var(--color-border-input); + box-shadow: inset 0 1px 3px var(--color-shadow-input); + background-color: var(--color-background-input); + color: var(--color-text-input); + + &:active { + background-color: var(--color-background-input); + } +} + +input::placeholder, +textarea::placeholder { + color: var(--color-text-input-placeholder); +} + + +/** Desktop vs mobile input field strategy +- We dont use 'size' with because `size` is too unreliable to override, and will often push-out +- Rely always on width in CSS +*/ +@media only screen and (min-width: 761px) { + + /* m-d is medium-desktop */ + .m-d { + min-width: 80%; + } +} + + +.tabs { + ul { + margin: 0px; + padding: 0px; + display: block; + + li { + margin-right: 3px; + display: inline-block; + color: var(--color-text-tab); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + background-color: var(--color-background-tab); + + &:not(.active) { + &:hover { + background-color: var(--color-background-tab-hover); + } + } + + &.active, + :target { + background-color: var(--color-background); + + a { + color: var(--color-text-tab-active); + font-weight: bold; + } + } + + a { + display: block; + padding: 0.8em; + color: var(--color-text-tab); + } + } + } +} + +$form-edge-padding: 20px; + +.pure-form-stacked { + >div:first-child { + display: block; + } +} + +.login-form { + .inner { + background: var(--color-background); + ; + padding: $form-edge-padding; + border-radius: 5px; + } +} + +.tab-pane-inner { + &:not(:target) { + display: none; + } + + &:target { + display: block; + } + + // doesnt need padding because theres another row of buttons/activity + padding: 0px; +} + +.beta-logo { + height: 50px; + // looks better when it's hanging off a little + right: -3px; + top: -3px; + position: absolute; +} + +#selector-header { + padding-bottom: 1em; +} + +body.full-width { + .edit-form { + width: 95%; + } +} + +.edit-form { + min-width: 70%; + /* so it cant overflow */ + max-width: 95%; + + .box-wrap { + position: relative; + } + + .inner { + background: var(--color-background); + padding: $form-edge-padding; + } + + #actions { + display: block; + background: var(--color-background); + } + + .pure-form-message-inline { + padding-left: 0; + color: var(--color-text-input-description); + } +} + +ul { + padding-left: 1em; + padding-top: 0px; + margin-top: 4px; +} + +.time-check-widget { + tr { + display: inline; + + input[type="number"] { + width: 5em; + } + } +} + +#selector-wrapper { + height: 100%; + overflow-y: scroll; + position: relative; + + //width: 100%; + >img { + position: absolute; + z-index: 4; + max-width: 100%; + } + + >canvas { + position: relative; + z-index: 5; + max-width: 100%; + + &:hover { + cursor: pointer; + } + } +} + +#selector-current-xpath { + font-size: 80%; +} + +#webdriver-override-options { + input[type="number"] { + width: 5em; + } +} + +#api-key { + &:hover { + cursor: pointer; + } +} + +#api-key-copy { + color: var(--color-api-key); +} + +.button-green { + background-color: var(--color-background-button-green); +} + +.button-red { + background-color: var(--color-background-button-red); +} + +.noselect { + -webkit-touch-callout: none; + /* iOS Safari */ + -webkit-user-select: none; + /* Safari */ + -moz-user-select: none; + /* Old versions of Firefox */ + -ms-user-select: none; + /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently + supported by Chrome, Edge, Opera and Firefox */ +} + +.snapshot-age { + padding: 4px; + margin: 0.5rem 0; + background-color: var(--color-background-snapshot-age); + border-radius: 3px; + font-weight: bold; + margin-bottom: 4px; + + &.error { + background-color: var(--color-error-background-snapshot-age); + color: var(--color-error-text-snapshot-age); + } +} + +#checkbox-operations { + background: var(--color-background-checkbox-operations); + padding: 1em; + border-radius: 10px; + margin-bottom: 1em; + display: none; +} + +.checkbox-uuid { + >* { + vertical-align: middle; + } +} + +.inline-warning { + >span { + display: inline-block; + vertical-align: middle; + } + + img.inline-warning-icon { + display: inline; + height: 26px; + vertical-align: middle; + } + + border: 1px solid var(--color-border-warning); + padding: 0.5rem; + border-radius: 5px; + color: var(--color-warning); +}