Merge current upstream master into token preview review correction

This commit is contained in:
Bryce! 2026-11-04 15:52:28 -05:00 • committed by GitHub
commit 0b650555c8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
326 changed files with 10065 additions and 10616 deletions

View file

@ -15,6 +15,7 @@ set(cockatrice_SOURCES
src/client/network/update/client/client_update_checker.cpp
src/client/network/update/client/release_channel.cpp
src/client/network/update/card_spoiler/spoiler_background_updater.cpp
src/client/network/update/card_spoiler/spoiler_file.cpp
src/client/crash/crash_reporter.cpp
src/client/latency_graph_widget.cpp
src/client/latency_status_widget.cpp
@ -56,6 +57,7 @@ set(cockatrice_SOURCES
src/interface/widgets/dialogs/dlg_settings.cpp
src/interface/widgets/dialogs/dlg_startup_card_check.cpp
src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp
src/interface/widgets/dialogs/dlg_turn_order.cpp
src/interface/widgets/dialogs/dlg_update.cpp
src/interface/widgets/dialogs/dlg_view_log.cpp
src/interface/widgets/dialogs/override_printing_warning.cpp
@ -150,11 +152,13 @@ set(cockatrice_SOURCES
src/interface/widgets/utility/reversed_completer_model.cpp
src/interface/pixel_map_generator.cpp
src/interface/theme_config.cpp
src/interface/theme_icon.cpp
src/interface/theme_manager.cpp
src/interface/palette_editor/color_button.cpp
src/interface/palette_editor/palette_generator.cpp
src/interface/palette_editor/quick_setup_panel.cpp
src/interface/palette_editor/palette_grid_widget.cpp
src/interface/palette_editor/font_grid_widget.cpp
src/interface/palette_editor/palette_editor_dialog.cpp
src/interface/widgets/cards/additional_info/color_identity_widget.cpp
src/interface/widgets/cards/additional_info/deck_color_identity.cpp
@ -250,6 +254,8 @@ set(cockatrice_SOURCES
src/interface/widgets/playmat/playmat_settings_dialog.cpp
src/interface/widgets/quick_settings/settings_button_widget.cpp
src/interface/widgets/quick_settings/settings_popup_widget.cpp
src/interface/widgets/replay/replay_event_index.cpp
src/interface/widgets/replay/replay_event_sidebar.cpp
src/interface/widgets/replay/replay_manager.cpp
src/interface/widgets/replay/replay_quick_settings_widget.cpp
src/interface/widgets/replay/replay_timeline_widget.cpp
@ -450,6 +456,8 @@ set(cockatrice_SOURCES
src/interface/intents/intent_open_shared_deck.h
src/interface/intents/url_parser.cpp
src/interface/intents/url_parser.h
src/interface/widgets/server/user/user_games_model.cpp
src/interface/widgets/server/user/user_games_model.h
src/interface/widgets/server/user/user_info_popup.cpp
src/interface/widgets/server/user/user_info_popup.h
)
@ -493,7 +501,15 @@ if(APPLE)
set(cockatrice_SOURCES ${cockatrice_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns)
endif(APPLE)
qt_add_resources(cockatrice_RESOURCES_RCC ${cockatrice_RESOURCES})
# The fonts and card artwork produce a large C++ byte array with qt_add_resources.
# Embed the data in the compiled resource object instead, keeping compiler memory
# independent of that payload. Qt's two-pass resource build is unsupported on iOS.
if(IOS)
qt_add_resources(cockatrice_RESOURCES_RCC ${cockatrice_RESOURCES})
else()
qt_add_big_resources(cockatrice_RESOURCES_RCC ${cockatrice_RESOURCES})
endif()
set_source_files_properties(${cockatrice_RESOURCES} PROPERTIES SKIP_AUTORCC ON)
# Declare path variables
set(ICONDIR
@ -519,6 +535,7 @@ qt_add_executable(
WIN32
MACOSX_BUNDLE
${cockatrice_SOURCES}
${cockatrice_RESOURCES}
${cockatrice_RESOURCES_RCC}
${cockatrice_MOC_SRCS}
MANUAL_FINALIZATION
@ -565,6 +582,14 @@ target_link_libraries(
cockatrice_target_enable_crash_reporting(cockatrice)
if(WITH_GUI_TEST)
# These two translate between XML test files and the QtTesting event pipeline;
# they need the QtTesting headers, so they only exist with the harness.
target_sources(cockatrice PRIVATE src/game_graphics/pq_cockatrice_event_player.cpp src/interface/recording.cpp)
target_link_libraries(cockatrice PRIVATE QtTesting)
target_compile_definitions(cockatrice PRIVATE WITH_GUI_TEST)
endif()
if(UNIX)
if(APPLE)
set(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}")

View file

@ -6,19 +6,18 @@
<file>resources/hand.svg</file>
<file>resources/hr.jpg</file>
<file>resources/icons/arrow_bottom_green.svg</file>
<file>resources/icons/arrow_down_green.svg</file>
<file>resources/icons/arrow_down.svg</file>
<file>resources/icons/arrow_history.svg</file>
<file>resources/icons/arrow_left_green.svg</file>
<file>resources/icons/arrow_left.svg</file>
<file>resources/icons/arrow_redo.svg</file>
<file>resources/icons/arrow_right_blue.svg</file>
<file>resources/icons/arrow_right_green.svg</file>
<file>resources/icons/arrow_top_green.svg</file>
<file>resources/icons/arrow_up_green.svg</file>
<file>resources/icons/arrow_right.svg</file>
<file>resources/icons/arrow_right_sideboard.svg</file>
<file>resources/icons/arrow_to_bottom.svg</file>
<file>resources/icons/arrow_to_top.svg</file>
<file>resources/icons/arrow_up.svg</file>
<file>resources/icons/arrow_undo.svg</file>
<file>resources/icons/circle_half_stroke.svg</file>
<file>resources/icons/clearsearch.svg</file>
<file>resources/icons/cogwheel.svg</file>
<file>resources/icons/conceded.svg</file>
<file>resources/icons/decrement.svg</file>
<file>resources/icons/delete.svg</file>
@ -28,7 +27,6 @@
<file>resources/icons/filter.svg</file>
<file>resources/icons/floppy_disk.svg</file>
<file>resources/icons/forgot_password.svg</file>
<file>resources/icons/gear.svg</file>
<file>resources/icons/increment.svg</file>
<file>resources/icons/info.svg</file>
<file>resources/icons/lock.svg</file>
@ -41,7 +39,6 @@
<file>resources/icons/reload.svg</file>
<file>resources/icons/remove_row.svg</file>
<file>resources/icons/rename.svg</file>
<file>resources/icons/scale_balanced.svg</file>
<file>resources/icons/scales.svg</file>
<file>resources/icons/scroll.svg</file>
<file>resources/icons/search.svg</file>
@ -52,7 +49,6 @@
<file>resources/icons/swap.svg</file>
<file>resources/icons/sync.svg</file>
<file>resources/icons/tab_changed.svg</file>
<file>resources/icons/update.png</file>
<file>resources/icons/view.svg</file>
<file>resources/icons/mana/B.svg</file>

View file

@ -10,6 +10,7 @@
# or set <category> = false to disable logging
#main = true
#recording = true
#qt_translator = true
#window_main.* = true
#release_channel = true

View file

@ -1,793 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.4 r9943 custom"
version="1.0"
sodipodi:docname="arrow_down_green.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="8.25663"
inkscape:cy="31.788561"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 52.71118,29.086208 -12.351931,0 12.852459,-18.346676 -42.685714,0 12.327869,18.346676 -12.351929,0 21.104622,25.485735 z"
id="rect2714"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 5v13"/>
<path d="M18 12l-6 6-6-6"/>
</svg>

After

Width:  |  Height:  |  Size: 219 B

View file

@ -1,793 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.4 r9943 custom"
version="1.0"
sodipodi:docname="arrow_up_green.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="8.25663"
inkscape:cy="31.788561"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 53.104623,35.38129 -12.351931,0 0,-32.248315 -17.505386,0 0,32.248315 -12.351929,0 21.104622,25.485735 21.104624,-25.485735 z"
id="rect2714"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,8 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<title>
history
</title>
<path d="M9 6v5h.06l2.48 2.47 1.41-1.41L11 10.11V6H9z"/>
<path d="M10 1a9 9 0 0 0-7.85 13.35L.5 16H6v-5.5l-2.38 2.38A7 7 0 1 1 10 17v2a9 9 0 0 0 0-18z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 12a9 9 0 1 0 3-6.7"/>
<path d="M3 4v5h5"/>
<path d="M12 7v5l3 2"/>
</svg>

Before

Width:  |  Height:  |  Size: 332 B

After

Width:  |  Height:  |  Size: 249 B

Before After
Before After

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M19 12H6"/>
<path d="M12 6l-6 6 6 6"/>
</svg>

After

Width:  |  Height:  |  Size: 218 B

View file

@ -1,791 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.47pre4 r22446"
version="1.0"
sodipodi:docname="test.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.203125"
inkscape:cx="3.6095445"
inkscape:cy="32"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="718"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 28.802264,8.8785925 2.0835141,31.441092 l 26.7187499,22.5625 0,-13.40625 31.59375,0 0,-18.3125 -31.59375,0 0,-13.4062495 z"
id="rect4156" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,40 +1,4 @@
<?xml version="1.0" encoding="windows-1252"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" x="0px"
y="0px" width="485.212px" height="485.212px" viewBox="0 0 485.212 485.212"
style="enable-background:new 0 0 485.212 485.212;" xml:space="preserve">
<g>
<path d="M242.607,424.559c-75.252,0-136.468-61.209-136.468-136.465c0-75.252,61.216-136.466,136.468-136.466v90.978 l151.629-121.302L242.607,0v90.978c-108.687,0-197.117,88.432-197.117,197.117c0,108.691,88.43,197.118,197.117,197.118 c108.687,0,197.114-88.427,197.114-197.118h-60.645C379.077,363.35,317.859,424.559,242.607,424.559z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 14l5-5-5-5"/>
<path d="M20 9H9.5A5.5 5.5 0 0 0 4 14.5a5.5 5.5 0 0 0 5.5 5.5H13"/>
</svg>

Before

Width:  |  Height:  |  Size: 1,018 B

After

Width:  |  Height:  |  Size: 263 B

Before After
Before After

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 12h13"/>
<path d="M12 6l6 6-6 6"/>
</svg>

After

Width:  |  Height:  |  Size: 217 B

View file

@ -1,789 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="add_to_sideboard.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="-15.396123"
inkscape:cy="31.722987"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="25" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#64c0ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 35.38129,10.895377 L 35.38129,23.247308 L 3.1329751,23.247308 L 3.1329751,40.752694 L 35.38129,40.752694 L 35.38129,53.104623 L 60.867025,32.000001 L 35.38129,10.895377 z"
id="rect2714"
sodipodi:nodetypes="cccccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,789 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="add_to_deck.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="-45.970664"
inkscape:cy="31.722987"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="25" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 35.38129,10.895377 L 35.38129,23.247308 L 3.1329751,23.247308 L 3.1329751,40.752694 L 35.38129,40.752694 L 35.38129,53.104623 L 60.867025,32.000001 L 35.38129,10.895377 z"
id="rect2714"
sodipodi:nodetypes="cccccccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 12h9"/>
<path d="M8 7l5 5-5 5"/>
<path d="M16 7h4v10h-4"/>
</svg>

After

Width:  |  Height:  |  Size: 243 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 4v11"/>
<path d="M6 9l6 6 6-6"/>
<path d="M5 20h14"/>
</svg>

After

Width:  |  Height:  |  Size: 239 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 20V9"/>
<path d="M6 15l6-6 6 6"/>
<path d="M5 4h14"/>
</svg>

After

Width:  |  Height:  |  Size: 239 B

View file

@ -1,793 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.4 r9943 custom"
version="1.0"
sodipodi:docname="arrow_bottom_green.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="8.25663"
inkscape:cy="31.788561"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 11.002462,36.225266 12.351931,0 -12.852459,18.346676 42.685714,0 -12.327869,-18.346676 12.351929,0 -21.104622,-25.485734 z"
id="rect2714"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,40 +1,4 @@
<?xml version="1.0" encoding="windows-1252"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" x="0px"
y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;"
xml:space="preserve">
<g>
<path d="M256,448c79.406,0,144-64.594,144-144s-64.594-144-144-144v96L96,128L256,0v96c114.688,0,208,93.313,208,208 c0,114.688-93.312,208-208,208c-114.687,0-208-93.312-208-208h64C112,383.406,176.594,448,256,448z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 14 4 9l5-5"/>
<path d="M4 9h10.5A5.5 5.5 0 0 1 20 14.5a5.5 5.5 0 0 1-5.5 5.5H11"/>
</svg>

Before

Width:  |  Height:  |  Size: 874 B

After

Width:  |  Height:  |  Size: 263 B

Before After
Before After

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 19V6"/>
<path d="M6 12l6-6 6 6"/>
</svg>

After

Width:  |  Height:  |  Size: 217 B

View file

@ -1,792 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.4 r9943 custom"
version="1.0"
sodipodi:docname="arrow_up_green.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2396"
gradientUnits="userSpaceOnUse"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2399"
gradientUnits="userSpaceOnUse"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2707"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2460"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2494"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2527"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2529"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2531"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2535"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2537"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2539"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2541"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2543"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2545"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2547"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2549"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2561"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2563"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2565"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2594"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2600"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2602"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2604"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2606"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2608"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2610"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2612"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2614"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2616"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2618"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2620"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2622"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="8.25663"
inkscape:cy="31.788561"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 10.895377,28.61871 12.351931,0 0,32.248315 17.505386,0 0,-32.248315 12.351929,0 L 32.000001,3.132975 10.895377,28.61871 z"
id="rect2714"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M512 320C512 214 426 128 320 128L320 512C426 512 512 426 512 320zM64 320C64 178.6 178.6 64 320 64C461.4 64 576 178.6 576 320C576 461.4 461.4 576 320 576C178.6 576 64 461.4 64 320z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="2"/>
<path d="M12 3a9 9 0 0 1 0 18z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 410 B

After

Width:  |  Height:  |  Size: 209 B

Before After
Before After

View file

@ -1,276 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_clearsearch.svg">
<defs
id="defs4">
<linearGradient
id="linearGradient3709">
<stop
style="stop-color:#4d4d4d;stop-opacity:1;"
offset="0"
id="stop3711" />
<stop
style="stop-color:white;stop-opacity:1;"
offset="1"
id="stop3713" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3699">
<stop
style="stop-color:#ececec;stop-opacity:1;"
offset="0"
id="stop3701" />
<stop
style="stop-color:#ececec;stop-opacity:0;"
offset="1"
id="stop3703" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3632">
<stop
style="stop-color:#c87137;stop-opacity:1;"
offset="0"
id="stop3634" />
<stop
style="stop-color:#c87137;stop-opacity:0;"
offset="1"
id="stop3636" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3622">
<stop
style="stop-color:#f9f9f9;stop-opacity:1;"
offset="0"
id="stop3624" />
<stop
style="stop-color:#f9f9f9;stop-opacity:0;"
offset="1"
id="stop3626" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective3685"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3709"
id="linearGradient3726"
gradientUnits="userSpaceOnUse"
x1="22.288248"
y1="35.505978"
x2="49.488647"
y2="49.106178" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3622"
id="linearGradient3728"
gradientUnits="userSpaceOnUse"
x1="30.59761"
y1="8.9243031"
x2="30.59761"
y2="21.545816" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3632"
id="linearGradient3730"
gradientUnits="userSpaceOnUse"
x1="28.430279"
y1="47.808765"
x2="29.960159"
y2="47.808765" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3699"
id="linearGradient3732"
gradientUnits="userSpaceOnUse"
x1="29.215645"
y1="1021.9559"
x2="31.852083"
y2="1021.9559" />
<inkscape:perspective
id="perspective3766"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3797"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3896"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3699"
id="linearGradient3911"
gradientUnits="userSpaceOnUse"
x1="29.215645"
y1="1021.9559"
x2="31.852083"
y2="1021.9559"
gradientTransform="translate(713.20829,-318.19428)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3709"
id="linearGradient3928"
gradientUnits="userSpaceOnUse"
x1="22.288248"
y1="35.505978"
x2="49.488647"
y2="49.106178" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3622"
id="linearGradient3930"
gradientUnits="userSpaceOnUse"
x1="30.59761"
y1="8.9243031"
x2="30.59761"
y2="21.545816" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3632"
id="linearGradient3932"
gradientUnits="userSpaceOnUse"
x1="28.430279"
y1="47.808765"
x2="29.960159"
y2="47.808765" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3699"
id="linearGradient3934"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(713.20829,-318.19428)"
x1="29.215645"
y1="1021.9559"
x2="31.852083"
y2="1021.9559" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.84375"
inkscape:cx="11.205704"
inkscape:cy="35.993597"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Verbot">
<g
sodipodi:type="inkscape:box3d"
style="fill:red;fill-opacity:1;stroke:black;stroke-width:0.30000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="g3936"
inkscape:perspectiveID="#perspective10"
inkscape:corner0="-32.72006 : 181.09419 : 0 : 1"
inkscape:corner7="-365.7807 : 14.86007 : 0.25 : 1">
<path
sodipodi:type="inkscape:box3dside"
id="path3946"
style="fill:#afafde;fill-rule:evenodd;stroke:none"
inkscape:box3dsidetype="13"
d="M -11.729084,0.76495424 L -1.0199203,-421.92491 L -1.5309297,-421.89731 L -17.73339,4.4426247 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path3942"
style="fill:#8686bf;fill-rule:evenodd;stroke:none"
inkscape:box3dsidetype="3"
d="M -11.729084,5241.4272 L -1.0199203,33.784832 L -1.0199203,-421.92491 L -11.729084,0.76495424 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path3938"
style="fill:#353564;fill-rule:evenodd;stroke:none"
inkscape:box3dsidetype="6"
d="M -11.729084,5241.4272 L -11.729084,0.76495424 L -17.73339,4.4426247 L -17.73339,5286.737 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path3940"
style="fill:#4d4d9f;fill-rule:evenodd;stroke:none"
inkscape:box3dsidetype="5"
d="M -11.729084,5241.4272 L -1.0199203,33.784832 L -1.5309297,34.124972 L -17.73339,5286.737 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path3948"
style="fill:#e9e9ff;fill-rule:evenodd;stroke:none"
inkscape:box3dsidetype="11"
d="M -17.73339,5286.737 L -1.5309297,34.124972 L -1.5309297,-421.89731 L -17.73339,4.4426247 z" />
<path
sodipodi:type="inkscape:box3dside"
id="path3944"
style="fill:#d7d7ff;fill-rule:evenodd;stroke:none"
inkscape:box3dsidetype="14"
d="M -1.0199203,33.784832 L -1.0199203,-421.92491 L -1.5309297,-421.89731 L -1.5309297,34.124972 z" />
</g>
<path
style="fill:#ff0000;fill-opacity:1;stroke:#cd3535;stroke-width:5.84793520000000020;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 52.385908,50.646333 C 62.721799,39.279033 61.886144,21.695001 50.518842,11.359112 39.151542,1.0232223 21.567509,1.8588773 11.231623,13.22618 0.89573232,24.593479 1.7313874,42.177512 13.098689,52.5134 c 11.3673,10.335889 28.951332,9.500234 39.287219,-1.867067 z M 49.738687,48.239307 C 41.198715,57.631478 26.946973,58.753059 17.056847,51.15466 L 49.541588,15.428288 c 8.502064,9.124975 8.737071,23.418851 0.197099,32.811019 z M 46.560682,12.717855 14.075941,48.444228 C 5.5738777,39.31925 5.3388704,25.025377 13.878842,15.633206 22.418813,6.2410344 36.670557,5.1194531 46.560682,12.717855 z"
id="path3787"
inkscape:connector-curvature="0" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="8"/>
<path d="M9 9l6 6M15 9l-6 6"/>
</svg>

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 231 B

Before After
Before After

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" width="102.5024mm" height="102.24421mm"
viewBox="0 0 102.5024 102.24421" version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="cog_wheel.svg"
xmlns="http://www.w3.org/2000/svg">
<sodipodi:namedview id="namedview1" pagecolor="#ffffff" bordercolor="#000000" borderopacity="0.25"
inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" inkscape:zoom="0.66101291"
inkscape:cx="146.74449" inkscape:cy="193.64221" inkscape:window-width="1829"
inkscape:window-height="951" inkscape:window-x="0" inkscape:window-y="0"
inkscape:window-maximized="1" inkscape:current-layer="layer1"/>
<defs id="defs1"/>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-66.148059,-97.377896)">
<g id="g1" transform="translate(-165.09777,-82.009607)">
<g id="g2" transform="matrix(0.26458333,0,0,0.26458333,64.983323,161.37858)">
<path style="fill:#333333;stroke-width:94.4882"
d="m 721.34301,94.413051 40.00966,29.763289 29.51933,-9.27053 14.63768,-46.840589 36.83817,0.48792 13.41787,46.108699 28.29952,9.5145 40.74155,-28.299519 29.0314,21.468599 -15.85748,47.08454 16.58937,23.66426 48.30432,-2.68358 12.93,34.88648 -41.71741,27.07971 -0.48792,29.27536 40.49763,26.10387 -10.2464,34.15459 -48.54834,-0.97584 -18.78502,23.42029 15.85749,45.37681 -28.29952,21.71256 -41.22947,-29.27536 -28.54348,9.75846 -13.66184,47.57246 -38.30194,-0.73188 -14.63768,-48.30435 -27.07971,-9.27054 -40.00966,29.27537 -30.25121,-20.49276 17.32125,-46.35266 -17.80918,-24.64009 -49.76812,3.17149 -11.22222,-34.64251 40.74155,-27.07971 0.48792,-30.00725 -41.71739,-27.32367 12.19807,-32.93479 48.30435,2.68358 20.24879,-24.6401 -17.32126,-47.08455 z"
id="path1"/>
<circle style="fill:#f9f9f9;stroke-width:72.1317" id="path2" cx="822.09906" cy="261.28262"
r="83.434792"/>
<circle style="fill:#4d4d4d;stroke-width:40.5147" id="circle2" cx="822.09906" cy="261.28262"
r="46.863361"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -1,103 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="skull.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective2447"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2687"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="18.217407"
inkscape:cx="23.789126"
inkscape:cy="21.065041"
inkscape:document-units="px"
inkscape:current-layer="g2551"
showgrid="false"
inkscape:window-width="1274"
inkscape:window-height="725"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g2547">
<g
id="g2551"
transform="translate(0.2014828,0.2890558)">
<path
style="fill:#000000"
d="m 23.0625,7.875 c -2.309245,0.049099 -4.522809,0.469358 -6.125,1.28125 l -1.625,0.8125 -3,2.9375 c -4.4036271,4.810187 -5.7159942,14.310988 -2.03289,16.192421 0.470391,0.240289 2.475497,1.006426 3.728817,1.227998 2.521045,0.445688 2.327223,0.322567 2.787218,1.340469 0.238995,0.528863 0.09446,1.428157 -0.0144,3.364112 -0.222151,3.951055 -0.06236,4.424776 1.59375,4.75 1.098431,0.21571 1.347302,-0.472438 1.21875,-3.15625 -0.115618,-2.413774 0.583332,-2.187741 1.1875,0.375 0.547478,2.322281 0.410725,2.936824 1.34375,2.9375 0.919623,6.65e-4 1.076314,-0.818043 1.34375,-3 0.353869,-2.887142 1.125,-3.139658 1.125,-0.375 0,2.08688 -0.222077,3.589602 1.6875,3.40625 1.132862,-0.108774 1.082149,-3.370508 0.9375,-4.09375 -0.121253,-0.606271 -0.04263,-0.84375 0.25,-0.84375 0.538278,0 0.77605,0.936782 0.78125,3.0625 0.0023,0.939922 0.100607,1.819357 0.21875,1.9375 0.257103,0.257101 1.968476,-0.05495 2.375,-0.4375 0.16137,-0.151853 0.01366,-2.350878 0.21875,-5 0.35428,-4.576122 1.366108,-2.962194 4.245673,-3.85919 4.126605,-1.285455 4.289077,-3.901867 4.285577,-7.64081 -0.0033,-3.474911 -1.444977,-7.288916 -3.75,-9.9375 l -1.0625,-1.21875 -1.875,-1.5 C 31.003675,8.7156929 26.911241,7.7931682 23.0625,7.875 z M 15.625,19.03125 c 3.394247,0 7.005748,2.293983 4.9375,3.96875 -0.883048,0.715048 -6.772942,-0.473271 -8.34375,-1.15625 -2.8401606,-1.234886 -0.0067,-2.8125 3.40625,-2.8125 z M 30.40625,19.625 c 0.636388,-0.004 1.310094,0.03125 1.9375,0.03125 3.145949,0 6.024182,0.340703 3.875,2.03125 -0.761324,0.598858 -1.605395,1.78125 -5.125,1.78125 -4.382431,0 -4.28125,0.0393 -4.28125,-1.625 0,-1.934908 1.684585,-2.206867 3.59375,-2.21875 z M 24,26.086963 24.75,27.59375 25.46711,29.015215 23.96875,28.875 22.336963,28.850537 23.25,27.5625 24,26.086963 z"
transform="translate(-0.2014828,-0.2890558)"
id="path2693"
sodipodi:nodetypes="ccccssssssssssssssssssscccccssccsssscccccccc" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none"
id="rect3702"
width="3.0739832"
height="9.9355526"
x="41.498772"
y="27.689754"
transform="translate(-0.2014828,-0.2890558)" />
</g>
</g>
<g
id="g2471"
transform="matrix(4.0064997,0,0,4.0064997,-232.82633,-1139.1808)" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 21V4"/>
<path d="M5 4h12l-2 4 2 4H5"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 219 B

Before After
Before After

View file

@ -1,205 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.5 r10040"
version="1.0"
sodipodi:docname="deck_editor_decrement.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="26.34754"
inkscape:cy="29.107677"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1445"
inkscape:window-height="893"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<rect
style="fill:#ff7672;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
id="rect3548"
width="14.386732"
height="59.259636"
x="24.806633"
y="-61.629818"
transform="matrix(0,1,-1,0,0,0)" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 12h14"/>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 189 B

Before After
Before After

View file

@ -1,357 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.47pre4 r22446"
version="1.0"
sodipodi:docname="remove_row.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2442"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2470"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2472"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2474"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2476"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="12.656427"
inkscape:cy="31.784541"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="725"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 6.433227,14.50946 L 23.923767,32 L 6.433227,49.490541 L 14.50946,57.566773 L 32,40.076233 L 49.490541,57.566773 L 57.566773,49.490541 L 40.076233,32 L 57.566773,14.50946 L 49.490541,6.433227 L 32,23.923767 L 14.50946,6.433227 L 6.433227,14.50946 z"
id="rect3548" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 7h16"/>
<path d="M9 7V4h6v3"/>
<path d="M6 7l1 13h10l1-13"/>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 245 B

Before After
Before After

View file

@ -1 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M352 188.5L300.1 175.5C293.6 173.9 288.8 168.4 288.1 161.7C287.4 155 290.9 148.6 296.8 145.6L337.6 125.2L294.3 92.7C288.8 88.6 286.5 81.4 288.7 74.8C290.9 68.2 297.1 64 304 64L464 64C494.2 64 522.7 78.2 540.8 102.4L598.4 179.2C604.6 187.5 608 197.6 608 208C608 234.5 586.5 256 560 256L538.5 256C521.5 256 505.2 249.3 493.2 237.3L479.9 224L447.9 224L447.9 245.5C447.9 270.3 460.7 293.4 481.7 306.6L588.3 373.2C620.4 393.3 639.9 428.4 639.9 466.3C639.9 526.9 590.8 576.1 530.1 576.1L32.3 576C29 576 25.7 575.6 22.7 574.6C13.5 571.8 6 565 2.3 556C1 552.7 .1 549.1 0 545.3C-.2 541.6 .3 538 1.3 534.6C4.1 525.4 10.9 517.9 19.9 514.2C22.9 513 26.1 512.2 29.4 512L433.3 476C441.6 475.3 448 468.3 448 459.9C448 455.6 446.3 451.5 443.3 448.5L398.9 404.1C368.9 374.1 352 333.4 352 291L352 188.5zM512 136.3C512 136.2 512 136.1 512 136C512 135.9 512 135.8 512 135.7L512 136.3zM510.7 143.7L464.3 132.1C464.1 133.4 464 134.7 464 136C464 149.3 474.7 160 488 160C498.6 160 507.5 153.2 510.7 143.7zM130.9 180.5C147.2 166 171.3 164.3 189.4 176.4L320 263.4L320 290.9C320 323.7 328.4 355.7 344 383.9L112 383.9C105.3 383.9 99.3 379.7 97 373.5C94.7 367.3 96.5 360.2 101.6 355.8L171 296.3L18.4 319.8C11.4 320.9 4.5 317.2 1.5 310.8C-1.5 304.4 .1 296.8 5.4 292L130.9 180.5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<!-- Font Awesome Free 7.1.0, CC BY 4.0 / MIT; https://fontawesome.com/license/free -->
<g transform="translate(2 2) scale(0.03125)">
<path d="M352 188.5L300.1 175.5C293.6 173.9 288.8 168.4 288.1 161.7C287.4 155 290.9 148.6 296.8 145.6L337.6 125.2L294.3 92.7C288.8 88.6 286.5 81.4 288.7 74.8C290.9 68.2 297.1 64 304 64L464 64C494.2 64 522.7 78.2 540.8 102.4L598.4 179.2C604.6 187.5 608 197.6 608 208C608 234.5 586.5 256 560 256L538.5 256C521.5 256 505.2 249.3 493.2 237.3L479.9 224L447.9 224L447.9 245.5C447.9 270.3 460.7 293.4 481.7 306.6L588.3 373.2C620.4 393.3 639.9 428.4 639.9 466.3C639.9 526.9 590.8 576.1 530.1 576.1L32.3 576C29 576 25.7 575.6 22.7 574.6C13.5 571.8 6 565 2.3 556C1 552.7 .1 549.1 0 545.3C-.2 541.6 .3 538 1.3 534.6C4.1 525.4 10.9 517.9 19.9 514.2C22.9 513 26.1 512.2 29.4 512L433.3 476C441.6 475.3 448 468.3 448 459.9C448 455.6 446.3 451.5 443.3 448.5L398.9 404.1C368.9 374.1 352 333.4 352 291L352 188.5zM512 136.3C512 136.2 512 136.1 512 136C512 135.9 512 135.8 512 135.7L512 136.3zM510.7 143.7L464.3 132.1C464.1 133.4 464 134.7 464 136C464 149.3 474.7 160 488 160C498.6 160 507.5 153.2 510.7 143.7zM130.9 180.5C147.2 166 171.3 164.3 189.4 176.4L320 263.4L320 290.9C320 323.7 328.4 355.7 344 383.9L112 383.9C105.3 383.9 99.3 379.7 97 373.5C94.7 367.3 96.5 360.2 101.6 355.8L171 296.3L18.4 319.8C11.4 320.9 4.5 317.2 1.5 310.8C-1.5 304.4 .1 296.8 5.4 292L130.9 180.5z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

@ -1,10 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_svg "http://www.w3.org/2000/svg">
<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
]>
<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="460.5" height="531.74"
viewBox="0 0 460.5 531.74" overflow="visible" enable-background="new 0 0 460.5 531.74" xml:space="preserve">
<polygon fill="#918d8d" points="0.5,0.866 459.5,265.87 0.5,530.874 "/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 6l6 6-6 6"/>
</svg>

Before

Width:  |  Height:  |  Size: 657 B

After

Width:  |  Height:  |  Size: 191 B

Before After
Before After

View file

@ -1,10 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_svg "http://www.w3.org/2000/svg">
<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
]>
<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="531.74" height="460.5"
viewBox="0 0 531.74 460.5" overflow="visible" enable-background="new 0 0 531.74 460.5" xml:space="preserve">
<polygon fill="#918d8d" points="530.874,0.5 265.87,459.5 0.866,0.5 "/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M6 9l6 6 6-6"/>
</svg>

Before

Width:  |  Height:  |  Size: 657 B

After

Width:  |  Height:  |  Size: 191 B

Before After
Before After

View file

@ -1,12 +1,3 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg"
width="800px" height="800px" viewBox="0 0 971.986 971.986"
xml:space="preserve">
<g>
<path d="M370.216,459.3c10.2,11.1,15.8,25.6,15.8,40.6v442c0,26.601,32.1,40.101,51.1,21.4l123.3-141.3
c16.5-19.8,25.6-29.601,25.6-49.2V500c0-15,5.7-29.5,15.8-40.601L955.615,75.5c26.5-28.8,6.101-75.5-33.1-75.5h-873
c-39.2,0-59.7,46.6-33.1,75.5L370.216,459.3z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 5h18l-7 8v6l-4 2v-8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 676 B

After

Width:  |  Height:  |  Size: 202 B

Before After
Before After

View file

@ -1 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M160 96C124.7 96 96 124.7 96 160L96 480C96 515.3 124.7 544 160 544L480 544C515.3 544 544 515.3 544 480L544 237.3C544 220.3 537.3 204 525.3 192L448 114.7C436 102.7 419.7 96 402.7 96L160 96zM192 192C192 174.3 206.3 160 224 160L384 160C401.7 160 416 174.3 416 192L416 256C416 273.7 401.7 288 384 288L224 288C206.3 288 192 273.7 192 256L192 192zM320 352C355.3 352 384 380.7 384 416C384 451.3 355.3 480 320 480C284.7 480 256 451.3 256 416C256 380.7 284.7 352 320 352z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 3h11l3 3v15H5z"/>
<path d="M8 3v6h8V3"/>
<path d="M8 14h8v7H8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 693 B

After

Width:  |  Height:  |  Size: 248 B

Before After
Before After

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48pt" height="48pt" viewBox="0 0 48 48" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:#000000;fill-opacity:1;" d="M 24 2 C 17.398438 2 12 7.398438 12 14 L 12 16 C 9.789063 16 8 17.789063 8 20 L 8 40 C 8 42.210938 9.789063 44 12 44 L 36 44 C 38.210938 44 40 42.210938 40 40 L 40 20 C 40 17.789063 38.210938 16 36 16 L 36 14 C 36 7.398438 30.601563 2 24 2 Z M 24 6 C 28.4375 6 32 9.5625 32 14 L 32 16 L 16 16 L 16 14 C 16 9.5625 19.554688 6 24 6 Z M 23.9375 19.9375 C 29.929688 19.9375 30 24.398438 30 25.25 C 30 29.71875 25.125 29.96875 25.375 33.875 L 21.875 33.875 C 21.578125 28.632813 26.0625 28.398438 26.0625 25.4375 C 26.0625 23.3125 24.632813 23.125 23.9375 23.125 C 21.859375 23.125 21.757813 25.09375 21.75 25.5 L 17.8125 25.5 C 17.820313 24.554688 18.015625 19.9375 23.9375 19.9375 Z M 23.6875 35.9375 C 25.671875 35.9375 25.875 37.765625 25.875 38.0625 C 25.875 38.351563 25.671875 40.125 23.6875 40.125 C 21.632813 40.125 21.5 38.351563 21.5 38.0625 C 21.5 37.765625 21.671875 35.9375 23.6875 35.9375 Z "/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="7.5" cy="15.5" r="3.5"/>
<path d="M10 13l9-9"/>
<path d="M16 4l4 4"/>
<path d="M14 6l3 3"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 276 B

Before After
Before After

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M259.1 73.5C262.1 58.7 275.2 48 290.4 48L350.2 48C365.4 48 378.5 58.7 381.5 73.5L396 143.5C410.1 149.5 423.3 157.2 435.3 166.3L503.1 143.8C517.5 139 533.3 145 540.9 158.2L570.8 210C578.4 223.2 575.7 239.8 564.3 249.9L511 297.3C511.9 304.7 512.3 312.3 512.3 320C512.3 327.7 511.8 335.3 511 342.7L564.4 390.2C575.8 400.3 578.4 417 570.9 430.1L541 481.9C533.4 495 517.6 501.1 503.2 496.3L435.4 473.8C423.3 482.9 410.1 490.5 396.1 496.6L381.7 566.5C378.6 581.4 365.5 592 350.4 592L290.6 592C275.4 592 262.3 581.3 259.3 566.5L244.9 496.6C230.8 490.6 217.7 482.9 205.6 473.8L137.5 496.3C123.1 501.1 107.3 495.1 99.7 481.9L69.8 430.1C62.2 416.9 64.9 400.3 76.3 390.2L129.7 342.7C128.8 335.3 128.4 327.7 128.4 320C128.4 312.3 128.9 304.7 129.7 297.3L76.3 249.8C64.9 239.7 62.3 223 69.8 209.9L99.7 158.1C107.3 144.9 123.1 138.9 137.5 143.7L205.3 166.2C217.4 157.1 230.6 149.5 244.6 143.4L259.1 73.5zM320.3 400C364.5 399.8 400.2 363.9 400 319.7C399.8 275.5 363.9 239.8 319.7 240C275.5 240.2 239.8 276.1 240 320.3C240.2 364.5 276.1 400.2 320.3 400z"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,199 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="increment.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="-58.636066"
inkscape:cy="33.549415"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="248" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#96ff96;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 25.592359,5.717815 L 25.592359,25.62856 L 5.681613,25.62856 L 5.681613,38.371435 L 25.592359,38.371435 L 25.592359,58.282185 L 38.40764,58.282185 L 38.40764,38.371435 L 58.318387,38.371435 L 58.318387,25.62856 L 38.40764,25.62856 L 38.40764,5.717815 L 25.592359,5.717815 z"
id="rect3546" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 5v14"/>
<path d="M5 12h14"/>
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 212 B

Before After
Before After

View file

@ -1,43 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100"
height="100"
id="svg2858"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="info.svg">
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Triangle"
style="display:inline">
<path
sodipodi:type="arc"
style="fill:#aaaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="path3758-1"
sodipodi:cx="53.900002"
sodipodi:cy="78.5"
sodipodi:rx="46.5"
sodipodi:ry="46.5"
d="M 100.4,78.5 A 46.5,46.5 0 1 1 7.4000015,78.5 46.5,46.5 0 1 1 100.4,78.5 z"
transform="matrix(1.05866,0,0,1.05866,-7.0617752,-32.704809)" />
<g
style="font-size:133.49534607px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.06498075;stroke-opacity:1;font-family:'Magic:the Gathering';-inkscape-font-specification:'Magic:the Gathering'"
id="text3759">
<path
d="m 46.854005,16.085692 c 0.977733,-2.411704 1.683885,-4.193378 2.118456,-5.345028 0.369355,-1.1514901 0.771318,-1.9988718 1.205891,-2.5421482 0.456264,-0.4344718 1.347101,-0.825571 2.672514,-1.1732989 1.23846,-0.2823765 2.705082,-0.4670623 4.399871,-0.5540578 0.369346,8.46e-5 0.727854,8.46e-5 1.075524,0 1.694737,8.46e-5 2.672485,0.5758696 2.933248,1.7273567 -3e-5,0.1956326 -3e-5,0.3803183 0,0.5540579 -3e-5,1.3254743 -0.662726,2.9224633 -1.98809,4.7909703 -1.520969,2.238035 -3.43301,4.24785 -5.736128,6.029453 -2.32489,1.760018 -4.551983,2.781222 -6.681286,3.063614 -1.260224,-0.543125 -1.977239,-1.075454 -2.151048,-1.59699 -1.3e-5,-0.08684 -1.3e-5,-0.184616 0,-0.293325 -1.3e-5,-0.434484 0.228128,-1.010269 0.684424,-1.727357 0.521453,-0.890765 1.010327,-1.868513 1.466624,-2.933247 z M 31.372977,37.856906 c 2.650785,-0.716962 6.159814,-1.651255 10.527099,-2.802881 4.280354,-1.173242 7.398284,-1.803346 9.3538,-1.890315 0.08689,5.8e-5 0.173803,5.8e-5 0.260733,0 1.06464,5.8e-5 1.82511,0.358566 2.281415,1.075524 0.260711,0.630161 0.391077,1.520998 0.391099,2.672514 -2.2e-5,0.260787 -2.2e-5,0.532384 0,0.814791 -0.173844,1.586178 -0.260755,2.781204 -0.260733,3.58508 l 0,39.533656 c 1.238459,1e-5 2.976678,-0.673549 5.214662,-2.020681 1.673009,-0.977736 2.868034,-1.46661 3.58508,-1.466624 0.173791,1.4e-5 0.304158,0.04347 0.3911,0.130367 0.543162,0.369385 0.814759,0.771348 0.814791,1.20589 -3.2e-5,1.151583 -1.868617,2.66166 -5.605762,4.530238 -1.238507,0.717023 -3.063637,1.922912 -5.475395,3.617671 -2.49871,1.781679 -4.769259,3.204846 -6.811652,4.269505 -0.347658,0.347644 -0.923443,0.662696 -1.727357,0.945157 -0.260745,0.08691 -0.532342,0.130366 -0.814791,0.130367 -0.521477,-10e-7 -1.010351,-0.271598 -1.466623,-0.814791 C 41.856611,91.111641 41.7697,81.594892 41.76971,62.8221 c -1e-5,-1.955468 -1e-5,-4.008739 0,-6.15982 -1e-5,-2.129283 -0.08692,-4.128235 -0.260734,-5.996861 -0.260742,-1.781634 -0.706161,-3.204801 -1.336257,-4.269504 -0.717023,-1.347075 -1.60786,-2.368279 -2.672514,-3.063614 -1.151576,-0.630057 -2.357465,-1.260161 -3.617672,-1.890315 -1.325394,-0.521416 -2.161911,-1.053746 -2.509556,-1.59699 -0.195549,-0.173771 -0.293324,-0.434504 -0.293324,-0.7822 -0.08691,-0.369319 0.01086,-0.771282 0.293324,-1.20589 z"
style=""
id="path2993" />
</g>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="9"/>
<path d="M12 11v6"/>
<path d="M12 7.5h.01"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 247 B

Before After
Before After

View file

@ -1,750 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="128.00000"
id="svg1931"
version="1.0"
width="128.00000"
x="0.00000000"
y="0.00000000"
sodipodi:version="0.32"
inkscape:version="0.48.5 r10040"
sodipodi:docname="lock.svg">
<sodipodi:namedview
inkscape:window-height="933"
inkscape:window-width="1163"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:zoom="4"
inkscape:cx="-26.577351"
inkscape:cy="72.426878"
inkscape:window-x="204"
inkscape:window-y="90"
inkscape:current-layer="g5908"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata3">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>padlock</dc:title>
<dc:description />
<dc:subject>
<rdf:Bag>
<rdf:li>icon</rdf:li>
<rdf:li />
<rdf:li>lock</rdf:li>
<rdf:li>security</rdf:li>
<rdf:li>secure</rdf:li>
<rdf:li>padlock</rdf:li>
<rdf:li>signs_and_symbols</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org">
<dc:title>AJ Ashton</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>AJ Ashton</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>AJ Ashton</dc:title>
</cc:Agent>
</dc:rights>
<dc:date />
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs3">
<linearGradient
id="linearGradient3057">
<stop
id="stop3059"
offset="0.00000000"
style="stop-color:#282828;stop-opacity:1.0000000;" />
<stop
id="stop3061"
offset="1.0000000"
style="stop-color:#282828;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient2834">
<stop
id="stop2836"
offset="0"
style="stop-color:#e59a00;stop-opacity:1;" />
<stop
id="stop2838"
offset="1"
style="stop-color:#faff7d;stop-opacity:0.18367347;" />
</linearGradient>
<linearGradient
id="linearGradient2780">
<stop
id="stop2782"
offset="0.00000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop2784"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient2713">
<stop
id="stop2715"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop2717"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2701">
<stop
id="stop2703"
offset="0"
style="stop-color:#db9300;stop-opacity:1;" />
<stop
id="stop2770"
offset="0.75"
style="stop-color:#fac700;stop-opacity:1;" />
<stop
id="stop2705"
offset="1"
style="stop-color:#fff363;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="matrix(2.151801,0.000000,0.000000,1.770850,-5.130350e-2,4.351838)"
gradientUnits="userSpaceOnUse"
id="linearGradient2707"
spreadMethod="reflect"
x1="29.613848"
x2="44.723549"
xlink:href="#linearGradient2701"
y1="52.608921"
y2="52.608921" />
<linearGradient
gradientTransform="matrix(1.121224,0.000000,0.000000,0.891883,0.000000,4.000000)"
gradientUnits="userSpaceOnUse"
id="linearGradient2719"
spreadMethod="reflect"
x1="28.071486"
x2="28.071486"
xlink:href="#linearGradient2713"
y1="40.272228"
y2="42.645634" />
<linearGradient
gradientTransform="matrix(2.218790,0.000000,0.000000,1.825981,-5.130350e-2,-1.012826)"
gradientUnits="userSpaceOnUse"
id="linearGradient2732"
spreadMethod="reflect"
x1="29.093641"
x2="29.093641"
xlink:href="#linearGradient2713"
y1="46.357063"
y2="47.295517" />
<linearGradient
gradientTransform="matrix(2.218790,0.000000,0.000000,1.825981,-5.130350e-2,-1.012826)"
gradientUnits="userSpaceOnUse"
id="linearGradient2736"
spreadMethod="reflect"
x1="24.261463"
x2="24.605862"
xlink:href="#linearGradient2713"
y1="44.011002"
y2="45.887836" />
<linearGradient
gradientTransform="scale(1.102326,0.907173)"
gradientUnits="userSpaceOnUse"
id="linearGradient2740"
spreadMethod="reflect"
x1="17.681860"
x2="17.425413"
xlink:href="#linearGradient2713"
y1="60.433849"
y2="62.779984" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.433337,0.000000,0.000000,1.434961,6.409890,-0.113137)"
gradientUnits="userSpaceOnUse"
id="radialGradient2788"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.500069,0.000000,0.000000,1.675192,5.002970,-5.108149)"
gradientUnits="userSpaceOnUse"
id="radialGradient2792"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.621397,0.000000,0.000000,1.882058,2.388831,-9.409409)"
gradientUnits="userSpaceOnUse"
id="radialGradient2796"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.433337,0.000000,0.000000,1.434961,6.409890,-0.113137)"
gradientUnits="userSpaceOnUse"
id="radialGradient2811"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.500069,0.000000,0.000000,1.675192,5.002970,-5.108149)"
gradientUnits="userSpaceOnUse"
id="radialGradient2813"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.621397,0.000000,0.000000,1.882058,2.388831,-9.409409)"
gradientUnits="userSpaceOnUse"
id="radialGradient2815"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.433337,0.000000,0.000000,1.434961,6.409890,-0.113137)"
gradientUnits="userSpaceOnUse"
id="radialGradient2817"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.500069,0.000000,0.000000,1.675192,5.002970,-5.108149)"
gradientUnits="userSpaceOnUse"
id="radialGradient2819"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
gradientTransform="matrix(0.621397,0.000000,0.000000,1.882058,2.388831,-9.409409)"
gradientUnits="userSpaceOnUse"
id="radialGradient2821"
r="15.156592"
xlink:href="#linearGradient2780" />
<radialGradient
cx="17.191872"
cy="14.639010"
fx="17.191872"
fy="14.639010"
gradientTransform="scale(1.896245,0.527358)"
gradientUnits="userSpaceOnUse"
id="radialGradient2840"
r="3.5649405"
xlink:href="#linearGradient2834" />
<radialGradient
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
gradientTransform="matrix(2.366562,0,0,1.726511,-0.404355,-1.2826e-2)"
gradientUnits="userSpaceOnUse"
id="radialGradient2869"
r="6.0678878"
xlink:href="#linearGradient2834" />
<radialGradient
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
gradientTransform="matrix(-2.366562,0,0,1.726511,129.1226,-0.112925)"
gradientUnits="userSpaceOnUse"
id="radialGradient2873"
r="6.0678878"
xlink:href="#linearGradient2834" />
<linearGradient
gradientTransform="matrix(2.161083,0,0,1.804543,-5.13035e-2,2.267068)"
gradientUnits="userSpaceOnUse"
id="linearGradient2895"
x1="33.184048"
x2="33.184048"
xlink:href="#linearGradient2780"
y1="24.384579"
y2="-13.170087" />
<radialGradient
cx="27.270315"
cy="16.278088"
fx="27.270315"
fy="16.278088"
gradientTransform="scale(0.973329,1.027402)"
gradientUnits="userSpaceOnUse"
id="radialGradient2929"
r="13.638700"
xlink:href="#linearGradient2780" />
<linearGradient
gradientTransform="matrix(2.210222,0,0,1.964283,-1.515862,-2.171324)"
gradientUnits="userSpaceOnUse"
id="linearGradient2935"
x1="33.184048"
x2="33.184048"
xlink:href="#linearGradient2780"
y1="24.384579"
y2="-13.170087" />
<linearGradient
gradientTransform="matrix(1.632005,0,0,2.482509,-5.13035e-2,-1.2826e-2)"
gradientUnits="userSpaceOnUse"
id="linearGradient2943"
x1="38.781849"
x2="38.781849"
xlink:href="#linearGradient2780"
y1="9.5745525"
y2="7.5863166" />
<linearGradient
gradientTransform="matrix(1.63752,0,0,2.47415,-5.13035e-2,-1.2826e-2)"
gradientUnits="userSpaceOnUse"
id="linearGradient2951"
x1="38.362892"
x2="39.723621"
xlink:href="#linearGradient2780"
y1="11.170151"
y2="6.0918369" />
<radialGradient
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
gradientTransform="matrix(3.085042,0,0,2.052895,-15.9848,-3.14928)"
gradientUnits="userSpaceOnUse"
id="radialGradient2955"
r="6.0678878"
xlink:href="#linearGradient2834" />
<radialGradient
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
gradientTransform="matrix(-2.846279,0,0,2.087943,139.5254,-3.586178)"
gradientUnits="userSpaceOnUse"
id="radialGradient2959"
r="6.0678878"
xlink:href="#linearGradient2834" />
<radialGradient
cx="8.0178375"
cy="231.98276"
fx="8.0178375"
fy="231.98276"
gradientTransform="scale(3.741657,0.267261)"
gradientUnits="userSpaceOnUse"
id="radialGradient3063"
r="7.4833150"
xlink:href="#linearGradient3057" />
<radialGradient
cx="8.0178375"
cy="231.98276"
fx="8.0178375"
fy="231.98276"
gradientTransform="scale(3.741657,0.267261)"
gradientUnits="userSpaceOnUse"
id="radialGradient3069"
r="7.4833150"
xlink:href="#linearGradient3057" />
<radialGradient
cx="8.0178375"
cy="231.98276"
fx="8.0178375"
fy="231.98276"
gradientTransform="scale(3.741657,0.267261)"
gradientUnits="userSpaceOnUse"
id="radialGradient3071"
r="7.4833150"
xlink:href="#linearGradient3057" />
<linearGradient
gradientTransform="matrix(2.136116,0.000000,0.000000,1.825981,2.348697,-1.012826)"
gradientUnits="userSpaceOnUse"
id="linearGradient3080"
spreadMethod="pad"
x1="26.974447"
x2="26.974447"
xlink:href="#linearGradient2780"
y1="68.680031"
y2="44.981197" />
<linearGradient
gradientTransform="matrix(1.632005,0,0,2.436073,-5.13035e-2,2.009678)"
gradientUnits="userSpaceOnUse"
id="linearGradient3084"
x1="35.995708"
x2="35.995708"
xlink:href="#linearGradient2780"
y1="1.6246380"
y2="11.710631" />
<linearGradient
gradientTransform="matrix(2.218790,0.000000,0.000000,1.825981,-5.130350e-2,-1.012826)"
gradientUnits="userSpaceOnUse"
id="linearGradient3086"
spreadMethod="reflect"
x1="17.681860"
x2="17.425413"
xlink:href="#linearGradient2713"
y1="60.433849"
y2="62.779984" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2701"
id="linearGradient3106"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.151801,0,0,1.77085,-5.13035e-2,4.351838)"
spreadMethod="reflect"
x1="29.613848"
y1="52.608921"
x2="44.723549"
y2="52.608921" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2713"
id="linearGradient3108"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.21879,0,0,1.825981,-5.13035e-2,-1.012826)"
spreadMethod="reflect"
x1="29.093641"
y1="46.357063"
x2="29.093641"
y2="47.295517" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2713"
id="linearGradient3110"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.21879,0,0,1.825981,-5.13035e-2,-1.012826)"
spreadMethod="reflect"
x1="24.261463"
y1="44.011002"
x2="24.605862"
y2="45.887836" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2713"
id="linearGradient3112"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.21879,0,0,1.825981,-5.13035e-2,-1.012826)"
spreadMethod="reflect"
x1="17.681860"
y1="60.433849"
x2="17.425413"
y2="62.779984" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="radialGradient3114"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.433337,0,0,1.434961,6.40989,-0.113137)"
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
r="15.156592" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="radialGradient3116"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.500069,0,0,1.675192,5.00297,-5.108149)"
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
r="15.156592" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="radialGradient3118"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.621397,0,0,1.882058,2.388831,-9.409409)"
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
r="15.156592" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="radialGradient3120"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.433337,0,0,1.434961,6.40989,-0.113137)"
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
r="15.156592" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="radialGradient3122"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.500069,0,0,1.675192,5.00297,-5.108149)"
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
r="15.156592" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="radialGradient3124"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.621397,0,0,1.882058,2.388831,-9.409409)"
cx="20.360580"
cy="22.546398"
fx="20.360580"
fy="22.546396"
r="15.156592" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="linearGradient3126"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.136116,0,0,1.825981,2.348697,-1.012826)"
spreadMethod="pad"
x1="26.974447"
y1="68.680031"
x2="26.974447"
y2="44.981197" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2780"
id="linearGradient3130"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.136116,0,0,1.825981,-87.401303,-67.012826)"
spreadMethod="pad"
x1="26.974447"
y1="68.680031"
x2="26.974447"
y2="44.981197" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2713"
id="linearGradient3142"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.21879,0,0,1.825981,-54.801304,-67.512826)"
spreadMethod="reflect"
x1="17.681860"
y1="60.433849"
x2="17.425413"
y2="62.779984" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2713"
id="linearGradient3145"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.21879,0,0,1.825981,-70.051304,-58.262826)"
spreadMethod="reflect"
x1="24.261463"
y1="44.011002"
x2="24.605862"
y2="45.887836" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2713"
id="linearGradient3148"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.21879,0,0,1.825981,-62.551304,-52.512826)"
spreadMethod="reflect"
x1="29.093641"
y1="46.357063"
x2="29.093641"
y2="47.295517" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3057"
id="radialGradient4946"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(7.531304,0,0,0.53795,-15.775652,-129.52565)"
cx="8.0178375"
cy="231.98276"
fx="8.0178375"
fy="231.98276"
r="7.4833150" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3057"
id="radialGradient4949"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(7.531304,0,0,0.672437,-18.025652,-149.23087)"
cx="8.0178375"
cy="231.98276"
fx="8.0178375"
fy="231.98276"
r="7.4833150" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3057"
id="radialGradient4952"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(7.531304,0,0,0.53795,-11.275652,-137.01283)"
cx="8.0178375"
cy="231.98276"
fx="8.0178375"
fy="231.98276"
r="7.4833150" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="radialGradient4955"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.846279,0,0,2.087943,139.5254,-3.586178)"
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
r="6.0678878" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="radialGradient4958"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.085042,0,0,2.052895,-15.9848,-3.14928)"
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
r="6.0678878" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="radialGradient4974"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.366562,0,0,1.726511,129.1226,-0.112925)"
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
r="6.0678878" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="radialGradient4977"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.366562,0,0,1.726511,-0.404355,-1.2826e-2)"
cx="21.595108"
cy="8.9813547"
fx="21.595108"
fy="8.9813547"
r="6.0678878" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="linearGradient6992"
x1="-229"
y1="36.5"
x2="-134"
y2="36.5"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="radialGradient7002"
cx="-118.5"
cy="-41"
fx="-118.5"
fy="-41"
r="30.5"
gradientTransform="matrix(1,0,0,0.655738,0,-14.11475)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2834"
id="radialGradient7014"
cx="-35"
cy="-163"
fx="-35"
fy="-163"
r="59"
gradientTransform="matrix(1,0,0,0.576271,0,-69.0678)"
gradientUnits="userSpaceOnUse" />
</defs>
<g
id="g5908">
<g
id="g5889"
style="fill:#989898;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:2.4;stroke-miterlimit:4;stroke-dasharray:none">
<path
style="fill:#989898;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
id="rect2723"
d="M 64.359126,2 C 44.287226,2 28.128259,18.158966 28.128259,38.230867 L 28.128259,78.487385 L 38.192389,78.487385 L 38.192389,38.230867 C 38.192389,23.734494 49.862754,12.06413 64.359126,12.06413 C 78.855498,12.06413 90.525863,23.734494 90.525863,38.230867 L 90.525863,78.487385 L 100.58999,78.487385 L 100.58999,38.230867 C 100.58999,18.158966 84.431026,2 64.359126,2 z " />
</g>
<g
id="g4928"
style="fill:#edbb15;fill-opacity:1;stroke:#000000;stroke-width:2.8;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
transform="translate(0,-0.25)">
<rect
y="57.359127"
x="24.102608"
width="80.513039"
style="fill:#edbb15;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
ry="0.5"
rx="0.49999997"
id="rect1941"
height="66.259109" />
</g>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="5" y="11" width="14" height="10" rx="2"/>
<path d="M9 11V8a3 3 0 0 1 6 0v3"/>
</svg>

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 255 B

