arvind-git-code
Setup Docker deployment
9fed9f2
.app-wrapper {
min-height: 100vh;
display: flex;
flex-direction: column;
background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
}
.app-header {
background: linear-gradient(90deg, #4285f4, #34A853);
padding: 1.2rem 0;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.header-content {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.logo-section {
display: flex;
align-items: center;
gap: 1.2rem;
}
.app-logo {
width: 50px;
height: 50px;
}
.powered-by {
display: flex;
align-items: center;
gap: 0.5rem;
color: white;
font-weight: 500;
}
.gemini-text {
font-weight: 600;
background: rgba(255, 255, 255, 0.2);
padding: 0.4rem 0.8rem;
border-radius: 4px;
transition: all 0.3s ease;
}
.gemini-text:hover {
background: rgba(255, 255, 255, 0.3);
}
.app-container {
flex: 1;
padding: 2rem;
max-width: 1200px;
margin: 0 auto;
width: 100%;
}
.app-footer {
background: #2c3e50;
color: white;
padding: 3rem 0 1rem;
margin-top: 3rem;
}
.footer-content {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
.footer-section h3 {
color: #3498db;
margin-bottom: 1rem;
font-size: 1.2rem;
}
.tech-stack {
display: flex;
gap: 1rem;
}
.tech-stack span {
background: rgba(255, 255, 255, 0.1);
padding: 0.25rem 0.75rem;
border-radius: 4px;
font-size: 0.9rem;
}
.footer-bottom {
text-align: center;
margin-top: 2rem;
padding-top: 1rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
h1 {
margin: 0;
font-size: 1.8rem;
color: white;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.main-section {
background: white;
border-radius: 12px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
margin-bottom: 2rem;
padding: 1.5rem;
width: 100%;
box-sizing: border-box;
}
.text-selector, .preview-section {
padding: 1.5rem;
/* border: 1px solid #800d0d; */
border-radius: 8px;
background: white;
width: 100%;
box-sizing: border-box;
}
textarea {
width: 100%;
min-height: 200px;
padding: 1rem;
border: 1px solid #ddd;
border-radius: 6px;
font-size: 1rem;
resize: vertical;
margin-bottom: 1rem;
box-sizing: border-box;
}
.button-group {
display: flex;
justify-content: flex-end;
margin-bottom: 1.5rem;
}
button {
padding: 0.75rem 1.5rem;
border: none;
border-radius: 6px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.words-container {
line-height: 2;
padding: 1rem;
border: 1px solid #651010;
border-radius: 6px;
max-height: 300px;
overflow-y: auto;
}
.word {
display: inline-block;
margin: 0.25rem;
padding: 0.5rem 1rem;
cursor: pointer;
border-radius: 4px;
background-color: #f8f9fa;
transition: all 0.2s ease;
}
.word:hover {
background-color: #e9ecef;
}
.word.selected {
background-color: #2ecc71;
color: white;
}
.preview-section {
display: flex;
flex-direction: column;
}
.selected-words {
flex-grow: 1;
overflow-y: auto;
margin-bottom: 1rem;
}
.word-item {
display: flex;
justify-content: space-between;
padding: 0.75rem;
border-bottom: 1px solid #eee;
transition: background-color 0.2s ease;
}
.word-item:hover {
background-color: #f8f9fa;
}
.export-button {
background-color: #27ae60;
color: white;
width: 100%;
margin-top: auto;
}
h2 {
color: #34495e;
margin-bottom: 1.5rem;
font-size: 1.5rem;
}
.clear-button {
background-color: #95a5a6;
color: white;
padding: 0.75rem 2rem;
}
.clear-button:hover {
background-color: #7f8c8d;
}
.comma-separated-section {
margin-top: 2rem;
padding: 1.5rem;
background: white;
border-radius: 12px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.selected-words-text {
padding: 1rem;
border: 1px solid #eee;
border-radius: 6px;
line-height: 1.6;
min-height: 60px;
background-color: #f8f9fa;
white-space: pre-wrap;
word-wrap: break-word;
}
.gemini-chat {
margin-top: 2rem;
padding: 2rem;
background: white;
border-radius: 12px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.gemini-input {
width: 100%;
min-height: 120px;
padding: 1rem;
border: 1px solid #e0e0e0;
border-radius: 8px;
font-size: 1rem;
resize: vertical;
margin-bottom: 1rem;
background-color: #f8f9fa;
transition: border-color 0.3s ease;
}
.gemini-input:focus {
outline: none;
border-color: #4285f4;
box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.1);
}
.gemini-button {
background-color: #4285f4;
color: white;
padding: 0.75rem 2rem;
border-radius: 6px;
font-weight: 600;
transition: all 0.3s ease;
width: 150px;
}
.gemini-button:hover:not(:disabled) {
background-color: #3367d6;
transform: translateY(-2px);
}
.gemini-button:disabled {
background-color: #a4c2f4;
cursor: not-allowed;
}
.gemini-response {
margin-top: 2rem;
padding: 1.5rem;
background-color: #f8f9fa;
border-radius: 8px;
border: 1px solid #e0e0e0;
animation: fadeIn 0.5s ease;
}
.gemini-response h3 {
color: #4285f4;
margin-bottom: 1rem;
font-size: 1.2rem;
}
.response-text {
white-space: pre-wrap;
line-height: 1.8;
color: #333;
font-size: 1rem;
padding: 0.5rem;
background: white;
border-radius: 6px;
border: 1px solid #eee;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.loading-dots:after {
content: '.';
animation: dots 1.5s steps(5, end) infinite;
}
@keyframes dots {
0%, 20% { content: '.'; }
40% { content: '..'; }
60% { content: '...'; }
80% { content: '....'; }
100% { content: '.....'; }
}
.export-excel {
margin-top: 1rem;
background-color: #34A853;
width: auto;
}
.export-excel:hover:not(:disabled) {
background-color: #2d9144;
}
.generate-ai-button {
margin-top: 1rem;
background-color: #4285f4;
color: white;
padding: 0.75rem 1.5rem;
border-radius: 6px;
font-weight: 600;
transition: all 0.3s ease;
}
.generate-ai-button:hover:not(:disabled) {
background-color: #3367d6;
transform: translateY(-2px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.generate-ai-button:disabled {
background-color: #a4c2f4;
cursor: not-allowed;
}
/* Add these media queries at the end of the file */
/* Tablet and smaller desktops */
@media (max-width: 1024px) {
.app-container {
padding: 1rem;
}
.header-content {
padding: 0 1rem;
}
h1 {
font-size: 1.5rem;
}
.footer-content {
padding: 0 1rem;
grid-template-columns: repeat(2, 1fr);
}
}
/* Mobile devices */
@media (max-width: 768px) {
.header-content {
flex-direction: column;
gap: 1rem;
text-align: center;
}
.logo-section {
flex-direction: column;
}
.powered-by {
margin-top: 0.5rem;
}
.main-section,
.comma-separated-section,
.gemini-chat {
padding: 1rem;
}
textarea {
min-height: 150px;
}
.words-container {
max-height: 200px;
}
.footer-content {
grid-template-columns: 1fr;
gap: 1.5rem;
text-align: center;
}
.tech-stack {
justify-content: center;
flex-wrap: wrap;
}
.button-group {
justify-content: center;
}
.gemini-button {
width: 100%;
}
.export-excel {
width: 100%;
}
.generate-ai-button {
width: 100%;
}
.text-selector {
padding: 1rem;
}
.main-section {
padding: 1rem;
}
textarea {
padding: 0.75rem;
min-height: 150px;
}
}
/* Small mobile devices */
@media (max-width: 480px) {
h1 {
font-size: 1.2rem;
}
h2 {
font-size: 1.1rem;
}
.app-header {
padding: 0.75rem 0;
}
.word {
margin: 0.15rem;
padding: 0.35rem 0.7rem;
font-size: 0.9rem;
}
.gemini-response {
padding: 1rem;
}
.response-text {
font-size: 0.9rem;
}
button {
padding: 0.6rem 1.2rem;
font-size: 0.9rem;
}
}
/* Ensure minimum content width */
@media (min-width: 1440px) {
.app-container,
.header-content,
.footer-content {
max-width: 1400px;
}
}
/* Dark mode support */
@media (prefers-color-scheme: dark) {
.app-wrapper {
background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
}
.app-header {
background: #2d2d2d;
}
.main-section,
.comma-separated-section,
.gemini-chat {
background: #2d2d2d;
border-color: #404040;
}
.word {
background-color: #404040;
color: #fff;
}
.word:hover {
background-color: #505050;
}
.selected-words-text,
.gemini-input,
.response-text {
background-color: #404040;
border-color: #505050;
color: #fff;
}
textarea {
background-color: #404040;
border-color: #505050;
color: #fff;
}
h1, h2, h3, p {
color: #fff;
}
.powered-by {
color: #ccc;
}
}
/* High contrast mode */
@media (forced-colors: active) {
.word.selected {
border: 2px solid currentColor;
}
button {
border: 1px solid currentColor;
}
}