*,*:before,*:after{box-sizing:border-box}:root{color-scheme:light;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif;line-height:1.5;background:#f7f7f7;color:#1f2933}body{margin:0;min-height:100vh}body a{color:#0f6feb;text-decoration:none}body a:hover{text-decoration:underline}header{background:#fff;border-bottom:1px solid #e3e8ee;position:sticky;top:0;z-index:10}header .shell{display:flex;justify-content:space-between;align-items:center;gap:12px}header .nav{display:flex;gap:12px;align-items:center}.shell{max-width:960px;margin:0 auto;padding:16px}.main-layout{padding:16px 0 48px}.title{margin:0 0 4px;font-size:1.1rem}.muted{color:#5b6472;font-size:.95rem}.image-loader{position:relative;display:block;width:100%;overflow:hidden;aspect-ratio:1/1}.image-loader img{display:block;width:100%;height:100%;object-fit:cover}.image-loader--fill{position:absolute;inset:0;aspect-ratio:auto}.image-loader--square{padding-top:0}.image-loader__spinner{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#f5f7fb,#e9eef5);border:1px solid #e3e8ee;border-radius:inherit}.image-loader__spinner-circle{width:32px;height:32px;border-radius:50%;border:3px solid #e3e8ee;border-top-color:#0f6feb;animation:image-loader-spin .9s linear infinite}@keyframes image-loader-spin{to{transform:rotate(360deg)}}.image-preview-wrapper{width:100%;aspect-ratio:1/1;border:1px solid #e3e8ee;border-radius:10px;background:#f1f5f9;position:relative;overflow:hidden;margin-top:10px}.card{background:#fff;border:1px solid #e3e8ee;border-radius:10px;padding:16px;margin-bottom:12px;box-shadow:0 4px 18px #0f17240a}.card .header-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.card .header-row .title{font-size:1.1rem}.card .header-row .muted{font-size:.95rem}.card .actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.card.card-post-detail .post-meta{display:flex;gap:12px;align-items:center;margin-top:6px;color:#5b6472;font-size:.95rem}.card.card-post-detail .image-preview{display:block;width:100%;height:100%;object-fit:cover}.card.card-post-detail .sourcecode-block{position:relative;margin-top:8px}.card.card-post-detail .sourcecode-block code.sourcecode{display:block;background:#f1f5f9;padding:2px 4px;border-radius:4px;border:1px solid #c7d0dd;font-size:.95rem;white-space:pre;margin:0;overflow-x:auto}.card.card-post-detail .sourcecode-block .btn-copy{position:absolute;top:8px;right:8px;padding:4px 10px;font-size:.9rem}.card.card-post-detail .header-row{align-items:flex-start;gap:12px}.card.card-post-detail .post-detail__heading{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}.card.card-post-detail .post-detail__heading .title,.card.card-post-detail .post-detail__heading .muted{word-break:break-word}.card.card-post-detail .btn-like{flex-shrink:0;align-self:flex-start}.post-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;align-items:stretch;margin-bottom:12px}.post-grid .card.card-post{display:flex;flex-direction:column;gap:12px;width:100%;margin-bottom:0}.post-grid .card.card-post .post-thumb{position:relative;width:100%;padding-top:100%;border-radius:10px;overflow:hidden;background:#f1f5f9;border:1px solid #e3e8ee;display:block}.post-grid .card.card-post .post-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.post-grid .card.card-post .card-post__body{display:flex;flex:1}.post-grid .card.card-post .card-post__info-row{display:flex;align-items:center;gap:8px;width:100%}.post-grid .card.card-post .card-post__text{display:flex;align-items:center;gap:6px;min-width:0;flex:1}.post-grid .card.card-post .card-post__text .title,.post-grid .card.card-post .card-post__text .muted{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.post-grid .card.card-post .card-post__text .title{flex:1;font-size:1rem}.post-grid .card.card-post .card-post__text .muted{max-width:42%}.btn{border:1px solid #c7d0dd;background:#f1f5f9;color:#1f2933;border-radius:8px;padding:8px 12px;cursor:pointer;font-weight:500;transition:transform .05s ease,box-shadow .1s ease}.btn.primary{background:#0f6feb;color:#fff;border-color:#0f6feb}.btn.danger{background:#f03d3e;color:#fff;border-color:#f03d3e}.btn.ghost{background:#fffc;color:#1f2933;border-color:#d0d7e2;box-shadow:none}.btn:disabled{opacity:.6;cursor:not-allowed}.btn:hover:not(:disabled){box-shadow:0 6px 16px #00000014}.btn:active:not(:disabled){transform:translateY(1px)}.btn.btn-like{display:inline-flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums;padding:8px 10px;background:#fff5f5;border-color:#ffc9c9;color:#c92a2a}.btn.btn-like svg{width:16px;height:16px;fill:currentColor}form{display:flex;flex-direction:column;gap:12px}form label{display:flex;flex-direction:column;gap:6px;font-weight:600;color:#3a4350}form input,form textarea{border:1px solid #c7d0dd;border-radius:8px;padding:10px;font-size:1rem;font-family:inherit;background:#fff}form textarea{min-height:120px;resize:vertical}.search-row{display:flex;gap:8px;flex-wrap:wrap}.search-row input{flex:1 1 220px}.pagination{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:12px 0;justify-content:center}.pagination span[aria-disabled=true]{opacity:.45;cursor:not-allowed}.pagination .pagination__pages{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.pagination .pagination__ellipsis{padding:0 4px;color:#5b6472}.pagination .btn[aria-current=page]{background:#0f6feb;color:#fff;border-color:#0f6feb;cursor:default;pointer-events:none}.error{color:#c92a2a;background:#fff5f5;border:1px solid #ffc9c9;border-radius:8px;padding:10px}.success{color:#2b8a3e}.modal-backdrop{position:fixed;inset:0;background:#0f172466;display:flex;align-items:center;justify-content:center;padding:16px;z-index:20}.modal-backdrop .modal{width:min(420px,100%);background:#fff;border-radius:12px;padding:20px;border:1px solid #dce3ef;box-shadow:0 14px 40px #00000024}.modal-backdrop .modal .modal-form{margin-top:12px;display:flex;flex-direction:column;gap:12px}.modal-backdrop .modal .modal-form .modal-actions{display:flex;justify-content:flex-end;gap:8px}.modal-backdrop .modal .inline-error{margin-top:10px}