Before After
Before After

View file

@ -1,368 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.5 r10040"
version="1.0"
sodipodi:docname="icon_not_ready_start.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2442"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2470"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2472"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2474"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2476"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="-7.5402943"
inkscape:cy="36.374705"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
sodipodi:type="arc"
style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.37689075;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3018"
sodipodi:cx="-25.967213"
sodipodi:cy="12.852459"
sodipodi:rx="9.04918"
sodipodi:ry="9.04918"
d="m -16.918033,12.852459 a 9.04918,9.04918 0 1 1 -18.09836,0 9.04918,9.04918 0 1 1 18.09836,0 z"
transform="matrix(3.392487,0,0,3.392487,120.35572,-11.470653)" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="M 12.146996,18.3904 25.952237,32.195642 12.146996,46.000885 18.521547,52.375436 32.326789,38.570194 46.132032,52.375436 52.506582,46.000885 38.701341,32.195642 52.506582,18.3904 46.132032,12.015849 32.326789,25.82109 18.521547,12.015849 12.146996,18.3904 z"
id="rect3548"
inkscape:connector-curvature="0" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M6 6l12 12"/>
<path d="M18 6L6 18"/>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 214 B

Before After
Before After

View file

@ -1 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M535.6 85.7C513.7 63.8 478.3 63.8 456.4 85.7L432 110.1L529.9 208L554.3 183.6C576.2 161.7 576.2 126.3 554.3 104.4L535.6 85.7zM236.4 305.7C230.3 311.8 225.6 319.3 222.9 327.6L193.3 416.4C190.4 425 192.7 434.5 199.1 441C205.5 447.5 215 449.7 223.7 446.8L312.5 417.2C320.7 414.5 328.2 409.8 334.4 403.7L496 241.9L398.1 144L236.4 305.7zM160 128C107 128 64 171 64 224L64 480C64 533 107 576 160 576L416 576C469 576 512 533 512 480L512 384C512 366.3 497.7 352 480 352C462.3 352 448 366.3 448 384L448 480C448 497.7 433.7 512 416 512L160 512C142.3 512 128 497.7 128 480L128 224C128 206.3 142.3 192 160 192L256 192C273.7 192 288 177.7 288 160C288 142.3 273.7 128 256 128L160 128z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M11 4H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5"/>
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4z"/>
</svg>

