HodlEye_Crypto_Price_Tracker/public/css/style.css
Gerald Hasani f03b405691 Update 1.6.0
"Revamped Alarm Modal with grouped alarms per coin and cleaner layout",
    "Improved alignment and responsiveness of alarm input fields",
    "Compact alarm boxes with hover effects and subtle delete buttons",
    "Alarm modal now retains focus and resets fields after adding an alarm",
    "Enter key submits alarm from any input field",
    "Prevents duplicate alarms for same coin/price",
    "Alarm titles now displayed with center-aligned divider lines",
    "Alarm logic improved: server-side checks even without browser",
    "Recurring alarms now persist and trigger correctly",
    "Alarms are sorted and grouped by symbol and price",
    "Last price check is stored per alarm to avoid threshold skips",
    "API improved: endpoints usable for external tools (e.g., Windows app)",
    "Better error handling and logging for API actions",
    "Windows App UI redesigned: modern English layout, centered elements",
    "Tray icon with context menu (Open/Exit) and minimize/close behavior",
    "All texts and notifications are now in English",
    "Auto-reconnect and connection recovery implemented",
    "Notification appears if disconnected for more than 2 minutes",
    "Resolved issue where HodlEye_Notify could not receive alarms from the 'HodlEye-Crypto-Price-Tracker' Docker container when no browser session was active"
2025-06-14 18:36:31 +02:00

1119 lines
18 KiB
CSS

