Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol diffdown.com

feat: add logo SVGs, nav links, and UI polish

- Add logo-document.svg and logo-monogram.svg to static/img
- Show document logo in navbar alongside Diffdown wordmark
- Add Documents link to navbar (left of New Document) for logged-in users
- Remove Documents button from document view actions
- Add btn-danger style: red hover for outline delete button
- Fix list-view card hover highlight using background tint instead of border

+139 -3
+2
static/css/style.css
··· 110 110 color: var(--primary); 111 111 } 112 112 .btn-outline:hover { background: var(--primary); color: #fff; } 113 + .btn-danger.btn-outline:hover { background: var(--danger); border-color: var(--danger); color: #fff; } 113 114 .btn-link { 114 115 background: none; 115 116 border: none; ··· 261 262 262 263 .repo-list.list-view .repo-card h3 { margin-bottom: 0; font-size: 1rem; font-weight: 500; } 263 264 .repo-list.list-view .repo-card time { margin-top: 0; margin-left: auto; } 265 + .repo-list.list-view .repo-card:hover { border-color: var(--border); background: color-mix(in srgb, var(--primary) 5%, var(--bg-card)); } 264 266 265 267 .repo-card { 266 268 display: block;
+92
static/img/logo-document.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <svg 3 + width="400" 4 + height="511.24261" 5 + viewBox="0 0 400 511.24261" 6 + version="1.1" 7 + xml:space="preserve" 8 + style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" 9 + id="svg8" 10 + sodipodi:docname="logo-document.svg" 11 + inkscape:version="1.3.2 (091e20e, 2023-11-25)" 12 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 13 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 14 + xmlns="http://www.w3.org/2000/svg" 15 + xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview 16 + id="namedview1" 17 + pagecolor="#ffffff" 18 + bordercolor="#000000" 19 + borderopacity="0.25" 20 + inkscape:showpageshadow="2" 21 + inkscape:pageopacity="0.0" 22 + inkscape:pagecheckerboard="0" 23 + inkscape:deskcolor="#d1d1d1" 24 + inkscape:zoom="0.53777778" 25 + inkscape:cx="431.40496" 26 + inkscape:cy="530.88843" 27 + inkscape:window-width="1776" 28 + inkscape:window-height="1184" 29 + inkscape:window-x="2789" 30 + inkscape:window-y="31" 31 + inkscape:window-maximized="0" 32 + inkscape:current-layer="svg8" /><defs 33 + id="defs8" /> 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + <g 42 + id="g9" 43 + transform="matrix(11.111111,0,0,11.61915,-22.222222,-23.2383)"><path 44 + d="M 2,4 C 2,2.895 2.895,2 4,2 h 22 l 12,12 v 30 c 0,1.105 -0.895,2 -2,2 H 4 C 2.895,46 2,45.105 2,44 Z" 45 + style="fill:#2563eb" 46 + id="path1" /><g 47 + transform="matrix(0,-1.475264,1,0,-17.976555,48.258067)" 48 + id="g2"> 49 + <path 50 + d="m 11,28 c 0,0.552 -0.304,1 -0.678,1 H 7.678 C 7.304,29 7,28.552 7,28 7,27.448 7.304,27 7.678,27 h 2.644 C 10.696,27 11,27.448 11,28 Z" 51 + style="fill:#03d02c" 52 + id="path2" /> 53 + </g><g 54 + transform="matrix(1.495816,0,0,1,-3.470715,7)" 55 + id="g3"> 56 + <path 57 + d="m 11,28 c 0,0.552 -0.3,1 -0.669,1 H 7.669 C 7.3,29 7,28.552 7,28 7,27.448 7.3,27 7.669,27 h 2.662 C 10.7,27 11,27.448 11,28 Z" 58 + style="fill:#03d02c" 59 + id="path3" /> 60 + </g><path 61 + d="M 26,2 38,14 H 28 c -1.105,0 -2,-0.895 -2,-2 z" 62 + style="fill:#1a56db;fill-rule:nonzero" 63 + id="path4" /><g 64 + transform="matrix(1.226958,0,0,1,-1.581784,0)" 65 + id="g5"> 66 + <path 67 + d="m 29,21 c 0,0.552 -0.365,1 -0.815,1 H 7.815 C 7.365,22 7,21.552 7,21 7,20.448 7.365,20 7.815,20 h 20.37 C 28.635,20 29,20.448 29,21 Z" 68 + style="fill:#ffffff;fill-opacity:0.4" 69 + id="path5" /> 70 + </g><g 71 + transform="matrix(1.51098,0,0,1,-3.576862,0)" 72 + id="g6"> 73 + <path 74 + d="m 11,28 c 0,0.552 -0.297,1 -0.662,1 H 7.662 C 7.297,29 7,28.552 7,28 7,27.448 7.297,27 7.662,27 h 2.676 C 10.703,27 11,27.448 11,28 Z" 75 + style="fill:#fca5a5" 76 + id="path6" /> 77 + </g><g 78 + transform="translate(2)" 79 + id="g7"> 80 + <path 81 + d="m 27,28 c 0,0.552 -0.448,1 -1,1 H 14 c -0.552,0 -1,-0.448 -1,-1 0,-0.552 0.448,-1 1,-1 h 12 c 0.552,0 1,0.448 1,1 z" 82 + style="fill:#ffffff;fill-opacity:0.3" 83 + id="path7" /> 84 + </g><g 85 + transform="matrix(1.055556,0,0,1,1.277778,0)" 86 + id="g8"> 87 + <path 88 + d="m 31,35 c 0,0.552 -0.425,1 -0.947,1 H 13.947 C 13.425,36 13,35.552 13,35 c 0,-0.552 0.425,-1 0.947,-1 H 30.053 C 30.575,34 31,34.448 31,35 Z" 89 + style="fill:#ffffff;fill-opacity:0.8" 90 + id="path8" /> 91 + </g></g> 92 + </svg>
+40
static/img/logo-monogram.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + 4 + <svg 5 + width="210mm" 6 + height="297mm" 7 + viewBox="0 0 210 297" 8 + version="1.1" 9 + id="svg1" 10 + xmlns="http://www.w3.org/2000/svg" 11 + xmlns:svg="http://www.w3.org/2000/svg"> 12 + <defs 13 + id="defs1" /> 14 + <g 15 + id="layer1"> 16 + <g 17 + id="g2"> 18 + <text 19 + xml:space="preserve" 20 + style="font-size:50.8px;line-height:1;font-family:'Inter 18pt';-inkscape-font-specification:'Inter 18pt';letter-spacing:0px;fill:#2563eb;fill-opacity:1;stroke-width:6.61432" 21 + x="52.5" 22 + y="141.88016" 23 + id="text1"><tspan 24 + id="tspan1" 25 + style="font-size:50.8px;fill:#2563eb;fill-opacity:1;stroke-width:6.61432" 26 + x="52.5" 27 + y="141.88016">D</tspan></text> 28 + <text 29 + xml:space="preserve" 30 + style="font-size:50.8px;line-height:1;font-family:'Inter 18pt';-inkscape-font-specification:'Inter 18pt';letter-spacing:0px;fill:#0000ff;stroke-width:6.61432" 31 + x="78.900238" 32 + y="141.22972" 33 + id="text2"><tspan 34 + id="tspan2" 35 + style="stroke-width:6.61432" 36 + x="78.900238" 37 + y="141.22972">d</tspan></text> 38 + </g> 39 + </g> 40 + </svg>
+4 -2
templates/base.html
··· 16 16 </head> 17 17 <body> 18 18 <nav class="navbar"> 19 - <a href="/" class="logo">Diffdown</a> 19 + <a href="/" class="logo"> 20 + <img src="/static/img/logo-document.svg" alt="" width="22" height="28" style="vertical-align:middle;margin-right:0.4rem">Diffdown 21 + </a> 20 22 <div class="nav-right"> 21 23 {{if .User}} 22 - <a href="/docs/new">New Document</a> 24 + <a href="/">Documents</a> 23 25 <span class="nav-user">{{.User.Name}}</span> 24 26 <form method="post" action="/auth/logout" style="display:inline"> 25 27 <button type="submit" class="btn-link">Log out</button>
+1 -1
templates/document_view.html
··· 14 14 </div> 15 15 <div class="file-actions"> 16 16 <a href="/docs/{{.Doc.RKey}}/edit" class="btn btn-sm">Edit</a> 17 - <button class="btn btn-sm btn-outline" onclick="deleteDocument('{{.Doc.RKey}}')">Delete</button> 17 + <button class="btn btn-sm btn-outline btn-danger" onclick="deleteDocument('{{.Doc.RKey}}')">Delete</button> 18 18 </div> 19 19 </div> 20 20 <div class="markdown-body">