Before

Width:  |  Height:  |  Size: 899 B

After

Width:  |  Height:  |  Size: 299 B

Before After
Before After

View file

@ -1,123 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg2"
inkscape:version="0.47 r22583"
sodipodi:docname="pencil.svg">
<metadata
id="metadata18">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="752"
id="namedview16"
showgrid="false"
inkscape:zoom="38.985767"
inkscape:cx="49.593625"
inkscape:cy="9.752988"
inkscape:window-x="-4"
inkscape:window-y="-3"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective20" />
</defs>
<path
style="fill:#f2f2f2;stroke:black;stroke-width:0.36091354;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4310"
d="M 10.735636,2.7007755 L 10.735636,59.759195 L 47.991073,59.759195 L 53.259135,54.575403 L 53.259135,2.7007755 L 10.735636,2.7007755 z" />
<path
style="opacity:0.43930634;fill:black;stroke:none"
id="rect4314-9-2"
d="M 47.539263,54.178486 L 53.43341,54.178486 L 47.539263,59.914352 L 47.539263,54.178486 z" />
<path
style="fill:#f2f2f2;stroke:black;stroke-width:0.33989298;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4314-9-5"
d="M 48.080899,54.683517 L 53.016926,54.683517 L 48.080899,59.569868 L 48.080899,54.683517 z" />
<path
style="opacity:0.43930634;fill:black;stroke:none"
id="rect4120-3"
d="M 7.8062475,55.039312 L 7.8339835,55.072982 L 4.5689682,57.65671 L 5.2398545,58.476426 L 6.3020905,59.774252 L 6.9450675,60.559879 L 10.210081,57.976151 L 35.079771,38.295796 L 35.107506,38.329466 L 37.205296,34.249681 L 32.67559,35.358116 L 7.8059005,55.03861 z" />
<rect
style="fill:#fc0;stroke:black;stroke-width:0.28297317;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4120"
transform="matrix(0.78188456,-0.62342324,0.63622425,0.77150419,0,0)"
y="46.463638"
x="-29.50437"
height="3.7814219"
width="31.701616" />
<rect
style="fill:#4d4d4d;stroke:black;stroke-width:0.28297317;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4122"
transform="matrix(0.78188456,-0.62342324,0.63622425,0.77150419,0,0)"
y="46.477345"
x="-33.674004"
height="3.7620518"
width="4.171114" />
<path
style="fill:#ffe680;stroke:black;stroke-width:0.28295398;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4124"
d="M 31.271515,34.459836 L 35.787845,33.312261 L 33.712851,37.420244 L 31.271515,34.459836 z" />
<path
style="fill:black;stroke:black;stroke-width:0.28295398;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4127"
d="M 34.451031,33.663829 L 35.778335,33.329236 L 35.171353,34.537276 L 34.451031,33.663829 z" />
<rect
style="fill:#333;stroke:black;stroke-width:0.28297317;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4122-4"
transform="matrix(0.78188456,-0.62342324,0.63622425,0.77150419,0,0)"
y="47.533978"
x="-33.669418"
height="1.698899"
width="4.171114" />
<rect
style="fill:#4d4d4d;stroke:black;stroke-width:0.28297317;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4122-8"
transform="matrix(0.78188456,-0.62342324,0.63622425,0.77150419,0,0)"
y="49.239918"
x="-33.669418"
height="1.0045688"
width="4.171114" />
<rect
style="fill:#a80;stroke:black;stroke-width:0.28297317;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4122-4-7"
transform="matrix(0.78188456,-0.62342324,0.63622425,0.77150419,0,0)"
y="47.53389"
x="-29.508781"
height="1.698899"
width="31.643009" />
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 20h9"/>
<path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4z"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 250 B

Before After
Before After

View file

@ -1,24 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="64" height="64">
<g transform="matrix(0 1 -1 0 99.465813 0)" opacity="0.7">
<path fill="#000000" fill-rule="evenodd" clip-rule="evenodd"
stroke="#ffffff"
stroke-width="4"
stroke-linejoin="round"
stroke-linecap="round"
d="M65.5 62
L78 49
C73.5 44.5 69.5 42 63 44
L45 31 C47 25 46 22 41.5 18
L19 41.5
C23 45.5 25 46.5 31 45
L44 62.5
C42.3 69 45 73.5 49 78
L61.5 65.5
L84 87
L87 87
L87.5 86.5
L87.5 83.5 Z" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 4h6l-1 6 3 3v2H7v-2l3-3z"/>
<path d="M12 15v6"/>
</svg>

Before

Width:  |  Height:  |  Size: 736 B

After

Width:  |  Height:  |  Size: 229 B

Before After
Before After

View file

@ -1,142 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2508"
sodipodi:version="0.32"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_player.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2510">
<linearGradient
id="linearGradient5717">
<stop
style="stop-color:#003580;stop-opacity:1;"
offset="0"
id="stop5719" />
<stop
id="stop5727"
offset="0.25297618"
style="stop-color:#055897;stop-opacity:1;" />
<stop
id="stop5725"
offset="0.5"
style="stop-color:#00a4ff;stop-opacity:1;" />
<stop
id="stop5733"
offset="0.75"
style="stop-color:#055897;stop-opacity:1;" />
<stop
style="stop-color:#003580;stop-opacity:1;"
offset="1"
id="stop5721" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5717"
id="linearGradient5723"
x1="339.93985"
y1="482.58844"
x2="459.27341"
y2="355.50766"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.1263349,-0.1263349,0,74.367722,-7.5042832)" />
<linearGradient
id="linearGradient3234">
<stop
style="stop-color:#6f6f6f;stop-opacity:1;"
offset="0"
id="stop3236" />
<stop
id="stop3242"
offset="0.47999999"
style="stop-color:#e6e6e6;stop-opacity:1;" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0.5"
id="stop3244" />
<stop
id="stop3286"
offset="0.75"
style="stop-color:#bebebe;stop-opacity:1;" />
<stop
style="stop-color:#494949;stop-opacity:1;"
offset="1"
id="stop3238" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3234"
id="linearGradient5120"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(8.9332267e-2,8.9332267e-2,8.9332267e-2,-8.9332267e-2,-16.525693,40.126552)"
x1="202.99225"
y1="395.23221"
x2="251.27765"
y2="395.23221" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2516" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.7781746"
inkscape:cx="35.570639"
inkscape:cy="33.231713"
inkscape:current-layer="g2536"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="725"
inkscape:window-x="619"
inkscape:window-y="35"
inkscape:window-maximized="0" />
<metadata
id="metadata2513">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g2536"
transform="translate(-0.1818183,-3.0952293e-8)">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:3.4920001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:60.01653385"
d="m 60.100711,4.0811082 -8.925773,4.066985 C 41.14173,19.502755 31.186489,31.772714 19.035138,42.39632 16.923235,39.989095 14.162681,36.349247 12.592568,33.629733 L 7.4098614,38.84843 c 0,0 4.1855936,1.798155 5.3626626,2.627344 1.177067,0.829192 3.640464,3.136411 3.640464,3.136411 0,0 -6.9973489,9.844274 -12.8181741,11.40396 -1.8723058,0.501682 4.0691751,6.443164 4.5708593,4.570859 1.5576526,-5.813242 11.1468308,-13.589562 11.1468308,-13.589562 0,0 2.672321,3.126813 3.501514,4.30388 0.82919,1.177069 2.519371,5.470634 2.519371,5.470634 L 30.552085,51.58925 C 27.830216,50.017778 24.343721,47.501755 21.950055,45.40381 32.445673,33.693842 43.199214,24.522178 56.033726,13.00688 z"
id="path5116"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccscsscsccccc" />
</g>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M14.5 17.5 3 6V3h3l11.5 11.5"/>
<path d="M13 19l6-6"/>
<path d="M16 16l4 4"/>
<path d="M19 21l2-2"/>
<path d="M5 14l4 4"/>
<path d="M7 17l-3 3"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 331 B

Before After
Before After

View file

@ -1,81 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="500"
height="500"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_ready_start.svg">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4339754"
inkscape:cx="281.46845"
inkscape:cy="299.09369"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="1178"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
showguides="true"
inkscape:guide-bbox="true" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-552.36218)">
<path
sodipodi:type="arc"
style="fill:#0dc700;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1;stroke-width:5.46761148;stroke-miterlimit:4;stroke-dasharray:none"
id="path2984"
sodipodi:cx="-137.08441"
sodipodi:cy="104.52625"
sodipodi:rx="182.45049"
sodipodi:ry="182.45049"
d="m 45.366074,104.52625 c 0,100.76462 -81.685865,182.45049 -182.450484,182.45049 -100.76462,0 -182.45049,-81.68587 -182.45049,-182.45049 0,-100.7646178 81.68587,-182.450482 182.45049,-182.450482 100.764619,0 182.450484,81.6858642 182.450484,182.450482 z"
transform="matrix(1.3351351,0,0,1.3351351,434.51202,663.29215)" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 375.18246,681.4936 -180.66822,156.20036 -62.11391,-71.84189 -57.207882,49.50276 110.831342,128.16069 0.15088,-0.11694 0.7485,0.87896 237.72517,-205.58619 -49.46594,-57.19777 z"
id="rect3754"
inkscape:connector-curvature="0" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 12l5 5L20 6"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 193 B

Before After
Before After

View file

@ -1,7 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M586.9,373.6l95.6-84.4c-49.6-39.2-129.4-79.1-198.2-79.1c-134.9,0-248.2,90.5-280.2,212.8L10.6,374.5C64.4,168.3,255.2,15.8,482.5,15.8c126.7,0,258.8,63.7,345.4,141.4l90.8-80.1L990,479.6L586.9,373.6z M317.5,710.8c49.6,39.2,129.4,79.1,198.2,79.1c134.9,0,248.2-90.5,280.2-212.8l193.5,48.5c-53.7,206.2-244.6,358.7-471.9,358.7c-126.7,0-258.8-63.7-345.4-141.4l-90.8,80.1L10,520.4l403.1,106L317.5,710.8z"/></g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 12a8 8 0 1 1-2.3-5.7"/>
<path d="M20 4v5h-5"/>
</svg>

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 228 B

Before After
Before After

View file

@ -1,356 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.48.5 r10040"
version="1.0"
sodipodi:docname="deck_editor_remove_row.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2442"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2470"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2472"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2474"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2476"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="-27.27273"
inkscape:cy="30.210771"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1272"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#ff7672;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 6.433227,14.50946 L 23.923767,32 L 6.433227,49.490541 L 14.50946,57.566773 L 32,40.076233 L 49.490541,57.566773 L 57.566773,49.490541 L 40.076233,32 L 57.566773,14.50946 L 49.490541,6.433227 L 32,23.923767 L 14.50946,6.433227 L 6.433227,14.50946 z"
id="rect3548" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M6 6l12 12"/>
<path d="M18 6L6 18"/>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 216 B

Before After
Before After

View file

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1200pt" height="1200pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
<path transform="scale(50)" d="m17 16h4v-8h-4" fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2"/>
<path transform="scale(50)" d="m12 8h-9v8h9" fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2"/>
<path transform="scale(50)" d="m6 12h5" fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2"/>
<path transform="scale(50)" d="m20 4h-2c-1.1 0-2 0.9-2 2v12c0 1.1 0.9 2 2 2h2" fill="none" stroke="#000"
stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/>
<path transform="scale(50)" d="m12 20h2c1.1 0 2-0.9 2-2v-12c0-1.1-0.9-2-2-2h-2" fill="none" stroke="#000"
stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round">
<path d="M17 16h4V8h-4"/>
<path d="M12 8H3v8h9"/>
<path d="M6 12h5"/>
<path d="M20 4h-2c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h2"/>
<path d="M12 20h2c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-2"/>
</svg>

Before

Width:  |  Height:  |  Size: 875 B

After

Width:  |  Height:  |  Size: 335 B

Before After
Before After

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M384 96L512 96C529.7 96 544 110.3 544 128C544 145.7 529.7 160 512 160L398.4 160C393.2 185.8 375.5 207.1 352 217.3L352 512L512 512C529.7 512 544 526.3 544 544C544 561.7 529.7 576 512 576L128 576C110.3 576 96 561.7 96 544C96 526.3 110.3 512 128 512L288 512L288 217.3C264.5 207 246.8 185.7 241.6 160L128 160C110.3 160 96 145.7 96 128C96 110.3 110.3 96 128 96L256 96C270.6 76.6 293.8 64 320 64C346.2 64 369.4 76.6 384 96zM439.6 384L584.4 384L512 259.8L439.6 384zM512 480C449.1 480 396.8 446 386 401.1C383.4 390.1 387 378.8 392.7 369L487.9 205.8C492.9 197.2 502.1 192 512 192C521.9 192 531.1 197.3 536.1 205.8L631.3 369C637 378.8 640.6 390.1 638 401.1C627.2 445.9 574.9 480 512 480zM126.8 259.8L54.4 384L199.3 384L126.8 259.8zM.9 401.1C-1.7 390.1 1.9 378.8 7.6 369L102.8 205.8C107.8 197.2 117 192 126.9 192C136.8 192 146 197.3 151 205.8L246.2 369C251.9 378.8 255.5 390.1 252.9 401.1C242.1 445.9 189.8 480 126.9 480C64 480 11.7 446 .9 401.1z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="52pt" height="52pt" viewBox="0 0 52 52" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:#000000;fill-opacity:1;" d="M 25.605469 0.125 C 25.605469 0.125 23.265625 3.140625 23.265625 4.433594 C 23.265625 5.316406 23.765625 6.070313 24.5 6.464844 C 23.898438 6.65625 23.375 6.992188 22.960938 7.449219 C 22.011719 6.640625 20.628906 5.910156 18.710938 5.910156 C 16.640625 5.910156 14.863281 6.753906 13.355469 7.507813 C 12.601563 7.886719 11.925781 8.25 11.324219 8.496094 C 10.964844 8.09375 10.425781 7.878906 9.847656 7.878906 C 8.75 7.878906 7.878906 8.75 7.878906 9.847656 C 7.878906 10.949219 8.75 11.816406 9.847656 11.816406 C 10.757813 11.816406 11.519531 11.234375 11.757813 10.402344 C 12.578125 10.078125 13.386719 9.648438 14.21875 9.234375 C 15.671875 8.507813 17.179688 7.878906 18.710938 7.878906 C 20.496094 7.878906 21.519531 8.679688 22.097656 9.355469 C 22.074219 9.519531 22.035156 9.6875 22.035156 9.847656 C 22.035156 11.816406 23.636719 13.417969 25.605469 13.417969 C 27.574219 13.417969 29.175781 11.816406 29.175781 9.847656 C 29.175781 9.6875 29.136719 9.519531 29.113281 9.355469 C 29.691406 8.679688 30.714844 7.878906 32.5 7.878906 C 34.03125 7.878906 35.539063 8.507813 36.992188 9.234375 C 37.824219 9.648438 38.632813 10.078125 39.457031 10.402344 C 39.695313 11.234375 40.457031 11.816406 41.363281 11.816406 C 42.464844 11.816406 43.332031 10.949219 43.332031 9.847656 C 43.332031 8.75 42.464844 7.878906 41.363281 7.878906 C 40.785156 7.878906 40.246094 8.09375 39.886719 8.496094 C 39.285156 8.25 38.609375 7.886719 37.855469 7.507813 C 36.347656 6.753906 34.570313 5.910156 32.5 5.910156 C 30.585938 5.910156 29.199219 6.640625 28.253906 7.449219 C 27.835938 6.992188 27.3125 6.65625 26.714844 6.464844 C 27.445313 6.070313 27.945313 5.316406 27.945313 4.433594 C 27.945313 3.140625 25.605469 0.125 25.605469 0.125 Z M 9.539063 13.234375 C 9.25 13.332031 9.023438 13.558594 8.925781 13.847656 L 2.277344 31.515625 L 0 31.515625 C 1.445313 35.578125 5.285156 38.53125 9.847656 38.53125 C 14.410156 38.53125 18.25 35.578125 19.695313 31.515625 L 17.417969 31.515625 L 10.773438 13.847656 C 10.601563 13.402344 10.132813 13.140625 9.664063 13.234375 C 9.625 13.234375 9.578125 13.234375 9.539063 13.234375 Z M 41.054688 13.234375 C 40.761719 13.332031 40.539063 13.558594 40.441406 13.847656 L 33.792969 31.515625 L 31.515625 31.515625 C 32.960938 35.578125 36.800781 38.53125 41.363281 38.53125 C 45.925781 38.53125 49.765625 35.578125 51.210938 31.515625 L 48.933594 31.515625 L 42.285156 13.847656 C 42.117188 13.402344 41.648438 13.140625 41.179688 13.234375 C 41.140625 13.234375 41.09375 13.234375 41.054688 13.234375 Z M 21.914063 15.757813 C 21.914063 17.082031 22.589844 18.242188 23.636719 18.898438 L 23.636719 41.980469 C 21.429688 42.773438 19.796875 44.816406 19.695313 47.273438 L 15.757813 47.273438 C 14.671875 47.273438 13.789063 48.15625 13.789063 49.242188 L 13.789063 51.210938 L 37.425781 51.210938 L 37.425781 49.242188 C 37.425781 48.15625 36.539063 47.273438 35.453125 47.273438 L 31.515625 47.273438 C 31.414063 44.816406 29.785156 42.773438 27.574219 41.980469 L 27.574219 18.898438 C 28.621094 18.242188 29.300781 17.082031 29.300781 15.757813 Z M 9.847656 17.050781 L 15.328125 31.515625 L 4.371094 31.515625 Z M 41.363281 17.050781 L 46.84375 31.515625 L 35.886719 31.515625 Z "/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 3v18"/>
<path d="M5 7h14"/>
<path d="M5 7l-3 6a3 3 0 0 0 6 0z"/>
<path d="M19 7l3 6a3 3 0 0 1-6 0z"/>
<path d="M8 21h8"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 309 B

Before After
Before After

View file

@ -1 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M32 176C32 134.5 63.6 100.4 104 96.4L104 96L384 96C437 96 480 139 480 192L480 368L304 368C264.2 368 232 400.2 232 440L232 500C232 524.3 212.3 544 188 544C163.7 544 144 524.3 144 500L144 272L80 272C53.5 272 32 250.5 32 224L32 176zM268.8 544C275.9 530.9 280 515.9 280 500L280 440C280 426.7 290.7 416 304 416L552 416C565.3 416 576 426.7 576 440L576 464C576 508.2 540.2 544 496 544L268.8 544zM112 144C94.3 144 80 158.3 80 176L80 224L144 224L144 176C144 158.3 129.7 144 112 144z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/>
<path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/>
<path d="M8 7h8"/>
<path d="M8 11h8"/>
</svg>

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 332 B

Before After
Before After

View file

@ -1,198 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_search_black.svg">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient3709">
<stop
style="stop-color:#4d4d4d;stop-opacity:1;"
offset="0"
id="stop3711" />
<stop
style="stop-color:#4d4d4d;stop-opacity:0;"
offset="1"
id="stop3713" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3699">
<stop
style="stop-color:#ececec;stop-opacity:1;"
offset="0"
id="stop3701" />
<stop
style="stop-color:#ececec;stop-opacity:0;"
offset="1"
id="stop3703" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3632">
<stop
style="stop-color:#c87137;stop-opacity:1;"
offset="0"
id="stop3634" />
<stop
style="stop-color:#c87137;stop-opacity:0;"
offset="1"
id="stop3636" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3622">
<stop
style="stop-color:#f9f9f9;stop-opacity:1;"
offset="0"
id="stop3624" />
<stop
style="stop-color:#f9f9f9;stop-opacity:0;"
offset="1"
id="stop3626" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3622"
id="linearGradient3628"
x1="30.59761"
y1="8.9243031"
x2="30.59761"
y2="21.545816"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3632"
id="linearGradient3638"
x1="28.430279"
y1="47.808765"
x2="29.960159"
y2="47.808765"
gradientUnits="userSpaceOnUse" />
<inkscape:perspective
id="perspective3685"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3699"
id="linearGradient3705"
x1="29.215645"
y1="1021.9559"
x2="31.852083"
y2="1021.9559"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3709"
id="linearGradient3715"
x1="22.288248"
y1="35.505978"
x2="49.488647"
y2="49.106178"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3632"
id="linearGradient3730"
gradientUnits="userSpaceOnUse"
x1="28.430279"
y1="47.808765"
x2="29.960159"
y2="47.808765" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3699"
id="linearGradient3732"
gradientUnits="userSpaceOnUse"
x1="29.215645"
y1="1021.9559"
x2="31.852083"
y2="1021.9559" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.84375"
inkscape:cx="6.0725518"
inkscape:cy="32"
inkscape:document-units="px"
inkscape:current-layer="g3717"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<g
id="g3717"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,729.31175,279.31708)">
<path
transform="matrix(1.7216859,0,0,1.7216859,-37.751505,955.72849)"
d="m 49.338646,35.505978 a 13.450199,13.450199 0 1 1 -26.900398,0 13.450199,13.450199 0 1 1 26.900398,0 z"
sodipodi:ry="13.450199"
sodipodi:rx="13.450199"
sodipodi:cy="35.505978"
sodipodi:cx="35.888447"
id="path2816"
style="fill:#222326;fill-opacity:0;stroke:#222326;stroke-width:1.90745997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
<path
transform="matrix(-0.08671958,-1.1164509,1.1164509,-0.08671958,2.9138372,1039.7631)"
d="m 18.613546,52.207172 a 2.5498009,12.302789 0 1 1 -5.099601,0 2.5498009,12.302789 0 1 1 5.099601,0 z"
sodipodi:ry="12.302789"
sodipodi:rx="2.5498009"
sodipodi:cy="52.207172"
sodipodi:cx="16.063745"
id="path2826"
style="fill:#222326;fill-opacity:1;stroke:#222326;stroke-width:0.30000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
</g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="10.5" cy="10.5" r="6.5"/>
<path d="M15.5 15.5 21 21"/>
</svg>

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 237 B

Before After
Before After

View file