body {
font-family: Arial, sans-serif;
margin: 0 auto;
padding: 0;
transition: background-color 0.4s, color 0.4s;
max-width: 1778px;
min-width: 808px;
}
h1 {
font-size: 28px;
}
body.dark {
background-color: #121212;
color: #ffffff;
}
body.light {
background-color: #f2f2f2;
color: #000000;
}
.header {
text-align: center;
padding: 20px;
max-width: 1660px;
}
.button-container {
margin-bottom: 10px;
}
button {
padding: 10px;
margin: 5px;
font-size: 16px;
background-color: #008CBA;
color: white;
border: none;
cursor: pointer;
border-radius: 5px;
}
button:hover {
background-color: #005f73;
}
.alarm-btn {
background-color: #ff8b00;
}
.alarm-btn:hover {
background-color: #e38806;
}
.options-btn {
background-color: #555;
}
.options-btn:hover {
background-color: #777;
}
.main-container {
display: flex;
}
.left-column {
width: 75%;
padding: 10px;
}
.right-column {
display: grid;
grid-template-rows: 300px auto;
border-left: 1px solid #444;
width: 320px;
padding: 20px;
}
.notify-area {
min-height: 400px;
max-width: 280px;
border: 1px solid #444;
overflow-y: auto;
padding: 10px;
display: flex;
flex-direction: column;
}
.buttons-and-version {
display: flex;
flex-direction: column;
max-width: 260px;
padding-left: 6%;
}
.notify-heading {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 20px;
margin-bottom: 10px;
}
.notify-list {
list-style: none;
padding-left: 0;
margin: 0;
flex: 1;
overflow-y: auto;
max-height: 400px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 10px;
width: 80%;
margin: auto;
padding: 10px;
}
.crypto-box {
background-color: #1e1e1e;
border: 2px solid #444;
padding: 15px;
border-radius: 5px;
text-align: center;
font-size: 16px;
position: relative;
user-select: none;
min-width: 177px;
}
body.light .crypto-box {
background-color: #ffffff;
border: 2px solid #ccc;
color: #000;
}
.change.up {
color: #00ff00;
}
.change.down {
color: #ff0000;
}
.delete-btn {
position: absolute;
top: 5px;
right: 5px;
background-color: #333;
color: #fff;
border: none;
cursor: pointer;
border-radius: 3px;
font-size: 14px;
width: 24px;
height: 24px;
text-align: center;
line-height: 24px;
padding: 0;
}
.delete-btn:hover {
background-color: #999;
color: #000;
}
.crypto-box.dragging {
opacity: 0.5;
transform: scale(0.97);
}
.crypto-box.drag-over {
border: 2px dashed #ccc !important;
}
.modal {
display: none;
position: fixed;
z-index: 2;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
}
.modal-content {
background-color: #222222f2;
margin: 5% auto;
padding: 20px;
border-radius: 8px;
max-width: 40%;
text-align: center;
color: white;
overflow-y: auto;
overflow-x: hidden;
position: relative;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.3);
}
#cryptoNewsModal .modal-content {
width: 40%;
overflow-x: hidden;
overflow-y: auto;
max-height: 80vh;
}
#buyMeModal .modal-content {
width: 400px;
max-width: 90%;
overflow-x: hidden;
text-align: center;
position: absolute;
top: 35%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 30px;
border-radius: 15px;
background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
}
#buyMeModal .close {
position: absolute;
top: 15px;
right: 15px;
font-size: 24px;
cursor: pointer;
}
#optionsModal .modal-content {
width: 30%;
overflow-x: hidden;
}
#addCryptoModal .modal-content {
width: 20%;
text-align: center;
position: absolute;
top: 35%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#addCryptoModal .modal-content label {
display: block;
margin-bottom: 6px;
}
#addCryptoModal .close {
position: absolute;
top: 15px;
right: 15px;
font-size: 24px;
cursor: pointer;
}
#addCryptoModal .modal-content select,
#addCryptoModal .modal-content input {
width: 100%;
height: 20px;
font-size: 16px;
padding: 8px;
border: 1px solid #ccc;
box-sizing: border-box;
}
#alarmModal .modal-content {
min-width: 406px;
text-align: center;
position: absolute;
top: 35%;
left: 50%;
max-width: 100%;
transform: translate(-50%, -45%);
flex-direction: column;
align-items: center;
justify-content: center;
}
#alarmModal .modal-content label {
display: block;
margin-bottom: 3px;
}
#alarmModal .modal-content select,
#alarmModal .modal-content input {
margin-bottom: 8px;
width: 30%;
padding: 8px;
}
#alarmModal .modal-content select {
padding: 8px;
font-size: 13px;
width: 30%;
}
#alarmModal .close {
position: absolute;
top: 15px;
right: 15px;
font-size: 24px;
cursor: pointer;
}
#alarmModal .modal-content h3 {
display: flex;
align-items: center;
justify-content: center;
font-size: 1.15em;
font-weight: bold;
margin: 18px 0 8px 0;
color: #00bfff;
padding-bottom: 6px;
letter-spacing: 1px;
}
#alarmModal .modal-content h3::before,
#alarmModal .modal-content h3::after {
content: "";
flex: 1;
border-bottom: 1.5px solid #444;
margin: 0 12px;
opacity: 0.5;
}
body.light #alarmModal .modal-content h3 {
color: #0077b6;
}
body.light #alarmModal .modal-content h3::before,
body.light #alarmModal .modal-content h3::after {
border-bottom: 1.5px solid #bbb;
}
body.light .modal-content {
background-color: #ddd;
color: #000;
}
.close {
float: right;
font-size: 24px;
cursor: pointer;
}
label {
display: inline-block;
margin-top: 10px;
}
select,
input[type="number"],
input[type="text"] {
margin: 5px 0 10px 5px;
font-size: medium;
}
.alert-overlay {
display: none;
position: fixed;
z-index: 3;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
}
.alert-box {
background-color: #333;
color: #fff;
padding: 20px;
margin: 15% auto;
width: 300px;
border-radius: 5px;
text-align: center;
position: relative;
}
.alert-box button {
margin-top: 15px;
background-color: #555;
}
.alert-box button:hover {
background-color: #777;
}
body.light .alert-box {
background-color: #ccc;
color: #000;
}
.error-overlay {
display: none;
position: fixed;
z-index: 4;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
}
.error-box {
background-color: #aa3333;
color: #fff;
padding: 20px;
margin: 15% auto;
width: 300px;
border-radius: 5px;
text-align: center;
position: relative;
}
body.light .error-box {
background-color: #f2aaaa;
color: #000;
}
.api-label {
margin-top: 10px;
font-size: 14px;
color: #ccc;
text-decoration: underline;
cursor: pointer;
}
body.light .api-label {
color: #333;
}
.alarm-list-container {
display: block;
max-height: 200px;
overflow-y: auto;
margin: 1em 0;
}
.alarm-group {
margin-bottom: 10px;
}
.alarm-group-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
#alarmModal .modal-content .alarm-row {
display: flex;
gap: 24px;
align-items: flex-start;
margin-bottom: 10px;
justify-content: center;
}
#alarmModal .modal-content .alarm-row .alarm-col {
flex: 1 1 0;
min-width: 180px;
max-width: 240px;
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: flex-start;
}
#alarmModal .modal-content .alarm-row label {
margin-bottom: 4px;
font-size: 15px;
font-weight: 500;
text-align: left;
padding-left: 6px;
}
#alarmModal .modal-content .alarm-row select,
#alarmModal .modal-content .alarm-row input {
width: 100%;
min-width: 120px;
max-width: 240px;
box-sizing: border-box;
margin-bottom: 0;
font-size: 15px;
}
.alarm-item {
display: flex;
align-items: center;
justify-content: space-between;
background-color: #333;
padding: 3px 8px;
border-radius: 3px;
font-size: 14px;
min-height: 28px;
transition: background 0.15s, box-shadow 0.15s;
height: 36px;
}
.alarm-item span {
display: flex;
align-items: center;
height: 100%;
}
.alarm-item:hover {
background-color: #444;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
body.light .alarm-item {
background-color: #eee;
color: #000;
}
.alarm-delete-btn {
background-color: #008CBA;
border: none;
color: white;
cursor: pointer;
border-radius: 4px;
padding: 2px 6px;
font-size: 15px;
margin-left: 8px;
transition: background 0.15s;
height: 22px;
width: 22px;
display: flex;
align-items: center;
justify-content: center;
}
.alarm-delete-btn:hover {
background-color: #005f7a;
}
@font-face {
font-family: 'Bree Serif';
src: url('font/BreeSerif-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
.coffee-btn {
margin-top: 60px;
background-color: #614484;
font-family: 'Bree Serif', serif;
font-size: 16px;
color: white;
padding: 10px 20px;
border: none;
cursor: pointer;
}
.coffee-btn:hover {
background-color: #711fe9;
}
.coffee-icon {
width: 25px;
height: 25px;
vertical-align: middle;
margin-left: 5px;
}
#search {
width: 90%;
padding: 10px;
font-size: 16px;
margin-bottom: 15px;
border: none;
border-radius: 5px;
outline: none;
background: #1e1e1e;
color: white;
text-align: center;
}
#news-feed {
text-align: left;
}
.news-item {
padding: 15px;
border-bottom: 1px solid #333;
transition: background 0.3s;
}
.news-item:last-child {
border-bottom: none;
}
.news-item:hover {
background: rgba(255, 255, 255, 0.1);
cursor: pointer;
}
.news-title {
font-size: 18px;
color: #1db954;
text-decoration: none;
display: block;
margin-bottom: 5px;
}
.news-meta {
font-size: 14px;
color: gray;
display: flex;
justify-content: space-between;
align-items: center;
}
.news-source {
font-weight: bold;
color: #ffffff;
}
.time {
font-size: 14px;
color: gray;
}
#economicCalendarModal .iframe-container {
position: relative;
width: 100%;
max-width: 700px;
height: 500px;
margin: 0 auto;
display: flex;
flex-direction: column;
text-align: center;
align-items: center;
justify-content: center;
}
#economicCalendarModal .iframe-wrapper {
position: relative;
width: 100%;
height: 100%;
border-radius: 15px;
overflow: hidden;
padding: 10px;
background: white;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2);
}
#economicCalendarModal iframe {
width: calc(100% - 20px);
height: calc(100% - 20px);
border: none;
display: block;
}
#economicCalendarModal .poweredBy {
margin-top: 10px;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #ffffff;
text-align: center;
}
#economicCalendarModal .poweredBy a {
color: #06529D;
font-weight: bold;
text-decoration: none;
}
#updateModal .modal-content {
padding: 20px;
border-radius: 5px;
}
.version-info {
text-align: center;
margin-top: 10px;
}
.change {
margin: 5px;
}
.my-button {
background-color: white;
color: black;
border: 1px solid black;
padding: 8px 16px;
cursor: pointer;
font-weight: 700;
}
#tradingViewModal .modal-content {
min-width: 80%;
min-height: 80%;
max-height: 80%;
text-align: center;
position: fixed;
top: 35%;
left: 50%;
transform: translate(-50%, -45%);
padding: 25px;
flex-direction: column;
align-items: center;
justify-content: center;
overflow-y: hidden;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#tradingViewModal .close {
position: absolute;
top: 1px;
right: 7px;
font-size: 24px;
cursor: pointer;
color: red;
}
.button-grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
align-items: center;
justify-items: center;
column-gap: 10px;
align-items: start;
margin-bottom: 15px;
}
.grid-right {
display: flex;
justify-content: flex-end;
width: 100%;
align-items: start;
justify-items: stretch;
justify-content: flex-end;
}
.header-container {
max-width: 170px;
margin: 0 auto;
padding: 0 10px;
}
.alarm-row {
display: flex;
gap: 10px;
align-items: center;
margin-bottom: 10px;
}
.alarm-col {
flex: 1;
}
#alarmModal .modal-content .alarm-row select,
#alarmModal .modal-content .alarm-row input {
margin-bottom: 8px;
width: 200px;
padding: 8px;
}
.coffee-modal-header {
margin-bottom: 25px;
}
.coffee-icon-large {
font-size: 48px;
margin-bottom: 15px;
animation: coffeeSteam 2s ease-in-out infinite;
}
@keyframes coffeeSteam {
0%, 100% { transform: translateY(0) scale(1); }
50% { transform: translateY(-5px) scale(1.05); }
}
.coffee-modal-header h2 {
color: #ecf0f1;
margin: 0 0 8px 0;
font-size: 24px;
font-weight: 600;
}
.coffee-subtitle {
color: #bdc3c7;
margin: 0;
font-size: 14px;
}
.coffee-content {
width: 100%;
}
.payment-methods {
margin-bottom: 25px;
}
.payment-method {
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 20px;
border: 1px solid rgba(255, 255, 255, 0.2);
}
.payment-icon {
font-size: 32px;
margin-bottom: 10px;
}
.payment-method h3 {
color: #ecf0f1;
margin: 0 0 15px 0;
font-size: 18px;
}
.chain-selector {
display: flex;
justify-content: center;
gap: 15px;
margin: 0;
}
.chain-option {
padding: 8px 16px;
border-radius: 20px;
cursor: pointer;
transition: all 0.3s ease;
border: 2px solid transparent;
font-weight: 500;
}
.chain-option.active {
background: #3498db;
color: white;
border-color: #2980b9;
}
.chain-option:not(.active) {
background: rgba(255, 255, 255, 0.1);
color: #bdc3c7;
border-color: rgba(255, 255, 255, 0.2);
}
.chain-option:hover:not(.active) {
background: rgba(255, 255, 255, 0.2);
color: #ecf0f1;
}
.wallet-address-section {
display: flex;
gap: 20px;
margin-bottom: 25px;
align-items: flex-start;
}
.qr-code-placeholder {
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 20px;
border: 1px solid rgba(255, 255, 255, 0.2);
min-width: 100px;
text-align: center;
}
.qr-icon {
font-size: 32px;
margin-bottom: 8px;
}
.qr-code-placeholder p {
color: #bdc3c7;
margin: 0;
font-size: 12px;
}
.address-container {
flex: 1;
text-align: left;
}
.address-container label {
color: #ecf0f1;
font-size: 14px;
font-weight: 500;
margin-bottom: 8px;
display: block;
}
.address-box {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
padding: 12px;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: space-between;
font-family: 'Courier New', monospace;
font-size: 12px;
word-break: break-all;
}
.address-box:hover {
background: rgba(255, 255, 255, 0.15);
border-color: #3498db;
transform: translateY(-1px);
}
.address-box span:first-child {
color: #ecf0f1;
flex: 1;
margin-right: 10px;
}
.copy-icon {
color: #3498db;
font-size: 16px;
flex-shrink: 0;
}
.copy-hint {
color: #95a5a6;
font-size: 12px;
margin: 8px 0 0 0;
text-align: center;
}
.coffee-footer {
border-top: 1px solid rgba(255, 255, 255, 0.2);
padding-top: 20px;
}
.thank-you {
color: #ecf0f1;
font-size: 16px;
margin: 0 0 15px 0;
font-weight: 500;
}
.coffee-benefits {
display: flex;
justify-content: center;
gap: 15px;
}
.coffee-benefits span {
font-size: 20px;
animation: benefitFloat 3s ease-in-out infinite;
}
.coffee-benefits span:nth-child(2) {
animation-delay: 1s;
}
.coffee-benefits span:nth-child(3) {
animation-delay: 2s;
}
@keyframes benefitFloat {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-3px); }
}
/* Light mode styles */
body.light #buyMeModal .modal-content {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
}
body.light .coffee-modal-header h2 {
color: #2c3e50;
}
body.light .coffee-subtitle {
color: #6c757d;
}
body.light .payment-method {
background: rgba(0, 0, 0, 0.05);
border-color: rgba(0, 0, 0, 0.1);
}
body.light .payment-method h3 {
color: #2c3e50;
}
body.light .chain-option:not(.active) {
background: rgba(0, 0, 0, 0.05);
color: #6c757d;
border-color: rgba(0, 0, 0, 0.1);
}
body.light .chain-option:hover:not(.active) {
background: rgba(0, 0, 0, 0.1);
color: #495057;
}
body.light .qr-code-placeholder {
background: rgba(0, 0, 0, 0.05);
border-color: rgba(0, 0, 0, 0.1);
}
body.light .qr-code-placeholder p {
color: #6c757d;
}
body.light .address-container label {
color: #2c3e50;
}
body.light .address-box {
background: rgba(0, 0, 0, 0.05);
border-color: rgba(0, 0, 0, 0.1);
}
body.light .address-box:hover {
background: rgba(0, 0, 0, 0.1);
border-color: #3498db;
}
body.light .address-box span:first-child {
color: #2c3e50;
}
body.light .copy-hint {
color: #6c757d;
}
body.light .coffee-footer {
border-color: rgba(0, 0, 0, 0.1);
}
body.light .thank-you {
color: #2c3e50;
}