*{margin:0;padding:0;box-sizing:border-box}:root{--bg-primary: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #21262d;--border-color: #30363d;--text-primary: #f0f6fc;--text-secondary: #c9d1d9;--text-tertiary: #8b949e;--accent-color: #58a6ff;--hover-bg: #30363d;--gradient-start: #161b22;--gradient-end: #0d1117}[data-theme=light]{--bg-primary: #ffffff;--bg-secondary: #f6f8fa;--bg-tertiary: #eaeef2;--border-color: #d0d7de;--text-primary: #1f2328;--text-secondary: #656d76;--text-tertiary: #656d76;--accent-color: #0969da;--hover-bg: #eaeef2;--gradient-start: #f6f8fa;--gradient-end: #ffffff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bg-primary);color:var(--text-secondary);transition:background-color .3s ease,color .3s ease}.app{min-height:100vh;display:flex;flex-direction:column}.header{padding:3rem 2rem 2rem;background:linear-gradient(180deg,var(--gradient-start) 0%,var(--gradient-end) 100%);border-bottom:1px solid var(--border-color);transition:background .3s ease,border-color .3s ease}.header-content{max-width:1400px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;gap:2rem}.header-content>div{flex:1;text-align:center}.header h1{font-size:2.5rem;font-weight:600;color:var(--text-primary);margin-bottom:.5rem}.subtitle{font-size:1.125rem;color:var(--text-tertiary)}.theme-toggle{padding:.75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .2s;flex-shrink:0}.theme-toggle:hover{background:var(--hover-bg);transform:scale(1.05)}.theme-toggle svg{display:block}.main{flex:1;padding:2rem;max-width:1400px;width:100%;margin:0 auto}.upload-section{display:flex;justify-content:center;align-items:flex-start;padding-top:2rem}.upload-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:2rem;max-width:600px;width:100%;transition:background .3s ease,border-color .3s ease}.upload-card h2{font-size:1.25rem;margin-bottom:1.5rem;color:var(--text-primary);text-align:center}.file-upload-label{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem 1.5rem;border:2px dashed var(--border-color);border-radius:8px;cursor:pointer;transition:all .2s;background:var(--bg-primary)}.file-upload-label:hover{border-color:var(--accent-color);background:var(--bg-secondary)}.file-upload-label svg{color:var(--text-tertiary)}.file-upload-label span{font-size:1rem;color:var(--accent-color);font-weight:500}.file-input{display:none}.instructions{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--border-color)}.instructions h3{font-size:1rem;margin-bottom:.75rem;color:var(--text-primary)}.instructions ol{margin-left:1.5rem;line-height:1.6;color:var(--text-secondary);font-size:.875rem}.instructions li{margin-bottom:.4rem}.instructions strong{color:var(--text-primary)}.instructions code{background:var(--bg-primary);padding:.2rem .4rem;border-radius:4px;font-size:.875rem;color:var(--accent-color);border:1px solid var(--border-color)}.privacy-note{display:flex;align-items:flex-start;gap:.75rem;margin-top:1.5rem;padding:1rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;font-size:.875rem;color:var(--text-tertiary);transition:all .3s ease}.privacy-note svg{color:var(--accent-color);flex-shrink:0;margin-top:2px}.loading-container{display:flex;flex-direction:column;align-items:center;gap:1.5rem;padding:3rem 2rem}.spinner{width:48px;height:48px;border:4px solid var(--border-color);border-top-color:var(--accent-color);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-container h2{margin:0;color:var(--text-primary)}.loading-text{color:var(--text-tertiary);font-size:.875rem;text-align:center;max-width:400px}.visualization-section{display:flex;flex-direction:column;gap:2rem}.controls{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;padding:1.5rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;transition:all .3s ease}.control-group{display:flex;align-items:center;gap:1rem;flex:1}.control-group label{font-size:.875rem;font-weight:500;color:var(--text-primary);white-space:nowrap}.chat-name-input{padding:.5rem 1rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-secondary);font-size:.875rem;outline:none;transition:border-color .2s;flex:1;min-width:200px}.chat-name-input:focus{border-color:var(--accent-color)}.chat-name-input::placeholder{color:var(--text-tertiary)}.color-select{padding:.5rem 1rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-secondary);font-size:.875rem;cursor:pointer;outline:none;transition:border-color .2s}.color-select:hover,.color-select:focus{border-color:var(--accent-color)}.button-group{display:flex;gap:.75rem}.screenshot-button{padding:.5rem 1.25rem;background:var(--accent-color);border:none;border-radius:6px;color:#fff;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:.5rem}.screenshot-button:hover:not(:disabled){opacity:.9;transform:translateY(-1px)}.screenshot-button:disabled{opacity:.6;cursor:not-allowed}.screenshot-button svg.spinning{animation:spin 1s linear infinite}.reset-button{padding:.5rem 1.25rem;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-secondary);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.reset-button:hover{background:var(--hover-bg);border-color:var(--text-tertiary)}.stats{display:flex;gap:2rem;flex-wrap:wrap;padding:1.5rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;transition:all .3s ease}.stat-item{display:flex;flex-direction:column;gap:.25rem}.stat-label{font-size:.75rem;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.5px}.stat-value{font-size:1.25rem;font-weight:600;color:var(--text-primary)}.heatmap-container-wrapper{display:flex;flex-direction:column;gap:0;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;transition:all .3s ease}.screenshot-header{padding:1.5rem 2rem;background:var(--bg-primary);border-bottom:1px solid var(--border-color);text-align:center}.screenshot-title{font-size:1.5rem;font-weight:600;color:var(--text-primary);margin:0 0 .5rem}.screenshot-subtitle{font-size:.875rem;color:var(--text-tertiary);margin:0}.year-tabs{display:flex;gap:0;border-bottom:1px solid var(--border-color);background:var(--bg-primary);padding:.5rem 1rem;overflow-x:auto}.year-tab{padding:.5rem 1rem;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}.year-tab:hover{background:var(--bg-secondary);color:var(--text-primary)}.year-tab.active{background:var(--accent-color);color:#fff}.heatmap-wrapper{padding:2rem;overflow-x:auto}.heatmap-container{display:flex;flex-direction:column;gap:.5rem;min-width:800px}.heatmap-header{display:grid;grid-template-columns:50px repeat(auto-fill,12px);gap:3px;padding-left:50px}.month-label{font-size:.625rem;color:var(--text-tertiary);font-weight:500}.heatmap-grid{display:flex;gap:.5rem}.day-labels{display:flex;flex-direction:column;gap:3px;width:50px}.day-label{height:12px;font-size:.625rem;color:var(--text-tertiary);display:flex;align-items:center;padding-right:.5rem}.weeks{display:flex;gap:3px}.week{display:flex;flex-direction:column;gap:3px}.day{width:12px;height:12px;border-radius:2px;cursor:pointer;transition:all .1s;position:relative}.day:not(.empty):hover{outline:2px solid var(--accent-color);outline-offset:1px;transform:scale(1.2);z-index:100}.day:not(.empty):hover:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--text-primary);color:var(--bg-primary);padding:.5rem .75rem;border-radius:6px;font-size:.75rem;white-space:nowrap;pointer-events:none;z-index:1000;box-shadow:0 4px 12px #00000026;animation:tooltipFadeIn .2s ease-out}.day:not(.empty):hover:before{content:"";position:absolute;bottom:calc(100% + 2px);left:50%;transform:translate(-50%);border:6px solid transparent;border-top-color:var(--text-primary);pointer-events:none;z-index:1001;animation:tooltipFadeIn .2s ease-out}@keyframes tooltipFadeIn{0%{opacity:0;transform:translate(-50%) translateY(4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.day.empty{background:transparent;cursor:default}.heatmap-legend{display:flex;align-items:center;gap:.25rem;margin-top:1rem;justify-content:flex-end}.legend-label{font-size:.75rem;color:var(--text-tertiary);margin:0 .25rem}.legend-box{width:12px;height:12px;border-radius:2px}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease-out}.modal-content{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:2rem;max-width:500px;width:90%;box-shadow:0 20px 60px #0000004d;animation:slideUp .3s ease-out}.modal-title{font-size:1.5rem;font-weight:600;color:var(--text-primary);margin:0 0 .5rem}.modal-description{font-size:.875rem;color:var(--text-tertiary);margin:0 0 1.5rem}.modal-input{width:100%;padding:.75rem 1rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;color:var(--text-secondary);font-size:1rem;outline:none;transition:border-color .2s;margin-bottom:1.5rem}.modal-input:focus{border-color:var(--accent-color)}.modal-input::placeholder{color:var(--text-tertiary)}.modal-actions{display:flex;gap:.75rem;justify-content:flex-end}.modal-button{padding:.625rem 1.5rem;border-radius:8px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;border:none}.modal-button-secondary{background:var(--bg-tertiary);color:var(--text-secondary);border:1px solid var(--border-color)}.modal-button-secondary:hover{background:var(--hover-bg)}.modal-button-primary{background:var(--accent-color);color:#fff}.modal-button-primary:hover{opacity:.9;transform:translateY(-1px)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.footer{text-align:center;padding:1.5rem 2rem;color:var(--text-tertiary);font-size:.875rem;border-top:1px solid var(--border-color);margin-top:auto;transition:all .3s ease;background:var(--bg-secondary)}.footer p{margin:0 0 .75rem}.social-links{display:flex;gap:1rem;justify-content:center;align-items:center}.social-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-secondary);transition:all .2s;text-decoration:none}.social-link:hover{background:var(--hover-bg);color:var(--accent-color);border-color:var(--accent-color);transform:translateY(-2px)}@media(max-width:768px){.header{padding:2rem 1rem 1.5rem}.header-content{flex-direction:column;gap:1rem}.header-content>div{text-align:center}.theme-toggle{align-self:center}.header h1{font-size:2rem}.subtitle{font-size:1rem}.upload-card{padding:2rem}.controls,.control-group{flex-direction:column;align-items:stretch}.stats{flex-direction:column;gap:1rem}.heatmap-wrapper{padding:1rem}}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;display:flex;min-width:320px;min-height:100vh}#root{width:100%}