@ -1,280 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="133.078"
id="Layer_1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_settings.svg"
sodipodi:version="0.32"
space="preserve"
style="overflow:visible;enable-background:new 0 0 132.882 133.078;"
version="1.1"
viewBox="0 0 132.882 133.078"
width="132.882">
<metadata
id="metadata3">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>Ruota dentata grigia</dc:title>
<dc:description />
<dc:subject>
<rdf:Bag>
<rdf:li>unsorted</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Architetto Francesco Rollandin</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Architetto Francesco Rollandin</dc:title>
</cc:Agent>
</dc:rights>
<dc:date />
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs88" />
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="Layer_1"
inkscape:cx="11.842486"
inkscape:cy="69.252383"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:window-height="928"
inkscape:window-width="1411"
inkscape:window-x="191"
inkscape:window-y="47"
inkscape:zoom="5.4103608"
pagecolor="#ffffff"
showgrid="false"
inkscape:window-maximized="0" />
<g
id="g3"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1">
<radialGradient
cx="66.5674"
cy="66.3169"
gradientUnits="userSpaceOnUse"
id="XMLID_5_"
r="65.835">
<stop
id="stop6"
offset="0"
style="stop-color:#F8F8F8" />
<stop
id="stop8"
offset="1"
style="stop-color:#7F7F7F" />
</radialGradient>
<path
d="M125.144,56.349c-3.771,0-7.545,0.045-11.314,0.186c-0.897-4.456-2.482-8.765-4.657-12.756 c-1.116-2.051-3.152-3.094-1.176-4.893c1.351-1.228,2.674-2.482,3.984-3.751c2.54-2.458,7.481-6.071,5.054-10.111 c-2.409-4.008-9.553-12.402-14.613-8.778c-3.259,2.332-6.025,5.805-8.753,8.728c-1.839,1.972-10.072-3.345-13.153-4.284 c-2.29-0.697-4.424-0.006-4.282-2.731c0.099-1.899,0.151-3.802,0.183-5.704c0.046-2.924,0.872-7.681-1.602-9.949 c-2.693-2.47-13.091-2.182-16.192-0.591c-2.902,1.487-2.505,5.529-2.49,8.222c0.011,2.005,0.038,4.011,0.09,6.017 c0.076,2.895,1.006,3.128-2.148,3.853c-4.414,1.016-8.685,2.631-12.661,4.795c-2.706,1.474-2.19,0.776-4.07-1.242 c-1.784-1.917-3.619-3.792-5.471-5.644c-5.942-5.942-11.491,1.433-15.473,6.153c-2.454,2.908-1.425,5.693,1.093,8.212 c1.554,1.552,3.121,3.095,4.703,4.618c3.003,2.895,2.475,2.563,0.439,6.089c-2.106,3.649-3.704,7.589-4.729,11.678 c-0.889,3.547-6.993,1.883-10.459,1.883c-8.083,0-6.575,7.183-6.646,13.097c-0.099,8.381,6.687,7.291,13.357,7.167 c3.019-0.057,3.419-1.006,4.392,2.141c0.679,2.203,1.527,4.354,2.533,6.43c0.999,2.063,2.151,4.05,3.442,5.944 c1.956,2.872-0.17,3.17-2.443,5.329c-2.402,2.283-7.031,5.432-7.215,9.075c-0.154,3.043,3.263,5.365,5.149,7.252 s4.212,5.316,7.26,5.158c3.995-0.206,7.724-5.77,10.257-8.424c1.112-1.164,2.211-2.339,3.291-3.532 c2.416,1.359,4.945,2.514,7.554,3.451c2.667,0.961,5.417,1.691,8.207,2.191c-0.196,2.286-0.295,4.58-0.357,6.873 c-0.093,3.384-1.316,9.583,1.551,12.215c2.403,2.205,7.079,1.192,10.013,1.252c2.549,0.054,6.151,0.456,7.717-2.1 c2.355-3.849,0.94-10.923,0.786-15.24c-0.107-2.931-1.017-3.003,2.18-3.832c3.045-0.79,6.019-1.861,8.864-3.205 c3.503-1.651,3.52-2.752,6.156,0.172c1.791,1.988,3.646,3.92,5.522,5.826c2.889,2.937,6.048,6.091,9.923,2.818 c2.688-2.271,7.617-6.12,8.636-9.61c1.223-4.195-4.952-8.343-7.479-10.767c-2.237-2.148-4.737-2.782-2.863-5.64 c1.603-2.441,2.973-5.036,4.082-7.737c0.839-2.045,1.528-4.15,2.061-6.296c2.411,0.156,4.826,0.234,7.239,0.275 c3.483,0.061,9.652,1.05,10.868-3.456C133.132,67.049,133.389,56.349,125.144,56.349 M65.631,84.78 c-10.628,0-20.194-8.436-20.194-19.325c0-10.889,9.565-19.324,20.194-19.324c10.627,0,20.195,8.435,20.195,19.324 C85.826,76.344,76.259,84.78,65.631,84.78"
id="path10"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<linearGradient
gradientTransform="matrix(776.0099 550.007 550.007 -776.0099 -66856.1797 490158.2813)"
gradientUnits="userSpaceOnUse"
id="XMLID_6_"
x1="-241.1641"
x2="-239.5807"
y1="461.063"
y2="461.063">
<stop
id="stop13"
offset="0"
style="stop-color:#FFFFFF" />
<stop
id="stop15"
offset="1"
style="stop-color:#000000" />
</linearGradient>
<path
d="M66.287,1.853c2.222-0.034,4.739-0.403,6.857,0.365c3.572,1.299,2.531,7.112,2.485,9.961 c-0.025,1.531-1.121,6.786-0.321,8.029c0.813,1.265,9.244,2.709,11.056,3.537c6.891,3.14,5.463,4.316,10.604-1.013 c2.665-2.76,6.867-9.078,11.128-5.777c2.658,2.06,9.874,8.281,8.585,11.593c-1.303,3.346-5.354,6.176-7.92,8.567 c-2.921,2.722-3.367,1.872-1.364,5.159c2.313,3.799,4.064,7.936,5.156,12.25c0.605,2.394-0.082,2.838,2.033,2.802 c4.069-0.069,10.315-1.296,14.178,0.4c3.522,1.548,2.268,9.16,2.229,12.543c-0.096,8.456-12.104,5.645-17.898,5.283 c0.156,0.011-6.795,14.843-7.944,16.447c-0.547,0.763,7.359,7.556,8.381,8.538c4.944,4.761,2.824,7.329-1.513,11.69 c-6.039,6.069-7.887,5.521-13.935-0.731c-2.149-2.219-4.261-4.48-6.246-6.85c-0.521-0.625-6.012,2.776-6.994,3.185 c-1.476,0.614-8.901,1.845-9.535,2.872c-1.004,1.622,0.309,8.013,0.33,9.982c0.096,8.526-0.896,10.481-9.352,10.481 c-2.232,0-4.709,0.411-6.843-0.365c-4-1.453-2.523-9.013-2.438-12.174c0.04-1.498,1.174-6.406,0.431-7.654 c-0.568-0.956-8.392-2.117-9.829-2.669c-0.787-0.303-6.762-3.507-7.049-3.207c-1.525,1.591-3.051,3.181-4.578,4.771 c-1.979,2.064-5.734,7.388-8.932,7.289c-2.806-0.048-9.959-7.553-11.098-10.111c-2.792-6.279,10.07-9.389,10.988-13.959 c0.043-0.212-9.882-17.351-8.595-17.368c-3.593,0.05-7.317,0.41-10.899,0.153c-6.971,0-5.875-6.05-5.83-11.202 c-0.16-7.395,3.619-7.569,9.824-7.444c2.137,0.043,4.276,0.086,6.414,0.128c0.444,0.01,2.333-7.586,2.722-8.551 c1.339-3.326,3.101-6.425,5.146-9.363c0.438-0.629-1.932-2.346-2.398-2.799c-3.363-3.273-10.421-7.872-5.851-12.794 c2.096-2.259,6.541-7.985,9.6-7.985c3.747,0,8.376,6.755,10.672,9.161c3.036,3.181,6.353-1.095,10.14-2.528 c3.945-1.491,9.292-0.362,9.213-4.943c-0.058-3.255-0.396-6.637-0.172-9.884C56.925,1.449,61.375,1.775,66.287,1.853 M69.694,0.223 c-3.688,0-9.813-1.099-12.571,1.586c-3.116,3.085-1.696,10.736-1.63,14.678c0.059,3.6-3.022,2.813-6.17,3.854 c-1.466,0.484-9.462,4.621-10.028,4.025c-2.892-3.043-6.707-8.735-10.962-9.909c-4.166-1.15-7.581,3.806-10.172,6.478 c-5.742,5.518-4.111,8.898,0.979,13.844c1.579,1.533,3.153,3.07,4.737,4.598c-2.533,3.705-4.533,7.768-5.897,12.042 c-1.361,4.257-0.689,4.336-4.944,4.254c-2.461-0.048-5.048-0.305-7.504,0.003c-6.472,0.811-5.456,7.242-5.495,12.174 c-0.062,8.137,3.169,9.687,10.582,9.567c2.239-0.035,4.479-0.076,6.717-0.105c1.116,4.185,2.831,8.202,5.067,11.91 c1.376,2.284,3.278,2.844,1.032,4.902c-1.601,1.465-3.171,2.964-4.72,4.482c-2.292,2.248-5.735,5.252-4.299,8.88 c1.176,2.967,7.935,9.732,10.902,10.908c4.637,1.839,8.851-4.352,11.594-7.205c1.362-1.417,2.717-2.845,4.093-4.25 c3.94,2.146,8.163,3.761,12.527,4.799c3.048,0.725,2.151,0.836,2.018,3.6c-0.091,1.868-0.145,3.736-0.175,5.606 c-0.057,3.465-0.923,9.161,2.917,11.094c3.094,1.558,9.554,0.977,13.091,0.706c8.238-0.634,5.907-11.882,5.715-17.565 c-0.093-2.766-0.968-2.98,2.009-3.78c2.121-0.57,4.206-1.277,6.235-2.116c2.025-0.838,3.997-1.808,5.898-2.898 c1.049,1.227,2.131,2.424,3.23,3.604c4.327,4.647,9.567,12.294,15.874,6.219c2.729-2.633,8.092-6.614,8.172-10.478 c0-4.122-5.587-7.971-8.271-10.553c-2.079-1.999-3.72-2.262-2.068-4.844c2.22-3.474,3.976-7.236,5.207-11.169 c1.902-6.08,17.526,3.361,19.05-6.681c0.542-3.585,1.057-12.592-1.447-15.135c-2.997-3.071-10.253-1.718-14.098-1.652 c-3.809,0.065-3-2.746-4.229-6.091c-1.123-3.054-5.727-8.679-3.43-10.785c6.34-5.817,12.979-10.456,5.196-17.885 c-2.6-2.681-6.001-7.617-10.181-6.482c-3.963,1.077-7.582,6.327-10.301,9.135c-2.466,2.545-4.07,0.031-7.078-1.328 c-2.639-1.192-9.949-2.184-9.821-4.885C77.38,10.375,79.38,0.223,69.694,0.223"
id="path17"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<linearGradient
gradientTransform="matrix(0 -214.9991 -214.9991 0 102181.7813 -51529.3086)"
gradientUnits="userSpaceOnUse"
id="XMLID_7_"
x1="-240.6104"
x2="-239.069"
y1="474.9624"
y2="474.9624">
<stop
id="stop20"
offset="0"
style="stop-color:#FFFFFF" />
<stop
id="stop22"
offset="1"
style="stop-color:#000000" />
</linearGradient>
<path
d="M44.65,65.457c0,26.066,41.962,26.066,41.962,0S44.65,39.39,44.65,65.457 M46.234,65.457 c0-24.025,38.794-24.025,38.794,0S46.234,89.482,46.234,65.457"
id="path24"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<radialGradient
cx="65.6309"
cy="65.4565"
gradientUnits="userSpaceOnUse"
id="XMLID_8_"
r="34.9484">
<stop
id="stop27"
offset="0"
style="stop-color:#F3F3F3" />
<stop
id="stop29"
offset="0.4367"
style="stop-color:#F1F1F1" />
<stop
id="stop31"
offset="0.594"
style="stop-color:#EAEAEA" />
<stop
id="stop33"
offset="0.7061"
style="stop-color:#DEDEDE" />
<stop
id="stop35"
offset="0.7968"
style="stop-color:#CDCDCD" />
<stop
id="stop37"
offset="0.8745"
style="stop-color:#B7B7B7" />
<stop
id="stop39"
offset="0.9419"
style="stop-color:#9D9D9D" />
<stop
id="stop41"
offset="1"
style="stop-color:#7F7F7F" />
</radialGradient>
<path
d="M65.631,31.895c-18.581,0-36.284,14.164-36.284,33.56c0,19.402,17.697,33.563,36.284,33.563 c18.586,0,36.283-14.16,36.283-33.563C101.914,46.058,84.212,31.895,65.631,31.895 M65.631,93.859 c-15.729,0-30.71-11.983-30.71-28.404c0-16.42,14.981-28.401,30.71-28.401c15.729,0,30.711,11.979,30.711,28.401 C96.343,81.877,81.362,93.859,65.631,93.859"
id="path43"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M24.022,47.759c1.389-2.133,2.794-4.254,4.284-6.319C26.071,40.979,24.669,46.14,24.022,47.759 M107.988,19.272c-1.503-5.967-10.331,4.207-11.839,5.825c-0.454,0.487-3.053,4-3.867,3.761c-4.902-3.622-10.62-6.063-16.557-7.381 c-1.076,3.631,8.287,4.644,11.055,6.028c2.139,1.068,4.24,4.338,6.308,2.435c3.427-3.154,6.553-6.757,10.268-9.576 c0.894-0.678,5.101-1.062,4.814,0.303C108.109,20.202,108.049,19.738,107.988,19.272 M40.692,28.996 c3.305-2.111,6.968-3.595,10.795-4.437c2.593-0.569,6.13,0.171,5.04-3.526C53.526,21.596,39.653,24.832,40.692,28.996"
id="path45"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M73.152,3.636c0,2.344-14.251,2.344-14.251,0S73.152,1.292,73.152,3.636"
id="path47"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M66.03,128.431c-0.671,0-7.125-0.13-7.125,1.282c0,1.931,14.251,1.933,14.251,0 C73.155,128.301,66.701,128.431,66.03,128.431"
id="path49"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M11.008,72.88c-0.671,0-7.125-0.131-7.125,1.282c0,1.916,14.251,1.913,14.251,0 C18.134,72.75,11.679,72.88,11.008,72.88"
id="path51"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M121.58,72.88c-0.671,0-7.125-0.13-7.125,1.282c0,1.914,14.251,1.914,14.251,0 C128.706,72.75,122.252,72.88,121.58,72.88"
id="path53"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M17.557,106.256c-1.294,0,2.25,4.292,2.338,4.391c1.444,1.629,4.758,5.852,7.256,5.852 c0.034,0.022-1.976-3.976-2.431-4.485C23.285,110.405,20.025,106.251,17.557,106.256"
id="path55"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M94.355,104.674c-0.578,0,7.519,12.467,9.826,10.159C105.671,113.348,96.25,104.674,94.355,104.674"
id="path57"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M26.671,16.666c1.05,1.051-9.306,11.41-10.357,10.358C15.267,25.972,25.62,15.62,26.671,16.666"
id="path59"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M115.199,27.97c-1.964,0-11.219,9.358-10.206,10.408C106.838,40.223,115.24,27.97,115.199,27.97"
id="path61"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M115.726,106.081c-1.962,0-11.194,9.419-10.205,10.408 C107.472,118.347,115.713,106.081,115.726,106.081"
id="path63"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M37.346,106.081c-1.842,0-4.608,3.414-5.731,4.537c-0.465,0.462-4.612,5.885-4.463,5.881 C29.433,118.323,37.092,106.081,37.346,106.081"
id="path65"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M27.347,115.672c-0.07,0.271-0.138,0.545-0.207,0.816C27.825,117.173,26.743,114.15,27.347,115.672"
id="path67"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M17.435,58.462c0,1.339-12.324-0.53-12.924,1.248c-0.368,1.084-0.489,11.103-1.228,11.024 c-1.711-0.183-0.224-10.043-0.08-11.327C3.558,56.244,17.435,57.476,17.435,58.462"
id="path69"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M23.478,100.129c-0.358,0.358-4.58,4.749-5.319,4.013c-0.977-0.977,8.35-10.312,9.332-9.33 C28.226,95.548,23.835,99.773,23.478,100.129"
id="path71"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M128.573,58.66c0,1.19-14.846,1.19-14.846,0S128.573,57.47,128.573,58.66"
id="path73"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M101.119,74.258c-7.886,24.178-41.95,33.291-60.554,15.481c0,3.725,7.864,8.189,10.455,9.559 c9.041,4.776,19.717,4.771,29.24,1.414C92.282,96.476,99.202,86.506,101.119,74.258 M101.58,72.276 c-0.306,0.617-0.461,1.277-0.461,1.982C100.85,75.084,101.843,72.276,101.58,72.276"
id="path75"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M90.129,90.213c-8.308,6.802-19.974,9.833-30.567,8.335C70.359,100.232,81.753,97.307,90.129,90.213 "
id="path77"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M35.812,60.705c0-9.224,8.177-18.148,16.011-21.707c8.522-3.872,17.985-3.937,26.437,0.105 c1.084,0.518,13.452,7.704,11.891,9.714c0.415-0.534-7.813-6.607-8.427-6.956c-7.797-4.435-17.463-4.583-25.884-1.935 C48.108,42.359,35.812,51.58,35.812,60.705"
id="path79"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M29.221,60.477c0-11.246,10.8-22.154,20.227-26.36c10.268-4.583,21.688-4.81,31.842,0.146 c3.762,1.836,7.336,4.222,10.343,7.144c0.161,0.158,3.231,3.874,2.678,3.895c-0.649,0.027-2.156-2.297-2.538-2.712 c-2.223-2.406-4.743-4.534-7.549-6.232c-9.406-5.692-21.297-5.859-31.503-2.277c-8.237,2.891-15.042,8.673-19.335,16.251 C31.957,52.851,29.221,57.912,29.221,60.477"
id="path81"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M96.321,66.114c0.076-0.002-1.774,6.544-1.93,6.928c-2.031,5.045-5.354,9.536-9.722,12.801 c-14.182,10.598-33.677,7.999-44.948-5.131c15.231,22.079,55.698,13.75,56.604-14.6"
id="path83"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
<path
d="M87.782,85.129c-0.864,0.83-1.773,1.606-2.729,2.329C86.015,86.743,86.926,85.967,87.782,85.129 M39.057,80.084c-0.394,0,5.06,5.707,5.491,6.023C43.611,85.29,40.002,80.084,39.057,80.084"
id="path85"
style="fill:#007aff;fill-opacity:1;stroke:none;stroke-opacity:1" />
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.09a2 2 0 0 1-1-1.74v-.51a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/>
<circle cx="12" cy="12" r="3"/>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 779 B

Before After
Before After

View file

@ -1,25 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg height="800"
width="800"
version="1.1"
id="_x32_"
viewBox="0 0 512 512"
xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs1"/>
<style type="text/css"
id="style1">
.st0{fill:#64C0FF;stroke:black;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1}
</style>
<g id="g1"
transform="matrix(0.87097097,0,0,1.0008579,38.609049,-0.21963163)"
style="stroke-width:3.42738;stroke-dasharray:none">
<path class="st0"
d="M 512,255.995 277.045,65.394 v 103.574 c -17.255,0 -36.408,0 -57.542,0 -208.59,0 -249.35,153.44 -201.394,266.128 9.586,-103.098 142.053,-100.701 237.358,-100.701 7.247,0 14.446,0 21.578,0 v 112.211 z"
id="path1"
style="stroke-width:20;stroke:#000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="6" cy="12" r="2.5"/>
<circle cx="18" cy="6" r="2.5"/>
<circle cx="18" cy="18" r="2.5"/>
<path d="M8.2 10.8l7.6-3.6"/>
<path d="M8.2 13.2l7.6 3.6"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 334 B

Before After
Before After

View file

@ -1 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M278.6 438.6L182.6 534.6C170.1 547.1 149.8 547.1 137.3 534.6L41.3 438.6C28.8 426.1 28.8 405.8 41.3 393.3C53.8 380.8 74.1 380.8 86.6 393.3L128 434.7L128 128C128 110.3 142.3 96 160 96C177.7 96 192 110.3 192 128L192 434.7L233.4 393.3C245.9 380.8 266.2 380.8 278.7 393.3C291.2 405.8 291.2 426.1 278.7 438.6zM352 544C334.3 544 320 529.7 320 512C320 494.3 334.3 480 352 480L384 480C401.7 480 416 494.3 416 512C416 529.7 401.7 544 384 544L352 544zM352 416C334.3 416 320 401.7 320 384C320 366.3 334.3 352 352 352L448 352C465.7 352 480 366.3 480 384C480 401.7 465.7 416 448 416L352 416zM352 288C334.3 288 320 273.7 320 256C320 238.3 334.3 224 352 224L512 224C529.7 224 544 238.3 544 256C544 273.7 529.7 288 512 288L352 288zM352 160C334.3 160 320 145.7 320 128C320 110.3 334.3 96 352 96L576 96C593.7 96 608 110.3 608 128C608 145.7 593.7 160 576 160L352 160z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 6h10"/>
<path d="M4 12h7"/>
<path d="M4 18h4"/>
<path d="M18 8v10"/>
<path d="M15 15l3 3 3-3"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 282 B

Before After
Before After

View file

@ -1,106 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="500"
height="500"
id="svg2825"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_spectator.svg">
<defs
id="defs2827">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2833" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3170"
id="linearGradient3176"
x1="348.1423"
y1="241.25623"
x2="362.82382"
y2="226.27509"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient3170">
<stop
style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
offset="0"
id="stop3172" />
<stop
style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
offset="1"
id="stop3174" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="161.90734"
inkscape:cy="313.43022"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="784"
inkscape:window-height="1162"
inkscape:window-x="2720"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata2830">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-552.36218)">
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3609"
sodipodi:cx="382.85715"
sodipodi:cy="549.50507"
sodipodi:rx="71.428574"
sodipodi:ry="71.428574"
d="m 454.28572,549.50507 a 71.428574,71.428574 0 1 1 -142.85715,0 71.428574,71.428574 0 1 1 142.85715,0 z"
transform="matrix(1.278781,0,0,1.278781,-239.59045,89.665546)" />
<g
transform="matrix(4.0314732,0,0,4.0314732,-693.67321,-408.8113)"
id="g3178">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssc"
id="path3159"
d="m 234.78774,331.58001 c -31.87684,0.0325 -57.71719,-31.08607 -58.23077,-32.66642 -1.24408,-3.82817 25.38817,-32.75179 57.265,-32.78433 31.87683,-0.0325 58.68772,30.04142 58.23076,32.66642 -0.17904,1.02851 -24.29715,32.20961 -55.54932,32.76812"
style="fill:none;stroke:#000000;stroke-width:6.60500002;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/>
<circle cx="12" cy="12" r="3"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 261 B

Before After
Before After

View file

@ -1,12 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" fill="#000000" version="1.1" id="Capa_1"
xmlns="http://www.w3.org/2000/svg"
width="800px" height="800px" viewBox="0 0 71.753 71.753"
xml:space="preserve">
<g>
<path d="M39.798,20.736H28.172v20.738L11.625,41.47V20.736H0L19.899,0.839L39.798,20.736z M51.855,70.914l19.897-19.896H60.129
V30.282l-16.547-0.004v20.74H31.957L51.855,70.914z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 8h13"/>
<path d="M14 5l3 3-3 3"/>
<path d="M20 16H7"/>
<path d="M10 13l-3 3 3 3"/>
</svg>

Before

Width:  |  Height:  |  Size: 648 B

After

Width:  |  Height:  |  Size: 269 B

Before After
Before After

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="520pt" height="520pt" viewBox="0 0 520 520" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:#000000;fill-opacity:1;" d="M 240 0 L 240 45 C 130.078125 55.234375 43.75 147.421875 43.75 260 C 43.75 318.671875 67.03125 371.640625 105 410.625 L 159.375 361.875 C 133.203125 335.859375 116.875 299.765625 116.875 260 C 116.875 187.8125 170.46875 127.96875 240 118.125 L 240 160 L 368.125 80 Z M 415 109.375 L 361.25 158.125 C 387.421875 184.140625 403.125 220.3125 403.125 260 C 403.125 332.265625 349.609375 391.484375 280 401.25 L 280 360 L 151.875 440 L 280 520 L 280 475 C 389.921875 464.765625 476.25 372.578125 476.25 260 C 476.25 201.328125 452.96875 148.359375 415 109.375 Z "/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 11a8 8 0 0 0-13.7-5.7L4 8"/>
<path d="M4 4v4h4"/>
<path d="M4 13a8 8 0 0 0 13.7 5.7L20 16"/>
<path d="M20 20v-4h-4"/>
</svg>

Before

Width:  |  Height:  |  Size: 856 B

After

Width:  |  Height:  |  Size: 303 B

Before After
Before After

View file

@ -1,116 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100"
height="100"
id="svg2858"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="icon_tab_changed.svg">
<defs
id="defs2860">
<linearGradient
id="linearGradient3753">
<stop
style="stop-color:#02db0e;stop-opacity:1;"
offset="0"
id="stop3755" />
<stop
style="stop-color:#02db0e;stop-opacity:1;"
offset="1"
id="stop3757" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2866" />
<inkscape:perspective
id="perspective2853"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3753"
id="linearGradient3766"
x1="103.53491"
y1="132.64713"
x2="-1.5473157"
y2="33.224445"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5"
inkscape:cx="-9.896878"
inkscape:cy="42.810059"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata2863">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Triangle"
style="display:inline">
<path
sodipodi:type="arc"
style="fill:#007aff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="path3758-1"
sodipodi:cx="53.900002"
sodipodi:cy="78.5"
sodipodi:rx="46.5"
sodipodi:ry="46.5"
d="M 100.4,78.5 A 46.5,46.5 0 1 1 7.4000015,78.5 46.5,46.5 0 1 1 100.4,78.5 z"
transform="matrix(1.05866,0,0,1.05866,-7.0617752,-32.704809)" />
<g
style="font-size:133.49534607px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.06498075;stroke-opacity:1;font-family:'Magic:the Gathering';-inkscape-font-specification:'Magic:the Gathering'"
id="text3759">
<path
d="m 46.854005,16.085692 c 0.977733,-2.411704 1.683885,-4.193378 2.118456,-5.345028 0.369355,-1.1514901 0.771318,-1.9988718 1.205891,-2.5421482 0.456264,-0.4344718 1.347101,-0.825571 2.672514,-1.1732989 1.23846,-0.2823765 2.705082,-0.4670623 4.399871,-0.5540578 0.369346,8.46e-5 0.727854,8.46e-5 1.075524,0 1.694737,8.46e-5 2.672485,0.5758696 2.933248,1.7273567 -3e-5,0.1956326 -3e-5,0.3803183 0,0.5540579 -3e-5,1.3254743 -0.662726,2.9224633 -1.98809,4.7909703 -1.520969,2.238035 -3.43301,4.24785 -5.736128,6.029453 -2.32489,1.760018 -4.551983,2.781222 -6.681286,3.063614 -1.260224,-0.543125 -1.977239,-1.075454 -2.151048,-1.59699 -1.3e-5,-0.08684 -1.3e-5,-0.184616 0,-0.293325 -1.3e-5,-0.434484 0.228128,-1.010269 0.684424,-1.727357 0.521453,-0.890765 1.010327,-1.868513 1.466624,-2.933247 z M 31.372977,37.856906 c 2.650785,-0.716962 6.159814,-1.651255 10.527099,-2.802881 4.280354,-1.173242 7.398284,-1.803346 9.3538,-1.890315 0.08689,5.8e-5 0.173803,5.8e-5 0.260733,0 1.06464,5.8e-5 1.82511,0.358566 2.281415,1.075524 0.260711,0.630161 0.391077,1.520998 0.391099,2.672514 -2.2e-5,0.260787 -2.2e-5,0.532384 0,0.814791 -0.173844,1.586178 -0.260755,2.781204 -0.260733,3.58508 l 0,39.533656 c 1.238459,1e-5 2.976678,-0.673549 5.214662,-2.020681 1.673009,-0.977736 2.868034,-1.46661 3.58508,-1.466624 0.173791,1.4e-5 0.304158,0.04347 0.3911,0.130367 0.543162,0.369385 0.814759,0.771348 0.814791,1.20589 -3.2e-5,1.151583 -1.868617,2.66166 -5.605762,4.530238 -1.238507,0.717023 -3.063637,1.922912 -5.475395,3.617671 -2.49871,1.781679 -4.769259,3.204846 -6.811652,4.269505 -0.347658,0.347644 -0.923443,0.662696 -1.727357,0.945157 -0.260745,0.08691 -0.532342,0.130366 -0.814791,0.130367 -0.521477,-10e-7 -1.010351,-0.271598 -1.466623,-0.814791 C 41.856611,91.111641 41.7697,81.594892 41.76971,62.8221 c -1e-5,-1.955468 -1e-5,-4.008739 0,-6.15982 -1e-5,-2.129283 -0.08692,-4.128235 -0.260734,-5.996861 -0.260742,-1.781634 -0.706161,-3.204801 -1.336257,-4.269504 -0.717023,-1.347075 -1.60786,-2.368279 -2.672514,-3.063614 -1.151576,-0.630057 -2.357465,-1.260161 -3.617672,-1.890315 -1.325394,-0.521416 -2.161911,-1.053746 -2.509556,-1.59699 -0.195549,-0.173771 -0.293324,-0.434504 -0.293324,-0.7822 -0.08691,-0.369319 0.01086,-0.771282 0.293324,-1.20589 z"
style=""
id="path2993" />
</g>
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)"
style="display:inline" />
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="8"/>
<circle cx="12" cy="12" r="3.5" fill="currentColor" stroke="none"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 268 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -1,29 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="122.14841" height="72.055801" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docname="swerty_eye.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.0">
<defs id="defs4">
<linearGradient inkscape:collect="always" id="linearGradient3170">
<stop style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" offset="0" id="stop3172"/>
<stop style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" offset="1" id="stop3174"/>
</linearGradient>
<inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective10"/>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3170" id="linearGradient3176" x1="348.1423" y1="241.25623" x2="362.82382" y2="226.27509" gradientUnits="userSpaceOnUse"/>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.9163562" inkscape:cx="296.89701" inkscape:cy="743.73197" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:window-width="1024" inkscape:window-height="712" inkscape:window-x="-4" inkscape:window-y="-4"/>
<metadata id="metadata7">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
</cc:Work>
</rdf:RDF>
</metadata>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-173.21257,-262.82673)">
<g id="g3178">
<path sodipodi:open="true" transform="matrix(1.7416,0,0,1.7416,-381.027,-111.162)" sodipodi:end="10.935153" sodipodi:start="4.6610829" d="M 352.96016,223.72064 A 11.219209,10.958297 0 1 1 352.85806,223.72622" sodipodi:ry="10.958297" sodipodi:rx="11.219209" sodipodi:cy="234.66452" sodipodi:cx="353.53552" id="path3166" style="opacity:1;fill:#0000de;fill-opacity:1;stroke:none;stroke-width:6.60500002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" sodipodi:type="arc"/>
<path sodipodi:nodetypes="csssc" id="path3159" d="M 234.78774,331.58001 C 202.9109,331.61255 177.07055,300.49394 176.55697,298.91359 C 175.31289,295.08542 201.94514,266.1618 233.82197,266.12926 C 265.6988,266.09672 292.50969,296.17068 292.05273,298.79568 C 291.87369,299.82419 267.75558,331.00529 236.50341,331.5638" style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:6.60500002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
<path sodipodi:open="true" transform="matrix(1.7416,0,0,1.7416,-380.897,-111.409)" sodipodi:end="10.935153" sodipodi:start="4.6610829" d="M 352.96016,223.72064 A 11.219209,10.958297 0 1 1 352.85806,223.72622" sodipodi:ry="10.958297" sodipodi:rx="11.219209" sodipodi:cy="234.66452" sodipodi:cx="353.53552" id="path3168" style="opacity:1;fill:url(#linearGradient3176);fill-opacity:1;stroke:none;stroke-width:6.60500002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" sodipodi:type="arc"/>
<path sodipodi:open="true" transform="matrix(1.38447,0,0,1.38447,-254.533,-26.8231)" sodipodi:end="4.6519677" sodipodi:start="0.53396878" d="M 363.19295,240.24179 A 11.219209,10.958297 0 1 1 352.85806,223.72622" sodipodi:ry="10.958297" sodipodi:rx="11.219209" sodipodi:cy="234.66452" sodipodi:cx="353.53552" id="path3162" style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:6.60500002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" sodipodi:type="arc"/>
</g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/>
<circle cx="12" cy="12" r="3"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 261 B

Before After
Before After

View file

@ -0,0 +1,42 @@
/**
* @file deck_analysis_url.h
* @ingroup ApiInterfaces
*/
#ifndef DECK_ANALYSIS_URL_H
#define DECK_ANALYSIS_URL_H
#include <QString>
#include <QUrl>
/**
* Validates a deck address returned by a deck analysis service.
*
* Only the expected host (optionally "www."-prefixed), HTTPS, default ports and
* URLs without user information are accepted. Legacy HTTP addresses for the same
* service are upgraded to HTTPS in place instead of being rejected.
*
* Relative addresses must be resolved against the response URL by the caller.
*
* @return true when @p url names a deck on @p serviceHost; false otherwise.
*/
inline bool normalizeAnalysisUrl(QUrl &url, const QString &serviceHost)
{
const QString host = url.host().toLower();
const bool legacyHttp = url.scheme() == QStringLiteral("http");
const int defaultPort = legacyHttp ? 80 : 443;
if (!url.isValid() || (!legacyHttp && url.scheme() != QStringLiteral("https")) || !url.userInfo().isEmpty() ||
!url.path().startsWith('/') || (url.port() != -1 && url.port() != defaultPort) ||
(host != serviceHost && host != QStringLiteral("www.") + serviceHost)) {
return false;
}
// Both services accept HTTPS. Older public metadata may still identify the
// same deck with HTTP; retain its host/path/query while using HTTPS to open it.
if (legacyHttp) {
url.setScheme(QStringLiteral("https"));
url.setPort(-1);
}
return true;
}
#endif

View file

