diff --git a/docs/screenshots/social-tab-fixed.png b/docs/screenshots/social-tab-fixed.png
new file mode 100644
index 0000000..cf31aed
Binary files /dev/null and b/docs/screenshots/social-tab-fixed.png differ
diff --git a/src/App.css b/src/App.css
index 3eb040d..0fae964 100644
--- a/src/App.css
+++ b/src/App.css
@@ -5006,3 +5006,1285 @@
transition: none;
}
}
+
+/* ==========================================================================
+ Community Gallery Styles
+ ========================================================================== */
+
+.community-gallery {
+ padding: 1rem;
+ background: #1a1a1a;
+ border-radius: 8px;
+ max-width: 800px;
+ width: 100%;
+}
+
+.community-gallery__header {
+ margin-bottom: 1rem;
+}
+
+.community-gallery__title {
+ font-size: 1.25rem;
+ margin: 0 0 0.25rem;
+ color: #fff;
+}
+
+.community-gallery__subtitle {
+ font-size: 0.875rem;
+ color: #888;
+ margin: 0;
+}
+
+.community-gallery__controls {
+ margin-bottom: 1rem;
+}
+
+.community-gallery__search {
+ position: relative;
+ margin-bottom: 0.75rem;
+}
+
+.community-gallery__search-input {
+ width: 100%;
+ padding: 0.5rem 2rem 0.5rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: #2a2a2a;
+ color: #fff;
+ font-size: 16px;
+ box-sizing: border-box;
+}
+
+.community-gallery__search-input::placeholder {
+ color: #666;
+}
+
+.community-gallery__search-input:focus {
+ outline: none;
+ border-color: #646cff;
+}
+
+.community-gallery__search-clear {
+ position: absolute;
+ right: 0.5rem;
+ top: 50%;
+ transform: translateY(-50%);
+ padding: 0.5rem;
+ border: none;
+ background: transparent;
+ color: #888;
+ cursor: pointer;
+ font-size: 1rem;
+ line-height: 1;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.community-gallery__search-clear:hover {
+ color: #fff;
+}
+
+.community-gallery__filters {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+}
+
+.community-gallery__select {
+ padding: 0.375rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: #2a2a2a;
+ color: #fff;
+ font-size: 0.875rem;
+ cursor: pointer;
+ flex: 1;
+ min-width: 0;
+}
+
+.community-gallery__select:focus {
+ outline: none;
+ border-color: #646cff;
+}
+
+.community-gallery__loading {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 2rem;
+ color: #888;
+ font-size: 0.875rem;
+}
+
+.community-gallery__spinner {
+ width: 24px;
+ height: 24px;
+ border: 2px solid #333;
+ border-top-color: #646cff;
+ border-radius: 50%;
+ animation: community-spin 0.8s linear infinite;
+}
+
+@keyframes community-spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.community-gallery__error {
+ padding: 0.75rem;
+ border-radius: 4px;
+ background: rgba(220, 53, 69, 0.2);
+ color: #f5c6cb;
+ border: 1px solid #dc3545;
+ font-size: 0.875rem;
+ margin-bottom: 0.75rem;
+}
+
+.community-gallery__grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
+ gap: 0.75rem;
+ margin-bottom: 0.75rem;
+}
+
+.community-gallery__empty {
+ grid-column: 1 / -1;
+ padding: 2rem;
+ text-align: center;
+ color: #666;
+ font-size: 0.875rem;
+}
+
+.community-gallery__item {
+ background: #2a2a2a;
+ border-radius: 6px;
+ overflow: hidden;
+ cursor: pointer;
+ transition:
+ transform 0.2s,
+ box-shadow 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+ position: relative;
+ will-change: transform;
+ transform: translateZ(0);
+}
+
+.community-gallery__item:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+}
+
+@media (hover: none) {
+ .community-gallery__item:hover {
+ transform: none;
+ box-shadow: none;
+ }
+
+ .community-gallery__item:active {
+ transform: scale(0.98);
+ background: #333;
+ }
+}
+
+.community-gallery__item:focus {
+ outline: 2px solid #646cff;
+ outline-offset: 2px;
+}
+
+.community-gallery__badges {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ display: flex;
+ gap: 4px;
+ z-index: 1;
+}
+
+.community-gallery__badge {
+ padding: 0.125rem 0.375rem;
+ border-radius: 4px;
+ font-size: 0.625rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.02em;
+}
+
+.community-gallery__badge--featured {
+ background: rgba(100, 108, 255, 0.85);
+ color: #fff;
+}
+
+.community-gallery__badge--staff {
+ background: rgba(76, 175, 80, 0.85);
+ color: #fff;
+}
+
+.community-gallery__thumbnail {
+ width: 100%;
+ height: 100px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.community-gallery__noise-indicator {
+ position: absolute;
+ bottom: 4px;
+ right: 4px;
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ opacity: 0.8;
+}
+
+.community-gallery__noise-indicator--perlin {
+ background: repeating-linear-gradient(
+ 45deg,
+ rgba(255, 255, 255, 0.1),
+ rgba(255, 255, 255, 0.1) 2px,
+ transparent 2px,
+ transparent 4px
+ );
+ border: 1px solid rgba(255, 255, 255, 0.3);
+}
+
+.community-gallery__noise-indicator--worley {
+ background:
+ radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.3), transparent 50%),
+ radial-gradient(circle at 70% 70%, rgba(255, 255, 255, 0.2), transparent 50%);
+ border: 1px solid rgba(255, 255, 255, 0.3);
+}
+
+.community-gallery__noise-indicator--crackle {
+ background: conic-gradient(
+ from 0deg,
+ rgba(255, 255, 255, 0.1) 0deg,
+ transparent 30deg,
+ rgba(255, 255, 255, 0.1) 60deg,
+ transparent 90deg,
+ rgba(255, 255, 255, 0.1) 120deg,
+ transparent 150deg
+ );
+ border: 1px solid rgba(255, 255, 255, 0.3);
+}
+
+.community-gallery__item-info {
+ padding: 0.5rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.125rem;
+}
+
+.community-gallery__item-name {
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: #fff;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.community-gallery__item-author {
+ font-size: 0.625rem;
+ color: #888;
+}
+
+.community-gallery__item-stats {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0 0.5rem 0.375rem;
+ font-size: 0.625rem;
+ color: #888;
+}
+
+.community-gallery__like-btn {
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+ padding: 0.125rem 0.25rem;
+ border: none;
+ border-radius: 4px;
+ background: transparent;
+ color: #888;
+ cursor: pointer;
+ font-size: 0.625rem;
+ transition: color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.community-gallery__like-btn:hover {
+ color: #fff;
+}
+
+.community-gallery__like-btn--liked {
+ color: #e74c3c;
+}
+
+.community-gallery__like-icon {
+ font-size: 0.875rem;
+ line-height: 1;
+}
+
+.community-gallery__like-count {
+ font-size: 0.625rem;
+}
+
+.community-gallery__views,
+.community-gallery__downloads {
+ display: flex;
+ align-items: center;
+ gap: 0.125rem;
+}
+
+.community-gallery__item-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.25rem;
+ padding: 0 0.5rem 0.5rem;
+}
+
+.community-gallery__item-tag {
+ padding: 0.0625rem 0.375rem;
+ border-radius: 6px;
+ background: #3a3a3a;
+ color: #aaa;
+ font-size: 0.5625rem;
+}
+
+.community-gallery__item-tag--more {
+ background: #444;
+}
+
+.community-gallery__pagination {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 0.25rem;
+ margin-bottom: 0.75rem;
+}
+
+.community-gallery__page-btn {
+ padding: 0.375rem 0.625rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: transparent;
+ color: #aaa;
+ cursor: pointer;
+ font-size: 0.75rem;
+ transition:
+ background-color 0.2s,
+ color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.community-gallery__page-btn:hover:not(:disabled) {
+ background: #333;
+ color: #fff;
+}
+
+.community-gallery__page-btn:disabled {
+ opacity: 0.4;
+ cursor: not-allowed;
+}
+
+.community-gallery__page-btn--active {
+ background: #646cff;
+ border-color: #646cff;
+ color: #fff;
+}
+
+.community-gallery__ellipsis {
+ padding: 0.375rem 0.25rem;
+ color: #666;
+ font-size: 0.75rem;
+}
+
+.community-gallery__footer {
+ text-align: center;
+}
+
+.community-gallery__count {
+ font-size: 0.75rem;
+ color: #666;
+}
+
+/* Responsive adjustments for Community Gallery */
+@media (max-width: 768px) {
+ .community-gallery {
+ max-width: 100%;
+ border-radius: 0;
+ padding: 0.75rem;
+ }
+
+ .community-gallery__grid {
+ grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
+ }
+}
+
+@media (max-width: 480px) {
+ .community-gallery__grid {
+ grid-template-columns: repeat(2, 1fr);
+ gap: 0.5rem;
+ }
+
+ .community-gallery__filters {
+ flex-direction: column;
+ }
+
+ .community-gallery__select {
+ width: 100%;
+ }
+
+ .community-gallery__thumbnail {
+ height: 80px;
+ }
+}
+
+@media (pointer: coarse) {
+ .community-gallery__search-input {
+ min-height: 44px;
+ padding: 0.625rem 2.5rem 0.625rem 0.875rem;
+ }
+
+ .community-gallery__search-clear {
+ min-width: 44px;
+ min-height: 44px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .community-gallery__select {
+ min-height: 44px;
+ }
+
+ .community-gallery__like-btn {
+ min-height: 44px;
+ }
+
+ .community-gallery__page-btn {
+ min-height: 44px;
+ min-width: 44px;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .community-gallery__item {
+ transition: none;
+ }
+
+ .community-gallery__item:hover {
+ transform: none;
+ }
+
+ .community-gallery__spinner {
+ animation: none;
+ }
+}
+
+/* ==========================================================================
+ Share Panel Styles
+ ========================================================================== */
+
+.share-panel {
+ padding: 1rem;
+ background: #1a1a1a;
+ border-radius: 8px;
+ max-width: 800px;
+ width: 100%;
+}
+
+.share-panel__title {
+ font-size: 1.25rem;
+ margin: 0 0 1rem;
+ color: #fff;
+}
+
+.share-panel__subtitle {
+ font-size: 1rem;
+ margin: 0 0 0.75rem;
+ color: #ddd;
+}
+
+.share-panel__create {
+ margin-bottom: 1.5rem;
+}
+
+.share-panel__field {
+ margin-bottom: 0.75rem;
+}
+
+.share-panel__label {
+ display: block;
+ font-size: 0.75rem;
+ color: #aaa;
+ margin-bottom: 0.25rem;
+}
+
+.share-panel__select,
+.share-panel__input {
+ width: 100%;
+ padding: 0.5rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: #2a2a2a;
+ color: #fff;
+ font-size: 0.875rem;
+ box-sizing: border-box;
+}
+
+.share-panel__select:focus,
+.share-panel__input:focus {
+ outline: none;
+ border-color: #646cff;
+}
+
+.share-panel__hint {
+ font-size: 0.625rem;
+ color: #666;
+ margin-top: 0.25rem;
+}
+
+.share-panel__button {
+ padding: 0.5rem 1rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 0.875rem;
+ transition:
+ background-color 0.2s,
+ color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+ background: #2a2a2a;
+ color: #fff;
+}
+
+.share-panel__button:hover {
+ background: #3a3a3a;
+}
+
+.share-panel__button--primary {
+ background: #646cff;
+ border-color: #646cff;
+ color: #fff;
+ width: 100%;
+}
+
+.share-panel__button--primary:hover {
+ background: #535bf2;
+}
+
+.share-panel__button--copy {
+ background: #4caf50;
+ border-color: #4caf50;
+ color: #fff;
+}
+
+.share-panel__button--copy:hover {
+ background: #45a049;
+}
+
+.share-panel__button--secondary {
+ background: transparent;
+ color: #aaa;
+}
+
+.share-panel__button--secondary:hover {
+ color: #fff;
+ background: #333;
+}
+
+.share-panel__button--small {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.75rem;
+}
+
+.share-panel__button--danger {
+ background: transparent;
+ color: #dc3545;
+ border-color: #dc3545;
+}
+
+.share-panel__button--danger:hover {
+ background: rgba(220, 53, 69, 0.2);
+}
+
+.share-panel__message {
+ padding: 0.5rem 0.75rem;
+ border-radius: 4px;
+ font-size: 0.875rem;
+ margin-bottom: 0.75rem;
+}
+
+.share-panel__message--error {
+ background: rgba(220, 53, 69, 0.2);
+ color: #f5c6cb;
+ border: 1px solid #dc3545;
+}
+
+.share-panel__message--success {
+ background: rgba(76, 175, 80, 0.2);
+ color: #c3e6cb;
+ border: 1px solid #4caf50;
+}
+
+.share-panel__result {
+ padding: 1rem;
+ background: #222;
+ border-radius: 6px;
+ margin-bottom: 1rem;
+}
+
+.share-panel__link-display {
+ display: flex;
+ gap: 0.5rem;
+ margin-bottom: 0.75rem;
+}
+
+.share-panel__link-input {
+ flex: 1;
+ padding: 0.5rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: #2a2a2a;
+ color: #fff;
+ font-size: 0.875rem;
+ box-sizing: border-box;
+}
+
+.share-panel__qr {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.5rem;
+ margin-bottom: 0.75rem;
+}
+
+.share-panel__qr-image {
+ max-width: 160px;
+ max-height: 160px;
+}
+
+.share-panel__qr-loading {
+ padding: 1rem;
+ color: #888;
+ font-size: 0.875rem;
+}
+
+.share-panel__link-info {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.75rem;
+ font-size: 0.75rem;
+ color: #888;
+}
+
+.share-panel__info-item {
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+
+.share-panel__links {
+ margin-top: 1.5rem;
+}
+
+.share-panel__loading {
+ text-align: center;
+ padding: 1rem;
+ color: #888;
+ font-size: 0.875rem;
+}
+
+.share-panel__empty {
+ text-align: center;
+ padding: 1rem;
+ color: #666;
+ font-size: 0.875rem;
+}
+
+.share-panel__links-list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.share-panel__link-item {
+ padding: 0.75rem;
+ background: #222;
+ border-radius: 6px;
+ border: 1px solid #333;
+}
+
+.share-panel__link-item--inactive {
+ opacity: 0.5;
+}
+
+.share-panel__link-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 0.375rem;
+}
+
+.share-panel__link-name {
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: #fff;
+}
+
+.share-panel__link-date {
+ font-size: 0.625rem;
+ color: #666;
+}
+
+.share-panel__link-url {
+ font-size: 0.75rem;
+ color: #646cff;
+ word-break: break-all;
+ margin-bottom: 0.375rem;
+}
+
+.share-panel__link-stats {
+ display: flex;
+ gap: 0.75rem;
+ font-size: 0.625rem;
+ color: #888;
+ margin-bottom: 0.375rem;
+}
+
+.share-panel__link-actions {
+ display: flex;
+ gap: 0.5rem;
+}
+
+/* Responsive adjustments for Share Panel */
+@media (max-width: 768px) {
+ .share-panel {
+ max-width: 100%;
+ border-radius: 0;
+ padding: 0.75rem;
+ }
+}
+
+@media (max-width: 480px) {
+ .share-panel__link-display {
+ flex-direction: column;
+ }
+}
+
+@media (pointer: coarse) {
+ .share-panel__select,
+ .share-panel__input,
+ .share-panel__link-input {
+ min-height: 44px;
+ }
+
+ .share-panel__button {
+ min-height: 44px;
+ }
+}
+
+/* ==========================================================================
+ Notification Panel Styles
+ ========================================================================== */
+
+.notification-panel {
+ padding: 1rem;
+ background: #1a1a1a;
+ border-radius: 8px;
+ max-width: 800px;
+ width: 100%;
+}
+
+.notification-panel__header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 0.75rem;
+}
+
+.notification-panel__title {
+ font-size: 1.25rem;
+ margin: 0;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.notification-panel__badge {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 20px;
+ height: 20px;
+ padding: 0 6px;
+ border-radius: 10px;
+ background: #dc3545;
+ color: #fff;
+ font-size: 0.625rem;
+ font-weight: 600;
+}
+
+.notification-panel__controls {
+ display: flex;
+ gap: 0.5rem;
+ align-items: center;
+ margin-bottom: 0.75rem;
+}
+
+.notification-panel__filter {
+ padding: 0.375rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: #2a2a2a;
+ color: #fff;
+ font-size: 0.75rem;
+ cursor: pointer;
+}
+
+.notification-panel__filter:focus {
+ outline: none;
+ border-color: #646cff;
+}
+
+.notification-panel__mark-all-btn {
+ padding: 0.375rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: transparent;
+ color: #aaa;
+ cursor: pointer;
+ font-size: 0.75rem;
+ transition:
+ background-color 0.2s,
+ color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.notification-panel__mark-all-btn:hover {
+ background: #333;
+ color: #fff;
+}
+
+.notification-panel__error {
+ padding: 0.5rem 0.75rem;
+ border-radius: 4px;
+ background: rgba(220, 53, 69, 0.2);
+ color: #f5c6cb;
+ border: 1px solid #dc3545;
+ font-size: 0.875rem;
+ margin-bottom: 0.75rem;
+}
+
+.notification-panel__loading {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 2rem;
+ color: #888;
+ font-size: 0.875rem;
+}
+
+.notification-panel__spinner {
+ width: 24px;
+ height: 24px;
+ border: 2px solid #333;
+ border-top-color: #646cff;
+ border-radius: 50%;
+ animation: community-spin 0.8s linear infinite;
+}
+
+.notification-panel__list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.375rem;
+}
+
+.notification-panel__empty {
+ text-align: center;
+ padding: 2rem;
+ color: #666;
+ font-size: 0.875rem;
+}
+
+.notification-panel__item {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.75rem;
+ padding: 0.75rem;
+ background: #222;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ transition: background-color 0.2s;
+}
+
+.notification-panel__item:hover {
+ background: #2a2a2a;
+}
+
+.notification-panel__item--unread {
+ border-color: #646cff;
+ background: rgba(100, 108, 255, 0.05);
+}
+
+.notification-panel__icon {
+ font-size: 1.25rem;
+ flex-shrink: 0;
+ line-height: 1;
+}
+
+.notification-panel__content {
+ flex: 1;
+ min-width: 0;
+}
+
+.notification-panel__message {
+ font-size: 0.875rem;
+ color: #ddd;
+ margin-bottom: 0.25rem;
+}
+
+.notification-panel__actor {
+ font-weight: 500;
+ color: #fff;
+}
+
+.notification-panel__time {
+ font-size: 0.625rem;
+ color: #666;
+}
+
+.notification-panel__actions {
+ display: flex;
+ gap: 0.25rem;
+ flex-shrink: 0;
+}
+
+.notification-panel__action-btn {
+ padding: 0.25rem 0.5rem;
+ border: none;
+ border-radius: 4px;
+ background: transparent;
+ color: #888;
+ cursor: pointer;
+ font-size: 0.75rem;
+ transition:
+ background-color 0.2s,
+ color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.notification-panel__action-btn:hover {
+ background: #333;
+ color: #fff;
+}
+
+.notification-panel__action-btn--danger:hover {
+ background: rgba(220, 53, 69, 0.2);
+ color: #dc3545;
+}
+
+/* Responsive adjustments for Notification Panel */
+@media (max-width: 768px) {
+ .notification-panel {
+ max-width: 100%;
+ border-radius: 0;
+ padding: 0.75rem;
+ }
+}
+
+@media (max-width: 480px) {
+ .notification-panel__controls {
+ flex-direction: column;
+ align-items: stretch;
+ }
+
+ .notification-panel__item {
+ padding: 0.5rem;
+ }
+}
+
+@media (pointer: coarse) {
+ .notification-panel__filter {
+ min-height: 44px;
+ }
+
+ .notification-panel__mark-all-btn {
+ min-height: 44px;
+ }
+
+ .notification-panel__action-btn {
+ min-height: 44px;
+ min-width: 44px;
+ }
+}
+
+/* ==========================================================================
+ Comments Section Styles
+ ========================================================================== */
+
+.comments-section {
+ padding: 1rem;
+ background: #1a1a1a;
+ border-radius: 8px;
+ max-width: 800px;
+ width: 100%;
+}
+
+.comments-section__header {
+ margin-bottom: 0.75rem;
+}
+
+.comments-section__title {
+ font-size: 1rem;
+ margin: 0;
+ color: #fff;
+}
+
+.comments-section__form {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ margin-bottom: 1rem;
+}
+
+.comments-section__textarea {
+ width: 100%;
+ padding: 0.5rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: #2a2a2a;
+ color: #fff;
+ font-size: 0.875rem;
+ resize: vertical;
+ min-height: 60px;
+ box-sizing: border-box;
+ font-family: inherit;
+}
+
+.comments-section__textarea:focus {
+ outline: none;
+ border-color: #646cff;
+}
+
+.comments-section__textarea::placeholder {
+ color: #666;
+}
+
+.comments-section__form-actions {
+ display: flex;
+ gap: 0.5rem;
+ justify-content: flex-end;
+}
+
+.comments-section__submit-btn {
+ padding: 0.375rem 0.75rem;
+ border: none;
+ border-radius: 4px;
+ background: #646cff;
+ color: #fff;
+ cursor: pointer;
+ font-size: 0.75rem;
+ transition: background-color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.comments-section__submit-btn:hover {
+ background: #535bf2;
+}
+
+.comments-section__submit-btn:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+}
+
+.comments-section__cancel-btn {
+ padding: 0.375rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: transparent;
+ color: #aaa;
+ cursor: pointer;
+ font-size: 0.75rem;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.comments-section__cancel-btn:hover {
+ color: #fff;
+ background: #333;
+}
+
+.comments-section__list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+
+.comments-section__empty {
+ text-align: center;
+ padding: 1.5rem;
+ color: #666;
+ font-size: 0.875rem;
+}
+
+.comments-section__comment {
+ padding: 0.75rem;
+ background: #222;
+ border-radius: 6px;
+}
+
+.comments-section__comment-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 0.375rem;
+}
+
+.comments-section__author {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.comments-section__avatar {
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.comments-section__avatar-placeholder {
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ background: #646cff;
+ color: #fff;
+ font-size: 0.625rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: 600;
+}
+
+.comments-section__author-name {
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: #fff;
+}
+
+.comments-section__time {
+ font-size: 0.625rem;
+ color: #666;
+}
+
+.comments-section__edited {
+ color: #888;
+ font-style: italic;
+}
+
+.comments-section__content {
+ font-size: 0.875rem;
+ color: #ddd;
+ margin: 0 0 0.5rem;
+ line-height: 1.4;
+}
+
+.comments-section__actions {
+ display: flex;
+ gap: 0.5rem;
+}
+
+.comments-section__action-btn {
+ padding: 0.25rem 0.5rem;
+ border: none;
+ border-radius: 4px;
+ background: transparent;
+ color: #888;
+ cursor: pointer;
+ font-size: 0.75rem;
+ transition:
+ background-color 0.2s,
+ color 0.2s;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.comments-section__action-btn:hover {
+ background: #333;
+ color: #fff;
+}
+
+.comments-section__action-btn--active {
+ color: #e74c3c;
+}
+
+.comments-section__action-btn--danger:hover {
+ background: rgba(220, 53, 69, 0.2);
+ color: #dc3545;
+}
+
+.comments-section__replies {
+ margin-top: 0.75rem;
+ padding-left: 1rem;
+ border-left: 2px solid #333;
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.comments-section__load-replies {
+ padding: 0.375rem 0.75rem;
+ border: 1px solid #333;
+ border-radius: 4px;
+ background: transparent;
+ color: #646cff;
+ cursor: pointer;
+ font-size: 0.75rem;
+ margin-top: 0.5rem;
+ -webkit-tap-highlight-color: transparent;
+ touch-action: manipulation;
+}
+
+.comments-section__load-replies:hover {
+ background: #2a2a2a;
+}
+
+.comments-section__login-prompt {
+ text-align: center;
+ padding: 1rem;
+ color: #888;
+ font-size: 0.875rem;
+}
+
+/* Responsive adjustments for Comments Section */
+@media (max-width: 480px) {
+ .comments-section__replies {
+ padding-left: 0.5rem;
+ }
+}
+
+@media (pointer: coarse) {
+ .comments-section__action-btn {
+ min-height: 44px;
+ }
+
+ .comments-section__submit-btn,
+ .comments-section__cancel-btn {
+ min-height: 44px;
+ }
+}
diff --git a/src/components/CommentsSection.vue b/src/components/CommentsSection.vue
index f3b6492..ac16c31 100644
--- a/src/components/CommentsSection.vue
+++ b/src/components/CommentsSection.vue
@@ -491,7 +491,7 @@ function isOwnComment(comment: Comment): boolean {
:aria-label="comment.isLiked ? 'Unlike comment' : 'Like comment'"
@click="handleLike(comment.id)"
>
- {{ comment.isLiked ? '\u2764\uFE0F' : '\U0001F90D' }}
+ {{ comment.isLiked ? '❤️' : '🤍' }}
{{ comment.likes }}
@@ -502,7 +502,7 @@ function isOwnComment(comment: Comment): boolean {
aria-label="Reply to comment"
@click="handleReply(comment.id)"
>
- \uD83D\uDCAC Reply
+ 💬 Reply
@@ -512,7 +512,7 @@ function isOwnComment(comment: Comment): boolean {
aria-label="Edit comment"
@click="handleEdit(comment)"
>
- \u270F\uFE0F Edit
+ ✏️ Edit
@@ -561,7 +561,7 @@ function isOwnComment(comment: Comment): boolean {
:aria-label="reply.isLiked ? 'Unlike comment' : 'Like comment'"
@click="handleLike(reply.id)"
>
- {{ reply.isLiked ? '\u2764\uFE0F' : '\U0001F90D' }}
+ {{ reply.isLiked ? '❤️' : '🤍' }}
{{ reply.likes }}
diff --git a/src/components/CommunityGallery.vue b/src/components/CommunityGallery.vue
index a4ef7cb..f41ef7c 100644
--- a/src/components/CommunityGallery.vue
+++ b/src/components/CommunityGallery.vue
@@ -528,16 +528,12 @@ const paginationPages = computed(() => {
:aria-label="pub.isLiked ? 'Unlike' : 'Like'"
@click="handleLikeToggle($event, pub.id)"
>
-
+
-
+