If you want a super user to be able to change logos etc, or if the logo is specific to a site collection, place them in a subfolder in
However often you dont want the layout files of your page, or your CSS for that matter, to be changed by end users. This is a good reason to place them somewhere in the v\TEMPLATE\LAYOUTS
folder. These files are also available across all site collections in the farm as/_LAYOUTS`.
Exactly where under LAYOUTS really depends... If they should be able to change depending on language, you should place them under each language in
LAYOUTS\<LCID>\STYLES\yourSubDir (you will have one folder for each language pack you have installed).
When inserting CSS use the
<Sharepoint:CSSRegistration ../> web control in the master page, SharePoint will pick the relevant localized CSS file depending on the language selected by site owner or user (see my blog post for more info) and possible caveats. This will also make sure that your CSS file is not cached when it is changed.
SharePoint libraries in general have "issues" with max-age header, which would cause excessive requests to the server even though page is cached
As you state, you can put them anywhere you want, and as you can see the answer (as usual with SharePoint is "it depends"). It is not the first time we discuss this either. Check similar question here.
On a final note, they way the files end up where they do is important too! You should always use Solutions and if needed Features to provision the files no matter where you decide to stick them!
Files that should be published in a SharePoint library must be published using a Module element in a feature. Here you want to set it to be GhostableInLibrary. Example:
<?xml version="1.0" encoding="utf-8"?>
<Module Name="MyWelcomePageTemplate" Url="$Resources:osrvcore,List_Pages_UrlName;" Path="MyWelcomePageTemplate">
<File Url="default.aspx" Type="GhostableInLibrary">
<Property Name="Title" Value="My page" />
<Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/MyPageLayout.aspx, $Resources:cmscore,PageLayout_WelcomeLinks_Title;" />
<Property Name="ContentType" Value="MyContentType" />
On the other hand you include LAYOUT files using Mapped Folders (directly to SharePointRoot or LAYOUT depends on your preference) that automatically is added as
<RootFile ..> elements in your package/solution