@ -1,5 +1,6 @@
#include "deck_stats_interface.h"
#include "deck_analysis_url.h"
#include "libcockatrice/card/card_info.h"
#include "libcockatrice/card/database/card_database_querier.h"
#include "libcockatrice/deck_list/tree/inner_deck_list_node.h"
@ -10,12 +11,14 @@
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QPointer>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
#include <QSharedPointer>
#include <QString>
#include <QTextDocumentFragment>
#include <QUrl>
#include <QUrlQuery>
#include <QWidget>
#include <functional>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/deck_list/deck_list.h>
@ -29,30 +32,56 @@ DeckStatsInterface::DeckStatsInterface(QObject *parent) : QObject(parent)
connect(manager, &QNetworkAccessManager::finished, this, &DeckStatsInterface::queryFinished);
}
void DeckStatsInterface::showError(const QString &message)
{
// The notice belongs to the originating editor, not this one-shot request.
// Retire the request before opening UI: opening a window may reenter Qt.
QWidget *owner = qobject_cast<QWidget *>(parent());
auto *notice = new QMessageBox(QMessageBox::Critical, tr("Deck analysis"), message, QMessageBox::Ok, owner);
notice->setTextFormat(Qt::PlainText);
notice->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
notice->setAttribute(Qt::WA_DeleteOnClose);
deleteLater();
notice->open();
}
void DeckStatsInterface::queryFinished(QNetworkReply *reply)
{
if (reply->error() != QNetworkReply::NoError) {
QMessageBox::critical(nullptr, tr("Error"), reply->errorString());
reply->deleteLater();
deleteLater();
if (replyHandled) {
return;
}
QString data(reply->readAll());
replyHandled = true;
// All terminal paths release the reply before showing UI or invoking an
// external URL handler, either of which may destroy the originating editor.
reply->deleteLater();
static const QRegularExpression rx("<meta property=\"og:url\" content=\"([^\"]+)\"");
auto match = rx.match(data);
if (!match.hasMatch()) {
QMessageBox::critical(nullptr, tr("Error"), tr("The reply from the server could not be parsed."));
deleteLater();
if (reply->error() != QNetworkReply::NoError) {
showError(reply->errorString());
return;
}
QString deckUrl = match.captured(1);
QDesktopServices::openUrl(deckUrl);
const QString data = QString::fromUtf8(reply->readAll());
static const QRegularExpression rx(
R"(<meta\b(?=[^>]*\bproperty\s*=\s*(['"])og:url\1)[^>]*\bcontent\s*=\s*(['"])(.*?)\2)",
QRegularExpression::CaseInsensitiveOption | QRegularExpression::DotMatchesEverythingOption);
const auto match = rx.match(data);
if (!match.hasMatch()) {
showError(tr("The reply from Deckstats did not contain a deck address."));
return;
}
const QString address = QTextDocumentFragment::fromHtml(match.captured(3)).toPlainText();
QUrl deckUrl = reply->url().resolved(QUrl(address, QUrl::StrictMode));
if (address.trimmed().isEmpty() || !normalizeAnalysisUrl(deckUrl, QStringLiteral("deckstats.net"))) {
showError(tr("The reply from Deckstats contained an invalid deck address."));
return;
}
QPointer<DeckStatsInterface> guard(this);
deleteLater();
if (!QDesktopServices::openUrl(deckUrl) && guard) {
showError(tr("Could not open your browser. Open this address to see the analyzed deck:\n%1")
.arg(deckUrl.toDisplayString()));
}
}
void DeckStatsInterface::getAnalyzeRequestData(const DeckList &deck, QByteArray &data)
@ -60,12 +89,8 @@ void DeckStatsInterface::getAnalyzeRequestData(const DeckList &deck, QByteArray
DeckList deckWithoutTokens;
copyDeckWithoutTokens(deck, deckWithoutTokens);
QUrl params;
QUrlQuery urlQuery;
urlQuery.addQueryItem("deck", deckWithoutTokens.writeToString_Plain());
urlQuery.addQueryItem("decktitle", deck.getName());
params.setQuery(urlQuery);
data.append(params.query(QUrl::EncodeReserved).toUtf8());
data.append("deck=" + QUrl::toPercentEncoding(deckWithoutTokens.writeToString_Plain()));
data.append("&decktitle=" + QUrl::toPercentEncoding(deck.getName()));
}
void DeckStatsInterface::analyzeDeck(const DeckList &deck)
@ -84,7 +109,9 @@ void DeckStatsInterface::copyDeckWithoutTokens(const DeckList &source, DeckList
{
auto copyIfNotAToken = [&destination](const auto node, const auto card) {
CardInfoPtr dbCard = CardDatabaseManager::query()->getCardInfo(card->getName());
if (dbCard && !dbCard->getIsToken() && node->getName() != DECK_ZONE_MAYBEBOARD) {
// Missing local card data is not evidence that a card is a token. Keep
// its original name and quantity so the service analyzes the whole deck.
if ((!dbCard || !dbCard->getIsToken()) && node->getName() != DECK_ZONE_MAYBEBOARD) {
DecklistCardNode *addedCard = destination.addCard(card->getName(), node->getName(), -1);
addedCard->setNumber(card->getNumber());
}

View file

@ -11,6 +11,7 @@
#include <qtmetamacros.h>
class QByteArray;
class QString;
class QNetworkAccessManager;
class QNetworkReply;
class DeckList;
@ -20,6 +21,8 @@ class DeckStatsInterface : public QObject
Q_OBJECT
private:
QNetworkAccessManager *manager;
bool replyHandled = false;
void showError(const QString &message);
/**
* Deckstats doesn't recognize token cards, and instead tries to find the

View file

@ -1,5 +1,6 @@
#include "tapped_out_interface.h"
#include "deck_analysis_url.h"
#include "libcockatrice/card/card_info.h"
#include "libcockatrice/card/database/card_database_querier.h"
#include "libcockatrice/deck_list/tree/inner_deck_list_node.h"
@ -13,15 +14,17 @@
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QPointer>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
#include <QRegularExpressionMatchIterator>
#include <QSharedPointer>
#include <QString>
#include <QStringList>
#include <QTextDocumentFragment>
#include <QUrl>
#include <QUrlQuery>
#include <QVariant>
#include <QWidget>
#include <functional>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/deck_list/deck_list.h>
@ -35,54 +38,67 @@ TappedOutInterface::TappedOutInterface(QObject *parent) : QObject(parent)
connect(manager, &QNetworkAccessManager::finished, this, &TappedOutInterface::queryFinished);
}
void TappedOutInterface::showError(const QString &message)
{
// The notice belongs to the originating editor, not this one-shot request.
// Retire the request before opening UI: opening a window may reenter Qt.
QWidget *owner = qobject_cast<QWidget *>(parent());
auto *notice = new QMessageBox(QMessageBox::Critical, tr("Deck analysis"), message, QMessageBox::Ok, owner);
notice->setTextFormat(Qt::PlainText);
notice->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
notice->setAttribute(Qt::WA_DeleteOnClose);
deleteLater();
notice->open();
}
void TappedOutInterface::queryFinished(QNetworkReply *reply)
{
if (replyHandled) {
return;
}
replyHandled = true;
// All terminal paths release the reply before showing UI or invoking an
// external URL handler, either of which may destroy the originating editor.
reply->deleteLater();
if (reply->error() != QNetworkReply::NoError) {
QMessageBox::critical(nullptr, tr("Error"), reply->errorString());
reply->deleteLater();
deleteLater();
showError(reply->errorString());
return;
}
int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (reply->hasRawHeader("Location")) {
/*
* If the reply contains a "Location" header, a relative URL to the deck on TappedOut
* can be extracted from the header. The http status is a 302 "redirect".
*/
QString deckUrl = reply->rawHeader("Location");
qCInfo(TappedOutInterfaceLog) << "Tappedout: good reply, http status" << httpStatus << "location" << deckUrl;
QDesktopServices::openUrl("https://tappedout.net" + deckUrl);
} else {
/*
* Otherwise, the deck has not been parsed correctly. Error messages can be extracted
* from the html. Css pseudo selector for errors: $("div.alert-danger > ul > li")
*/
QString data(reply->readAll());
QStringList errorMessageList = {tr("Unable to analyze the deck.")};
static const QRegularExpression rx("<div class=\"alert alert-danger.*?<ul>(.*?)</ul>");
auto match = rx.match(data);
if (match.hasMatch()) {
QString errors = match.captured(1);
static const QRegularExpression rx2("<li>(.*?)</li>");
static const QRegularExpression rxremove("<[^>]*>");
auto matchIterator = rx2.globalMatch(errors);
while (matchIterator.hasNext()) {
auto match2 = matchIterator.next();
errorMessageList.append(match2.captured(1).remove(rxremove).simplified());
}
const int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (httpStatus >= 200 && httpStatus < 400 && reply->hasRawHeader("Location")) {
const QByteArray location = reply->rawHeader("Location");
QUrl deckUrl = reply->url().resolved(QUrl::fromEncoded(location, QUrl::StrictMode));
if (location.trimmed().isEmpty() || !normalizeAnalysisUrl(deckUrl, QStringLiteral("tappedout.net"))) {
showError(tr("The reply from TappedOut contained an invalid deck address."));
return;
}
QString errorMessage = errorMessageList.join("\n");
qCWarning(TappedOutInterfaceLog) << "Tappedout: bad reply, http status" << httpStatus << "size" << data.size()
<< "message" << errorMessage;
QMessageBox::critical(nullptr, tr("Error"), errorMessage);
QPointer<TappedOutInterface> guard(this);
deleteLater();
if (!QDesktopServices::openUrl(deckUrl) && guard) {
showError(tr("Could not open your browser. Open this address to see the analyzed deck:\n%1")
.arg(deckUrl.toDisplayString()));
}
return;
}
reply->deleteLater();
deleteLater();
const QString data = QString::fromUtf8(reply->readAll());
QStringList errorMessageList = {tr("Unable to analyze the deck on TappedOut.")};
static const QRegularExpression errorsRx("<div class=\"alert alert-danger.*?<ul>(.*?)</ul>",
QRegularExpression::DotMatchesEverythingOption);
const auto match = errorsRx.match(data);
if (match.hasMatch()) {
static const QRegularExpression itemRx("<li>(.*?)</li>", QRegularExpression::DotMatchesEverythingOption);
auto items = itemRx.globalMatch(match.captured(1));
while (items.hasNext()) {
const QString error = QTextDocumentFragment::fromHtml(items.next().captured(1)).toPlainText().simplified();
if (!error.isEmpty()) {
errorMessageList.append(error);
}
}
}
qCWarning(TappedOutInterfaceLog) << "TappedOut analysis failed, HTTP status" << httpStatus;
showError(errorMessageList.join('\n'));
}
void TappedOutInterface::getAnalyzeRequestData(const DeckList &deck, QByteArray &data)
@ -90,13 +106,9 @@ void TappedOutInterface::getAnalyzeRequestData(const DeckList &deck, QByteArray
DeckList mainboard, sideboard;
copyDeckSplitMainAndSide(deck, mainboard, sideboard);
QUrl params;
QUrlQuery urlQuery;
urlQuery.addQueryItem("name", deck.getName());
urlQuery.addQueryItem("mainboard", mainboard.writeToString_Plain(false, true));
urlQuery.addQueryItem("sideboard", sideboard.writeToString_Plain(false, true));
params.setQuery(urlQuery);
data.append(params.query(QUrl::EncodeReserved).toUtf8());
data.append("name=" + QUrl::toPercentEncoding(deck.getName()));
data.append("&mainboard=" + QUrl::toPercentEncoding(mainboard.writeToString_Plain(false, true)));
data.append("&sideboard=" + QUrl::toPercentEncoding(sideboard.writeToString_Plain(false, true)));
}
void TappedOutInterface::analyzeDeck(const DeckList &deck)
@ -117,7 +129,9 @@ void TappedOutInterface::copyDeckSplitMainAndSide(const DeckList &source, DeckLi
{
auto copyMainOrSide = [&mainboard, &sideboard](const auto node, const auto card) {
CardInfoPtr dbCard = CardDatabaseManager::query()->getCardInfo(card->getName());
if (!dbCard || dbCard->getIsToken() || node->getName() == DECK_ZONE_MAYBEBOARD) {
// Exclude confirmed tokens, but preserve cards missing from the local
// database, including newly released cards in an imported deck.
if ((dbCard && dbCard->getIsToken()) || node->getName() == DECK_ZONE_MAYBEBOARD) {
return;
}

View file

@ -14,6 +14,7 @@
inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface");
class QByteArray;
class QString;
class QNetworkAccessManager;
class QNetworkReply;
class DeckList;
@ -29,6 +30,8 @@ class TappedOutInterface : public QObject
Q_OBJECT
private:
QNetworkAccessManager *manager;
bool replyHandled = false;
void showError(const QString &message);
void copyDeckSplitMainAndSide(const DeckList &source, DeckList &mainboard, DeckList &sideboard);
private slots:

View file

@ -2,253 +2,305 @@
#include "../../../../main.h"
#include "../../../settings/cache_settings.h"
#include "spoiler_file.h"
#include <QChar>
#include <QCryptographicHash>
#include <QDateTime>
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QFutureWatcher>
#include <QIODevice>
#include <QList>
#include <QLocale>
#include <QMessageLogger>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QSharedPointer>
#include <QSystemTrayIcon>
#include <QTimeZone>
#include <QTimer>
#include <QUrl>
#include <QtConcurrentRun>
#include <QtGlobal>
#include <functional>
#include <exception>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/network/network_manager.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <tuple>
#include <utility>
#include <version_string.h>
#define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"
#define SPOILERS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/spoiler.xml"
SpoilerBackgroundUpdater::SpoilerBackgroundUpdater(QObject *apParent) : QObject(apParent), cardUpdateProcess(nullptr)
namespace
{
isSpoilerDownloadEnabled = SettingsCache::instance().downloads().getDownloadSpoilersStatus();
if (isSpoilerDownloadEnabled) {
// Start the process of checking if we're in spoiler season
// File exists means we're in spoiler season
startSpoilerDownloadProcess(SPOILERS_STATUS_URL, false);
const QUrl SPOILERS_STATUS_URL(
QStringLiteral("https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"));
const QUrl SPOILERS_URL(QStringLiteral("https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/spoiler.xml"));
// Request coordination stays on the GUI thread; reload workers never access it.
QPointer<SpoilerBackgroundUpdater> currentUpdater;
QPointer<QFutureWatcher<bool>> activeReload;
quint64 newestOperation = 0;
bool removeSpoilerFile(const QString &path)
{
QFile file(path);
if (!file.exists()) {
return false;
}
if (!file.remove()) {
qCWarning(SpoilerBackgroundUpdaterLog) << "Could not remove spoiler database" << path << file.errorString();
return false;
}
return true;
}
} // namespace
SpoilerBackgroundUpdater::SpoilerBackgroundUpdater(QObject *parent, bool forceReload)
: QObject(parent), enabledAtStart(SettingsCache::instance().downloads().getDownloadSpoilersStatus()),
forceReload(forceReload), targetPath(SettingsCache::instance().paths().getSpoilerCardDatabasePath()),
operationId(++newestOperation), manager(NetworkManagerFactory::create(this)), notificationIcon(trayIcon)
{
connect(&SettingsCache::instance().downloads(), &DownloadSettings::downloadSpoilerStatusChanged, this,
&SpoilerBackgroundUpdater::cancelIfSettingsChanged);
connect(&SettingsCache::instance().paths(), &PathsSettings::cardDatabasePathChanged, this,
&SpoilerBackgroundUpdater::cancelIfSettingsChanged);
// Even a disabled/no-op operation completes after its caller can connect signals.
QTimer::singleShot(0, this, &SpoilerBackgroundUpdater::begin);
}
void SpoilerBackgroundUpdater::begin()
{
if (completed) {
return;
}
if (cancelled || operationId != newestOperation ||
(reloadOnly ? SettingsCache::instance().downloads().getDownloadSpoilersStatus()
: (!enabledAtStart || !SettingsCache::instance().downloads().getDownloadSpoilersStatus())) ||
targetPath != SettingsCache::instance().paths().getSpoilerCardDatabasePath()) {
finish();
return;
}
const auto previous = currentUpdater;
if (activeReload) {
// The existing database API stores its final load status after its parser
// mutex is released. Do not overlap updater-owned calls to that API.
connect(activeReload, &QFutureWatcher<bool>::finished, this, &SpoilerBackgroundUpdater::begin,
static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::SingleShotConnection));
if (previous && previous != this) {
previous->cancel();
}
return;
}
currentUpdater = this;
QPointer<SpoilerBackgroundUpdater> guard(this);
if (previous && previous != this) {
previous->cancel();
}
if (!guard) {
return;
}
if (!isCurrent()) {
finish();
} else if (reloadOnly) {
if (QFileInfo::exists(targetPath) && !removeSpoilerFile(targetPath)) {
finish(tr("The spoiler database could not be removed. Check its file permissions and use Reload Card "
"Database to retry."));
return;
}
reloadDatabase(false);
} else {
qCInfo(SpoilerBackgroundUpdaterLog) << "Spoilers Disabled";
downloadFromURL(SPOILERS_STATUS_URL, false);
}
}
void SpoilerBackgroundUpdater::startSpoilerDownloadProcess(QString url, bool saveResults)
bool SpoilerBackgroundUpdater::isCurrent() const
{
auto spoilerURL = QUrl(url);
downloadFromURL(spoilerURL, saveResults);
return !completed && !cancelled && currentUpdater == this && operationId == newestOperation &&
(reloadOnly != SettingsCache::instance().downloads().getDownloadSpoilersStatus()) &&
targetPath == SettingsCache::instance().paths().getSpoilerCardDatabasePath();
}
void SpoilerBackgroundUpdater::downloadFromURL(QUrl url, bool saveResults)
void SpoilerBackgroundUpdater::cancelIfSettingsChanged()
{
auto *nam = NetworkManagerFactory::create(this);
auto request = QNetworkRequest(url);
request.setHeader(QNetworkRequest::UserAgentHeader, QString("Cockatrice %1").arg(VERSION_STRING));
QNetworkReply *reply = nam->get(request);
if (reloadOnly == SettingsCache::instance().downloads().getDownloadSpoilersStatus() ||
targetPath != SettingsCache::instance().paths().getSpoilerCardDatabasePath()) {
cancel();
}
}
void SpoilerBackgroundUpdater::cancel()
{
if (completed) {
return;
}
cancelled = true;
const auto reply = activeReply;
activeReply.clear();
QPointer<SpoilerBackgroundUpdater> guard(this);
if (reply) {
reply->abort();
if (reply) {
reply->deleteLater();
}
}
// A running reload owns no updater state. Allow its completion to retire its
// watcher before a heap-owned updater is released by the caller.
if (guard && !reloading) {
finish();
}
}
void SpoilerBackgroundUpdater::downloadFromURL(const QUrl &url, bool saveResults)
{
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::UserAgentHeader, QString("Cockatrice %1").arg(VERSION_STRING));
request.setTransferTimeout(60000);
activeReply = manager->get(request);
if (saveResults) {
// This will write out to the file (used for spoiler.xml)
connect(reply, &QNetworkReply::finished, this, &SpoilerBackgroundUpdater::actDownloadFinishedSpoilersFile);
connect(activeReply, &QNetworkReply::finished, this,
&SpoilerBackgroundUpdater::actDownloadFinishedSpoilersFile);
} else {
// This will check the status (used to see if we're in spoiler season or not)
connect(reply, &QNetworkReply::finished, this, &SpoilerBackgroundUpdater::actCheckIfSpoilerSeasonEnabled);
connect(activeReply, &QNetworkReply::finished, this, &SpoilerBackgroundUpdater::actCheckIfSpoilerSeasonEnabled);
}
}
void SpoilerBackgroundUpdater::actCheckIfSpoilerSeasonEnabled()
{
auto *reply = qobject_cast<QNetworkReply *>(sender());
if (!reply || reply != activeReply) {
return;
}
activeReply.clear();
reply->deleteLater();
if (!isCurrent()) {
finish();
return;
}
if (reply->error() == QNetworkReply::NoError) {
downloadFromURL(SPOILERS_URL, true);
} else if (reply->error() == QNetworkReply::ContentNotFoundError) {
const bool existed = QFileInfo::exists(targetPath);
seasonEnded = existed;
if (existed && !removeSpoilerFile(targetPath)) {
finish(tr("The spoiler season has ended, but the old spoiler database could not be removed."));
return;
}
if (existed || forceReload) {
reloadDatabase(false);
} else {
finish();
}
} else {
finish(tr("Could not check spoiler availability: %1").arg(reply->errorString()));
}
}
void SpoilerBackgroundUpdater::actDownloadFinishedSpoilersFile()
{
// Check for server reply
auto *reply = dynamic_cast<QNetworkReply *>(sender());
QNetworkReply::NetworkError errorCode = reply->error();
if (errorCode == QNetworkReply::NoError) {
spoilerData = reply->readAll();
// Save the spoiler.xml file to the disk
saveDownloadedFile(spoilerData);
reply->deleteLater();
emit spoilerCheckerDone();
auto *reply = qobject_cast<QNetworkReply *>(sender());
if (!reply || reply != activeReply) {
return;
}
activeReply.clear();
reply->deleteLater();
if (!isCurrent()) {
finish();
return;
}
if (reply->error() != QNetworkReply::NoError) {
finish(tr("Could not download spoilers: %1").arg(reply->errorString()));
return;
}
spoilerData = reply->readAll();
QString error;
const auto result = SpoilerFile::save(targetPath, spoilerData, [this] { return isCurrent(); }, error);
if (result == SpoilerFile::SaveResult::Failed) {
finish(isCurrent() ? error : QString());
} else if (result == SpoilerFile::SaveResult::Written || forceReload) {
reloadDatabase(result == SpoilerFile::SaveResult::Written);
} else {
qCWarning(SpoilerBackgroundUpdaterLog) << "Error downloading spoilers file" << errorCode;
emit spoilerCheckerDone();
finish();
}
}
bool SpoilerBackgroundUpdater::deleteSpoilerFile()
void SpoilerBackgroundUpdater::reloadDatabase(bool updated)
{
QString fileName = SettingsCache::instance().paths().getSpoilerCardDatabasePath();
QFileInfo fi(fileName);
QDir fileDir(fi.path());
QFile file(fileName);
// Delete the spoiler.xml file
if (file.exists() && file.remove()) {
qCInfo(SpoilerBackgroundUpdaterLog) << "Deleting spoiler.xml";
return true;
}
qCInfo(SpoilerBackgroundUpdaterLog) << "Error: Spoiler.xml not found or not deleted";
return false;
}
void SpoilerBackgroundUpdater::actCheckIfSpoilerSeasonEnabled()
{
auto *response = dynamic_cast<QNetworkReply *>(sender());
QNetworkReply::NetworkError errorCode = response->error();
if (errorCode == QNetworkReply::ContentNotFoundError) {
// Spoiler season is offline at this point, so the spoiler.xml file can be safely deleted
// The user should run Oracle to get the latest card information
if (deleteSpoilerFile() && trayIcon) {
trayIcon->showMessage(tr("Spoilers season has ended"), tr("Deleting spoiler.xml. Please run Oracle"));
reloading = true;
auto *database = CardDatabaseManager::getInstance();
// The job outlives an individual request, so destroying that request cannot
// let a newer updater overlap the worker that is still completing.
auto *watcher = new QFutureWatcher<bool>(QCoreApplication::instance());
activeReload = watcher;
connect(watcher, &QFutureWatcher<bool>::finished, watcher, [watcher] {
if (activeReload == watcher) {
activeReload.clear();
}
qCInfo(SpoilerBackgroundUpdaterLog) << "Spoiler Season Offline";
emit spoilerCheckerDone();
} else if (errorCode == QNetworkReply::NoError) {
qCInfo(SpoilerBackgroundUpdaterLog) << "Spoiler Service Online";
startSpoilerDownloadProcess(SPOILERS_URL, true);
} else if (errorCode == QNetworkReply::HostNotFoundError) {
if (trayIcon) {
trayIcon->showMessage(tr("Spoilers download failed"), tr("No internet connection"));
}
qCWarning(SpoilerBackgroundUpdaterLog) << "Spoiler download failed due to no internet connection";
emit spoilerCheckerDone();
} else {
if (trayIcon) {
trayIcon->showMessage(tr("Spoilers download failed"), tr("Error") + " " + (short)errorCode);
}
qCWarning(SpoilerBackgroundUpdaterLog) << "Spoiler download failed with reason" << errorCode;
emit spoilerCheckerDone();
}
}
bool SpoilerBackgroundUpdater::saveDownloadedFile(QByteArray data)
{
QString fileName = SettingsCache::instance().paths().getSpoilerCardDatabasePath();
QFileInfo fi(fileName);
QDir fileDir(fi.path());
if (!fileDir.exists() && !fileDir.mkpath(fileDir.absolutePath())) {
return false;
}
// Check if the data matches. If it does, then spoilers are up to date.
if (getHash(fileName) == getHash(data)) {
if (trayIcon) {
trayIcon->showMessage(tr("Spoilers already up to date"), tr("No new spoilers added"));
}
qCInfo(SpoilerBackgroundUpdaterLog) << "Spoilers Up to Date";
return false;
}
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
qCWarning(SpoilerBackgroundUpdaterLog) << "Spoiler Service Error: File open (w) failed for" << fileName;
file.close();
return false;
}
if (file.write(data) == -1) {
qCWarning(SpoilerBackgroundUpdaterLog) << "Spoiler Service Error: File write (w) failed for" << fileName;
file.close();
return false;
}
file.close();
// Data written, so reload the card database
qCInfo(SpoilerBackgroundUpdaterLog) << "Spoiler Service Data Written";
// Spoilers can introduce sets the config has never seen; the loader never
// runs checkUnknownSets() itself, so run it once the finished snapshot has
// been swapped in.
auto *watcher = new QFutureWatcher<void>(this);
connect(watcher, &QFutureWatcher<void>::finished, this, [watcher] {
watcher->deleteLater();
CardDatabaseManager::getInstance()->checkUnknownSets();
});
watcher->setFuture(QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); }));
// If the user has notifications enabled, let them know
// when the database was last updated
if (trayIcon) {
QList<QByteArray> lines = data.split('\n');
for (const QByteArray &line : lines) {
if (line.contains("Created At:")) {
QString timeStamp = QString(line).replace("Created At:", "").trimmed();
timeStamp.chop(6); // Remove " (UTC)"
auto utcTime = QLocale().toDateTime(timeStamp, "ddd, MMM dd yyyy, hh:mm:ss");
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
utcTime.setTimeZone(QTimeZone::UTC);
#else
utcTime.setTimeSpec(Qt::UTC);
#endif
QString localTime = utcTime.toLocalTime().toString("MMM d, hh:mm");
trayIcon->showMessage(tr("Spoilers have been updated!"), tr("Last change:") + " " + localTime);
emit spoilersUpdatedSuccessfully();
return true;
}
connect(watcher, &QFutureWatcher<bool>::finished, this, [this, watcher, database, updated] {
bool loaded = false;
try {
loaded = watcher->result() && database->getLoadStatus() == Ok;
} catch (const std::exception &error) {
qCWarning(SpoilerBackgroundUpdaterLog) << "Spoiler database reload failed:" << error.what();
}
}
return true;
reloading = false;
if (!isCurrent()) {
finish();
} else if (!loaded) {
finish(reloadOnly
? tr("Could not reload card data after disabling spoilers. Use Reload Card Database to retry.")
: tr("Could not reload card data after updating spoilers. Use Update Spoilers to retry the "
"reload."));
} else {
finish({}, updated);
}
});
watcher->setFuture(QtConcurrent::run([database] {
database->reloadCardDatabasesAndNotify();
return true;
}));
}
QByteArray SpoilerBackgroundUpdater::getHash(const QString fileName)
void SpoilerBackgroundUpdater::finish(const QString &error, bool updated)
{
QFile file(fileName);
if (file.open(QFile::ReadOnly)) {
// Only read the first 512 bytes (enough to get the "created" tag)
const QByteArray bytes = file.read(512);
QCryptographicHash hash(QCryptographicHash::Algorithm::Md5);
hash.addData(bytes);
qCInfo(SpoilerBackgroundUpdaterLog) << "File Hash =" << hash.result();
file.close();
return hash.result();
} else {
qCWarning(SpoilerBackgroundUpdaterLog) << "getHash ReadOnly failed!";
file.close();
return QByteArray();
if (completed) {
return;
}
completed = true;
spoilerData = QByteArray();
if (currentUpdater == this) {
currentUpdater.clear();
}
QPointer<SpoilerBackgroundUpdater> guard(this);
if (!error.isEmpty() && !cancelled) {
qCWarning(SpoilerBackgroundUpdaterLog) << error;
if (notificationIcon) {
notificationIcon->showMessage(tr("Spoiler update failed"), error);
}
if (!guard) {
return;
}
emit spoilerUpdateFailed(error);
} else if (updated && !cancelled) {
if (notificationIcon) {
notificationIcon->showMessage(tr("Spoilers have been updated!"),
tr("The card database now includes the downloaded spoilers."));
}
} else if (seasonEnded && !cancelled && notificationIcon) {
notificationIcon->showMessage(tr("Spoiler season has ended"),
tr("The spoiler database was removed. Please run Oracle to get released cards."));
}
if (guard) {
emit spoilerCheckerDone();
}
}
QByteArray SpoilerBackgroundUpdater::getHash(QByteArray data)
SpoilerBackgroundUpdater *SpoilerBackgroundUpdater::current()
{
// Only read the first 512 bytes (enough to get the "created" tag)
const QByteArray bytes = data.left(512);
QCryptographicHash hash(QCryptographicHash::Algorithm::Md5);
hash.addData(bytes);
qCInfo(SpoilerBackgroundUpdaterLog) << "Data Hash =" << hash.result();
return hash.result();
return currentUpdater;
}
SpoilerBackgroundUpdater *SpoilerBackgroundUpdater::deleteSpoilerFile()
{
// Deletion and the following reload share the operation lifetime. Callers can
// observe either failure before the queued operation starts, and an explicit
// retry still reloads when the file has already been removed.
auto *updater = new SpoilerBackgroundUpdater(QCoreApplication::instance(), true);
updater->reloadOnly = true;
connect(updater, &SpoilerBackgroundUpdater::spoilerCheckerDone, updater, &QObject::deleteLater);
return updater;
}

View file

@ -2,7 +2,6 @@
* @file spoiler_background_updater.h
* @ingroup Client
*/
//! \todo Document this file.
#ifndef COCKATRICE_SPOILER_DOWNLOADER_H
#define COCKATRICE_SPOILER_DOWNLOADER_H
@ -10,10 +9,13 @@
#include <QByteArray>
#include <QLoggingCategory>
#include <QObject>
#include <QPointer>
#include <QString>
#include <qtmetamacros.h>
class QProcess;
class QNetworkAccessManager;
class QNetworkReply;
class QSystemTrayIcon;
class QUrl;
inline Q_LOGGING_CATEGORY(SpoilerBackgroundUpdaterLog, "spoiler_background_updater");
@ -22,30 +24,48 @@ class SpoilerBackgroundUpdater : public QObject
{
Q_OBJECT
public:
explicit SpoilerBackgroundUpdater(QObject *apParent = nullptr);
explicit SpoilerBackgroundUpdater(QObject *parent = nullptr, bool forceReload = false);
inline QString getCardUpdaterBinaryName()
{
return "oracle";
}
QByteArray getHash(const QString fileName);
QByteArray getHash(QByteArray data);
static bool deleteSpoilerFile();
// Queues removal and reload; the application owns the returned updater and
// deletes it on completion. Callers can connect its failure/completion signals.
static SpoilerBackgroundUpdater *deleteSpoilerFile();
// The operation currently running, if any. The updater outlives the page that
// started it, so a reopened page uses this to observe the in-flight update.
static SpoilerBackgroundUpdater *current();
private slots:
void begin();
void actDownloadFinishedSpoilersFile();
void actCheckIfSpoilerSeasonEnabled();
void cancelIfSettingsChanged();
private:
bool isSpoilerDownloadEnabled;
QProcess *cardUpdateProcess;
const bool enabledAtStart;
const bool forceReload;
const QString targetPath;
const quint64 operationId;
QNetworkAccessManager *manager;
QPointer<QNetworkReply> activeReply;
QPointer<QSystemTrayIcon> notificationIcon;
QByteArray spoilerData;
void startSpoilerDownloadProcess(QString url, bool saveResults);
void downloadFromURL(QUrl url, bool saveResults);
bool saveDownloadedFile(QByteArray data);
bool completed = false;
bool cancelled = false;
bool reloading = false;
bool seasonEnded = false;
bool reloadOnly = false;
bool isCurrent() const;
void cancel();
void finish(const QString &error = {}, bool updated = false);
void downloadFromURL(const QUrl &url, bool saveResults);
void reloadDatabase(bool updated);
signals:
void spoilersUpdatedSuccessfully();
void spoilerCheckerDone();
void spoilerUpdateFailed(const QString &message);
};
#endif // COCKATRICE_SPOILER_DOWNLOADER_H
#endif // COCKATRICE_SPOILER_DOWNLOADER_H

View file

@ -0,0 +1,109 @@
#include "spoiler_file.h"
#include <QCoreApplication>
#include <QCryptographicHash>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QSaveFile>
#include <QXmlStreamReader>
namespace
{
QByteArray hashFile(const QString &path)
{
QFile file(path);
if (!file.open(QIODevice::ReadOnly)) {
return {};
}
QCryptographicHash hash(QCryptographicHash::Sha256);
return hash.addData(&file) ? hash.result() : QByteArray();
}
} // namespace
namespace SpoilerFile
{
QString validate(const QByteArray &data)
{
QXmlStreamReader xml(data);
if (!xml.readNextStartElement() || xml.name() != QStringLiteral("cockatrice_carddatabase")) {
return QCoreApplication::translate(
"SpoilerBackgroundUpdater",
"The download is not a Cockatrice card database. The previous spoiler file was preserved.");
}
bool versionOk = false;
const int version = xml.attributes().value(QStringLiteral("version")).toInt(&versionOk);
if (!versionOk || (version != 3 && version != 4)) {
return QCoreApplication::translate(
"SpoilerBackgroundUpdater",
"The spoiler database uses an unsupported format. The previous spoiler file was preserved.");
}
bool hasCards = false;
int depth = 1;
while (!xml.atEnd()) {
const auto token = xml.readNext();
if (token == QXmlStreamReader::StartElement) {
++depth;
if (depth == 2 && xml.name() == QStringLiteral("cards")) {
hasCards = true;
}
} else if (token == QXmlStreamReader::EndElement) {
--depth;
}
}
if (xml.hasError() || !hasCards) {
return QCoreApplication::translate(
"SpoilerBackgroundUpdater",
"The spoiler database is incomplete or invalid. The previous spoiler file was preserved.");
}
return {};
}
SaveResult
save(const QString &targetPath, const QByteArray &data, const std::function<bool()> &isCurrent, QString &error)
{
error = validate(data);
if (!error.isEmpty()) {
return SaveResult::Failed;
}
if (!isCurrent()) {
error = QCoreApplication::translate("SpoilerBackgroundUpdater",
"The spoiler update was cancelled because its settings changed.");
return SaveResult::Failed;
}
if (hashFile(targetPath) == QCryptographicHash::hash(data, QCryptographicHash::Sha256)) {
return SaveResult::Unchanged;
}
const QDir directory = QFileInfo(targetPath).dir();
if (!directory.exists() && !directory.mkpath(QStringLiteral("."))) {
error = QCoreApplication::translate("SpoilerBackgroundUpdater",
"Could not create the spoiler database directory: %1")
.arg(directory.absolutePath());
return SaveResult::Failed;
}
QSaveFile file(targetPath);
file.setDirectWriteFallback(false);
if (!file.open(QIODevice::WriteOnly) || file.write(data) != data.size() || !file.flush()) {
error = QCoreApplication::translate(
"SpoilerBackgroundUpdater",
"Could not save the spoiler database to %1: %2. The previous file was preserved.")
.arg(targetPath, file.errorString());
return SaveResult::Failed;
}
if (!isCurrent()) {
file.cancelWriting();
error = QCoreApplication::translate("SpoilerBackgroundUpdater",
"The spoiler update was cancelled because its settings changed.");
return SaveResult::Failed;
}
if (!file.commit()) {
error = QCoreApplication::translate(
"SpoilerBackgroundUpdater",
"Could not replace the spoiler database at %1: %2. The previous file was preserved.")
.arg(targetPath, file.errorString());
return SaveResult::Failed;
}
return SaveResult::Written;
}
} // namespace SpoilerFile

View file

@ -0,0 +1,24 @@
#ifndef COCKATRICE_SPOILER_FILE_H
#define COCKATRICE_SPOILER_FILE_H
#include <QByteArray>
#include <QString>
#include <functional>
namespace SpoilerFile
{
enum class SaveResult
{
Failed,
Unchanged,
Written
};
QString validate(const QByteArray &data);
// Validate before opening the destination, compare complete files, and replace
// atomically. Check operation ownership both before writing and before committing.
SaveResult
save(const QString &targetPath, const QByteArray &data, const std::function<bool()> &isCurrent, QString &error);
} // namespace SpoilerFile
#endif // COCKATRICE_SPOILER_FILE_H

View file

@ -6,6 +6,7 @@
#include "shortcuts_settings.h"
#include <QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFile>
@ -47,7 +48,32 @@ Q_GLOBAL_STATIC(SettingsCache, settingsCache)
SettingsCache &SettingsCache::instance()
{
return *settingsCache; // returns a QT managed singleton reference
SettingsCache &cache = *settingsCache; // returns a QT managed singleton reference
// The release channels own QNetworkAccessManagers, which must be destroyed
// while the application object is alive. ~SettingsCache() runs during
// static teardown, after QApplication is gone, so hook the application's
// shutdown instead. Retried here because the first access may predate the
// application object.
cache.installShutdownHook();
return cache;
}
void SettingsCache::installShutdownHook()
{
if (shutdownHookInstalled) {
return;
}
QCoreApplication *application = QCoreApplication::instance();
if (application == nullptr) {
return;
}
connect(application, &QCoreApplication::aboutToQuit, this, [this] {
for (ReleaseChannel *releaseChannel : std::as_const(releaseChannels)) {
delete releaseChannel;
}
releaseChannels.clear();
});
shutdownHookInstalled = true;
}
QString SettingsCache::getDataPath()

View file

@ -90,8 +90,13 @@ private:
QString themeName;
QList<ReleaseChannel *> releaseChannels;
bool shutdownHookInstalled = false;
bool isPortableBuild;
// Connects the aboutToQuit handler that deletes the release channels while
// the application object is still alive; a no-op before it exists.
void installShutdownHook();
[[nodiscard]] QString getSafeConfigPath(QString configEntry, QString defaultPath) const;
[[nodiscard]] QString getSafeConfigFilePath(QString configEntry, QString defaultPath) const;
void loadPaths();

View file

@ -1,5 +1,6 @@
#include "shortcut_treeview.h"
#include "../../interface/theme_manager.h"
#include "cache_settings.h"
#include "shortcuts_settings.h"
@ -78,6 +79,18 @@ ShortcutTreeView::ShortcutTreeView(QWidget *parent) : QTreeView(parent)
connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this,
&ShortcutTreeView::refreshShortcuts);
// Group headers store their font on the item; re-apply the role family on
// font changes (setFont emits itemChanged, which repaints the rows).
connect(themeManager, &ThemeManager::fontsChanged, this, [this] {
QFont groupFont = themeManager->appFont(AppFont::InterfaceDefault);
groupFont.setBold(true);
for (int row = 0; row < shortcutsModel->rowCount(); ++row) {
if (auto *groupItem = shortcutsModel->item(row)) {
groupItem->setFont(groupFont);
}
}
});
}
void ShortcutTreeView::populateShortcutsModel()
@ -93,7 +106,8 @@ void ShortcutTreeView::populateShortcutsModel()
curParent = parentItems.value(group);
} else {
curParent = new QStandardItem(group);
static QFont font = curParent->font();
// Family comes from the InterfaceDefault theme role; bold stays caller-side.
QFont font = themeManager->appFont(AppFont::InterfaceDefault);
font.setBold(true);
curParent->setFont(font);
parentItems.insert(group, curParent);

View file

@ -1,6 +1,6 @@
#include "filter_builder.h"
#include "../interface/pixel_map_generator.h"
#include "../interface/theme_icon.h"
#include "../interface/widgets/utility/custom_line_edit.h"
#include <QComboBox>
@ -30,7 +30,7 @@ FilterBuilder::FilterBuilder(QWidget *parent) : QWidget(parent)
typeCombo->addItem(CardFilter::typeName(static_cast<CardFilter::Type>(i)), QVariant(i));
}
QPushButton *ok = new QPushButton(themePixmap(QStringLiteral("icons/increment")), QString());
QPushButton *ok = new QPushButton(loadThemedIcon(QStringLiteral("icons/increment")), QString());
ok->setObjectName("ok");
ok->setMaximumSize(20, 20);

View file

@ -1,5 +1,7 @@
#include "filter_tree_model.h"
#include "../interface/theme_manager.h"
#include <QFlags>
#include <QFont>
#include <QString>
@ -39,6 +41,12 @@ FilterTreeModel::FilterTreeModel(QObject *parent) : QAbstractItemModel(parent)
connect(fTree, &FilterTree::postInsertRow, this, &FilterTreeModel::proxyEndInsertRow);
connect(fTree, &FilterTree::preRemoveRow, this, &FilterTreeModel::proxyBeginRemoveRow);
connect(fTree, &FilterTree::postRemoveRow, this, &FilterTreeModel::proxyEndRemoveRow);
// FontRole data reads the DeckList role live; rebroadcast so attached
// views re-query instead of waiting for an incidental repaint.
connect(themeManager, &ThemeManager::fontsChanged, this, [this] {
emit layoutAboutToBeChanged();
emit layoutChanged();
});
}
FilterTreeModel::~FilterTreeModel()
@ -202,7 +210,8 @@ QVariant FilterTreeModel::data(const QModelIndex &index, int role) const
switch (role) {
case Qt::FontRole:
if (!node->isLeaf()) {
QFont f;
// Family comes from the DeckList theme role; bold stays caller-side.
QFont f = themeManager->appFont(AppFont::DeckList);
f.setBold(true);
return f;
}

View file

@ -3,6 +3,7 @@
#include "../../client/settings/cache_settings.h"
#include "../../interface/card_localization.h"
#include "../../interface/card_picture_loader/card_picture_loader.h"
#include "../../interface/theme_manager.h"
#include "../card_dimensions.h"
#include "../game_scene.h"
#include "../z_values.h"
@ -154,7 +155,7 @@ void AbstractCardItem::transformPainter(QPainter *painter, const QSizeF &transla
painter->rotate(angle);
painter->translate(-translatedSize.width() / 2, -translatedSize.height() / 2);
QFont f;
QFont f = themeManager->appFont(AppFont::CardText);
f.setPixelSize(fontSize * scale);
painter->setFont(f);

View file

@ -1,5 +1,7 @@
#include "abstract_graphics_item.h"
#include "../../interface/theme_manager.h"
#include <QBrush>
#include <QFont>
#include <QFontMetrics>
@ -20,7 +22,7 @@ void AbstractGraphicsItem::paintNumberEllipse(int number,
painter->save();
QString numStr = QString::number(number);
QFont font("Serif");
QFont font = themeManager->cardTextFont();
font.setPixelSize(fontSize);
font.setWeight(QFont::Bold);

View file

@ -1,6 +1,7 @@
#include "counter_general.h"
#include "../../interface/pixel_map_generator.h"
#include "../../interface/theme_manager.h"
#include "abstract_graphics_item.h"
#include <QFont>
@ -41,7 +42,7 @@ void GeneralCounter::paint(QPainter *painter, const QStyleOptionGraphicsItem * /
painter->drawPixmap(QPoint(0, 0), pixmap);
if (value) {
QFont f("Serif");
QFont f = themeManager->cardTextFont();
f.setPixelSize(qMax((int)(radius * scaleFactor), 10));
f.setWeight(QFont::Bold);
painter->setPen(Qt::black);

View file

@ -240,8 +240,8 @@ void DeckViewCardContainer::paint(QPainter *painter, const QStyleOptionGraphicsI
painter->drawLine(QPointF(0, separatorY), QPointF(width, separatorY));
painter->setPen(QColor(Qt::white));
QFont f("Serif");
f.setStyleHint(QFont::Serif);
// Family comes from the DeckList theme role; pixel sizes/weights unchanged.
QFont f = themeManager->deckListFont();
f.setPixelSize(24);
f.setWeight(QFont::Bold);
painter->setFont(f);
@ -292,8 +292,8 @@ QList<QPair<int, int>> DeckViewCardContainer::getRowsAndCols() const
int DeckViewCardContainer::getCardTypeTextWidth() const
{
QFont f("Serif");
f.setStyleHint(QFont::Serif);
// Family comes from the DeckList theme role; pixel size/weight unchanged.
QFont f = themeManager->deckListFont();
f.setPixelSize(16);
f.setWeight(QFont::Bold);
QFontMetrics fm(f);
@ -366,6 +366,15 @@ void DeckViewCardContainer::setWidth(qreal _width)
DeckViewScene::DeckViewScene(QObject *parent) : QGraphicsScene(parent), locked(true), deck(0), optimalAspectRatio(1.0)
{
// Zone headers read the DeckList role at paint time and cache their
// rendering, so touch every item to invalidate the caches and pick up the
// new family on font changes (containers cannot connect this themselves:
// QGraphicsItem is not a QObject).
connect(themeManager, &ThemeManager::fontsChanged, this, [this] {
for (auto *item : items()) {
item->update();
}
});
}
DeckViewScene::~DeckViewScene()

View file

@ -71,6 +71,8 @@ void ToggleButton::setState(bool _state)
DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
: QWidget(nullptr), visualDeckStorageWidget(nullptr), parentGame(parent), playerId(_playerId)
{
setObjectName("deckViewContainer");
loadLocalButton = new QPushButton;
loadRemoteButton = new QPushButton;
loadFromClipboardButton = new QPushButton;
@ -80,6 +82,14 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
forceStartGameButton = new QPushButton;
sideboardLockButton = new ToggleButton;
loadLocalButton->setObjectName("loadLocalButton");
loadRemoteButton->setObjectName("loadRemoteButton");
loadFromClipboardButton->setObjectName("loadFromClipboardButton");
readyStartButton->setObjectName("readyStartButton");
forceStartGameButton->setObjectName("forceStartGameButton");
unloadDeckButton->setObjectName("unloadDeckButton");
sideboardLockButton->setObjectName("sideboardLockButton");
connect(loadLocalButton, &QPushButton::clicked, this, &DeckViewContainer::loadLocalDeck);
connect(loadRemoteButton, &QPushButton::clicked, this, &DeckViewContainer::loadRemoteDeck);
connect(loadFromClipboardButton, &QPushButton::clicked, this, &DeckViewContainer::loadFromClipboard);

View file

@ -14,6 +14,7 @@ class TabGame;
TabbedDeckViewContainer::TabbedDeckViewContainer(int _playerId, TabGame *parent)
: QTabWidget(nullptr), playerId(_playerId), parentGame(parent)
{
setObjectName(QString("tabbedDeckView_%1").arg(_playerId));
setTabsClosable(true);
connect(this, &QTabWidget::tabCloseRequested, this, &TabbedDeckViewContainer::closeTab);

View file

@ -1,6 +1,7 @@
#include "game_scene.h"
#include "../client/settings/cache_settings.h"
#include "../interface/theme_manager.h"
#include "animated_item.h"
#include "board/abstract_card_item.h"
#include "board/arrow_item.h"
@ -35,6 +36,7 @@
#include <functional>
#include <libcockatrice/game/abstract_game.h>
#include <libcockatrice/game/board/arrow_data.h>
#include <libcockatrice/game/game_state.h>
#include <libcockatrice/game/player/player_actions.h>
#include <libcockatrice/game/player/player_event_handler.h>
#include <libcockatrice/game/player/player_info.h>
@ -64,6 +66,14 @@ GameScene::GameScene(PhasesToolbar *_phasesToolbar, QObject *parent)
addItem(phasesToolbar);
connect(&SettingsCache::instance().userInterface(), &InterfaceSettings::minPlayersForMultiColumnLayoutChanged, this,
&GameScene::rearrange);
// CardText items (P/T boxes, counters, player names) read the role at
// paint time and cache their rendering, so touch every item to invalidate
// the caches and pick up the new family on font changes.
connect(themeManager, &ThemeManager::fontsChanged, this, [this] {
for (auto *item : items()) {
item->update();
}
});
rearrange();
}
@ -432,6 +442,37 @@ QList<PlayerLogic *> GameScene::collectActivePlayers(int &firstPlayerIndex) cons
}
}
}
// Lay out the table in seat order rather than id order. Players missing
// from the tracked order keep id order at the end.
QList<int> seatOrder;
for (auto *pgItem : playerViews.values()) {
if (PlayerLogic *p = pgItem->getLogic()) {
seatOrder = p->getGame()->getGameState()->getSeatOrder();
break;
}
}
if (!seatOrder.isEmpty()) {
std::sort(activePlayers.begin(), activePlayers.end(), [&](PlayerLogic *a, PlayerLogic *b) {
int indexA = seatOrder.indexOf(a->getPlayerInfo()->getId());
int indexB = seatOrder.indexOf(b->getPlayerInfo()->getId());
if (indexA == -1) {
indexA = seatOrder.size() + a->getPlayerInfo()->getId();
}
if (indexB == -1) {
indexB = seatOrder.size() + b->getPlayerInfo()->getId();
}
return indexA < indexB;
});
// Recompute the local-player index after sorting.
firstPlayerIndex = 0;
for (int i = 0; i < activePlayers.size(); ++i) {
if (activePlayers[i]->getPlayerInfo()->getLocal()) {
firstPlayerIndex = i;
break;
}
}
}
return activePlayers;
}

View file

@ -2,12 +2,14 @@
#include "../client/settings/cache_settings.h"
#include "../client/settings/shortcuts_settings.h"
#include "../interface/theme_manager.h"
#include "game_scene.h"
#include <QAction>
#include <QBrush>
#include <QColor>
#include <QEvent>
#include <QFont>
#include <QGraphicsScene>
#include <QGridLayout>
#include <QLabel>
@ -24,6 +26,21 @@
#include <libcockatrice/utility/qt_utils.h>
#include <qnamespace.h>
namespace
{
QFont deckOverlayFont(int pixelSize, bool bold)
{
// The drag/total counters and the tally columns are in-game overlays, not
// deck list text: keep the monospace family the stylesheets used to set so
// digit widths stay stable as counts tick and `white-space: pre` lines up.
QFont font(QStringLiteral("monospace"));
font.setStyleHint(QFont::Monospace);
font.setPixelSize(pixelSize);
font.setBold(bold);
return font;
}
} // namespace
// QRubberBand calls raise() in showEvent() and changeEvent() to stay on top of siblings.
// This subclass disables that behavior so dragCountLabel can appear above it.
class SelectionRubberBand : public QRubberBand
@ -48,6 +65,7 @@ protected:
GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, parent), rubberBand(0)
{
setObjectName("gameView");
setBackgroundBrush(QBrush(QColor(0, 0, 0)));
setRenderHints(QPainter::TextAntialiasing | QPainter::Antialiasing);
setViewportUpdateMode(BoundingRectViewportUpdate);
@ -75,15 +93,14 @@ GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, par
rubberBand = new SelectionRubberBand(QRubberBand::Rectangle, this);
const QString baseProperties = "color: white; "
"font-family: monospace; "
"background-color: rgba(0, 0, 0, 160); "
"border-radius: 3px; "
"padding: 1px 2px; "
"white-space: pre;";
const QString dragCountLabelStyle = baseProperties + "font-size: 14px; font-weight: bold;";
const QString totalCountLabelStyle = baseProperties + "font-size: 16px; font-weight: bold;";
const QString subtypeTallyLabelStyle = baseProperties + "font-size: 12px;";
const QString dragCountLabelStyle = baseProperties;
const QString totalCountLabelStyle = baseProperties;
const QString subtypeTallyLabelStyle = baseProperties;
dragCountLabel = new QLabel(this);
dragCountLabel->setStyleSheet(dragCountLabelStyle);
@ -100,6 +117,27 @@ GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, par
tallyLayout->setContentsMargins(2, 2, 2, 2);
tallyLayout->setSpacing(2);
tallyContainer->hide();
applyDeckOverlayFonts();
}
void GameView::applyDeckOverlayFonts()
{
dragCountLabel->setFont(deckOverlayFont(14, true));
totalCountLabel->setFont(deckOverlayFont(16, true));
tallyContainer->setFont(deckOverlayFont(12, false));
for (int i = 0; i < tallyLayout->count(); ++i) {
if (auto *label = qobject_cast<QLabel *>(tallyLayout->itemAt(i)->widget())) {
// Count column (odd positions) keeps the bold emphasis.
const bool count = i % 2 == 1;
label->setFont(deckOverlayFont(count ? 14 : 12, count));
}
}
// The container keeps the size computed from the previous fonts, so force
// rebuildTallyLabels() to re-measure it instead of reusing cachedTallyRows.
cachedTallyRows.clear();
updateTotalSelectionCount();
}
void GameView::resizeEvent(QResizeEvent *event)
@ -219,9 +257,8 @@ QSize GameView::rebuildTallyLabels(const QList<TallyRow> &entries)
{
clearTallyLabels();
const QString nameStyle = QStringLiteral("color: white; font-size: 12px; background: transparent;");
const QString countStyle =
QStringLiteral("color: white; font-size: 14px; font-weight: bold; background: transparent;");
const QString nameStyle = QStringLiteral("color: white; background: transparent;");
const QString countStyle = QStringLiteral("color: white; background: transparent;");
int totalHeight = 0;
int maxNameWidth = 0;
@ -231,11 +268,13 @@ QSize GameView::rebuildTallyLabels(const QList<TallyRow> &entries)
for (const TallyRow &entry : entries) {
auto *nameLabel = new QLabel(entry.name, tallyContainer);
nameLabel->setStyleSheet(nameStyle);
nameLabel->setFont(deckOverlayFont(12, false));
nameLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
tallyLayout->addWidget(nameLabel, row, 0);
auto *countLabel = new QLabel(entry.value, tallyContainer);
countLabel->setStyleSheet(countStyle);
countLabel->setFont(deckOverlayFont(14, true));
countLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
tallyLayout->addWidget(countLabel, row, 1);

View file

@ -50,6 +50,7 @@ private slots:
void refreshShortcuts();
void updateTotalSelectionCount(const QSize &viewSize = QSize());
void setFocusDisabled(bool disabled);
void applyDeckOverlayFonts();
public slots:
void updateSceneRect(const QRectF &rect);

View file

@ -4,6 +4,8 @@
#include "../../client/settings/card_counter_settings.h"
#include "../../client/sound_engine.h"
#include "../../interface/card_localization.h"
#include "../../interface/theme_icon.h"
#include "../../interface/theme_manager.h"
#include "../../interface/widgets/server/chat_view/chat_view.h"
#include "../board/card_item.h"
#include "../board/translate_counter_name.h"
@ -12,8 +14,12 @@
#include <QColor>
#include <QDebug>
#include <QList>
#include <QPalette>
#include <QPixmap>
#include <QSharedPointer>
#include <QStringList>
#include <QTextDocument>
#include <QUrl>
#include <libcockatrice/game/abstract_game.h>
#include <libcockatrice/game/board/card_list.h>
#include <libcockatrice/game/game_state.h>
@ -120,6 +126,7 @@ MessageLogWidget::getFromStr(CardZoneLogic *zone, QString cardName, int position
void MessageLogWidget::containerProcessingDone()
{
currentContext = MessageContext_None;
contextJudgeName.clear();
messageSuffix = messagePrefix = QString();
}
@ -605,6 +612,20 @@ void MessageLogWidget::logReverseTurn(PlayerLogic *player, bool reversed)
.arg(reversed ? tr("reversed") : tr("normal")));
}
void MessageLogWidget::logTurnOrderChanged(QStringList playerNames, bool randomized)
{
QStringList sanitizedNames;
for (const QString &name : playerNames) {
sanitizedNames.append(sanitizeHtml(name));
}
const QString order = sanitizedNames.join(" -> ");
if (randomized) {
appendHtmlServerMessage(tr("Randomized turn order: %1.").arg(order));
} else {
appendHtmlServerMessage(tr("New turn order set: %1.").arg(order));
}
}
void MessageLogWidget::logRollDie(PlayerLogic *player, int sides, const QList<uint> &rolls)
{
if (rolls.length() == 1) {
@ -841,8 +862,27 @@ void MessageLogWidget::logUndoDrawFailed(PlayerLogic *player)
void MessageLogWidget::setContextJudgeName(QString name)
{
messagePrefix = QString("<span style=\"color:black\">");
messageSuffix = QString("</span> [<img height=12 src=\"theme:icons/scales\"> %1]").arg(sanitizeHtml(name));
contextJudgeName = std::move(name);
refreshJudgeSuffix();
}
void MessageLogWidget::refreshJudgeSuffix()
{
const QPixmap pixmap = loadThemedIcon(QStringLiteral("icons/scales")).pixmap(QSize(24, 24));
if (!pixmap.isNull()) {
// Rich text cannot resolve `currentColor`; register a palette-rendered
// image so already-appended judge tags repaint on a theme switch.
document()->addResource(QTextDocument::ImageResource, QUrl(QStringLiteral("cockatrice:scales")), pixmap);
document()->markContentsDirty(0, document()->characterCount());
}
if (contextJudgeName.isEmpty()) {
return;
}
messagePrefix = QStringLiteral("<span style=\"color:%1\">").arg(palette().color(QPalette::WindowText).name());
messageSuffix =
QStringLiteral("</span> [<img height=12 src=\"cockatrice:scales\"> %1]").arg(sanitizeHtml(contextJudgeName));
}
void MessageLogWidget::appendHtmlServerMessage(const QString &html, bool optionalIsBold, QString optionalFontColor)
@ -891,4 +931,6 @@ void MessageLogWidget::connectToPlayerEventHandler(PlayerEventHandler *playerEve
MessageLogWidget::MessageLogWidget(TabSupervisor *_tabSupervisor, AbstractGame *_game, QWidget *parent)
: ChatView(_tabSupervisor, _game, true, parent), currentContext(MessageContext_None)
{
connect(themeManager, &ThemeManager::paletteChanged, this, &MessageLogWidget::refreshJudgeSuffix);
connect(themeManager, &ThemeManager::themeChanged, this, &MessageLogWidget::refreshJudgeSuffix);
}

View file

@ -39,8 +39,10 @@ private:
MessageContext currentContext;
QString messagePrefix, messageSuffix;
QString contextJudgeName;
static QPair<QString, QString> getFromStr(CardZoneLogic *zone, QString cardName, int position, bool ownerChange);
void refreshJudgeSuffix();
public:
void connectToPlayerEventHandler(PlayerEventHandler *player);
@ -94,6 +96,7 @@ public slots:
int amount,
bool isLentToAnotherPlayer);
void logReverseTurn(PlayerLogic *player, bool reversed);
void logTurnOrderChanged(QStringList playerNames, bool randomized);
void logRollDie(PlayerLogic *player, int sides, const QList<uint> &rolls);
void logSay(PlayerLogic *player, QString message);
void logSetActivePhase(int phase);

View file

@ -1,6 +1,7 @@
#include "player_list_widget.h"
#include "../../interface/pixel_map_generator.h"
#include "../../interface/theme_icon.h"
#include "../../interface/widgets/server/user/user_context_menu.h"
#include "libcockatrice/protocol/pb/serverinfo_user.pb.h"
#include "user_level.h"
@ -67,13 +68,13 @@ PlayerListWidget::PlayerListWidget(TabSupervisor *_tabSupervisor,
QWidget *parent)
: QTreeWidget(parent), tabSupervisor(_tabSupervisor), client(_client), game(_game), gameStarted(false)
{
readyIcon = themePixmap(QStringLiteral("icons/ready_start"));
notReadyIcon = themePixmap(QStringLiteral("icons/not_ready_start"));
concededIcon = themePixmap(QStringLiteral("icons/conceded"));
playerIcon = loadColorAdjustedPixmap("theme:icons/player");
judgeIcon = loadColorAdjustedPixmap("theme:icons/scales");
spectatorIcon = loadColorAdjustedPixmap("theme:icons/spectator");
lockIcon = themePixmap(QStringLiteral("icons/lock"));
readyIcon = loadThemedIcon(QStringLiteral("icons/ready_start"));
notReadyIcon = loadThemedIcon(QStringLiteral("icons/not_ready_start"));
concededIcon = loadThemedIcon(QStringLiteral("icons/conceded"));
playerIcon = loadThemedIcon(QStringLiteral("icons/player"));
judgeIcon = loadThemedIcon(QStringLiteral("icons/scales"));
spectatorIcon = loadThemedIcon(QStringLiteral("icons/spectator"));
lockIcon = loadThemedIcon(QStringLiteral("icons/lock"));
if (tabSupervisor) {
itemDelegate = new PlayerListItemDelegate(this);

View file

@ -2,6 +2,7 @@
#include "../../client/settings/cache_settings.h"
#include "../../interface/pixel_map_generator.h"
#include "../../interface/theme_manager.h"
#include "../board/abstract_counter.h"
#include "../board/abstract_graphics_item.h"
#include "../board/arrow_target.h"
@ -76,7 +77,7 @@ void PlayerCounter::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*
QRectF translatedRect = path.controlPointRect();
QSize translatedSize = translatedRect.size().toSize();
QFont font("Serif");
QFont font = themeManager->cardTextFont();
font.setWeight(QFont::Bold);
font.setPixelSize(qMax(qRound(translatedSize.height() / 1.3), 9));
painter->setFont(font);
@ -226,7 +227,7 @@ void PlayerTarget::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*o
name = name.mid(0, 10) + "...";
}
QFont font;
QFont font = themeManager->appFont(AppFont::CardText);
font.setPixelSize(qMax(qRound(translatedNameRect.height() / 1.5), 9));
painter->setFont(font);
painter->setPen(Qt::white);

View file

@ -0,0 +1,628 @@
#include "pq_cockatrice_event_player.h"
#include "../../interface/widgets/tabs/tab_game.h"
#include "board/card_item.h"
#include "game_scene.h"
#include "game_view.h"
#include "zones/card_zone.h"
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QAction>
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QLoggingCategory>
#include <QMenu>
#include <QMouseEvent>
#include <QTreeWidget>
#include <libcockatrice/game/abstract_game.h>
#include <libcockatrice/game/game_state.h>
#include <libcockatrice/game/player/player_actions.h>
#include <libcockatrice/game/player/player_logic.h>
#include <libcockatrice/game/player/player_manager.h>
Q_LOGGING_CATEGORY(PQ_COCKATRICE_EVENT_PLAYER, "cockatrice.guiTest.eventPlayer")
namespace
{
/**
* Strips Qt's mnemonic markers so a test can name a menu entry by the label the
* user sees ("Turn Over" rather than "T&urn Over").
*/
QString normalizeActionText(const QString &text)
{
QString normalized = text;
normalized.remove('&');
return normalized.simplified();
}
/**
* Maps a printable character onto the key a US keyboard would report for it, so
* typing produces the same QKeyEvents a recording would.
*/
Qt::Key keyForCharacter(QChar character)
{
if (character.isLetter()) {
return static_cast<Qt::Key>(Qt::Key_A + (character.toUpper().unicode() - 'A'));
}
if (character.isDigit()) {
return static_cast<Qt::Key>(Qt::Key_0 + (character.unicode() - '0'));
}
switch (character.unicode()) {
case ' ':
return Qt::Key_Space;
case '\n':
return Qt::Key_Return;
case '\t':
return Qt::Key_Tab;
case '-':
return Qt::Key_Minus;
case '_':
return Qt::Key_Underscore;
case '/':
return Qt::Key_Slash;
case ',':
return Qt::Key_Comma;
case '.':
return Qt::Key_Period;
case '\'':
return Qt::Key_Apostrophe;
case ';':
return Qt::Key_Semicolon;
case ':':
return Qt::Key_Colon;
case '"':
return Qt::Key_QuoteDbl;
case '&':
return Qt::Key_Ampersand;
case '(':
return Qt::Key_ParenLeft;
case ')':
return Qt::Key_ParenRight;
case '[':
return Qt::Key_BracketLeft;
case ']':
return Qt::Key_BracketRight;
default:
return Qt::Key_unknown;
}
}
/** Depth-first search for the first model index whose label matches @p text. */
QModelIndex findModelIndexByText(const QAbstractItemModel *model, const QString &text, const QModelIndex &parent = {})
{
for (int row = 0; row < model->rowCount(parent); ++row) {
const QModelIndex index = model->index(row, 0, parent);
if (index.data(Qt::DisplayRole).toString() == text) {
return index;
}
const QModelIndex child = findModelIndexByText(model, text, index);
if (child.isValid()) {
return child;
}
}
return {};
}
bool needsShift(QChar character)
{
if (character.isUpper()) {
return true;
}
return QStringLiteral("_:\"&()").contains(character);
}
} // namespace
pqCockatriceEventPlayer::pqCockatriceEventPlayer(QObject *parent) : pqWidgetEventPlayer(parent)
{
}
bool pqCockatriceEventPlayer::playEvent(QObject *object, const QString &command, const QString &arguments, bool &error)
{
// A known command that fails is a handled-but-failed event: QtTesting logs
// "Unhandled event" when playEvent returns false, so report through `error`
// (the contract playExpectProperty already follows) and still return true.
const auto run = [&error](bool ok) {
if (!ok) {
error = true;
}
return true;
};
if (command == "clickCard") {
return run(playClickCard(object, arguments));
} else if (command == "flipCard") {
return run(playFlipCard(object, arguments));
} else if (command == "cardAction") {
return run(playCardAction(object, arguments));
} else if (command == "moveCard") {
return run(playMoveCard(object, arguments));
} else if (command == "drawArrow") {
return run(playDrawArrow(object, arguments));
} else if (command == "createToken") {
return run(playCreateToken(object, arguments));
} else if (command == "selectItem") {
return run(playSelectItem(object, arguments));
} else if (command == "typeText") {
return run(playTypeText(object, arguments));
} else if (command == "expectProperty") {
return playExpectProperty(object, arguments, error);
}
return false;
}
QGraphicsItem *
pqCockatriceEventPlayer::findCardInScene(QGraphicsScene *scene, const QString &cardName, const QString &zoneName)
{
for (QGraphicsItem *gi : scene->items()) {
if (gi->type() != typeCard) {
continue;
}
auto *card = static_cast<CardItem *>(gi);
if (!card->getZone() || card->getZone()->getName() != zoneName) {
continue;
}
QString actualName = card->getName();
if (actualName == cardName || actualName.endsWith(" " + cardName)) {
return card;
}
}
return nullptr;
}
QGraphicsItem *pqCockatriceEventPlayer::findZoneInScene(QGraphicsScene *scene, const QString &zoneName)
{
for (QGraphicsItem *gi : scene->items()) {
if (gi->type() != typeZone) {
continue;
}
auto *zone = static_cast<CardZone *>(gi);
if (zone->getLogic() && zone->getLogic()->getName() == zoneName) {
return zone;
}
}
return nullptr;
}
QAction *pqCockatriceEventPlayer::findActionInMenu(QMenu *menu, const QString &actionText)
{
if (!menu || actionText.isEmpty()) {
return nullptr;
}
for (QAction *action : menu->actions()) {
if (action->isSeparator()) {
continue;
}
if (normalizeActionText(action->text()).contains(actionText, Qt::CaseInsensitive)) {
return action;
}
if (QMenu *subMenu = action->menu()) {
if (QAction *found = findActionInMenu(subMenu, actionText)) {
return found;
}
}
}
return nullptr;
}
QMenu *pqCockatriceEventPlayer::visiblePopupMenu()
{
for (QWidget *w : QApplication::topLevelWidgets()) {
auto *menu = qobject_cast<QMenu *>(w);
if (menu && menu->isVisible()) {
return menu;
}
}
return nullptr;
}
QPoint pqCockatriceEventPlayer::viewportPoint(QGraphicsView *view, const QGraphicsItem *item)
{
return view->mapFromScene(item->sceneBoundingRect().center());
}
void pqCockatriceEventPlayer::sendMouseEvent(QGraphicsView *view,
QEvent::Type type,
const QPoint &pos,
Qt::MouseButton button,
Qt::MouseButtons buttons)
{
QMouseEvent event(type, pos, view->viewport()->mapToGlobal(pos), button, buttons, Qt::NoModifier);
qApp->notify(view->viewport(), &event);
}
bool pqCockatriceEventPlayer::playClickCard(QObject *object, const QString &arguments)
{
auto *gv = qobject_cast<QGraphicsView *>(object);
if (!gv) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "clickCard: target widget is not a QGraphicsView";
return false;
}
QStringList parts = arguments.split(',');
if (parts.size() < 2) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "clickCard: arguments must be 'cardName,zoneName', got:" << arguments;
return false;
}
QGraphicsScene *scene = gv->scene();
if (!scene) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "clickCard: no scene on the QGraphicsView";
return false;
}
auto *target = findCardInScene(scene, parts[0].trimmed(), parts[1].trimmed());
if (!target) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "clickCard: card" << parts[0].trimmed() << "not found in zone" << parts[1].trimmed();
return false;
}
const QPoint pos = viewportPoint(gv, target);
// A double click is the play gesture from hand: press/release, then the
// double-click event and its release, exactly as a recording produces it.
sendMouseEvent(gv, QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton);
sendMouseEvent(gv, QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton);
sendMouseEvent(gv, QEvent::MouseButtonDblClick, pos, Qt::LeftButton, Qt::LeftButton);
sendMouseEvent(gv, QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton);
return true;
}
bool pqCockatriceEventPlayer::playFlipCard(QObject *object, const QString &arguments)
{
auto *gv = qobject_cast<QGraphicsView *>(object);
if (!gv) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "flipCard: target widget is not a QGraphicsView";
return false;
}
QStringList parts = arguments.split(',');
if (parts.size() < 2) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "flipCard: arguments must be 'cardName,zoneName', got:" << arguments;
return false;
}
QGraphicsScene *scene = gv->scene();
if (!scene) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "flipCard: no scene";
return false;
}
auto *card = qgraphicsitem_cast<CardItem *>(findCardInScene(scene, parts[0].trimmed(), parts[1].trimmed()));
if (!card) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "flipCard: card" << parts[0].trimmed() << "not found in zone" << parts[1].trimmed();
return false;
}
return invokeCardMenuAction("flipCard", gv, card, QStringLiteral("Turn Over"));
}
bool pqCockatriceEventPlayer::playCardAction(QObject *object, const QString &arguments)
{
auto *gv = qobject_cast<QGraphicsView *>(object);
if (!gv) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "cardAction: target widget is not a QGraphicsView";
return false;
}
QStringList parts = arguments.split(',');
if (parts.size() < 3) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "cardAction: arguments must be 'cardName,zoneName,actionText', got:" << arguments;
return false;
}
QGraphicsScene *scene = gv->scene();
if (!scene) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "cardAction: no scene";
return false;
}
auto *card = qgraphicsitem_cast<CardItem *>(findCardInScene(scene, parts[0].trimmed(), parts[1].trimmed()));
if (!card) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "cardAction: card" << parts[0].trimmed() << "not found in zone" << parts[1].trimmed();
return false;
}
return invokeCardMenuAction("cardAction", gv, card, parts.mid(2).join(',').trimmed());
}
bool pqCockatriceEventPlayer::invokeCardMenuAction(const char *command,
QGraphicsView *view,
CardItem *card,
const QString &actionText)
{
const QPoint pos = viewportPoint(view, card);
sendMouseEvent(view, QEvent::MouseButtonPress, pos, Qt::RightButton, Qt::RightButton);
sendMouseEvent(view, QEvent::MouseButtonRelease, pos, Qt::RightButton, Qt::NoButton);
qApp->processEvents();
QMenu *menu = visiblePopupMenu();
if (!menu) {
qCWarning(PQ_COCKATRICE_EVENT_PLAYER) << command << ": no popup menu appeared after right-click";
return false;
}
QAction *action = findActionInMenu(menu, actionText);
if (!action) {
qCWarning(PQ_COCKATRICE_EVENT_PLAYER) << command << ": no context menu action matching" << actionText;
menu->close();
return false;
}
action->trigger();
menu->close();
qApp->processEvents();
return true;
}
bool pqCockatriceEventPlayer::playMoveCard(QObject *object, const QString &arguments)
{
auto *gv = qobject_cast<QGraphicsView *>(object);
if (!gv) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "moveCard: target widget is not a QGraphicsView";
return false;
}
QStringList parts = arguments.split(',');
if (parts.size() < 3) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "moveCard: arguments must be 'cardName,srcZoneName,dstZoneName', got:" << arguments;
return false;
}
const QString cardName = parts[0].trimmed();
const QString srcZoneName = parts[1].trimmed();
const QString dstZoneName = parts[2].trimmed();
QGraphicsScene *scene = gv->scene();
if (!scene) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "moveCard: no scene";
return false;
}
auto *card = findCardInScene(scene, cardName, srcZoneName);
if (!card) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "moveCard: card" << cardName << "not found in zone" << srcZoneName;
return false;
}
auto *dstZone = findZoneInScene(scene, dstZoneName);
if (!dstZone) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "moveCard: destination zone" << dstZoneName << "not found";
return false;
}
const QPoint srcPos = viewportPoint(gv, card);
const QPoint dstPos = viewportPoint(gv, dstZone);
// A drag has to travel past Qt's start distance before the scene turns it
// into a card drag item, otherwise the move is interpreted as a click.
const int dragDistance = 2 * QApplication::startDragDistance() + 10;
const QPoint pastDragStart = srcPos + QPoint(dragDistance, 0);
sendMouseEvent(gv, QEvent::MouseButtonPress, srcPos, Qt::LeftButton, Qt::LeftButton);
sendMouseEvent(gv, QEvent::MouseMove, pastDragStart, Qt::LeftButton, Qt::LeftButton);
qApp->processEvents();
sendMouseEvent(gv, QEvent::MouseMove, dstPos, Qt::LeftButton, Qt::LeftButton);
qApp->processEvents();
sendMouseEvent(gv, QEvent::MouseButtonRelease, dstPos, Qt::LeftButton, Qt::NoButton);
qApp->processEvents();
return true;
}
bool pqCockatriceEventPlayer::playDrawArrow(QObject *object, const QString &arguments)
{
auto *gv = qobject_cast<QGraphicsView *>(object);
if (!gv) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "drawArrow: target widget is not a QGraphicsView";
return false;
}
QStringList parts = arguments.split(',');
if (parts.size() < 4) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "drawArrow: arguments must be 'srcCard,srcZone,dstCard,dstZone', got:" << arguments;
return false;
}
const QString srcCardName = parts[0].trimmed();
const QString srcZoneName = parts[1].trimmed();
const QString dstCardName = parts[2].trimmed();
const QString dstZoneName = parts[3].trimmed();
QGraphicsScene *scene = gv->scene();
if (!scene) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "drawArrow: no scene";
return false;
}
auto *srcCard = findCardInScene(scene, srcCardName, srcZoneName);
if (!srcCard) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "drawArrow: source card" << srcCardName << "not found in zone" << srcZoneName;
return false;
}
auto *dstCard = findCardInScene(scene, dstCardName, dstZoneName);
if (!dstCard) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "drawArrow: dest card" << dstCardName << "not found in zone" << dstZoneName;
return false;
}
const QPoint srcPos = viewportPoint(gv, srcCard);
const QPoint dstPos = viewportPoint(gv, dstCard);
const int dragDistance = 2 * QApplication::startDragDistance() + 10;
const QPoint pastDragStart = srcPos + QPoint(dragDistance, 0);
sendMouseEvent(gv, QEvent::MouseButtonPress, srcPos, Qt::RightButton, Qt::RightButton);
sendMouseEvent(gv, QEvent::MouseMove, pastDragStart, Qt::RightButton, Qt::RightButton);
qApp->processEvents();
sendMouseEvent(gv, QEvent::MouseMove, dstPos, Qt::RightButton, Qt::RightButton);
sendMouseEvent(gv, QEvent::MouseButtonRelease, dstPos, Qt::RightButton, Qt::NoButton);
qApp->processEvents();
return true;
}
bool pqCockatriceEventPlayer::playCreateToken(QObject *object, const QString &arguments)
{
auto *gv = qobject_cast<QGraphicsView *>(object);
if (!gv) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "createToken: target widget is not a QGraphicsView";
return false;
}
QStringList parts = arguments.split(',');
if (parts.size() < 3) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "createToken: arguments must be 'name,color,pt', got:" << arguments;
return false;
}
QString tokenName = parts[0].trimmed();
QString tokenColor = parts[1].trimmed();
QString tokenPt = parts[2].trimmed();
TabGame *tabGame = nullptr;
QWidget *w = gv;
while (w) {
tabGame = qobject_cast<TabGame *>(w);
if (tabGame) {
break;
}
w = w->parentWidget();
}
if (!tabGame) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "createToken: TabGame not found";
return false;
}
AbstractGame *game = tabGame->getGame();
if (!game) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "createToken: no game";
return false;
}
int activePlayerId = game->getGameState()->getActivePlayer();
PlayerLogic *player = game->getPlayerManager()->getActiveLocalPlayer(activePlayerId);
if (!player) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "createToken: no active local player";
return false;
}
TokenInfo info;
info.name = tokenName;
info.color = tokenColor;
info.pt = tokenPt;
info.destroy = true;
info.faceDown = false;
player->getPlayerActions()->actCreateToken(info);
for (int i = 0; i < 10; ++i) {
qApp->processEvents();
}
return true;
}
bool pqCockatriceEventPlayer::playSelectItem(QObject *object, const QString &arguments)
{
const QString text = arguments.trimmed();
if (text.isEmpty()) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "selectItem: needs the label of the item to select";
return false;
}
if (auto *tree = qobject_cast<QTreeWidget *>(object)) {
QTreeWidgetItemIterator item(tree);
while (*item) {
if ((*item)->text(0) == text) {
tree->setCurrentItem(*item);
qApp->processEvents();
return true;
}
++item;
}
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "selectItem: no tree item labelled" << text;
return false;
}
if (auto *view = qobject_cast<QAbstractItemView *>(object)) {
const QModelIndex index = findModelIndexByText(view->model(), text);
if (!index.isValid()) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "selectItem: no item labelled" << text;
return false;
}
view->setCurrentIndex(index);
qApp->processEvents();
return true;
}
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "selectItem: target is neither a tree widget nor an item view";
return false;
}
bool pqCockatriceEventPlayer::playTypeText(QObject *object, const QString &arguments)
{
auto *widget = qobject_cast<QWidget *>(object);
if (!widget) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "typeText: target is not a QWidget";
return false;
}
for (const QChar character : arguments) {
const Qt::Key key = keyForCharacter(character);
const Qt::KeyboardModifiers modifiers = needsShift(character) ? Qt::ShiftModifier : Qt::NoModifier;
QKeyEvent press(QEvent::KeyPress, key, modifiers, QString(character));
QKeyEvent release(QEvent::KeyRelease, key, modifiers, QString(character));
qApp->notify(widget, &press);
qApp->notify(widget, &release);
}
qApp->processEvents();
return true;
}
bool pqCockatriceEventPlayer::playExpectProperty(QObject *object, const QString &arguments, bool &error)
{
if (!object) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "expectProperty: no target object";
error = true;
return true;
}
QStringList parts = arguments.split(',');
if (parts.size() < 2) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "expectProperty: arguments must be 'propertyName,expectedValue', got:" << arguments;
error = true;
return true;
}
const QString propertyName = parts[0].trimmed();
const QString expected = parts.mid(1).join(',');
const QVariant actual = object->property(propertyName.toUtf8().constData());
if (!actual.isValid()) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER)
<< "expectProperty:" << object->objectName() << "has no property" << propertyName;
error = true;
return true;
}
if (actual.toString() != expected) {
qCCritical(PQ_COCKATRICE_EVENT_PLAYER) << "expectProperty:" << object->objectName() << propertyName << "is"
<< actual.toString() << "but the test expected" << expected;
error = true;
return true;
}
return true;
}

