*, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } body { font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', sans-serif; background: linear-gradient(135deg, #e0f7fa, #f1f8e9); margin: 0; padding: 20px; color: #2d3436; -webkit-font-smoothing: antialiased; animation: fadeInBody 1.2s ease forwards; } h1 { text-align: center; color: #2c3e50; font-size: 2.8rem; margin-bottom: 30px; animation: fadeInDown 1s ease-in-out; } /* TABLE STYLES */ table { width: 100%; border-collapse: collapse; background: #fff; box-shadow: 0 6px 24px rgba(0, 0, 0, 0.1); border-radius: 16px; overflow: hidden; animation: fadeInUp 0.8s ease; transition: box-shadow 0.4s ease; } table:hover { box-shadow: 0 10px 30px rgba(0,0,0,0.15); } th, td { padding: 16px; border: 1px solid #e0e0e0; text-align: center; transition: background 0.3s ease, color 0.3s ease; } th { background: linear-gradient(to right, #3498db, #5dade2); color: white; font-weight: 600; letter-spacing: 0.4px; } td[contenteditable="true"], th[contenteditable="true"] { background-color: #fefefe; cursor: text; transition: background-color 0.4s ease; } td.done { background-color: #c8e6c9 !important; text-decoration: line-through; } td:hover { background: #eafaf1; } th:first-child, td:first-child { background-color: #f0f4f8; font-weight: bold; } /* NOTE SECTION */ #note { margin-top: 30px; padding: 15px; border: 1px solid #ccc; background: #ffffff; border-radius: 12px; font-size: 1rem; box-shadow: 0 2px 8px rgba(0,0,0,0.06); animation: fadeInUp 1s ease; } /* BUTTONS */ button, #exportBtn, #addRowBtn, #aiGenerateBtn { font-size: 16px; padding: 12px 24px; border: none; border-radius: 10px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; color: #fff; box-shadow: 0 4px 8px rgba(0,0,0,0.15); } #exportBtn { background: #2ecc71; } #addRowBtn { background: #3498db; } #addRowBtn:hover { background: #2980b9; transform: scale(1.05); box-shadow: 0 6px 14px rgba(41, 128, 185, 0.6); } #exportBtn:hover { background: #27ae60; transform: scale(1.05); box-shadow: 0 6px 14px rgba(39, 174, 96, 0.6); } #aiGenerateBtn { background: #8e44ad; margin-top: 10px; } #aiGenerateBtn:hover { background-color: #732d91; transform: scale(1.05); box-shadow: 0 6px 14px rgba(115, 45, 145, 0.6); } .remove-btn { background: #e74c3c; font-size: 14px; padding: 6px 12px; border-radius: 6px; margin-left: 8px; box-shadow: 0 2px 6px rgba(0,0,0,0.2); transition: background-color 0.3s ease, transform 0.3s ease; } .remove-btn:hover { background: #c0392b; transform: scale(1.1); } h3 { font-size: 1.4rem; margin-top: 40px; color: #2c3e50; animation: fadeInDown 0.8s ease forwards; } /* CHATBOT WIDGET */ .chatbot-widget { position: fixed; bottom: 24px; right: 24px; width: 350px; z-index: 999; font-family: 'Segoe UI', sans-serif; animation: fadeIn 1s ease-in-out; } .chat-header { background-color: #4caf50; color: white; padding: 12px 16px; border-radius: 12px 12px 0 0; cursor: pointer; font-weight: bold; text-align: center; box-shadow: 0 4px 8px rgba(0,0,0,0.15); } .chat-container { background: #fff; border: 1px solid #ccc; border-top: none; max-height: 400px; overflow-y: auto; display: flex; flex-direction: column; border-radius: 0 0 12px 12px; box-shadow: 0 6px 12px rgba(0,0,0,0.15); } .chat-container.hidden { display: none; } .chat-box { padding: 10px; height: 300px; overflow-y: auto; font-size: 14px; display: flex; flex-direction: column; gap: 10px; background: #f9f9f9; border-radius: 0 0 12px 12px; } .chat-input-area { display: flex; border-top: 1px solid #ddd; padding: 8px; } .chat-input-area input, .chat-input-area textarea { flex: 1; padding: 10px; border-radius: 10px; border: 1px solid #ccc; font-size: 14px; resize: none; font-family: inherit; } .chat-input-area button { background-color: #4caf50; color: white; border: none; margin-left: 8px; padding: 0 16px; border-radius: 10px; cursor: pointer; } /* MESSAGE BUBBLES */ .chat-message { padding: 10px 14px; border-radius: 16px; max-width: 75%; font-size: 14px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); white-space: pre-wrap; word-break: break-word; } .chat-message.user { align-self: flex-end; background-color: #dcf8c6; text-align: right; } .chat-message.ai { align-self: flex-start; background-color: #f1f0f0; text-align: left; } /* RESPONSIVE */ @media (max-width: 768px) { table, thead, tbody, th, td, tr { display: block; } th { position: sticky; top: 0; background: #3498db; } td { position: relative; padding-left: 50%; text-align: left; } td::before { content: attr(data-label); position: absolute; left: 10px; font-weight: bold; color: #555; white-space: nowrap; } .chatbot-widget { width: 90%; right: 5%; bottom: 20px; } } /* PRINT */ @media print { #exportBtn, #addRowBtn, .remove-btn, h3, th:last-child, td:last-child, #aiInput, #aiGenerateBtn, .chatbot-widget { display: none !important; } body { background: white; } table { box-shadow: none; border-radius: 0; } td, th { font-size: 12pt; } #note { border: none; } } /* ANIMATIONS */ @keyframes fadeIn { from { opacity: 0 } to { opacity: 1 } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInBody { 0% { opacity: 0; filter: blur(10px); } 100% { opacity: 1; filter: blur(0); } } /* Animation chung */ * { transition: background-color 0.4s ease, color 0.4s ease, box-shadow 0.4s ease, transform 0.3s ease; }