View file

@ -0,0 +1,91 @@
#ifndef PQ_COCKATRICE_EVENT_PLAYER_H
#define PQ_COCKATRICE_EVENT_PLAYER_H
#include "pqWidgetEventPlayer.h"
#include <QModelIndex>
class CardItem;
class QAction;
class QGraphicsItem;
class QGraphicsScene;
class QGraphicsView;
class QMenu;
/**
* Custom event player for Cockatrice game interactions.
*
* Card commands are resolution independent: the card is looked up in the
* QGraphicsScene by name and zone, then mouse events are sent at the card's
* current viewport position. That keeps recordings usable across screen sizes
* and window geometries.
*
* Commands:
* clickCard "cardName,zoneName"
* left press/release + double click — plays a card from hand, taps a
* permanent, opens the deck view entry, depending on the zone
* flipCard "cardName,zoneName"
* right-click → "Turn Over" (shorthand for cardAction)
* cardAction "cardName,zoneName,actionText"
* right-click the card and trigger the first context menu action whose
* label contains actionText; submenus are searched as well, so
* "Add counter (A)" works
* moveCard "cardName,srcZoneName,dstZoneName"
* left-drag the card onto the destination zone — plays a card, moves it
* to the graveyard/exile, puts it back into hand, ...
* drawArrow "srcCard,srcZone,dstCard,dstZone"
* right-drag an arrow from one card to another
* createToken "name,color,pt"
* create a token through the active local player, as the table context
* menu's "Create token" dialog would
* selectItem "item text"
* selects the first item of a tree/list widget whose label matches, for
* navigating the settings navigation tree or similar label-driven views
* typeText "some text"
* types the text into the widget one key event at a time — use it for
* deck lists and search boxes instead of one event per character
* expectProperty "propertyName,expectedValue"
* assertion: playback fails unless object->property(propertyName)
* equals expectedValue — for example "count,2" on the tab widget
*/
class pqCockatriceEventPlayer : public pqWidgetEventPlayer
{
Q_OBJECT
typedef pqWidgetEventPlayer Superclass;
public:
explicit pqCockatriceEventPlayer(QObject *parent = nullptr);
using Superclass::playEvent;
bool playEvent(QObject *object, const QString &command, const QString &arguments, bool &error) override;
private:
bool playClickCard(QObject *object, const QString &arguments);
bool playFlipCard(QObject *object, const QString &arguments);
bool playCardAction(QObject *object, const QString &arguments);
bool playMoveCard(QObject *object, const QString &arguments);
bool playDrawArrow(QObject *object, const QString &arguments);
bool playCreateToken(QObject *object, const QString &arguments);
bool playSelectItem(QObject *object, const QString &arguments);
bool playTypeText(QObject *object, const QString &arguments);
bool playExpectProperty(QObject *object, const QString &arguments, bool &error);
/** @brief Triggers the context menu entry @p actionText after right-clicking @p card. */
bool invokeCardMenuAction(const char *command, QGraphicsView *view, CardItem *card, const QString &actionText);
static QGraphicsItem *findCardInScene(QGraphicsScene *scene, const QString &cardName, const QString &zoneName);
static QGraphicsItem *findZoneInScene(QGraphicsScene *scene, const QString &zoneName);
static QAction *findActionInMenu(QMenu *menu, const QString &actionText);
static QMenu *visiblePopupMenu();
/** @brief Viewport position of the item's centre, as the mouse events have to be sent. */
static QPoint viewportPoint(QGraphicsView *view, const QGraphicsItem *item);
static void sendMouseEvent(QGraphicsView *view,
QEvent::Type type,
const QPoint &pos,
Qt::MouseButton button,
Qt::MouseButtons buttons);
};
#endif // PQ_COCKATRICE_EVENT_PLAYER_H

View file

@ -3,6 +3,7 @@
#include "../../client/settings/cache_settings.h"
#include "../../filters/syntax_help.h"
#include "../../interface/pixel_map_generator.h"
#include "../../interface/theme_icon.h"
#include "../card_dimensions.h"
#include "../z_values.h"
#include "libcockatrice/utility/macros.h"
@ -93,8 +94,8 @@ ZoneViewWidget::ZoneViewWidget(PlayerLogic *_player,
searchEdit.setFocusPolicy(Qt::ClickFocus);
searchEdit.setPlaceholderText(tr("Search by card name (or search expressions)"));
searchEdit.setClearButtonEnabled(true);
searchEdit.addAction(loadColorAdjustedPixmap("theme:icons/search"), QLineEdit::LeadingPosition);
auto help = searchEdit.addAction(themePixmap(QStringLiteral("icons/info")), QLineEdit::TrailingPosition);
searchEdit.addAction(loadThemedIcon(QStringLiteral("icons/search")), QLineEdit::LeadingPosition);
auto help = searchEdit.addAction(loadThemedIcon(QStringLiteral("icons/info")), QLineEdit::TrailingPosition);
connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(&searchEdit); });

View file

@ -1,5 +1,6 @@
#include "deck_loader.h"
#include "../theme_manager.h"
#include "libcockatrice/card/card_info.h"
#include "libcockatrice/card/database/card_database_querier.h"
#include "libcockatrice/deck_list/tree/abstract_deck_list_card_node.h"
@ -38,6 +39,7 @@
#include <QTextTableFormat>
#include <QVector>
#include <QtConcurrentRun>
#include <algorithm>
#include <functional>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/card/import/card_name_normalizer.h>
@ -371,8 +373,12 @@ bool DeckLoader::saveToStream_Plain(QTextStream &out,
saveToStream_DeckHeader(out, deckList);
}
// loop zones
for (auto zoneNode : deckList.getZoneNodes()) {
// Plain deck readers expect the main deck before the sideboard. Reorder a
// copy so native saves and the relative order of other zones stay intact.
auto zones = deckList.getZoneNodes();
std::stable_partition(zones.begin(), zones.end(),
[](const auto *zone) { return zone->getName() == DECK_ZONE_MAIN; });
for (auto zoneNode : zones) {
saveToStream_DeckZone(out, zoneNode, addComments, addSetNameAndNumber);
// end of zone
@ -579,6 +585,8 @@ void DeckLoader::printDeckListNode(QTextCursor *cursor, const InnerDecklistNode
if (!cards.isEmpty()) {
QTextBlockFormat blockFormat;
QTextCharFormat charFormat;
// Family comes from the DeckList theme role; sizes/weights unchanged.
charFormat.setFontFamilies({themeManager->deckListFont().family()});
charFormat.setFontPointSize(11);
charFormat.setFontWeight(QFont::Bold);
cursor->insertBlock(blockFormat, charFormat);
@ -592,6 +600,7 @@ void DeckLoader::printDeckListNode(QTextCursor *cursor, const InnerDecklistNode
const AbstractDecklistCardNode *card = cards[i];
QTextCharFormat cellCharFormat;
cellCharFormat.setFontFamilies({themeManager->deckListFont().family()});
cellCharFormat.setFontPointSize(9);
QTextTableCell cell = table->cellAt(i, 0);
@ -613,6 +622,7 @@ void DeckLoader::printDeckListNode(QTextCursor *cursor, const InnerDecklistNode
QTextBlockFormat blockFormat;
QTextCharFormat charFormat;
charFormat.setFontFamilies({themeManager->deckListFont().family()});
charFormat.setFontPointSize(14);
charFormat.setFontWeight(QFont::Bold);
@ -640,14 +650,18 @@ void DeckLoader::printDeckList(QPrinter *printer, const DeckList &deckList)
{
QTextDocument doc;
QFont font("Serif");
font.setStyleHint(QFont::Serif);
// Family comes from the DeckList theme role; the print sizes/weights below stay unchanged.
// Print output is a one-shot snapshot and intentionally does not subscribe
// to fontsChanged (there is no live view to repaint); reprinting picks up
// the current role font.
QFont font = themeManager->deckListFont();
doc.setDefaultFont(font);
QTextCursor cursor(&doc);
QTextBlockFormat headerBlockFormat;
QTextCharFormat headerCharFormat;
headerCharFormat.setFontFamilies({themeManager->deckListFont().family()});
headerCharFormat.setFontPointSize(16);
headerCharFormat.setFontWeight(QFont::Bold);

View file

@ -1,5 +1,7 @@
#include "color_button.h"
#include "../theme_manager.h"
#include <QBrush>
#include <QColorDialog>
#include <QFont>
@ -21,6 +23,7 @@ ColorButton::ColorButton(QWidget *parent) : QToolButton(parent)
setCursor(Qt::PointingHandCursor);
setToolTip(tr("Click to pick a color"));
connect(this, &QToolButton::clicked, this, &ColorButton::pickColor);
connect(themeManager, &ThemeManager::fontsChanged, this, &ColorButton::updateSwatch);
}
void ColorButton::setColor(const QColor &c)
@ -73,7 +76,8 @@ void ColorButton::updateSwatch()
// Hex label — black or white for contrast
int luma = 0.299 * color.red() + 0.587 * color.green() + 0.114 * color.blue();
painter.setPen((luma > 128 && color.alpha() > 80) ? QColor(0, 0, 0, 180) : QColor(255, 255, 255, 200));
QFont f = font();
// Family comes from the InterfaceDefault theme role; the 8px size stays caller-side.
QFont f = themeManager->appFont(AppFont::InterfaceDefault);
f.setPixelSize(8);
painter.setFont(f);
painter.drawText(rect(), Qt::AlignCenter, color.name().toUpper());

View file

@ -0,0 +1,136 @@
#include "font_grid_widget.h"
#include "../theme_manager.h"
#include <QApplication>
#include <QFont>
#include <QFontComboBox>
#include <QGridLayout>
#include <QLabel>
#include <QMetaEnum>
#include <QSpinBox>
#include <QtGlobal>
static constexpr int MIN_FONT_SIZE = 6;
static constexpr int MAX_FONT_SIZE = 72;
static constexpr int FALLBACK_FONT_SIZE = 10;
static const QMap<AppFont::Role, const char *> APP_FONT_DESCRIPTIONS = {
{AppFont::InterfaceDefault, QT_TR_NOOP("Default font for menus, dialogs and widgets")},
{AppFont::ChatLog, QT_TR_NOOP("Font for chat messages and logs")},
{AppFont::CardText, QT_TR_NOOP("Font for text rendered on cards")},
{AppFont::DeckList, QT_TR_NOOP("Font for deck lists and the deck editor")},
};
static QString roleDisplayName(AppFont::Role role)
{
switch (role) {
case AppFont::InterfaceDefault:
return FontGridWidget::tr("Interface default");
case AppFont::ChatLog:
return FontGridWidget::tr("Chat log");
case AppFont::CardText:
return FontGridWidget::tr("Card text");
case AppFont::DeckList:
return FontGridWidget::tr("Deck list");
default:
return QString();
}
}
FontGridWidget::FontGridWidget(QWidget *parent) : QWidget(parent)
{
auto *grid = new QGridLayout(this);
grid->setSpacing(3);
grid->setContentsMargins(12, 8, 12, 8);
grid->setColumnStretch(0, 0);
grid->setColumnStretch(1, 1);
grid->setColumnStretch(2, 0);
QMetaEnum fontEnum = QMetaEnum::fromType<AppFont::Role>();
for (int i = 0; i < fontEnum.keyCount(); ++i) {
auto role = static_cast<AppFont::Role>(fontEnum.value(i));
auto *label = new QLabel(this);
grid->addWidget(label, i, 0);
auto *familyCombo = new QFontComboBox(this);
grid->addWidget(familyCombo, i, 1);
connect(familyCombo, &QFontComboBox::currentFontChanged, this, [this] { emit fontsChanged(); });
auto *sizeSpin = new QSpinBox(this);
sizeSpin->setRange(MIN_FONT_SIZE, MAX_FONT_SIZE);
grid->addWidget(sizeSpin, i, 2);
connect(sizeSpin, &QSpinBox::valueChanged, this, [this] { emit fontsChanged(); });
label->setBuddy(familyCombo);
fontRows[role] = {label, familyCombo, sizeSpin};
}
retranslateUi();
}
void FontGridWidget::loadFonts(const FontConfig &cfg)
{
// Suppress fontsChanged while materializing fallback rows so the initial
// load never reads as a user edit (mirrors paletteGrid blocking).
blockSignals(true);
QMetaEnum fontEnum = QMetaEnum::fromType<AppFont::Role>();
for (int i = 0; i < fontEnum.keyCount(); ++i) {
auto role = static_cast<AppFont::Role>(fontEnum.value(i));
const FontRow &row = fontRows[role];
// Roles absent from the file resolve the same way the runtime does: an unset
// role falls back to the config's InterfaceDefault, and only then to the
// startup font. appFont() would return the live preview instead, so Reset and
// a first load must not measure against it.
const QFont fallback = cfg.fonts.value(AppFont::InterfaceDefault, themeManager->defaultAppFont(role));
const QFont font = cfg.fonts.value(role, fallback);
row.familyCombo->setCurrentFont(font);
int size = font.pointSize();
if (size <= 0) {
size = qApp->font().pointSize();
}
if (size <= 0) {
size = FALLBACK_FONT_SIZE;
}
row.sizeSpin->setValue(qBound(MIN_FONT_SIZE, size, MAX_FONT_SIZE));
}
blockSignals(false);
}
FontConfig FontGridWidget::currentFontConfig() const
{
FontConfig cfg;
QMetaEnum fontEnum = QMetaEnum::fromType<AppFont::Role>();
for (int i = 0; i < fontEnum.keyCount(); ++i) {
auto role = static_cast<AppFont::Role>(fontEnum.value(i));
const FontRow &row = fontRows.value(role);
// Canonical family + point size only: a fresh QFont carries default
// (non-bold, non-italic) weight/style, so nothing combo-side leaks in.
QFont font(row.familyCombo->currentFont().family());
font.setPointSize(row.sizeSpin->value());
cfg.fonts[role] = font;
}
return cfg;
}
void FontGridWidget::retranslateUi()
{
QMetaEnum fontEnum = QMetaEnum::fromType<AppFont::Role>();
for (int i = 0; i < fontEnum.keyCount(); ++i) {
auto role = static_cast<AppFont::Role>(fontEnum.value(i));
const FontRow &row = fontRows.value(role);
row.label->setText(roleDisplayName(role));
row.label->setToolTip(tr(APP_FONT_DESCRIPTIONS.value(role, "")));
row.familyCombo->setToolTip(tr(APP_FONT_DESCRIPTIONS.value(role, "")));
row.familyCombo->setAccessibleName(roleDisplayName(role));
row.sizeSpin->setToolTip(tr("Point size for %1").arg(roleDisplayName(role)));
row.sizeSpin->setAccessibleName(tr("Point size for %1").arg(roleDisplayName(role)));
row.sizeSpin->setSuffix(tr(" pt"));
}
}

View file

@ -0,0 +1,43 @@
#ifndef COCKATRICE_FONT_GRID_WIDGET_H
#define COCKATRICE_FONT_GRID_WIDGET_H
#include "../theme_config.h"
#include <QMap>
#include <QWidget>
#include <qtmetamacros.h>
class QFontComboBox;
class QGridLayout;
class QLabel;
class QSpinBox;
// Per-role font editors — one (family, point size) row per AppFont::Role.
// Owns the load/read round-trip for FontConfig but has no file I/O, mirroring
// PaletteGridWidget. Only family and point size are edited; weight and italic
// stay caller-side concerns and are stripped when reading back.
class FontGridWidget : public QWidget
{
Q_OBJECT
public:
explicit FontGridWidget(QWidget *parent = nullptr);
void loadFonts(const FontConfig &cfg);
FontConfig currentFontConfig() const;
void retranslateUi();
signals:
void fontsChanged();
private:
struct FontRow
{
QLabel *label = nullptr;
QFontComboBox *familyCombo = nullptr;
QSpinBox *sizeSpin = nullptr;
};
QMap<AppFont::Role, FontRow> fontRows;
};
#endif // COCKATRICE_FONT_GRID_WIDGET_H

View file

@ -2,6 +2,7 @@
#include "../theme_config.h"
#include "../theme_manager.h"
#include "font_grid_widget.h"
#include "palette_generator.h"
#include "palette_grid_widget.h"
#include "quick_setup_panel.h"
@ -41,6 +42,7 @@ PaletteEditorDialog::PaletteEditorDialog(const QString &_themeDirPath, const QSt
// Load both scheme configs upfront so switching is instant
loadSchemes();
loadFonts();
loadedScheme = themeManager->isDarkMode(themeDirPath) ? "Dark" : "Light";
@ -125,6 +127,33 @@ void PaletteEditorDialog::setupUi()
paletteGrid->setVisible(false);
root->addWidget(paletteGrid, 1);
// Font section — sibling to the palette grid, sharing its collapsible
// advanced area pattern. Fonts are shared per theme, not split by scheme.
fontToggleButton = new QPushButton(this);
fontToggleButton->setCheckable(true);
fontToggleButton->setChecked(false);
fontToggleButton->setFlat(true);
fontToggleButton->setStyleSheet("QPushButton { text-align: left; padding: 5px 12px; font-weight: bold; }"
"QPushButton:checked { }");
root->addWidget(fontToggleButton);
fontSeparator = makeSeparator();
fontSeparator->setVisible(false);
root->addWidget(fontSeparator);
fontSection = new QWidget;
auto *fontSectionLayout = new QVBoxLayout(fontSection);
fontSectionLayout->setContentsMargins(0, 0, 0, 0);
fontSectionLayout->setSpacing(0);
fontNoteLabel = new QLabel(fontSection);
fontNoteLabel->setContentsMargins(12, 4, 12, 0);
fontNoteLabel->setWordWrap(true);
fontSectionLayout->addWidget(fontNoteLabel);
fontGrid = new FontGridWidget(fontSection);
fontSectionLayout->addWidget(fontGrid);
fontSection->setVisible(false);
root->addWidget(fontSection);
// Footer
root->addWidget(makeSeparator());
footer = new QWidget;
@ -157,6 +186,10 @@ void PaletteEditorDialog::setupUi()
connect(autoApplyTimer, &QTimer::timeout, this, &PaletteEditorDialog::onApply);
connect(quickSetupPanel, &QuickSetupPanel::valueChanged, this, &PaletteEditorDialog::onGenerateFromAccent);
connect(paletteGrid, &PaletteGridWidget::paletteChanged, this, [this] { autoApplyTimer->start(); });
connect(fontGrid, &FontGridWidget::fontsChanged, this, [this] {
fontsDirty = true;
autoApplyTimer->start();
});
connect(revertButton, &QPushButton::clicked, this, &PaletteEditorDialog::onRevertToDefault);
connect(resetBtn, &QPushButton::clicked, this, &PaletteEditorDialog::onReset);
connect(saveBtn, &QPushButton::clicked, this, &PaletteEditorDialog::onSave);
@ -166,15 +199,32 @@ void PaletteEditorDialog::setupUi()
paletteGridToggleButton->setText(open ? tr("▼ Edit Palette") : tr("▶ Edit Palette"));
paletteGridSeparator->setVisible(open);
paletteGrid->setVisible(open);
if (open) {
setMinimumHeight(680);
resize(width(), 680);
} else {
setMinimumHeight(220);
adjustSize(); // shrinks to fit just the visible content
}
updateAdvancedHeight();
});
connect(fontToggleButton, &QPushButton::toggled, this, [this](bool open) {
fontToggleButton->setText(open ? tr("▼ Edit Fonts") : tr("▶ Edit Fonts"));
fontSeparator->setVisible(open);
fontSection->setVisible(open);
updateAdvancedHeight();
});
}
void PaletteEditorDialog::updateAdvancedHeight()
{
int height = 220;
if (paletteGridToggleButton->isChecked()) {
height += 460;
}
if (fontToggleButton->isChecked()) {
height += 200;
}
setMinimumHeight(height);
if (paletteGrid->isVisible() || fontSection->isVisible()) {
resize(width(), height);
} else {
adjustSize(); // shrinks to fit just the visible content
}
}
void PaletteEditorDialog::retranslateUi()
@ -189,12 +239,16 @@ void PaletteEditorDialog::retranslateUi()
editingLabel->setText(tr("Editing:"));
paletteGridToggleButton->setText(tr("▶ Edit Palette"));
paletteGridToggleButton->setToolTip(tr("Show or hide the per-role colour grid for manual tweaks"));
fontToggleButton->setText(fontSection->isVisible() ? tr("▼ Edit Fonts") : tr("▶ Edit Fonts"));
fontToggleButton->setToolTip(tr("Show or hide the per-purpose font settings for this theme"));
fontNoteLabel->setText(tr("Fonts belong to theme %1 (shared by Light and Dark schemes)").arg(themeName));
fontGrid->retranslateUi();
revertButton->setText(tr("↺ Revert to theme default"));
resetBtn->setText(tr("Reset"));
saveBtn->setText(tr("Save"));
resetBtn->setToolTip(tr("Discard unsaved edits and restore the last saved palette"));
saveBtn->setToolTip(tr("Write palette-%1.toml and reload the theme").arg(loadedScheme.toLower()));
resetBtn->setToolTip(tr("Discard unsaved edits and restore the last saved palette and fonts"));
saveBtn->setToolTip(tr("Write palette-%1.toml and fonts.toml, then reload the theme").arg(loadedScheme.toLower()));
if (saveDir.isEmpty() || !ThemeManager::isDirReallyWritable(saveDir)) {
saveBtn->setEnabled(false);
@ -228,6 +282,13 @@ void PaletteEditorDialog::loadSchemes()
}
}
void PaletteEditorDialog::loadFonts()
{
savedFontConfig = ThemeManager::loadDefaultFontConfig(themeDirPath, themeName);
fontGrid->loadFonts(savedFontConfig);
fontsDirty = false;
}
void PaletteEditorDialog::seedAccentFromScheme(const QString &scheme)
{
QColor seed = workingConfig.value(scheme).colors.value(QPalette::Active).value(QPalette::Highlight);
@ -258,6 +319,9 @@ void PaletteEditorDialog::onGenerateFromAccent(const QColor &accent, int intensi
void PaletteEditorDialog::onApply()
{
themeManager->previewPalette(paletteGrid->currentPaletteConfig(), loadedScheme);
if (fontsDirty) {
themeManager->previewFonts(fontGrid->currentFontConfig());
}
}
void PaletteEditorDialog::onSave()
@ -308,6 +372,20 @@ void PaletteEditorDialog::onSave()
savedConfig[it.key()] = it.value();
}
// Persist the shared per-theme fonts when they changed.
if (fontsDirty) {
const FontConfig fontCfg = fontGrid->currentFontConfig();
if (fontCfg != savedFontConfig) {
if (!ThemeManager::saveFontConfig(saveDir, fontCfg)) {
QMessageBox::warning(this, tr("Save failed"),
tr("Could not write %1 to:\n%2").arg(FontConfig::fileName(), saveDir));
return;
}
savedFontConfig = fontCfg;
}
fontsDirty = false;
}
themeManager->reloadCurrentTheme();
accept();
}
@ -316,6 +394,12 @@ void PaletteEditorDialog::onReset()
{
workingConfig[loadedScheme] = savedConfig[loadedScheme];
paletteGrid->loadPalette(savedConfig[loadedScheme]);
// Restore the live theme before re-reading the grid: loadFonts resolves
// unset roles, and the preview has currentFonts pointing at the edited
// config until the theme is reloaded.
themeManager->reloadCurrentTheme();
fontGrid->loadFonts(savedFontConfig);
fontsDirty = false;
seedAccentFromScheme(loadedScheme);
}
@ -350,6 +434,27 @@ void PaletteEditorDialog::onRevertToDefault()
workingConfig[loadedScheme] = def;
paletteGrid->loadPalette(def);
seedAccentFromScheme(loadedScheme);
// Revert the shared per-theme fonts the same way: delete the user-written
// fonts.toml so the theme falls back to its shipped default, then reflect
// the resolved fonts in the editor.
QFile::remove(QDir(saveDir).absoluteFilePath(FontConfig::fileName()));
// Reload the live theme so the font revert takes effect immediately.
themeManager->reloadCurrentTheme();
const FontConfig fontDef = ThemeManager::loadDefaultFontConfig(themeDirPath, themeName);
savedFontConfig = fontDef;
fontGrid->loadFonts(fontDef);
fontsDirty = false;
}
void PaletteEditorDialog::reject()
{
// Discard any unsaved live preview (palette and fonts) so closing without
// Save restores the active theme instead of leaking the preview globally.
themeManager->reloadCurrentTheme();
QDialog::reject();
}
void PaletteEditorDialog::changeEvent(QEvent *e)

View file

@ -15,6 +15,7 @@ class QComboBox;
class QDialogButtonBox;
class QPushButton;
class PaletteGridWidget;
class FontGridWidget;
class QuickSetupPanel;
class QFrame;
class QWidget;
@ -25,6 +26,7 @@ class PaletteEditorDialog : public QDialog
public:
explicit PaletteEditorDialog(const QString &themeDirPath, const QString &themeName, QWidget *parent = nullptr);
void loadSchemes();
void reject() override;
private slots:
void onSave();
@ -38,8 +40,10 @@ private:
void setupUi();
void retranslateUi();
void refreshChromePalettes();
void updateAdvancedHeight();
void loadScheme(const QString &scheme); // snapshot current, switch, load
void seedAccentFromScheme(const QString &scheme);
void loadFonts(); // shared per theme, not split by light/dark
// Sub-widgets
QWidget *header;
@ -49,6 +53,11 @@ private:
PaletteGridWidget *paletteGrid = nullptr;
QPushButton *paletteGridToggleButton = nullptr;
QFrame *paletteGridSeparator = nullptr;
FontGridWidget *fontGrid = nullptr;
QPushButton *fontToggleButton = nullptr;
QFrame *fontSeparator = nullptr;
QWidget *fontSection = nullptr;
QLabel *fontNoteLabel = nullptr;
QWidget *footer;
QComboBox *schemeComboBox = nullptr;
QDialogButtonBox *buttonBox = nullptr;
@ -68,10 +77,18 @@ private:
QMap<QString, PaletteConfig> workingConfig;
QMap<QString, PaletteConfig> savedConfig;
// Fonts are shared per theme (fonts.toml, not split by light/dark), so a
// single saved config suffices; the live edits are read from fontGrid.
FontConfig savedFontConfig;
// Set only by user-driven fontsChanged after the initial load completes.
// Gates both previewFonts and the fonts.toml write so a palette-only Save
// never materializes fallback fonts to disk.
bool fontsDirty = false;
QTimer *autoApplyTimer = nullptr;
protected:
void changeEvent(QEvent *e) override;
};
#endif // COCKATRICE_PALETTE_EDITOR_DIALOG_H
#endif // COCKATRICE_PALETTE_EDITOR_DIALOG_H

View file

@ -76,6 +76,18 @@ PaletteGridWidget::PaletteGridWidget(QWidget *parent) : QWidget(parent)
layout = QtUtils::makeLayout<QVBoxLayout>(this);
layout->addWidget(scroll);
connect(themeManager, &ThemeManager::fontsChanged, this, &PaletteGridWidget::applyInterfaceDefaultFont);
}
void PaletteGridWidget::applyInterfaceDefaultFont()
{
// The editor's own chrome follows the InterfaceDefault theme role; bold stays caller-side.
for (auto *label : headerLabels) {
QFont headerFont = themeManager->appFont(AppFont::InterfaceDefault);
headerFont.setBold(true);
label->setFont(headerFont);
}
}
void PaletteGridWidget::buildGrid(QWidget *host)
@ -101,7 +113,8 @@ void PaletteGridWidget::buildGrid(QWidget *host)
auto *label = new QLabel(groupHeaders[col], host);
label->setAlignment(Qt::AlignCenter);
label->setToolTip(groupTips[col]);
label->setFont(QtUtils::boldFont(label->font()));
// Family comes from the InterfaceDefault theme role; bold stays caller-side.
label->setFont(QtUtils::boldFont(themeManager->appFont(AppFont::InterfaceDefault)));
label->setAutoFillBackground(true);
label->setContentsMargins(4, 4, 4, 4);
grid->addWidget(label, 0, col + 1);
@ -146,7 +159,7 @@ void PaletteGridWidget::buildGrid(QWidget *host)
auto *appHeader = new QLabel(tr("App colors"), host);
appHeader->setToolTip(tr("Application-specific colors layered on top of the Qt palette"));
appHeader->setFont(QtUtils::boldFont(appHeader->font()));
appHeader->setFont(QtUtils::boldFont(themeManager->appFont(AppFont::InterfaceDefault)));
appHeader->setAutoFillBackground(true);
appHeader->setContentsMargins(4, 4, 4, 4);
grid->addWidget(appHeader, appHeaderRow, 0, 1, 4);

View file

@ -34,6 +34,10 @@ private:
void changeEvent(QEvent *e);
void refreshChromePalettes();
private slots:
void applyInterfaceDefaultFont();
private:
QMap<QPalette::ColorGroup, QMap<QPalette::ColorRole, ColorButton *>> colorButtons;
QMap<AppColor::Role, ColorButton *> appColorButtons;
QScrollArea *scroll;

View file

@ -1,5 +1,6 @@
#include "quick_setup_panel.h"
#include "../theme_manager.h"
#include "color_button.h"
#include <QApplication>
@ -28,10 +29,15 @@ QuickSetupPanel::QuickSetupPanel(QWidget *parent) : QWidget(parent)
labelLow = new QLabel(this);
labelHigh = new QLabel(this);
QFont small = labelLow->font();
small.setPointSizeF(small.pointSizeF() * 0.82);
labelLow->setFont(small);
labelHigh->setFont(small);
// Family comes from the InterfaceDefault theme role; the *0.82 size stays caller-side.
auto applySmallFont = [this]() {
QFont small = themeManager->appFont(AppFont::InterfaceDefault);
small.setPointSizeF(small.pointSizeF() * 0.82);
labelLow->setFont(small);
labelHigh->setFont(small);
};
applySmallFont();
connect(themeManager, &ThemeManager::fontsChanged, this, applySmallFont);
QPalette dimmed = labelLow->palette();
dimmed.setColor(QPalette::WindowText, qApp->palette().color(QPalette::Mid));
labelLow->setPalette(dimmed);

View file

@ -1,6 +1,7 @@
#include "pixel_map_generator.h"
#include "libcockatrice/network/server/remote/user_level.h"
#include "theme_icon.h"
#include "theme_manager.h"
#include <QApplication>
@ -15,7 +16,6 @@
#include <QDomNodeList>
#include <QFile>
#include <QIODevice>
#include <QImage>
#include <QImageReader>
#include <QLatin1Char>
#include <QLatin1String>
@ -436,33 +436,19 @@ QIcon UserLevelPixmapGenerator::generateIconWithColorOverride(int height,
QMap<QString, QIcon> UserLevelPixmapGenerator::iconCache;
QPixmap LockPixmapGenerator::generatePixmap(int height)
{
int key = height;
if (pmCache.contains(key)) {
return pmCache.value(key);
}
QPixmap pixmap = tryLoadImage(QStringLiteral("theme:") + themeManager->assetPath(QStringLiteral("icons/lock")),
QSize(height, height), true);
pmCache.insert(key, pixmap);
return pixmap;
}
QMap<int, QPixmap> LockPixmapGenerator::pmCache;
QPixmap DropdownIconPixmapGenerator::generatePixmap(int height, bool expanded)
{
QString key = QString::number(expanded) + ":" + QString::number(height);
const QString key = QString::number(expanded) + ":" + QString::number(height);
if (pmCache.contains(key)) {
return pmCache.value(key);
}
QString name = expanded ? "dropdown_expanded" : "dropdown_collapsed";
QPixmap pixmap = tryLoadImage(QStringLiteral("theme:") + themeManager->assetPath(QStringLiteral("icons/") + name),
QSize(height, height), true);
// Render through the themed icon engine: it keeps the glyph's aspect ratio,
// follows the palette, and renders at the device pixel ratio instead of
// handing a DPR-1 bitmap to a label that would upscale and blur it on a 2x
// display.
const QString prefix = QStringLiteral("icons/") + (expanded ? "dropdown_expanded" : "dropdown_collapsed");
const QPixmap pixmap = loadThemedIcon(prefix).pixmap(QSize(height, height), qApp->devicePixelRatio());
pmCache.insert(key, pixmap);
return pixmap;
}
@ -520,30 +506,11 @@ QPixmap ManaSymbolPixmapGenerator::generatePixmap(const QString &symbol, const Q
QHash<QString, QPixmap> ManaSymbolPixmapGenerator::masterCache;
QHash<QString, QPixmap> ManaSymbolPixmapGenerator::scaledCache;
QPixmap loadColorAdjustedPixmap(const QString &name)
{
// Prefer an authored scheme-qualified variant when one exists for this asset.
const QString variant = themeManager->schemeVariantPath(QStringView(name).mid(QStringLiteral("theme:").size()));
if (!variant.isEmpty()) {
return QPixmap(QStringLiteral("theme:") + variant);
}
// Legacy fallback: runtime-invert for dark mode when no authored variant.
if (qApp->palette().windowText().color().lightness() > 200) {
QImage img(name);
img.invertPixels();
QPixmap result;
result.convertFromImage(img);
return result;
} else {
return QPixmap(name);
}
}
QPixmap themePixmap(QStringView prefix)
{
const QString resolved = themeManager->assetPath(prefix);
return QPixmap(QStringLiteral("theme:") + resolved);
const QPixmap sentinel = loadSentinelSvgPixmap(resolved);
return sentinel.isNull() ? QPixmap(QStringLiteral("theme:") + resolved) : sentinel;
}
void clearPixmapGeneratorCaches()
@ -553,7 +520,6 @@ void clearPixmapGeneratorCaches()
PingPixmapGenerator::clear();
CountryPixmapGenerator::clear();
UserLevelPixmapGenerator::clear();
LockPixmapGenerator::clear();
DropdownIconPixmapGenerator::clear();
ManaSymbolPixmapGenerator::clear();
}

View file

@ -106,19 +106,6 @@ public:
}
};
class LockPixmapGenerator
{
private:
static QMap<int, QPixmap> pmCache;
public:
static QPixmap generatePixmap(int height);
static void clear()
{
pmCache.clear();
}
};
class DropdownIconPixmapGenerator
{
private:
@ -160,13 +147,11 @@ public:
}
};
QPixmap loadColorAdjustedPixmap(const QString &name);
// Loads a "theme:" asset (with no file extension in prefix), preferring the
// Returns a "theme:" asset (with no file extension in prefix), preferring the
// scheme-qualified variant (prefix-dark / prefix-light, resolved via
// ThemeManager::assetPath) and falling back to the plain asset. Callers load
// the returned path directly. Use for scheme-sensitive pixmaps like
// backgrounds, the card back, and the app logo.
// ThemeManager::assetPath) and falling back to the plain asset. Token-driven
// SVGs resolve their `currentColor` sentinel from the palette. Use for
// scheme-sensitive pixmaps like backgrounds, the card back, and the app logo.
QPixmap themePixmap(QStringView prefix);
// Clears every PixmapGenerator's static cache so scheme variants are

View file

@ -0,0 +1,102 @@
#include "recording.h"
#include "pqEventTypes.h"
#include <QFile>
#include <QTextStream>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
XMLEventObserver::XMLEventObserver(QObject *parent) : pqEventObserver(parent)
{
}
XMLEventObserver::~XMLEventObserver() = default;
void XMLEventObserver::setStream(QTextStream *stream)
{
if (xmlStream) {
xmlStream->writeEndElement();
xmlStream->writeEndDocument();
xmlStream.reset();
}
if (Stream) {
*Stream << xmlString;
}
xmlString.clear();
pqEventObserver::setStream(stream);
if (Stream) {
xmlStream.reset(new QXmlStreamWriter(&xmlString));
xmlStream->setAutoFormatting(true);
xmlStream->writeStartDocument();
xmlStream->writeStartElement(QStringLiteral("events"));
}
}
void XMLEventObserver::onRecordEvent(const QString &widget,
const QString &command,
const QString &arguments,
const int &eventType)
{
if (!xmlStream) {
return;
}
xmlStream->writeStartElement(QStringLiteral("event"));
xmlStream->writeAttribute(QStringLiteral("widget"), widget);
if (eventType == pqEventTypes::ACTION_EVENT) {
xmlStream->writeAttribute(QStringLiteral("command"), command);
} else { // pqEventTypes::CHECK_EVENT
xmlStream->writeAttribute(QStringLiteral("property"), command);
}
xmlStream->writeAttribute(QStringLiteral("arguments"), arguments);
xmlStream->writeEndElement();
}
XMLEventSource::XMLEventSource(QObject *parent) : pqEventSource(parent)
{
}
XMLEventSource::~XMLEventSource() = default;
void XMLEventSource::setContent(const QString &xmlFileName)
{
xmlStream.reset();
QFile xml(xmlFileName);
if (!xml.open(QIODevice::ReadOnly)) {
qCWarning(RecordingLog) << "Could not read test file" << xmlFileName;
return;
}
xmlStream.reset(new QXmlStreamReader(xml.readAll()));
}
int XMLEventSource::getNextEvent(QString &widget, QString &command, QString &arguments, int &eventType)
{
if (!xmlStream) {
return DONE;
}
while (!xmlStream->atEnd()) {
if (xmlStream->readNext() != QXmlStreamReader::StartElement || xmlStream->name() != QStringLiteral("event")) {
continue;
}
const QXmlStreamAttributes attributes = xmlStream->attributes();
eventType = pqEventTypes::ACTION_EVENT;
widget = attributes.value(QStringLiteral("widget")).toString();
command = attributes.value(QStringLiteral("command")).toString();
if (command.isEmpty()) {
// A recorded check event carries a property instead of a command.
command = attributes.value(QStringLiteral("property")).toString();
}
arguments = attributes.value(QStringLiteral("arguments")).toString();
return SUCCESS;
}
if (xmlStream->hasError()) {
qCWarning(RecordingLog) << "Malformed test file:" << xmlStream->errorString();
}
return DONE;
}

Some files were not shown because too many files have changed in this diff Show more